From 5129ba431bb8ed395d54fcec6b39a19be2b96635 Mon Sep 17 00:00:00 2001
From: Damien OLIVIER <damien.olivier@univ-lehavre.fr>
Date: Thu, 5 Apr 2018 19:45:42 +0200
Subject: [PATCH] GS

---
 Presentation/netlogo.html        |     2 +-
 Presentation/programmes/ask.html | 77919 +++++++++++++++++++++++++++++
 codes/GrayScott/AutomateGS.pde   |   138 +
 codes/GrayScott/config.csv       |     2 +
 4 files changed, 78060 insertions(+), 1 deletion(-)
 create mode 100644 Presentation/programmes/ask.html
 create mode 100644 codes/GrayScott/AutomateGS.pde
 create mode 100644 codes/GrayScott/config.csv

diff --git a/Presentation/netlogo.html b/Presentation/netlogo.html
index 73c7f0e..c4ddfeb 100644
--- a/Presentation/netlogo.html
+++ b/Presentation/netlogo.html
@@ -969,7 +969,7 @@ create-portes 1 [ set ouverte? true setxy -5 10 ] ;; porte 1, ouverte en -5 10
 ask turtles [ set color red]</code></pre>
     			</div>
     	</div>
-    	 <a href="./applet/ask.html" target="_blank"><img src="images/ask_interface.png" width="60%" alt="" /></a>
+    	 <a href="./programmes/ask.html" target="_blank"><img src="images/ask_interface.png" width="60%" alt="" /></a>
 <!--<applet code="org.nlogo.lite.Applet"
 		codebase="applet/"
         archive="NetLogoLite.jar"
diff --git a/Presentation/programmes/ask.html b/Presentation/programmes/ask.html
new file mode 100644
index 0000000..1b68160
--- /dev/null
+++ b/Presentation/programmes/ask.html
@@ -0,0 +1,77919 @@
+<html>
+ <head> 
+  <meta charset="UTF-8"> 
+  <base target="_parent"> 
+  <style>/* BASICS */
+
+.CodeMirror {
+  /* Set height, width, borders, and global font properties here */
+  font-family: monospace;
+  height: 300px;
+  color: black;
+  direction: ltr;
+}
+
+/* PADDING */
+
+.CodeMirror-lines {
+  padding: 4px 0; /* Vertical padding around content */
+}
+.CodeMirror pre {
+  padding: 0 4px; /* Horizontal padding of content */
+}
+
+.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
+  background-color: white; /* The little square between H and V scrollbars */
+}
+
+/* GUTTER */
+
+.CodeMirror-gutters {
+  border-right: 1px solid #ddd;
+  background-color: #f7f7f7;
+  white-space: nowrap;
+}
+.CodeMirror-linenumbers {}
+.CodeMirror-linenumber {
+  padding: 0 3px 0 5px;
+  min-width: 20px;
+  text-align: right;
+  color: #999;
+  white-space: nowrap;
+}
+
+.CodeMirror-guttermarker { color: black; }
+.CodeMirror-guttermarker-subtle { color: #999; }
+
+/* CURSOR */
+
+.CodeMirror-cursor {
+  border-left: 1px solid black;
+  border-right: none;
+  width: 0;
+}
+/* Shown when moving in bi-directional text */
+.CodeMirror div.CodeMirror-secondarycursor {
+  border-left: 1px solid silver;
+}
+.cm-fat-cursor .CodeMirror-cursor {
+  width: auto;
+  border: 0 !important;
+  background: #7e7;
+}
+.cm-fat-cursor div.CodeMirror-cursors {
+  z-index: 1;
+}
+.cm-fat-cursor-mark {
+  background-color: rgba(20, 255, 20, 0.5);
+  -webkit-animation: blink 1.06s steps(1) infinite;
+  -moz-animation: blink 1.06s steps(1) infinite;
+  animation: blink 1.06s steps(1) infinite;
+}
+.cm-animate-fat-cursor {
+  width: auto;
+  border: 0;
+  -webkit-animation: blink 1.06s steps(1) infinite;
+  -moz-animation: blink 1.06s steps(1) infinite;
+  animation: blink 1.06s steps(1) infinite;
+  background-color: #7e7;
+}
+@-moz-keyframes blink {
+  0% {}
+  50% { background-color: transparent; }
+  100% {}
+}
+@-webkit-keyframes blink {
+  0% {}
+  50% { background-color: transparent; }
+  100% {}
+}
+@keyframes blink {
+  0% {}
+  50% { background-color: transparent; }
+  100% {}
+}
+
+/* Can style cursor different in overwrite (non-insert) mode */
+.CodeMirror-overwrite .CodeMirror-cursor {}
+
+.cm-tab { display: inline-block; text-decoration: inherit; }
+
+.CodeMirror-rulers {
+  position: absolute;
+  left: 0; right: 0; top: -50px; bottom: -20px;
+  overflow: hidden;
+}
+.CodeMirror-ruler {
+  border-left: 1px solid #ccc;
+  top: 0; bottom: 0;
+  position: absolute;
+}
+
+/* DEFAULT THEME */
+
+.cm-s-default .cm-header {color: blue;}
+.cm-s-default .cm-quote {color: #090;}
+.cm-negative {color: #d44;}
+.cm-positive {color: #292;}
+.cm-header, .cm-strong {font-weight: bold;}
+.cm-em {font-style: italic;}
+.cm-link {text-decoration: underline;}
+.cm-strikethrough {text-decoration: line-through;}
+
+.cm-s-default .cm-keyword {color: #708;}
+.cm-s-default .cm-atom {color: #219;}
+.cm-s-default .cm-number {color: #164;}
+.cm-s-default .cm-def {color: #00f;}
+.cm-s-default .cm-variable,
+.cm-s-default .cm-punctuation,
+.cm-s-default .cm-property,
+.cm-s-default .cm-operator {}
+.cm-s-default .cm-variable-2 {color: #05a;}
+.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}
+.cm-s-default .cm-comment {color: #a50;}
+.cm-s-default .cm-string {color: #a11;}
+.cm-s-default .cm-string-2 {color: #f50;}
+.cm-s-default .cm-meta {color: #555;}
+.cm-s-default .cm-qualifier {color: #555;}
+.cm-s-default .cm-builtin {color: #30a;}
+.cm-s-default .cm-bracket {color: #997;}
+.cm-s-default .cm-tag {color: #170;}
+.cm-s-default .cm-attribute {color: #00c;}
+.cm-s-default .cm-hr {color: #999;}
+.cm-s-default .cm-link {color: #00c;}
+
+.cm-s-default .cm-error {color: #f00;}
+.cm-invalidchar {color: #f00;}
+
+.CodeMirror-composing { border-bottom: 2px solid; }
+
+/* Default styles for common addons */
+
+div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}
+div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}
+.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
+.CodeMirror-activeline-background {background: #e8f2ff;}
+
+/* STOP */
+
+/* The rest of this file contains styles related to the mechanics of
+   the editor. You probably shouldn't touch them. */
+
+.CodeMirror {
+  position: relative;
+  overflow: hidden;
+  background: white;
+}
+
+.CodeMirror-scroll {
+  overflow: scroll !important; /* Things will break if this is overridden */
+  /* 30px is the magic margin used to hide the element's real scrollbars */
+  /* See overflow: hidden in .CodeMirror */
+  margin-bottom: -30px; margin-right: -30px;
+  padding-bottom: 30px;
+  height: 100%;
+  outline: none; /* Prevent dragging from highlighting the element */
+  position: relative;
+}
+.CodeMirror-sizer {
+  position: relative;
+  border-right: 30px solid transparent;
+}
+
+/* The fake, visible scrollbars. Used to force redraw during scrolling
+   before actual scrolling happens, thus preventing shaking and
+   flickering artifacts. */
+.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
+  position: absolute;
+  z-index: 6;
+  display: none;
+}
+.CodeMirror-vscrollbar {
+  right: 0; top: 0;
+  overflow-x: hidden;
+  overflow-y: scroll;
+}
+.CodeMirror-hscrollbar {
+  bottom: 0; left: 0;
+  overflow-y: hidden;
+  overflow-x: scroll;
+}
+.CodeMirror-scrollbar-filler {
+  right: 0; bottom: 0;
+}
+.CodeMirror-gutter-filler {
+  left: 0; bottom: 0;
+}
+
+.CodeMirror-gutters {
+  position: absolute; left: 0; top: 0;
+  min-height: 100%;
+  z-index: 3;
+}
+.CodeMirror-gutter {
+  white-space: normal;
+  height: 100%;
+  display: inline-block;
+  vertical-align: top;
+  margin-bottom: -30px;
+}
+.CodeMirror-gutter-wrapper {
+  position: absolute;
+  z-index: 4;
+  background: none !important;
+  border: none !important;
+}
+.CodeMirror-gutter-background {
+  position: absolute;
+  top: 0; bottom: 0;
+  z-index: 4;
+}
+.CodeMirror-gutter-elt {
+  position: absolute;
+  cursor: default;
+  z-index: 4;
+}
+.CodeMirror-gutter-wrapper ::selection { background-color: transparent }
+.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }
+
+.CodeMirror-lines {
+  cursor: text;
+  min-height: 1px; /* prevents collapsing before first draw */
+}
+.CodeMirror pre {
+  /* Reset some styles that the rest of the page might have set */
+  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
+  border-width: 0;
+  background: transparent;
+  font-family: inherit;
+  font-size: inherit;
+  margin: 0;
+  white-space: pre;
+  word-wrap: normal;
+  line-height: inherit;
+  color: inherit;
+  z-index: 2;
+  position: relative;
+  overflow: visible;
+  -webkit-tap-highlight-color: transparent;
+  -webkit-font-variant-ligatures: contextual;
+  font-variant-ligatures: contextual;
+}
+.CodeMirror-wrap pre {
+  word-wrap: break-word;
+  white-space: pre-wrap;
+  word-break: normal;
+}
+
+.CodeMirror-linebackground {
+  position: absolute;
+  left: 0; right: 0; top: 0; bottom: 0;
+  z-index: 0;
+}
+
+.CodeMirror-linewidget {
+  position: relative;
+  z-index: 2;
+  padding: 0.1px; /* Force widget margins to stay inside of the container */
+}
+
+.CodeMirror-widget {}
+
+.CodeMirror-rtl pre { direction: rtl; }
+
+.CodeMirror-code {
+  outline: none;
+}
+
+/* Force content-box sizing for the elements where we expect it */
+.CodeMirror-scroll,
+.CodeMirror-sizer,
+.CodeMirror-gutter,
+.CodeMirror-gutters,
+.CodeMirror-linenumber {
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+}
+
+.CodeMirror-measure {
+  position: absolute;
+  width: 100%;
+  height: 0;
+  overflow: hidden;
+  visibility: hidden;
+}
+
+.CodeMirror-cursor {
+  position: absolute;
+  pointer-events: none;
+}
+.CodeMirror-measure pre { position: static; }
+
+div.CodeMirror-cursors {
+  visibility: hidden;
+  position: relative;
+  z-index: 3;
+}
+div.CodeMirror-dragcursors {
+  visibility: visible;
+}
+
+.CodeMirror-focused div.CodeMirror-cursors {
+  visibility: visible;
+}
+
+.CodeMirror-selected { background: #d9d9d9; }
+.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
+.CodeMirror-crosshair { cursor: crosshair; }
+.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
+.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
+
+.cm-searching {
+  background-color: #ffa;
+  background-color: rgba(255, 255, 0, .4);
+}
+
+/* Used to force a border model for a node */
+.cm-force-border { padding-right: .1px; }
+
+@media print {
+  /* Hide the cursor when printing */
+  .CodeMirror div.CodeMirror-cursors {
+    visibility: hidden;
+  }
+}
+
+/* See issue #2901 */
+.cm-tab-wrap-hack:after { content: ''; }
+
+/* Help users use markselection to safely style text background */
+span.CodeMirror-selectedtext { background: none; }
+</style> 
+  <style>.CodeMirror-dialog {
+  position: absolute;
+  left: 0; right: 0;
+  background: inherit;
+  z-index: 15;
+  padding: .1em .8em;
+  overflow: hidden;
+  color: inherit;
+}
+
+.CodeMirror-dialog-top {
+  border-bottom: 1px solid #eee;
+  top: 0;
+}
+
+.CodeMirror-dialog-bottom {
+  border-top: 1px solid #eee;
+  bottom: 0;
+}
+
+.CodeMirror-dialog input {
+  border: none;
+  outline: none;
+  background: transparent;
+  width: 20em;
+  color: inherit;
+  font-family: monospace;
+}
+
+.CodeMirror-dialog button {
+  font-size: 70%;
+}
+</style> 
+  <style>/*
+ * This file should contain generally useful css classes - "round the corners", "add the font", etc.
+ * Where possible, css for certain elements should be moved out, although there are clearly some exceptions.
+ */
+
+.hidden {
+  display: none;
+}
+
+.rounded {
+  border-radius: 10px;
+}
+
+.contained {
+  height: 92%;
+  min-height: 92%;
+}
+
+.normal_font {
+  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+}
+
+.monospace_font {
+  font-family: "Courier New", Courier, monospace;
+}
+
+.invisible {
+  opacity:0;
+  width: 0;
+  z-index: -1;
+}
+
+.text_input_margin {
+  margin-top: 10px;
+  margin-right: 15px;
+}
+
+.center {
+  display: block;
+  margin: auto;
+}
+
+.spacious-entry {
+  padding: 8px 8px;
+}
+
+.index-button {
+  margin: 2%;
+  border: 2px solid #347999;
+  border-radius: 6px;
+  background-color: #DDF4FB;
+  transition: background-color 0.25s;
+  text-align: center;
+}
+
+.index-button:hover {
+  background-color: #E8FFFF;
+}
+
+.index-button > h2 {
+  margin-top: 3%;
+  margin-bottom: 0;
+}
+
+.icon-button {
+  display: block;
+  width: 100%;
+  height: auto;
+  max-width: 256px;
+  max-height: 256px;
+  margin: auto;
+}
+
+.index-link {
+  max-width: 300px;
+  min-width: 200px;
+  text-decoration: none !important;
+  color: inherit;
+}
+
+.index-link:hover {
+  text-decoration: none;
+  color: inherit;
+}
+
+.properties-list {
+  margin-left: 0;
+  padding-left: 0;
+  list-style: none;
+  margin-bottom: 0;
+}
+
+.properties-list > li {
+  margin: auto;
+  padding-left: 0;
+  padding-top: 10px;
+  padding-bottom: 10px;
+  border-top: 1px solid #5499B9;
+}
+
+.server-error {
+  margin-top: 20px;
+  font-size: 20px;
+  line-height: 25px;
+  text-align: center;
+}
+
+div.link-header {
+  margin-left: -27px;
+  margin-bottom: 20px;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+}
+
+.anchor-header {
+  visibility: hidden;
+  display: block;
+  margin-top: -20px;
+  padding-bottom: 20px;
+}
+
+.anchor-header:target {
+  margin-top: -40px;
+  padding-bottom: 40px;
+}
+
+div.link-header:hover > a > img.link-img {
+  visibility: visible;
+}
+
+div.link-header > h2 {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+
+img.link-img {
+  top: 50%;
+  max-width: 20px;
+  visibility: hidden;
+}
+
+/*
+
+ Flexbox stuff
+
+ Much of this could be inlined in styles, but we do this to allow the autoprefixer access to it --JAB 3/30/15
+
+ */
+
+.dynamic-row {
+  align-items: center;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+}
+
+.dynamic-column-holder {
+  align-items: center;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-around;
+}
+
+.flex1 {
+  flex: 1;
+}
+
+.flex2 {
+  flex: 2;
+}
+
+.flex3 {
+  flex: 3;
+}
+
+.flex-column {
+  display: flex;
+  flex-direction: column;
+}
+
+.flex-row {
+  display: flex;
+  flex-direction: row;
+}
+</style> 
+  <style>/*
+ * General-purpose widget styles, applied regardless of what the widget "theme" is
+ */
+
+.netlogo-model {
+    display: flex;
+    padding: 20px;
+    flex-flow: column;
+    font-size: 12px;
+    font-family: "Lucida Grande", sans-serif;
+    outline: none;
+}
+
+.netlogo-header {
+    display: flex;
+    flex-flow: row;
+    align-items: center;
+    justify-content: space-between;
+}
+
+.netlogo-widget {
+    box-sizing: border-box;
+    background-color: #CCC;
+    border-radius: 4px;
+    overflow: hidden;
+}
+
+.netlogo-command,.netlogo-input {
+    user-select: none;
+}
+
+.netlogo-command:hover,.netlogo-input:hover {
+  box-shadow: 0 0 6px 3px rgba(15, 15, 15, .40);
+  cursor:     pointer;
+  z-index:    3;
+}
+
+.netlogo-command.netlogo-disabled:hover {
+  box-shadow: none;
+  cursor:     default;
+}
+
+.netlogo-tab-area {
+  margin-top: 25px;
+}
+
+.netlogo-tab {
+  display: block;
+  background-color: #BCBCE5;
+  background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDEiPjxwb2x5Z29uIHBvaW50cz0iMCwwIDIsMCAxLDEiIGZpbGw9InJnYig4Myw4Myw4MykiLz4gPC9zdmc+");
+  background-position: 97% 50%;
+  background-repeat: no-repeat;
+  background-size: 20px 20px;
+  border-width: 2px;
+  border-bottom-width: 0;
+  border-style: solid;
+  padding: 7px;
+  text-align: center;
+  cursor: pointer;
+}
+
+.netlogo-tab.netlogo-active {
+  background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDEiPjxwb2x5Z29uIHBvaW50cz0iMCwxIDIsMSAxLDAiIGZpbGw9InJnYig4Myw4Myw4MykiLz4gPC9zdmc+");
+}
+
+.netlogo-tab:first-child {
+  border-radius: 10px 10px 0px 0px;
+}
+
+.netlogo-tab:last-child, .netlogo-tab-content:last-child {
+  border-radius: 0px 0px 10px 10px;
+  border-bottom-width: 2px;
+}
+
+.netlogo-tab:hover  {
+  background-color: #D3D3EE;
+}
+
+.netlogo-tab.netlogo-active:hover  {
+  background-color: #9E99FD;
+}
+
+.netlogo-tab input[type=checkbox] {
+  display: none;
+}
+
+.netlogo-tab-text {
+  font-size: 20px;
+  font-weight: bold;
+  text-align: center;
+  user-select: none;
+}
+
+.netlogo-tab-content {
+  margin-top: 0;
+  border: 0 solid #242479;
+  border-left-width: 2px;
+  border-right-width: 2px;
+}
+
+.unselectable {
+  user-select: none;
+}
+
+.growing {
+  animation-name: grow;
+  animation-duration: 0.4s;
+  animation-timing-function: ease-out;
+}
+
+.shrinking {
+  animation-name: grow;
+  animation-direction: reverse;
+  animation-duration: 0.4s;
+  animation-timing-function: ease-in;
+}
+
+@keyframes grow {
+  0% {
+    max-height: 0;
+  }
+  100% {
+    max-height: 100%;
+  }
+}
+
+.netlogo-model-text {
+    background-color: white;
+}
+
+.netlogo-model-masthead {
+  flex-grow: 1;
+  margin: 0 10px 0 0;
+  width: 350px;
+}
+
+.netlogo-model-masthead > form {
+  margin: 0 auto;
+}
+
+.netlogo-model-title {
+  background-color: initial;
+  margin: 0 70px;
+  overflow: hidden;
+  padding: 0 8px;
+  text-align: center;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.hidden {
+  visibility: hidden;
+}
+
+.netlogo-title-input {
+  font-size: 1.5em;
+  font-weight: bold;
+  letter-spacing: normal;
+  margin: 0 5%;
+  text-align: center;
+  width: 350px;
+}
+
+.netlogo-code-container {
+    display: flex;
+    flex-flow: column;
+    background-color: white;
+    margin-top: 0;
+}
+
+.netlogo-ugly-button {
+  text-align: center;
+  background-color: rgb(240, 240, 240);
+  border-color: rgb(238, 238, 238);
+}
+
+.netlogo-recompilation-button {
+  width: 30%;
+  margin: 12px auto;
+  font-size: 16px;
+  font-weight: bold;
+  cursor: pointer;
+}
+
+.netlogo-info-editor {
+  border: 1px solid black;
+  height: 500px;
+}
+
+.netlogo-info {
+  flex: 1;
+  margin-top: 0;
+  padding-top: 10px;
+  padding: 15px;
+}
+
+.netlogo-command-center {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  height: 175px;
+  padding: 6px 8px;
+}
+
+/* I don't actually understand why setting `width` here does what it does.  Without it, if you fill up the Command
+ * Center with text, instead of becoming horizontally scrollable, the input grows in width, even if it means becoming
+ * larger than the input's container.  So the input (rather than the text) just flows off the side of the screen.
+ * If I go down a level in the CSS and set the width on the CodeMirror instance directly, that kind of fixes the
+ * problem, but only if I know the expect width that I want (which I don't).  However, if I come here and set the
+ * width to *any* numeric value, the input always fits exactly the amount of space it's supposed to use.  Fricken weird.
+ * --JAB (10/12/17)
+ */
+.netlogo-command-center-editor {
+  height: 1.25em;
+  flex-grow: 1;
+  width: 42px; /* Arbitrary as hell; see comment above. --JAB (10/12/17) */
+}
+
+.netlogo-command-center-editor .CodeMirror {
+  border: 1px solid #878782;
+  height: auto;
+}
+
+.netlogo-output-widget {
+  display: flex;
+  padding: 5px;
+}
+
+.netlogo-output-area {
+  flex-grow: 1;
+  flex-direction: column;
+  background-color: white;
+  margin: 0px;
+  overflow: auto;
+}
+
+.netlogo-command-center-input {
+  display: flex;
+  flex-shrink: 0;
+}
+
+.netlogo-speed-slider {
+  background-color: transparent;
+  border: none;
+  display: flex;
+  flex-direction: column;
+  margin: 15px auto 0 auto;
+  width: 75%;
+}
+
+.netlogo-widget input[type=range]::-ms-tooltip {
+  display: none;
+}
+
+.netlogo-speed-slider input {
+  border: none;
+  width: 100%;
+}
+
+.netlogo-model input[type=range] {
+    cursor: pointer;
+    cursor: grab;
+}
+
+.netlogo-model input[type=range]:active {
+    cursor: pointer;
+    cursor: grabbing;
+}
+
+.netlogo-tick-counter {
+    background-color: #F4F4F4;
+    font-size: 13px;
+    margin: 3px;
+    border: none;
+    height: 15px;
+}
+
+.netlogo-button {
+    border: inherit;
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+    padding: 0px;
+}
+
+.netlogo-disabled, .interface-unlocked {
+  color: #707070;
+}
+
+.netlogo-button.clear-button {
+    padding: 5px;
+}
+
+.netlogo-button .netlogo-label {
+    /* For some reason, Safari doesn't like justify-content in buttons,
+       we have to resort to putting a span in the button that can then be
+       centered.
+       BCH 11/14/2014 */
+    margin: auto;
+}
+
+.netlogo-action-key {
+  color:    grey;
+  position: absolute;
+  right:    6px;
+  top:      5px;
+}
+
+.netlogo-action-key.netlogo-focus {
+  color: black;
+}
+
+.netlogo-button:active, .netlogo-forever-button.netlogo-active {
+    background-color: gray;
+    color: white;
+}
+
+.netlogo-forever-button .netlogo-forever-icon {
+  background-image:  url(data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDQzOC41NDIgNDM4LjU0MiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDM4LjU0MiA0MzguNTQyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPHBhdGggZD0iTTQyNy40MDgsMTkuNjk3Yy03LjgwMy0zLjIzLTE0LjQ2My0xLjkwMi0xOS45ODYsMy45OTlsLTM3LjExNiwzNi44MzRDMzQ5Ljk0LDQxLjMwNSwzMjYuNjcyLDI2LjQxMiwzMDAuNSwxNS44NDggICBDMjc0LjMyOCw1LjI4NSwyNDcuMjUxLDAuMDAzLDIxOS4yNzEsMC4wMDNjLTI5LjY5MiwwLTU4LjA1Miw1LjgwOC04NS4wOCwxNy40MTdjLTI3LjAzLDExLjYxLTUwLjM0NywyNy4yMTUtNjkuOTUxLDQ2LjgyICAgYy0xOS42MDUsMTkuNjA3LTM1LjIxNCw0Mi45MjEtNDYuODI0LDY5Ljk0OUM1LjgwNywxNjEuMjE5LDAsMTg5LjU3NSwwLDIxOS4yNzFjMCwyOS42ODcsNS44MDcsNTguMDUsMTcuNDE3LDg1LjA3OSAgIGMxMS42MTMsMjcuMDMxLDI3LjIxOCw1MC4zNDcsNDYuODI0LDY5Ljk1MmMxOS42MDQsMTkuNTk5LDQyLjkyMSwzNS4yMDcsNjkuOTUxLDQ2LjgxOGMyNy4wMjgsMTEuNjExLDU1LjM4OCwxNy40MTksODUuMDgsMTcuNDE5ICAgYzMyLjczNiwwLDYzLjg2NS02Ljg5OSw5My4zNjMtMjAuN2MyOS41LTEzLjc5NSw1NC42MjUtMzMuMjYsNzUuMzc3LTU4LjM4NmMxLjUyLTEuOTAzLDIuMjM0LTQuMDQ1LDIuMTM2LTYuNDI0ICAgYy0wLjA4OS0yLjM3OC0wLjk5OS00LjMyOS0yLjcxMS01Ljg1MmwtMzkuMTA4LTM5LjM5OWMtMi4xMDEtMS43MTEtNC40NzMtMi41NjYtNy4xMzktMi41NjZjLTMuMDQ1LDAuMzgtNS4yMzIsMS41MjYtNi41NjYsMy40MjkgICBjLTEzLjg5NSwxOC4wODYtMzAuOTMsMzIuMDcyLTUxLjEwNyw0MS45NzdjLTIwLjE3Myw5Ljg5NC00MS41ODYsMTQuODM5LTY0LjIzNywxNC44MzljLTE5Ljc5MiwwLTM4LjY4NC0zLjg1NC01Ni42NzEtMTEuNTY0ICAgYy0xNy45ODktNy43MDYtMzMuNTUxLTE4LjEyNy00Ni42ODItMzEuMjYxYy0xMy4xMy0xMy4xMzUtMjMuNTUxLTI4LjY5MS0zMS4yNjEtNDYuNjgyYy03LjcwOC0xNy45ODctMTEuNTYzLTM2Ljg3NC0xMS41NjMtNTYuNjcxICAgYzAtMTkuNzk1LDMuODU4LTM4LjY5MSwxMS41NjMtNTYuNjc0YzcuNzA3LTE3Ljk4NSwxOC4xMjctMzMuNTQ3LDMxLjI2MS00Ni42NzhjMTMuMTM1LTEzLjEzNCwyOC42OTMtMjMuNTU1LDQ2LjY4Mi0zMS4yNjUgICBjMTcuOTgzLTcuNzA3LDM2Ljg3OS0xMS41NjMsNTYuNjcxLTExLjU2M2MzOC4yNTksMCw3MS40NzUsMTMuMDM5LDk5LjY0NiwzOS4xMTZsLTM5LjQwOSwzOS4zOTQgICBjLTUuOTAzLDUuNzExLTcuMjMxLDEyLjI3OS00LjAwMSwxOS43MDFjMy4yNDEsNy42MTQsOC44NTYsMTEuNDIsMTYuODU0LDExLjQyaDEyNy45MDZjNC45NDksMCw5LjIzLTEuODA3LDEyLjg0OC01LjQyNCAgIGMzLjYxMy0zLjYxNiw1LjQyLTcuODk4LDUuNDItMTIuODQ3VjM2LjU1QzQzOC41NDIsMjguNTU4LDQzNC44NCwyMi45NDMsNDI3LjQwOCwxOS42OTd6IiBmaWxsPSIjMDAwMDAwIi8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==);
+  background-repeat: no-repeat;
+  background-size:   10px 10px;
+  bottom:            5px;
+  height:            10px;
+  position:          absolute;
+  right:             5px;
+  width:             10px;
+}
+
+.netlogo-disabled .netlogo-forever-icon {
+  background-image: url(data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDQzOC41NDIgNDM4LjU0MiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDM4LjU0MiA0MzguNTQyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPHBhdGggZD0iTTQyNy40MDgsMTkuNjk3Yy03LjgwMy0zLjIzLTE0LjQ2My0xLjkwMi0xOS45ODYsMy45OTlsLTM3LjExNiwzNi44MzRDMzQ5Ljk0LDQxLjMwNSwzMjYuNjcyLDI2LjQxMiwzMDAuNSwxNS44NDggICBDMjc0LjMyOCw1LjI4NSwyNDcuMjUxLDAuMDAzLDIxOS4yNzEsMC4wMDNjLTI5LjY5MiwwLTU4LjA1Miw1LjgwOC04NS4wOCwxNy40MTdjLTI3LjAzLDExLjYxLTUwLjM0NywyNy4yMTUtNjkuOTUxLDQ2LjgyICAgYy0xOS42MDUsMTkuNjA3LTM1LjIxNCw0Mi45MjEtNDYuODI0LDY5Ljk0OUM1LjgwNywxNjEuMjE5LDAsMTg5LjU3NSwwLDIxOS4yNzFjMCwyOS42ODcsNS44MDcsNTguMDUsMTcuNDE3LDg1LjA3OSAgIGMxMS42MTMsMjcuMDMxLDI3LjIxOCw1MC4zNDcsNDYuODI0LDY5Ljk1MmMxOS42MDQsMTkuNTk5LDQyLjkyMSwzNS4yMDcsNjkuOTUxLDQ2LjgxOGMyNy4wMjgsMTEuNjExLDU1LjM4OCwxNy40MTksODUuMDgsMTcuNDE5ICAgYzMyLjczNiwwLDYzLjg2NS02Ljg5OSw5My4zNjMtMjAuN2MyOS41LTEzLjc5NSw1NC42MjUtMzMuMjYsNzUuMzc3LTU4LjM4NmMxLjUyLTEuOTAzLDIuMjM0LTQuMDQ1LDIuMTM2LTYuNDI0ICAgYy0wLjA4OS0yLjM3OC0wLjk5OS00LjMyOS0yLjcxMS01Ljg1MmwtMzkuMTA4LTM5LjM5OWMtMi4xMDEtMS43MTEtNC40NzMtMi41NjYtNy4xMzktMi41NjZjLTMuMDQ1LDAuMzgtNS4yMzIsMS41MjYtNi41NjYsMy40MjkgICBjLTEzLjg5NSwxOC4wODYtMzAuOTMsMzIuMDcyLTUxLjEwNyw0MS45NzdjLTIwLjE3Myw5Ljg5NC00MS41ODYsMTQuODM5LTY0LjIzNywxNC44MzljLTE5Ljc5MiwwLTM4LjY4NC0zLjg1NC01Ni42NzEtMTEuNTY0ICAgYy0xNy45ODktNy43MDYtMzMuNTUxLTE4LjEyNy00Ni42ODItMzEuMjYxYy0xMy4xMy0xMy4xMzUtMjMuNTUxLTI4LjY5MS0zMS4yNjEtNDYuNjgyYy03LjcwOC0xNy45ODctMTEuNTYzLTM2Ljg3NC0xMS41NjMtNTYuNjcxICAgYzAtMTkuNzk1LDMuODU4LTM4LjY5MSwxMS41NjMtNTYuNjc0YzcuNzA3LTE3Ljk4NSwxOC4xMjctMzMuNTQ3LDMxLjI2MS00Ni42NzhjMTMuMTM1LTEzLjEzNCwyOC42OTMtMjMuNTU1LDQ2LjY4Mi0zMS4yNjUgICBjMTcuOTgzLTcuNzA3LDM2Ljg3OS0xMS41NjMsNTYuNjcxLTExLjU2M2MzOC4yNTksMCw3MS40NzUsMTMuMDM5LDk5LjY0NiwzOS4xMTZsLTM5LjQwOSwzOS4zOTQgICBjLTUuOTAzLDUuNzExLTcuMjMxLDEyLjI3OS00LjAwMSwxOS43MDFjMy4yNDEsNy42MTQsOC44NTYsMTEuNDIsMTYuODU0LDExLjQyaDEyNy45MDZjNC45NDksMCw5LjIzLTEuODA3LDEyLjg0OC01LjQyNCAgIGMzLjYxMy0zLjYxNiw1LjQyLTcuODk4LDUuNDItMTIuODQ3VjM2LjU1QzQzOC41NDIsMjguNTU4LDQzNC44NCwyMi45NDMsNDI3LjQwOCwxOS42OTd6IiBmaWxsPSIjODA4MDgwIi8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==);
+}
+
+.netlogo-button-agent-context {
+  font-size: 11px;
+  left:      8px;
+  position:  absolute;
+  top:       5px;
+}
+
+.netlogo-disabled .netlogo-button-agent-content {
+  color: #808080;
+}
+
+.netlogo-text-box {
+    background-color: white;
+    border: none;
+    margin: 0;
+    white-space: pre-wrap;
+    font-family: "Lucida Grande", sans-serif;
+}
+
+.netlogo-switcher {
+    display: flex;
+    align-items: center;
+}
+
+.netlogo-slider {
+    padding-left: 3px;
+    padding-right: 3px;
+}
+
+.netlogo-slider:hover {
+    cursor: default;
+}
+
+.netlogo-slider input[type=range] {
+  background-color: transparent;
+  height: 22px;
+  margin: 0px;
+  margin-bottom: -3px;
+  margin-top: -1px;
+  padding: 0px;
+  width: 100%;
+}
+
+.netlogo-label {
+  margin: 0 auto;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.netlogo-slider-label {
+  display: flex;
+  justify-content: space-between;
+}
+
+.netlogo-slider-label .netlogo-label {
+  flex: 1 1 auto;
+  min-width: 0;
+}
+
+.netlogo-slider-label .netlogo-slider-value {
+  flex: 0 0 auto;
+}
+
+.netlogo-slider-label input[type=number] {
+    margin: 0px;
+    border: 1px;
+    padding: 0px;
+}
+
+.netlogo-monitor {
+    padding: 2px 4px;
+    display: flex;
+    flex-flow: column;
+    justify-content: space-around;
+}
+
+.netlogo-monitor > .netlogo-value {
+  background-color: white;
+  min-height: 11px;
+  padding: 2px 2px;
+}
+
+.netlogo-value {
+    overflow: hidden;
+}
+
+.netlogo-code {
+  border: 1px solid black;
+}
+
+.netlogo-code-tab {
+  height: 500px;
+}
+
+.netlogo-input-box {
+    padding: 2px 4px;
+    display: flex;
+    flex-flow: column;
+    justify-content: space-around;
+}
+
+.netlogo-multiline-input {
+  flex-grow: 1;
+  height:    0; /* This is a hack to get Input widget labels the right heights in Firefox --JAB (11/23/17) */
+  width:     auto; /* This is a hack to get input type="number" widgets sized correctly in Firefox -JMB Jan 2018 */
+  margin:    4px;
+  resize:    none;
+}
+
+.netlogo-chooser {
+    padding: 2px 4px;
+    display: flex;
+    flex-flow: column;
+    justify-content: space-around;
+}
+
+.netlogo-plot {
+    box-sizing: content-box; /* otherwise border gets cut off -- BCH 11/9/2014 */
+    border: 1px solid black;
+    overflow: visible; /* must come after the .netlogo-widget declaration - JMB November 2017 */
+}
+
+.highcharts-container {
+  overflow: visible !important; /* Let our context-menus be free - JMB November 2017 */
+}
+
+.netlogo-forever-button > input {
+    display: none;
+}
+
+.netlogo-subheader {
+  align-items: center;
+  display: flex;
+  flex-flow: column;
+  flex-grow: 0;
+  white-space: nowrap;
+}
+
+.netlogo-export-wrapper {
+  align-items: center;
+  display: flex;
+  flex-grow: 0;
+  white-space: nowrap;
+}
+
+.netlogo-widget-error {
+  color: red;
+}
+
+.netlogo-widget-error:hover {
+  cursor: pointer;
+}
+
+.CodeMirror {
+  height: auto;
+}
+
+.CodeMirror-scroll.cm-disabled {
+  background-color: #ebebe4;
+}
+</style> 
+  <style>/*
+ * Style for things relevant to the widget/interface editor
+ */
+
+.netlogo-interface-unlocker {
+  height: 20px;
+  margin: auto 0;
+  outline: none;
+  width: 20px;
+  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADu0lEQVR4Xu1b0VHcMBDddQMhFeRSQUgFOTo4KgiW+A+pAKgg8I+sUAGXCnJXQUgFuXRAGvBmlhGZA05aS9YZz0WaYRjGsqx92n270hMIAzVr7T4AfGjbdoqIEwDgv9fbLRGtqqpaAMCyruvbIaaG2/yItXYPAD4R0REAsNExbYWIXwHgsq7ru5gXY/puDQBr7SkRnQAAg9Cn3SHiRV3X530G8b2bHQB2dSK6SVhxyT72iMPcoZEVAGPMESJayZI+z4mo1lpzaGRp2QBwLn+WZVbCIIh4lisksgAwxMo/xSSXJ/QG4OrqalZVFcd8p0ZEvxFxTkTM7Cv+jYj7iLhHRDNEfNNpIABo2/bw+Ph43rX/pn69AOA0R0S/OjL9EhFPJBJzJHrBNUMHwxi8t33SZC8AjDE3iDgLTZSI/lRVNavrmguczs1aO23bdo6Ir4Tx51rrw84DP+mYDABPkIi+C5P7WVXVNHWF2MPatl0g4rvQdxDxIBbgh/GSAWiaho2f+iZGRL2Mfxi3IwgLpdRBihckAWCtnbjY3/hN5/a88lnqeeYF5wnecHBcsIoFIQkAY8wJIn4JrP651jprTWCMOUPE08A3P2utmTyjWhIATdMwoW1kabf6k9S4983ehQKXwz4vWCqlvCHpGzcVAArAfK2U4t1f9tY0DZfAH30DK6Wi7Yl+weXpH75J5ChOfGNLRRcivo/lnRQAgukPEV/ndv+1jBAk35R0mB2AFDeMiZWmabzhNwgAUgZ4SQCIKDoTRHuAlI5eGIDo9FsAiIk/7ls8QKjISggkFCMxXhjKAkRUOCB2D1JIMMb9/ksSdCe+6xsQlrhCMlfU0VfsAoQOYfiQ1f3cD0tE15KGIIaAlPYSDBjslS6kWACQlqN4gFD4SAC+5PMSAh0Ko8IBkosWDtgeB1wS0b1uwOIoX6WRFiP2+Sg5gNVhpxU+Ek2c+MFaYGd1WAJklACEzu266I2S0evPRwcA64Va66fX4x7ZZIxh8SOLF4wOAAD4ppQKyukh1Slm9d1eQDwfGDoNivLVrgPAjO8VTiTVeRc8gLeo3hsd0p2DnQDAGfFMQJWEz1jjx8oBDwcVz8hpGxXnGLNAAYAR2CShS9L3ToXApmowdxU4ag7YdJFBunixUx7gk89Cqk8BIAGBUWaB0IbIGHMr3QqNwWGUAPA/RPmus+XcB4yZBPmavO8GKW+V+/6P0T8nGasHxHhxr74FgHIsLl+YGPpApJdLx75cQqCEQAmB0R2KxoZxr/6FAzpwwF8eSx5uwugU8AAAAABJRU5ErkJggg==');
+  background-size: contain;
+}
+
+.netlogo-interface-unlocker:hover {
+  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADQElEQVR4Xu2a8bFNMRDGv1cBKuBVgArQARWgAlSAClABKkAFngpQATqgAubn5c7cuXOym01yzsu7k515f7y5e5Lsl91vN9mcaDu5JemOpLuSbkji/335JumnpDNJXyTx/+pysvIMVyU9kfQoGR2ZDjDeSXoj6Xfkw4jumgA8l/RUEiC0CMa/lvSyZZDct2sAgGt/qNhxzz484kHv0OgNAK7+1rOk8ffHKTQahzn/vCcAuPyLLqvyB2GeLiHRC4Atdv4Qli6e0AOA+ynm/X071/gl6WNiduIakoM3IEvGul46UOIExqqWVgBY9I9Cpie3kxW8/A4YsD41gyeAd9qSJlsBgO3ZNUv+JB0KnIhQMLG7V5yP0CE7VEkLACzwszPr91T51RYyeBjA3XTmuZf0wiC0AIDxgJCTVuN345aAAEiAEJZaAKjlif2c4PaA48V76YLhBYy0wgEugFRDUgsAZPbKmIkc3bsmYDxqjZw8S+S5CQDsRo6l2X08pDbucwYQCuxwzgvIMlZILo5b6wF/DZjfp9NfaCcKlTkdPjR0w/aEP0hFy1djEaSkpuLEGNsrum5HeacGAC/9XVvB/XeYeOQbTodrAFAzZmEE/Fezwm8TALwMcJEAhDNBzWK9dFQzZi8PCKffmsVOAJyCpAbU6QEBBCwSnCEQLcFr3HVywOQA+1RW41UBCjALoVU4gBvf/QMI5Sh/OYlefUWMR9c68XFa3L8T4GDGASorJbvlxXzUgC31XY+YABRsx/QAh/ULMLwwlRkCXmE0OaDAOScHrMQBPH3Z9Q249+cpTW8ZkgPoDnO5edg0AQQuUyPdYQ+wIQGw7u28C1fP4MPfhwOAfuHh87jDRVPK9vKC4QD4VNBOt7pOl94DStpXRw0AO2g1TrzGx6X3AAywXnR4bw6OAgCMWGqgeo3PqPHoD0eCOyOWFrZGxTkBGPUwtNRC91rfRxUCS9Vg7ypwaA5YeshAhWg9vDgqD8jdQ1htrwlABQJDZgHrQMQR2XsVGsFhSACs80DPc8CwJMj7wdwL0t2z+cguW7pDekAv40rGmQCMWgmW7F4PnekB0wOcV+uzM1QQaGuc0wum7aIyOWBygMMB/wCoI9hBlHmMqwAAAABJRU5ErkJggg==');
+}
+
+.netlogo-interface-unlocker.interface-unlocked {
+  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADbklEQVR4Xu2b4VXbMBSFdbVA2w3aCZpOUJgAOkGRPABlgtIJSv9HMp0AMkHDBIUJChuEAcjreSGhqWPJsi2wfSyfk3+SrPfp6j5ZUiBG/mDk8YsEIClgYASstR+5ywAmQojXRHQrhLgFcK+Uuq4bTu+nQJ7nHOQBER0COKwI8JaI5gAutdazEBi9BpDn+TERnfJIhwRTKHMN4EQpNffV7SWAPM8nRHQhhHjbIPBiFVbEJ6XUoqyt3gEwxhwByCMEvt0EewRD2PGIXgEwxnwB8D1y8JvmFgD2ixB6A6DuyBPRHQA2vQmAV4HQGMIHpRRnjtXTCwDrOf/LZ3ZEdA/gnH/FUeRM8fDwsCel5CzxuQIGmyMrYeUJvQBgrf0thOC87npmAI5cRrZdKc/zveVyeQbgvasxIvqWZRlnl+4BVEmfiFSWZeeBEl8VW68duM6Box5PhXcMtHMFWGv/uNIdEZ1kWXZWJ/jtssYYlrtLCT+11kedAmC5EhHP/bJnprWuWvl52bASlsslp8Ayk1xord90CsBay6N7XLpAeZTok1u3UMEpgK+Od+x3DcAl/9ajX5gKPOfLVPCjawBUNjJNjM+nEGvtpcMQrzoDsM79nP52nrVDt5b/pmFjjGsadArAaYBa66gDM51OD6WU/HG1C7upubSt58sAsQH43hWVdB0oCYBnDZAUENkD0hTwqC15QB3jilm2Nya42WePGVxIW7yvT0SuL729TRsA7tp+E3g9wFpbuhwNCeIlymxvXjR9XwLwuM1eqjaMQQE+5SQASQEjMMEXmwJEdANgUfOwwmvuMbLAswPgwKWUvG//dPbm2YSolc16D4BPbKSUk7LFim/TM5RC7wEIIZwbmBXb3kEMeg+gqoNts0xV+0EUPYVirANWJyxl7/BtfIZ2fAgA+MISHznvXD4wxlwE3OsZfhYQQuycu8cwQCYzCAVwR4sqsNby5aTVlbY2z2AAFDcyR6eAIoDRLITW8/Qmy7L/bnhUXXwInRZDmQJXWuunbSwOLsYiaEgmuLMWGBUAl0zbrgIHo4DRAwg1tCblhmKCTWILqpMAbF1qDCJWs1CMr8Gar6xXPCkgKeDfvd562gkrnaZAjMVKGOtmpZ7dA/irrVnXXqaWlHJe9cenNj3p7IZIm07HrJsAxKQ5xLZGr4C/ICqoLrwEHLcAAAAASUVORK5CYII=')
+}
+
+.netlogo-interface-unlocker.interface-unlocked:hover {
+  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAC3klEQVR4Xu2b8TUEMRDGv6sAHVABKuAqQAWoABWgAlSAClABVwEqQAdUwPtW1tu3l2STzaxNLsl7+5cke/ObL5PZSUyQeZtkbj8KgKKA9AhsqZ+8AWAZwLt6vgC8+JqTwhKgkTsAdtVjs5EwngDcA3hwgRE7gCMAZ8rTLvY0+1ANJwqIcWysACjvOwCrvlZr+lMRewA+dXPFCOAAwLWA4c0puDQIYS5GxAbgGMCFsPH1dFTAtA0hJgC+nv9Q0Z/LZckRGiFsqnHVkFgA0IjHjmDHbe5GPW0pc6fYVrvEfgcMjqUSqpgQC4BnAIRgatzSqBBtIGsNIohLAOuW+c7V7hIFgC7pHyqvO6q86kZFUC3MH3SNINcINAYFvFm2O+7j9GbfRrmblHBLVY0NgHLl2tc1yp7ZX0irU2VdkKQKVsYGQO8y29M1SpT7d2hjJnlqmGQ6NgCT/CW837SZ3tap4GpsAN8Gz/QJfDal8ONIFxBnYwLgtsftb0j513OblsGoAGwBUNoxDKb8uJpr0i/yCVj/CcD4rgLAx2XCfYsCLEmQtDLLEjDBlibts0rKEohlCdR1dh/vSfRlImT60qM66lZXfkLeaY0BpnQ05IWSY/+KFwGTZg/AqDYGwRwUYBRPAVAUUJaAaAx4VaVrn8OKruAusQsMHgNoOMvbzQMLWy2uy+jm36MHwBMbelxXwLQVPV0hRA/AVsC05fsLA6DLQ6F5Rtf8riC1/STygOqExfArbIVP1x8ePQAawiNn3QUlFiJDT3eSADB37q6+9EynPq7eZ78kAOhUwLs5Ep/ayQBoV5cktsCkFNAGkE0iRC8xE2zf8Oi6+OAaB5JYAjN1R6dplEQSlMwS0OUCWQEwyTQ0C0xGAdkDcA1offolEQT7GOY6pgCoLzW6EvPpJ/E16PO+Pn2LAooCfv9rZJBWlkA5GBlQXkKaZV2BzyBtzBsigxjkO2kB4Ets0fpnr4Af4sW1RwixQEAAAAAASUVORK5CYII=')
+}
+
+.netlogo-widget.interface-unlocked {
+  user-select: none;
+}
+
+.netlogo-widget.interface-unlocked:hover {
+  box-shadow: 0 0 6px 3px rgba(15, 15, 15, .40);
+  cursor:     default;
+  z-index:    3;
+}
+
+.context-menu-item {
+  border-bottom: solid 1px #dfdfdf;
+  color:         #0066aa;
+  cursor:        pointer;
+  font-size:     18px;
+  padding:       5px;
+  user-select:   none;
+}
+
+.context-menu-item.disabled {
+  color:  #999;
+  cursor: default;
+}
+
+.context-menu-item:hover:not(.disabled) {
+  background-color: #0066aa;
+  color:            white;
+}
+
+.context-menu-item:last-child {
+  border-bottom: none;
+}
+
+.context-menu-list {
+  list-style: none;
+  margin:     0;
+  padding:    0;
+}
+
+.widget-context-menu {
+  background-color: white;
+  border:           solid 1px #dfdfdf;
+  box-shadow:       1px 1px 2px #cfcfcf;
+  margin:           0;
+  padding:          8px 10px;
+  position:         absolute;
+  width:            200px;
+  z-index:          80;
+}
+
+.widget-edit-popup {
+  background-color: white;
+  border:           1px solid black;
+  border-radius:    5px;
+  box-shadow:       0 0 10px rgba(0,0,0,0.5);
+  padding:          10px 10px 0 10px;
+  position:         absolute;
+  outline:          none;
+  width:            450px;
+  z-index:          100;
+}
+
+.widget-edit-form {
+  margin-bottom: 10px;
+}
+
+.widget-edit-form label {
+  user-select: none;
+}
+
+.widget-edit-form-overlay {
+  background-color: rgba(0, 0, 0, 0.5);
+  height: 100%;
+  position: relative;
+  width: 100%;
+  z-index: 95;
+}
+
+.widget-edit-form-title {
+  cursor:        default;
+  font-weight:   bold;
+  margin-bottom: 10px;
+  text-align:    center;
+  user-select:   none;
+}
+
+.widget-edit-form-button-container {
+  margin-top: 10px;
+  text-align: center;
+}
+
+.widget-edit-closer {
+  color:       #7F7F7F;
+  cursor:      pointer;
+  font-weight: bold;
+  position:    absolute;
+  right:       10px;
+  top:         10px;
+  user-select: none;
+}
+
+.widget-edit-closer:hover {
+  color: black;
+}
+
+.widget-edit-text {
+  font-size: 20px;
+}
+
+.widget-edit-checkbox-wrapper {
+  white-space: nowrap;
+}
+
+.widget-edit-checkbox {
+  height: 13px;
+}
+
+.widget-edit-input-label {
+  margin-right: 10px;
+  white-space:  nowrap;
+}
+
+.widget-edit-input {
+  width: 100%;
+}
+
+.widget-edit-input[type="number"] {
+  text-align: right;
+}
+
+.widget-edit-hint-text {
+  font-size:   12px;
+  user-select: none;
+}
+
+.widget-edit-dropdown {
+  font-size: 14px;
+  height:    30px;
+  margin:    0 10px;
+}
+
+.widget-edit-inputbox {
+  font-size:   20px;
+  height:      33px;
+  margin-left: 10px;
+  padding:      4px;
+}
+
+.widget-edit-textbox {
+  font-size: 14px;
+  height:    115px;
+  max-width: 100%;
+  min-width: 100%;
+}
+
+.widget-edit-fieldset {
+  border-radius: 8px;
+}
+
+.widget-edit-legend {
+  user-select: none;
+}
+
+.widget-selected {
+  z-index: 50;
+}
+
+.widget-resize-handle {
+  background-color: #727272;
+  height:           10px;
+  width:            10px;
+  position:         absolute;
+  z-index:          60;
+}
+</style> 
+  <style>.netlogo-command {
+  background-color: #BACFF3;
+}
+.netlogo-command.netlogo-active, .netlogo-command:active {
+  background-color: #1F6A99;
+  color: #BACFF3;
+}
+.netlogo-button.netlogo-disabled:active, .netlogo-forever-button.netlogo-disabled.netlogo-active {
+  background-color: #BCBCE5;
+  color: #888888;
+}
+.netlogo-button.interface-unlocked:active {
+  background-color: #BACFF3;
+  color: #707070
+}
+.netlogo-input {
+  background-color: #8FE585;
+}
+.netlogo-output {
+  background-color: #FFFF9A;
+  border: 1px solid #E7E741;
+}
+
+.netlogo-slider-label .netlogo-label {
+  background-color: #8FE585;
+}
+
+.netlogo-slider-label .netlogo-slider-value {
+  background-color: #8FE585;
+}
+
+.netlogo-tab {
+  background-color: #BCBCE5;
+  border-color: #242479;
+  font-size: 16px;
+}
+
+.netlogo-tab.netlogo-active {
+  background-color: #7C76fD;
+}
+
+.netlogo-tab:active {
+  background-color: #7C76fD;
+}
+
+.netlogo-view-container {
+  background-color: #F4F4F4;
+  border: 1px solid #CCCCCC;
+}
+</style> 
+  <style>.cm-s-netlogo-default .cm-reporter {
+    color: #660096;
+}
+.cm-s-netlogo-default .cm-command {
+    color: #0000AA;
+}
+.cm-s-netlogo-default .cm-keyword {
+    color: #007F69;
+}
+.cm-s-netlogo-default .cm-comment {
+    color: #5A5A5A;
+}
+.cm-s-netlogo-default .cm-string,
+.cm-s-netlogo-default .cm-number,
+.cm-s-netlogo-default .cm-constant {
+    color: #963700;
+}
+</style> 
+  <style>/*
+ * Styles for that sweet loading spinner with turtles
+ */
+
+#loading-overlay {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.spinner-img {
+  height: auto;
+  width: 10px;
+  z-index: 11;
+  position: absolute;
+}
+
+#spinner {
+  height: 50px;
+  width:  50px;
+  transform-origin: 60% 60%;
+  animation-name: spin;
+  animation-duration: 1.75s;
+  animation-iteration-count: infinite;
+  animation-direction: normal;
+  animation-timing-function: linear;
+  animation-fill-mode: forwards;
+  animation-delay: 0s;
+  animation-play-state: running;
+  z-index: 11;
+}
+
+.turtle1 {
+  top: 29%;
+  left: 29%;
+}
+
+.turtle2 {
+  top: 20%;
+  left: 50%;
+}
+
+.turtle3 {
+  top: 29%;
+  left: 71%;
+}
+
+.turtle4 {
+  top:  50%;
+  left: 80%;
+}
+
+.turtle5 {
+  top:  71%;
+  left: 71%;
+}
+
+.turtle6 {
+  top:  80%;
+  left: 50%;
+}
+
+.turtle7 {
+  top:  71%;
+  left: 29%;
+}
+
+.turtle8 {
+  top: 50%;
+  left: 20%;
+}
+
+@keyframes spin {
+  from {
+      transform: rotate(0deg);
+  }
+  to {
+      transform: rotate(360deg);
+  }
+}
+</style> 
+  <style>/*
+ * styles to use with the "error alert" component
+ */
+
+.dark-overlay {
+  background-color:rgba(0, 0, 0, 0.7);
+  width:100%;
+  height:100%;
+  z-index: 3500;
+  top:0;
+  left:0;
+  position: fixed;
+}
+
+#alert-overlay {
+  display: flex;
+  flex-direction: row;
+  justify-content: center;
+  align-items: center;
+  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+}
+
+#alert-dialog {
+  align-items: center;
+  background-color: whitesmoke;
+  border: 2px black solid;
+  border-radius: 10px;
+  display:flex;
+  flex-direction: column;
+  margin: 0 50px;
+  min-width: 350px;
+  opacity: 1;
+  z-index: 1010;
+}
+
+#alert-title {
+  margin-bottom: 5px;
+}
+
+.alert-text {
+  padding: 10px;
+  font-size: 16px;
+}
+
+.standalone-text {
+  color: #555555;
+  display: none;
+  text-align: center;
+  max-width: 600px;
+}
+
+#alert-dismiss-container {
+  border-top: 1px solid lightgray;
+  width: 100%;
+  text-align: center;
+  padding: 10px 0;
+}
+
+.alert-button {
+  font-size: 14px;
+  height: 25px;
+  min-width: 50%;
+  border-radius: 3px;
+  border: 1px solid lightgray;
+  background-color: #e6e6e6;
+}
+</style> 
+ </head> 
+ <body style="margin: 0px;"> 
+  <script>window.exports = {};</script> 
+  <div class="dark-overlay" id="loading-overlay"> 
+   <div id="spinner"> 
+    <svg class="spinner-img turtle1" xmlns="http://www.w3.org/2000/svg" version="1.1" viewbox="0 0 50 55"> 
+     <polygon points="22,0 0,49 22,40 44,49" style="fill: rgba(255, 255, 255, 0.125);" transform="rotate(45.0, 22, 24)"> 
+     </polygon> 
+    </svg> 
+    <svg class="spinner-img turtle2" xmlns="http://www.w3.org/2000/svg" version="1.1" viewbox="0 0 50 55"> 
+     <polygon points="22,0 0,49 22,40 44,49" style="fill: rgba(255, 255, 255, 0.25);" transform="rotate(90.0, 22, 24)"> 
+     </polygon> 
+    </svg> 
+    <svg class="spinner-img turtle3" xmlns="http://www.w3.org/2000/svg" version="1.1" viewbox="0 0 50 55"> 
+     <polygon points="22,0 0,49 22,40 44,49" style="fill: rgba(255, 255, 255, 0.375);" transform="rotate(135.0, 22, 24)"> 
+     </polygon> 
+    </svg> 
+    <svg class="spinner-img turtle4" xmlns="http://www.w3.org/2000/svg" version="1.1" viewbox="0 0 50 55"> 
+     <polygon points="22,0 0,49 22,40 44,49" style="fill: rgba(255, 255, 255, 0.5);" transform="rotate(180.0, 22, 24)"> 
+     </polygon> 
+    </svg> 
+    <svg class="spinner-img turtle5" xmlns="http://www.w3.org/2000/svg" version="1.1" viewbox="0 0 50 55"> 
+     <polygon points="22,0 0,49 22,40 44,49" style="fill: rgba(255, 255, 255, 0.625);" transform="rotate(225.0, 22, 24)"> 
+     </polygon> 
+    </svg> 
+    <svg class="spinner-img turtle6" xmlns="http://www.w3.org/2000/svg" version="1.1" viewbox="0 0 50 55"> 
+     <polygon points="22,0 0,49 22,40 44,49" style="fill: rgba(255, 255, 255, 0.75);" transform="rotate(270.0, 22, 24)"> 
+     </polygon> 
+    </svg> 
+    <svg class="spinner-img turtle7" xmlns="http://www.w3.org/2000/svg" version="1.1" viewbox="0 0 50 55"> 
+     <polygon points="22,0 0,49 22,40 44,49" style="fill: rgba(255, 255, 255, 0.875);" transform="rotate(315.0, 22, 24)"> 
+     </polygon> 
+    </svg> 
+    <svg class="spinner-img turtle8" xmlns="http://www.w3.org/2000/svg" version="1.1" viewbox="0 0 50 55"> 
+     <polygon points="22,0 0,49 22,40 44,49" style="fill: rgba(255, 255, 255, 1.0);" transform="rotate(360.0, 22, 24)"> 
+     </polygon> 
+    </svg> 
+   </div> 
+  </div> 
+  <div class="dark-overlay" id="alert-overlay" style="display : none ;"> 
+   <div id="alert-dialog"> 
+    <h3 id="alert-title">Error</h3> 
+    <div id="alert-message" class="alert-text">
+      NetLogo Web has encountered a problem. 
+    </div> 
+    <div class="alert-text standalone-text">
+      It looks like you're using NetLogo Web in standalone mode. 
+     <br> If the above error is being caused by an unimplemented primitive, we recommend a quick visit to 
+     <a href="https://netlogoweb.org" target="_blank">NetLogoWeb.org</a> to see if the primitive has been implemented in the most up-to-date version. 
+    </div> 
+    <div id="alert-dismiss-container"> 
+     <button id="alert-dismiss" class="alert-button alert-separator-top" onclick="window.nlwAlerter.hide()"> Dismiss </button> 
+    </div> 
+   </div> 
+  </div> 
+  <div id="netlogo-model-container" style="display: inline-block;"></div> 
+  <script>/*!
+ * jQuery JavaScript Library v3.2.1
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2017-03-20T18:59Z
+ */
+( function( global, factory ) {
+
+	"use strict";
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var document = window.document;
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+
+
+	function DOMEval( code, doc ) {
+		doc = doc || document;
+
+		var script = doc.createElement( "script" );
+
+		script.text = code;
+		doc.head.appendChild( script ).parentNode.removeChild( script );
+	}
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+	version = "3.2.1",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Support: Android <=4.0 only
+	// Make sure we trim BOM and NBSP
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([a-z])/g,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+
+		// Return all the elements in a clean array
+		if ( num == null ) {
+			return slice.call( this );
+		}
+
+		// Return just the one element from the set
+		return num < 0 ? this[ num + this.length ] : this[ num ];
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = Array.isArray( copy ) ) ) ) {
+
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && Array.isArray( src ) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject( src ) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isFunction: function( obj ) {
+		return jQuery.type( obj ) === "function";
+	},
+
+	isWindow: function( obj ) {
+		return obj != null && obj === obj.window;
+	},
+
+	isNumeric: function( obj ) {
+
+		// As of jQuery 3.0, isNumeric is limited to
+		// strings and numbers (primitives or objects)
+		// that can be coerced to finite numbers (gh-2662)
+		var type = jQuery.type( obj );
+		return ( type === "number" || type === "string" ) &&
+
+			// parseFloat NaNs numeric-cast false positives ("")
+			// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+			// subtraction forces infinities to NaN
+			!isNaN( obj - parseFloat( obj ) );
+	},
+
+	isPlainObject: function( obj ) {
+		var proto, Ctor;
+
+		// Detect obvious negatives
+		// Use toString instead of jQuery.type to catch host objects
+		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+			return false;
+		}
+
+		proto = getProto( obj );
+
+		// Objects with no prototype (e.g., `Object.create( null )`) are plain
+		if ( !proto ) {
+			return true;
+		}
+
+		// Objects with prototype are plain iff they were constructed by a global Object function
+		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+	},
+
+	isEmptyObject: function( obj ) {
+
+		/* eslint-disable no-unused-vars */
+		// See https://github.com/eslint/eslint/issues/6125
+		var name;
+
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return obj + "";
+		}
+
+		// Support: Android <=2.3 only (functionish RegExp)
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ toString.call( obj ) ] || "object" :
+			typeof obj;
+	},
+
+	// Evaluates a script in a global context
+	globalEval: function( code ) {
+		DOMEval( code );
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Support: IE <=9 - 11, Edge 12 - 13
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Support: Android <=4.0 only
+	trim: function( text ) {
+		return text == null ?
+			"" :
+			( text + "" ).replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	// Support: Android <=4.0 only, PhantomJS 1 only
+	// push.apply(_, arraylike) throws on ancient WebKit
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var tmp, args, proxy;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	now: Date.now,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+	// Support: real iOS 8.2 only (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = jQuery.type( obj );
+
+	if ( type === "function" || jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.3
+ * https://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-08-08
+ */
+(function( window ) {
+
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// Instance methods
+	hasOwn = ({}).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	push_native = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf as it's faster than native
+	// https://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+
+	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+		"*\\]",
+
+	pseudos = ":(" + identifier + ")(?:\\((" +
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + identifier + ")" ),
+		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+
+	// CSS escapes
+	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+	funescape = function( _, escaped, escapedWhitespace ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		// Support: Firefox<24
+		// Workaround erroneous numeric interpretation of +"0x"
+		return high !== high || escapedWhitespace ?
+			escaped :
+			high < 0 ?
+				// BMP codepoint
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// CSS string/identifier serialization
+	// https://drafts.csswg.org/cssom/#common-serializing-idioms
+	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+	fcssescape = function( ch, asCodePoint ) {
+		if ( asCodePoint ) {
+
+			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+			if ( ch === "\0" ) {
+				return "\uFFFD";
+			}
+
+			// Control characters and (dependent upon position) numbers get escaped as code points
+			return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+		}
+
+		// Other potentially-special ASCII characters get backslash-escaped
+		return "\\" + ch;
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	},
+
+	disabledAncestor = addCombinator(
+		function( elem ) {
+			return elem.disabled === true && ("form" in elem || "label" in elem);
+		},
+		{ dir: "parentNode", next: "legend" }
+	);
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		(arr = slice.call( preferredDoc.childNodes )),
+		preferredDoc.childNodes
+	);
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			push_native.apply( target, slice.call(els) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+			// Can't trust NodeList.length
+			while ( (target[j++] = els[i++]) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var m, i, elem, nid, match, groups, newSelector,
+		newContext = context && context.ownerDocument,
+
+		// nodeType defaults to 9, since context defaults to document
+		nodeType = context ? context.nodeType : 9;
+
+	results = results || [];
+
+	// Return early from calls with invalid selector or context
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	// Try to shortcut find operations (as opposed to filters) in HTML documents
+	if ( !seed ) {
+
+		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+			setDocument( context );
+		}
+		context = context || document;
+
+		if ( documentIsHTML ) {
+
+			// If the selector is sufficiently simple, try using a "get*By*" DOM method
+			// (excepting DocumentFragment context, where the methods don't exist)
+			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+				// ID selector
+				if ( (m = match[1]) ) {
+
+					// Document context
+					if ( nodeType === 9 ) {
+						if ( (elem = context.getElementById( m )) ) {
+
+							// Support: IE, Opera, Webkit
+							// TODO: identify versions
+							// getElementById can match elements by name instead of ID
+							if ( elem.id === m ) {
+								results.push( elem );
+								return results;
+							}
+						} else {
+							return results;
+						}
+
+					// Element context
+					} else {
+
+						// Support: IE, Opera, Webkit
+						// TODO: identify versions
+						// getElementById can match elements by name instead of ID
+						if ( newContext && (elem = newContext.getElementById( m )) &&
+							contains( context, elem ) &&
+							elem.id === m ) {
+
+							results.push( elem );
+							return results;
+						}
+					}
+
+				// Type selector
+				} else if ( match[2] ) {
+					push.apply( results, context.getElementsByTagName( selector ) );
+					return results;
+
+				// Class selector
+				} else if ( (m = match[3]) && support.getElementsByClassName &&
+					context.getElementsByClassName ) {
+
+					push.apply( results, context.getElementsByClassName( m ) );
+					return results;
+				}
+			}
+
+			// Take advantage of querySelectorAll
+			if ( support.qsa &&
+				!compilerCache[ selector + " " ] &&
+				(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+				if ( nodeType !== 1 ) {
+					newContext = context;
+					newSelector = selector;
+
+				// qSA looks outside Element context, which is not what we want
+				// Thanks to Andrew Dupont for this workaround technique
+				// Support: IE <=8
+				// Exclude object elements
+				} else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+					// Capture the context ID, setting it first if necessary
+					if ( (nid = context.getAttribute( "id" )) ) {
+						nid = nid.replace( rcssescape, fcssescape );
+					} else {
+						context.setAttribute( "id", (nid = expando) );
+					}
+
+					// Prefix every selector in the list
+					groups = tokenize( selector );
+					i = groups.length;
+					while ( i-- ) {
+						groups[i] = "#" + nid + " " + toSelector( groups[i] );
+					}
+					newSelector = groups.join( "," );
+
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+				}
+
+				if ( newSelector ) {
+					try {
+						push.apply( results,
+							newContext.querySelectorAll( newSelector )
+						);
+						return results;
+					} catch ( qsaError ) {
+					} finally {
+						if ( nid === expando ) {
+							context.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key + " " ] = value);
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+	var el = document.createElement("fieldset");
+
+	try {
+		return !!fn( el );
+	} catch (e) {
+		return false;
+	} finally {
+		// Remove from its parent by default
+		if ( el.parentNode ) {
+			el.parentNode.removeChild( el );
+		}
+		// release memory in IE
+		el = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split("|"),
+		i = arr.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[i] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			a.sourceIndex - b.sourceIndex;
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+	return function( elem ) {
+
+		// Only certain elements can match :enabled or :disabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+		if ( "form" in elem ) {
+
+			// Check for inherited disabledness on relevant non-disabled elements:
+			// * listed form-associated elements in a disabled fieldset
+			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+			// * option elements in a disabled optgroup
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+			// All such elements have a "form" property.
+			if ( elem.parentNode && elem.disabled === false ) {
+
+				// Option elements defer to a parent optgroup if present
+				if ( "label" in elem ) {
+					if ( "label" in elem.parentNode ) {
+						return elem.parentNode.disabled === disabled;
+					} else {
+						return elem.disabled === disabled;
+					}
+				}
+
+				// Support: IE 6 - 11
+				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
+				return elem.isDisabled === disabled ||
+
+					// Where there is no isDisabled, check manually
+					/* jshint -W018 */
+					elem.isDisabled !== !disabled &&
+						disabledAncestor( elem ) === disabled;
+			}
+
+			return elem.disabled === disabled;
+
+		// Try to winnow out elements that can't be disabled before trusting the disabled property.
+		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+		// even exist on them, let alone have a boolean value.
+		} else if ( "label" in elem ) {
+			return elem.disabled === disabled;
+		}
+
+		// Remaining elements are neither :enabled nor :disabled
+		return false;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, subWindow,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// Return early if doc is invalid or already selected
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Update global variables
+	document = doc;
+	docElem = document.documentElement;
+	documentIsHTML = !isXML( document );
+
+	// Support: IE 9-11, Edge
+	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+	if ( preferredDoc !== document &&
+		(subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+
+		// Support: IE 11, Edge
+		if ( subWindow.addEventListener ) {
+			subWindow.addEventListener( "unload", unloadHandler, false );
+
+		// Support: IE 9 - 10 only
+		} else if ( subWindow.attachEvent ) {
+			subWindow.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert(function( el ) {
+		el.className = "i";
+		return !el.getAttribute("className");
+	});
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert(function( el ) {
+		el.appendChild( document.createComment("") );
+		return !el.getElementsByTagName("*").length;
+	});
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programmatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert(function( el ) {
+		docElem.appendChild( el ).id = expando;
+		return !document.getElementsByName || !document.getElementsByName( expando ).length;
+	});
+
+	// ID filter and find
+	if ( support.getById ) {
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var elem = context.getElementById( id );
+				return elem ? [ elem ] : [];
+			}
+		};
+	} else {
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" &&
+					elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+
+		// Support: IE 6 - 7 only
+		// getElementById is not reliable as a find shortcut
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var node, i, elems,
+					elem = context.getElementById( id );
+
+				if ( elem ) {
+
+					// Verify the id attribute
+					node = elem.getAttributeNode("id");
+					if ( node && node.value === id ) {
+						return [ elem ];
+					}
+
+					// Fall back on getElementsByName
+					elems = context.getElementsByName( id );
+					i = 0;
+					while ( (elem = elems[i++]) ) {
+						node = elem.getAttributeNode("id");
+						if ( node && node.value === id ) {
+							return [ elem ];
+						}
+					}
+				}
+
+				return [];
+			}
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See https://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( el ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// https://bugs.jquery.com/ticket/12359
+			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( el.querySelectorAll("[msallowcapture^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !el.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push("~=");
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !el.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibling-combinator selector` fails
+			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push(".#.+[+~]");
+			}
+		});
+
+		assert(function( el ) {
+			el.innerHTML = "<a href='' disabled='disabled'></a>" +
+				"<select disabled='disabled'><option/></select>";
+
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = document.createElement("input");
+			input.setAttribute( "type", "hidden" );
+			el.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( el.querySelectorAll("[name=d]").length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( el.querySelectorAll(":enabled").length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: IE9-11+
+			// IE's :disabled selector does not pick up the children of disabled fieldsets
+			docElem.appendChild( el ).disabled = true;
+			if ( el.querySelectorAll(":disabled").length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			el.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( el ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( el, "*" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( el, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully self-exclusive
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+			// Choose the first element that is related to our preferred document
+			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+				return -1;
+			}
+			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+			return a === document ? -1 :
+				b === document ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		!compilerCache[ expr + " " ] &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch (e) {}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			(val = elem.getAttributeNode(name)) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.escape = function( sel ) {
+	return (sel + "").replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( (elem = results[i++]) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		while ( (node = elem[i++]) ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[6] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[3] ) {
+				match[2] = match[4] || match[5] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() { return true; } :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, uniqueCache, outerCache, node, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType,
+						diff = false;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) {
+
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+
+							// Seek `elem` from a previously-cached index
+
+							// ...in a gzip-friendly way
+							node = parent;
+							outerCache = node[ expando ] || (node[ expando ] = {});
+
+							// Support: IE <9 only
+							// Defend against cloned attroperties (jQuery gh-1709)
+							uniqueCache = outerCache[ node.uniqueID ] ||
+								(outerCache[ node.uniqueID ] = {});
+
+							cache = uniqueCache[ type ] || [];
+							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+							diff = nodeIndex && cache[ 2 ];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						} else {
+							// Use previously-cached element index if available
+							if ( useCache ) {
+								// ...in a gzip-friendly way
+								node = elem;
+								outerCache = node[ expando ] || (node[ expando ] = {});
+
+								// Support: IE <9 only
+								// Defend against cloned attroperties (jQuery gh-1709)
+								uniqueCache = outerCache[ node.uniqueID ] ||
+									(outerCache[ node.uniqueID ] = {});
+
+								cache = uniqueCache[ type ] || [];
+								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+								diff = nodeIndex;
+							}
+
+							// xml :nth-child(...)
+							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
+							if ( diff === false ) {
+								// Use the same loop as above to seek `elem` from the start
+								while ( (node = ++nodeIndex && node && node[ dir ] ||
+									(diff = nodeIndex = 0) || start.pop()) ) {
+
+									if ( ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) &&
+										++diff ) {
+
+										// Cache the index of each encountered element
+										if ( useCache ) {
+											outerCache = node[ expando ] || (node[ expando ] = {});
+
+											// Support: IE <9 only
+											// Defend against cloned attroperties (jQuery gh-1709)
+											uniqueCache = outerCache[ node.uniqueID ] ||
+												(outerCache[ node.uniqueID ] = {});
+
+											uniqueCache[ type ] = [ dirruns, diff ];
+										}
+
+										if ( node === elem ) {
+											break;
+										}
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					// Don't keep the element (issue #299)
+					input[0] = null;
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			text = text.replace( runescape, funescape );
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifier
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": createDisabledPseudo( false ),
+		"disabled": createDisabledPseudo( true ),
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( (tokens = []) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push({
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			});
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push({
+					value: matched,
+					type: type,
+					matches: match
+				});
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		skip = combinator.next,
+		key = skip || dir,
+		checkNonElements = base && key === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+			return false;
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, uniqueCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+						// Support: IE <9 only
+						// Defend against cloned attroperties (jQuery gh-1709)
+						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+						if ( skip && skip === elem.nodeName.toLowerCase() ) {
+							elem = elem[ dir ] || elem;
+						} else if ( (oldCache = uniqueCache[ key ]) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return (newCache[ 2 ] = oldCache[ 2 ]);
+						} else {
+							// Reuse newcache so results back-propagate to previous elements
+							uniqueCache[ key ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+			return false;
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+			// Avoid hanging onto element (issue #299)
+			checkContext = null;
+			return ret;
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+				len = elems.length;
+
+			if ( outermost ) {
+				outermostContext = context === document || context || outermost;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					if ( !context && elem.ownerDocument !== document ) {
+						setDocument( elem );
+						xml = !documentIsHTML;
+					}
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context || document, xml) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// `i` is now the count of elements visited above, and adding it to `matchedCount`
+			// makes the latter nonnegative.
+			matchedCount += i;
+
+			// Apply set filters to unmatched elements
+			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+			// no element matchers and no seed.
+			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
+			// numerically zero.
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is only one selector in the list and no seed
+	// (the latter of which guarantees us context)
+	if ( match.length === 1 ) {
+
+		// Reduce context if the leading compound selector is an ID
+		tokens = match[0] = match[0].slice( 0 );
+		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
+
+			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[i];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ (type = token.type) ] ) {
+				break;
+			}
+			if ( (find = Expr.find[ type ]) ) {
+				// Search, expanding context for leading sibling combinators
+				if ( (seed = find(
+					token.matches[0].replace( runescape, funescape ),
+					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+				)) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( el ) {
+	// Should return 1, but returns 4 (following)
+	return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( el ) {
+	el.innerHTML = "<a href='#'></a>";
+	return el.firstChild.getAttribute("href") === "#" ;
+}) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	});
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( el ) {
+	el.innerHTML = "<input/>";
+	el.firstChild.setAttribute( "value", "" );
+	return el.firstChild.getAttribute( "value" ) === "";
+}) ) {
+	addHandle( "value", function( elem, name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	});
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( el ) {
+	return el.getAttribute("disabled") == null;
+}) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+					(val = elem.getAttributeNode( name )) && val.specified ?
+					val.value :
+				null;
+		}
+	});
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+	var matched = [],
+		truncate = until !== undefined;
+
+	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+		if ( elem.nodeType === 1 ) {
+			if ( truncate && jQuery( elem ).is( until ) ) {
+				break;
+			}
+			matched.push( elem );
+		}
+	}
+	return matched;
+};
+
+
+var siblings = function( n, elem ) {
+	var matched = [];
+
+	for ( ; n; n = n.nextSibling ) {
+		if ( n.nodeType === 1 && n !== elem ) {
+			matched.push( n );
+		}
+	}
+
+	return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			return !!qualifier.call( elem, i, elem ) !== not;
+		} );
+	}
+
+	// Single element
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		} );
+	}
+
+	// Arraylike of elements (jQuery, arguments, Array)
+	if ( typeof qualifier !== "string" ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+		} );
+	}
+
+	// Simple selector that can be filtered directly, removing non-Elements
+	if ( risSimple.test( qualifier ) ) {
+		return jQuery.filter( qualifier, elements, not );
+	}
+
+	// Complex selector, compare the two sets, removing non-Elements
+	qualifier = jQuery.filter( qualifier, elements );
+	return jQuery.grep( elements, function( elem ) {
+		return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
+	} );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	if ( elems.length === 1 && elem.nodeType === 1 ) {
+		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+	}
+
+	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+		return elem.nodeType === 1;
+	} ) );
+};
+
+jQuery.fn.extend( {
+	find: function( selector ) {
+		var i, ret,
+			len = this.length,
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter( function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			} ) );
+		}
+
+		ret = this.pushStack( [] );
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], false ) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], true ) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	// Shortcut simple #id case for speed
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+	init = jQuery.fn.init = function( selector, context, root ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Method init() accepts an alternate rootjQuery
+		// so migrate can support jQuery.sub (gh-2101)
+		root = root || rootjQuery;
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[ 0 ] === "<" &&
+				selector[ selector.length - 1 ] === ">" &&
+				selector.length >= 3 ) {
+
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && ( match[ 1 ] || !context ) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[ 1 ] ) {
+					context = context instanceof jQuery ? context[ 0 ] : context;
+
+					// Option to run scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[ 1 ],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[ 2 ] );
+
+					if ( elem ) {
+
+						// Inject the element directly into the jQuery object
+						this[ 0 ] = elem;
+						this.length = 1;
+					}
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || root ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this[ 0 ] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return root.ready !== undefined ?
+				root.ready( selector ) :
+
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+	// Methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend( {
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter( function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[ i ] ) ) {
+					return true;
+				}
+			}
+		} );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			targets = typeof selectors !== "string" && jQuery( selectors );
+
+		// Positional selectors never match, since there's no _selection_ context
+		if ( !rneedsContext.test( selectors ) ) {
+			for ( ; i < l; i++ ) {
+				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+					// Always skip document fragments
+					if ( cur.nodeType < 11 && ( targets ?
+						targets.index( cur ) > -1 :
+
+						// Don't pass non-elements to Sizzle
+						cur.nodeType === 1 &&
+							jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+						matched.push( cur );
+						break;
+					}
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+	},
+
+	// Determine the position of an element within the set
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// Index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.uniqueSort(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	}
+} );
+
+function sibling( cur, dir ) {
+	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each( {
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return siblings( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return siblings( elem.firstChild );
+	},
+	contents: function( elem ) {
+        if ( nodeName( elem, "iframe" ) ) {
+            return elem.contentDocument;
+        }
+
+        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+        // Treat the template element as a regular one in browsers that
+        // don't support it.
+        if ( nodeName( elem, "template" ) ) {
+            elem = elem.content || elem;
+        }
+
+        return jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.uniqueSort( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+	var object = {};
+	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	} );
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		createOptions( options ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+
+		// Last fire value for non-forgettable lists
+		memory,
+
+		// Flag to know if list was already fired
+		fired,
+
+		// Flag to prevent firing
+		locked,
+
+		// Actual callback list
+		list = [],
+
+		// Queue of execution data for repeatable lists
+		queue = [],
+
+		// Index of currently firing callback (modified by add/remove as needed)
+		firingIndex = -1,
+
+		// Fire callbacks
+		fire = function() {
+
+			// Enforce single-firing
+			locked = locked || options.once;
+
+			// Execute callbacks for all pending executions,
+			// respecting firingIndex overrides and runtime changes
+			fired = firing = true;
+			for ( ; queue.length; firingIndex = -1 ) {
+				memory = queue.shift();
+				while ( ++firingIndex < list.length ) {
+
+					// Run callback and check for early termination
+					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+						options.stopOnFalse ) {
+
+						// Jump to end and forget the data so .add doesn't re-fire
+						firingIndex = list.length;
+						memory = false;
+					}
+				}
+			}
+
+			// Forget the data if we're done with it
+			if ( !options.memory ) {
+				memory = false;
+			}
+
+			firing = false;
+
+			// Clean up if we're done firing for good
+			if ( locked ) {
+
+				// Keep an empty list if we have data for future add calls
+				if ( memory ) {
+					list = [];
+
+				// Otherwise, this object is spent
+				} else {
+					list = "";
+				}
+			}
+		},
+
+		// Actual Callbacks object
+		self = {
+
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+
+					// If we have memory from a past run, we should fire after adding
+					if ( memory && !firing ) {
+						firingIndex = list.length - 1;
+						queue.push( memory );
+					}
+
+					( function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							if ( jQuery.isFunction( arg ) ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
+								// Inspect recursively
+								add( arg );
+							}
+						} );
+					} )( arguments );
+
+					if ( memory && !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Remove a callback from the list
+			remove: function() {
+				jQuery.each( arguments, function( _, arg ) {
+					var index;
+					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+						list.splice( index, 1 );
+
+						// Handle firing indexes
+						if ( index <= firingIndex ) {
+							firingIndex--;
+						}
+					}
+				} );
+				return this;
+			},
+
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ?
+					jQuery.inArray( fn, list ) > -1 :
+					list.length > 0;
+			},
+
+			// Remove all callbacks from the list
+			empty: function() {
+				if ( list ) {
+					list = [];
+				}
+				return this;
+			},
+
+			// Disable .fire and .add
+			// Abort any current/pending executions
+			// Clear all callbacks and values
+			disable: function() {
+				locked = queue = [];
+				list = memory = "";
+				return this;
+			},
+			disabled: function() {
+				return !list;
+			},
+
+			// Disable .fire
+			// Also disable .add unless we have memory (since it would have no effect)
+			// Abort any pending executions
+			lock: function() {
+				locked = queue = [];
+				if ( !memory && !firing ) {
+					list = memory = "";
+				}
+				return this;
+			},
+			locked: function() {
+				return !!locked;
+			},
+
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( !locked ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					queue.push( args );
+					if ( !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+function Identity( v ) {
+	return v;
+}
+function Thrower( ex ) {
+	throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+	var method;
+
+	try {
+
+		// Check for promise aspect first to privilege synchronous behavior
+		if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
+			method.call( value ).done( resolve ).fail( reject );
+
+		// Other thenables
+		} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
+			method.call( value, resolve, reject );
+
+		// Other non-thenables
+		} else {
+
+			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+			// * false: [ value ].slice( 0 ) => resolve( value )
+			// * true: [ value ].slice( 1 ) => resolve()
+			resolve.apply( undefined, [ value ].slice( noValue ) );
+		}
+
+	// For Promises/A+, convert exceptions into rejections
+	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+	// Deferred#then to conditionally suppress rejection.
+	} catch ( value ) {
+
+		// Support: Android 4.0 only
+		// Strict mode functions invoked without .call/.apply get global-object context
+		reject.apply( undefined, [ value ] );
+	}
+}
+
+jQuery.extend( {
+
+	Deferred: function( func ) {
+		var tuples = [
+
+				// action, add listener, callbacks,
+				// ... .then handlers, argument index, [final state]
+				[ "notify", "progress", jQuery.Callbacks( "memory" ),
+					jQuery.Callbacks( "memory" ), 2 ],
+				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				"catch": function( fn ) {
+					return promise.then( null, fn );
+				},
+
+				// Keep pipe for back-compat
+				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+
+					return jQuery.Deferred( function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+
+							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
+							var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+							// deferred.progress(function() { bind to newDefer or newDefer.notify })
+							// deferred.done(function() { bind to newDefer or newDefer.resolve })
+							// deferred.fail(function() { bind to newDefer or newDefer.reject })
+							deferred[ tuple[ 1 ] ]( function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.progress( newDefer.notify )
+										.done( newDefer.resolve )
+										.fail( newDefer.reject );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ](
+										this,
+										fn ? [ returned ] : arguments
+									);
+								}
+							} );
+						} );
+						fns = null;
+					} ).promise();
+				},
+				then: function( onFulfilled, onRejected, onProgress ) {
+					var maxDepth = 0;
+					function resolve( depth, deferred, handler, special ) {
+						return function() {
+							var that = this,
+								args = arguments,
+								mightThrow = function() {
+									var returned, then;
+
+									// Support: Promises/A+ section 2.3.3.3.3
+									// https://promisesaplus.com/#point-59
+									// Ignore double-resolution attempts
+									if ( depth < maxDepth ) {
+										return;
+									}
+
+									returned = handler.apply( that, args );
+
+									// Support: Promises/A+ section 2.3.1
+									// https://promisesaplus.com/#point-48
+									if ( returned === deferred.promise() ) {
+										throw new TypeError( "Thenable self-resolution" );
+									}
+
+									// Support: Promises/A+ sections 2.3.3.1, 3.5
+									// https://promisesaplus.com/#point-54
+									// https://promisesaplus.com/#point-75
+									// Retrieve `then` only once
+									then = returned &&
+
+										// Support: Promises/A+ section 2.3.4
+										// https://promisesaplus.com/#point-64
+										// Only check objects and functions for thenability
+										( typeof returned === "object" ||
+											typeof returned === "function" ) &&
+										returned.then;
+
+									// Handle a returned thenable
+									if ( jQuery.isFunction( then ) ) {
+
+										// Special processors (notify) just wait for resolution
+										if ( special ) {
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special )
+											);
+
+										// Normal processors (resolve) also hook into progress
+										} else {
+
+											// ...and disregard older resolution values
+											maxDepth++;
+
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special ),
+												resolve( maxDepth, deferred, Identity,
+													deferred.notifyWith )
+											);
+										}
+
+									// Handle all other returned values
+									} else {
+
+										// Only substitute handlers pass on context
+										// and multiple values (non-spec behavior)
+										if ( handler !== Identity ) {
+											that = undefined;
+											args = [ returned ];
+										}
+
+										// Process the value(s)
+										// Default process is resolve
+										( special || deferred.resolveWith )( that, args );
+									}
+								},
+
+								// Only normal processors (resolve) catch and reject exceptions
+								process = special ?
+									mightThrow :
+									function() {
+										try {
+											mightThrow();
+										} catch ( e ) {
+
+											if ( jQuery.Deferred.exceptionHook ) {
+												jQuery.Deferred.exceptionHook( e,
+													process.stackTrace );
+											}
+
+											// Support: Promises/A+ section 2.3.3.3.4.1
+											// https://promisesaplus.com/#point-61
+											// Ignore post-resolution exceptions
+											if ( depth + 1 >= maxDepth ) {
+
+												// Only substitute handlers pass on context
+												// and multiple values (non-spec behavior)
+												if ( handler !== Thrower ) {
+													that = undefined;
+													args = [ e ];
+												}
+
+												deferred.rejectWith( that, args );
+											}
+										}
+									};
+
+							// Support: Promises/A+ section 2.3.3.3.1
+							// https://promisesaplus.com/#point-57
+							// Re-resolve promises immediately to dodge false rejection from
+							// subsequent errors
+							if ( depth ) {
+								process();
+							} else {
+
+								// Call an optional hook to record the stack, in case of exception
+								// since it's otherwise lost when execution goes async
+								if ( jQuery.Deferred.getStackHook ) {
+									process.stackTrace = jQuery.Deferred.getStackHook();
+								}
+								window.setTimeout( process );
+							}
+						};
+					}
+
+					return jQuery.Deferred( function( newDefer ) {
+
+						// progress_handlers.add( ... )
+						tuples[ 0 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								jQuery.isFunction( onProgress ) ?
+									onProgress :
+									Identity,
+								newDefer.notifyWith
+							)
+						);
+
+						// fulfilled_handlers.add( ... )
+						tuples[ 1 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								jQuery.isFunction( onFulfilled ) ?
+									onFulfilled :
+									Identity
+							)
+						);
+
+						// rejected_handlers.add( ... )
+						tuples[ 2 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								jQuery.isFunction( onRejected ) ?
+									onRejected :
+									Thrower
+							)
+						);
+					} ).promise();
+				},
+
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 5 ];
+
+			// promise.progress = list.add
+			// promise.done = list.add
+			// promise.fail = list.add
+			promise[ tuple[ 1 ] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(
+					function() {
+
+						// state = "resolved" (i.e., fulfilled)
+						// state = "rejected"
+						state = stateString;
+					},
+
+					// rejected_callbacks.disable
+					// fulfilled_callbacks.disable
+					tuples[ 3 - i ][ 2 ].disable,
+
+					// progress_callbacks.lock
+					tuples[ 0 ][ 2 ].lock
+				);
+			}
+
+			// progress_handlers.fire
+			// fulfilled_handlers.fire
+			// rejected_handlers.fire
+			list.add( tuple[ 3 ].fire );
+
+			// deferred.notify = function() { deferred.notifyWith(...) }
+			// deferred.resolve = function() { deferred.resolveWith(...) }
+			// deferred.reject = function() { deferred.rejectWith(...) }
+			deferred[ tuple[ 0 ] ] = function() {
+				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+				return this;
+			};
+
+			// deferred.notifyWith = list.fireWith
+			// deferred.resolveWith = list.fireWith
+			// deferred.rejectWith = list.fireWith
+			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+		} );
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( singleValue ) {
+		var
+
+			// count of uncompleted subordinates
+			remaining = arguments.length,
+
+			// count of unprocessed arguments
+			i = remaining,
+
+			// subordinate fulfillment data
+			resolveContexts = Array( i ),
+			resolveValues = slice.call( arguments ),
+
+			// the master Deferred
+			master = jQuery.Deferred(),
+
+			// subordinate callback factory
+			updateFunc = function( i ) {
+				return function( value ) {
+					resolveContexts[ i ] = this;
+					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( !( --remaining ) ) {
+						master.resolveWith( resolveContexts, resolveValues );
+					}
+				};
+			};
+
+		// Single- and empty arguments are adopted like Promise.resolve
+		if ( remaining <= 1 ) {
+			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+				!remaining );
+
+			// Use .then() to unwrap secondary thenables (cf. gh-3000)
+			if ( master.state() === "pending" ||
+				jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+				return master.then();
+			}
+		}
+
+		// Multiple arguments are aggregated like Promise.all array elements
+		while ( i-- ) {
+			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+		}
+
+		return master.promise();
+	}
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+	// Support: IE 8 - 9 only
+	// Console exists when dev tools are open, which can happen at any time
+	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+	}
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+	window.setTimeout( function() {
+		throw error;
+	} );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+	readyList
+		.then( fn )
+
+		// Wrap jQuery.readyException in a function so that the lookup
+		// happens at the time of error handling instead of callback
+		// registration.
+		.catch( function( error ) {
+			jQuery.readyException( error );
+		} );
+
+	return this;
+};
+
+jQuery.extend( {
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+	}
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+	document.removeEventListener( "DOMContentLoaded", completed );
+	window.removeEventListener( "load", completed );
+	jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+	// Handle it asynchronously to allow scripts the opportunity to delay ready
+	window.setTimeout( jQuery.ready );
+
+} else {
+
+	// Use the handy event callback
+	document.addEventListener( "DOMContentLoaded", completed );
+
+	// A fallback to window.onload, that will always work
+	window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		len = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( jQuery.type( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			access( elems, fn, i, key[ i ], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !jQuery.isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < len; i++ ) {
+				fn(
+					elems[ i ], key, raw ?
+					value :
+					value.call( elems[ i ], i, fn( elems[ i ], key ) )
+				);
+			}
+		}
+	}
+
+	if ( chainable ) {
+		return elems;
+	}
+
+	// Gets
+	if ( bulk ) {
+		return fn.call( elems );
+	}
+
+	return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+var acceptData = function( owner ) {
+
+	// Accepts only:
+	//  - Node
+	//    - Node.ELEMENT_NODE
+	//    - Node.DOCUMENT_NODE
+	//  - Object
+	//    - Any
+	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+	this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+	cache: function( owner ) {
+
+		// Check if the owner object already has a cache
+		var value = owner[ this.expando ];
+
+		// If not, create one
+		if ( !value ) {
+			value = {};
+
+			// We can accept data for non-element nodes in modern browsers,
+			// but we should not, see #8335.
+			// Always return an empty object.
+			if ( acceptData( owner ) ) {
+
+				// If it is a node unlikely to be stringify-ed or looped over
+				// use plain assignment
+				if ( owner.nodeType ) {
+					owner[ this.expando ] = value;
+
+				// Otherwise secure it in a non-enumerable property
+				// configurable must be true to allow the property to be
+				// deleted when data is removed
+				} else {
+					Object.defineProperty( owner, this.expando, {
+						value: value,
+						configurable: true
+					} );
+				}
+			}
+		}
+
+		return value;
+	},
+	set: function( owner, data, value ) {
+		var prop,
+			cache = this.cache( owner );
+
+		// Handle: [ owner, key, value ] args
+		// Always use camelCase key (gh-2257)
+		if ( typeof data === "string" ) {
+			cache[ jQuery.camelCase( data ) ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+
+			// Copy the properties one-by-one to the cache object
+			for ( prop in data ) {
+				cache[ jQuery.camelCase( prop ) ] = data[ prop ];
+			}
+		}
+		return cache;
+	},
+	get: function( owner, key ) {
+		return key === undefined ?
+			this.cache( owner ) :
+
+			// Always use camelCase key (gh-2257)
+			owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
+	},
+	access: function( owner, key, value ) {
+
+		// In cases where either:
+		//
+		//   1. No key was specified
+		//   2. A string key was specified, but no value provided
+		//
+		// Take the "read" path and allow the get method to determine
+		// which value to return, respectively either:
+		//
+		//   1. The entire cache object
+		//   2. The data stored at the key
+		//
+		if ( key === undefined ||
+				( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+			return this.get( owner, key );
+		}
+
+		// When the key is not a string, or both a key and value
+		// are specified, set or extend (existing objects) with either:
+		//
+		//   1. An object of properties
+		//   2. A key and value
+		//
+		this.set( owner, key, value );
+
+		// Since the "set" path can have two possible entry points
+		// return the expected data based on which path was taken[*]
+		return value !== undefined ? value : key;
+	},
+	remove: function( owner, key ) {
+		var i,
+			cache = owner[ this.expando ];
+
+		if ( cache === undefined ) {
+			return;
+		}
+
+		if ( key !== undefined ) {
+
+			// Support array or space separated string of keys
+			if ( Array.isArray( key ) ) {
+
+				// If key is an array of keys...
+				// We always set camelCase keys, so remove that.
+				key = key.map( jQuery.camelCase );
+			} else {
+				key = jQuery.camelCase( key );
+
+				// If a key with the spaces exists, use it.
+				// Otherwise, create an array by matching non-whitespace
+				key = key in cache ?
+					[ key ] :
+					( key.match( rnothtmlwhite ) || [] );
+			}
+
+			i = key.length;
+
+			while ( i-- ) {
+				delete cache[ key[ i ] ];
+			}
+		}
+
+		// Remove the expando if there's no more data
+		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+			// Support: Chrome <=35 - 45
+			// Webkit & Blink performance suffers when deleting properties
+			// from DOM nodes, so set to undefined instead
+			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+			if ( owner.nodeType ) {
+				owner[ this.expando ] = undefined;
+			} else {
+				delete owner[ this.expando ];
+			}
+		}
+	},
+	hasData: function( owner ) {
+		var cache = owner[ this.expando ];
+		return cache !== undefined && !jQuery.isEmptyObject( cache );
+	}
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//	Implementation Summary
+//
+//	1. Enforce API surface and semantic compatibility with 1.9.x branch
+//	2. Improve the module's maintainability by reducing the storage
+//		paths to a single mechanism.
+//	3. Use the same single mechanism to support "private" and "user" data.
+//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//	5. Avoid exposing implementation details on user objects (eg. expando properties)
+//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+	if ( data === "true" ) {
+		return true;
+	}
+
+	if ( data === "false" ) {
+		return false;
+	}
+
+	if ( data === "null" ) {
+		return null;
+	}
+
+	// Only convert to a number if it doesn't change the string
+	if ( data === +data + "" ) {
+		return +data;
+	}
+
+	if ( rbrace.test( data ) ) {
+		return JSON.parse( data );
+	}
+
+	return data;
+}
+
+function dataAttr( elem, key, data ) {
+	var name;
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = getData( data );
+			} catch ( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			dataUser.set( elem, key, data );
+		} else {
+			data = undefined;
+		}
+	}
+	return data;
+}
+
+jQuery.extend( {
+	hasData: function( elem ) {
+		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return dataUser.access( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		dataUser.remove( elem, name );
+	},
+
+	// TODO: Now that all calls to _data and _removeData have been replaced
+	// with direct calls to dataPriv methods, these can be deprecated.
+	_data: function( elem, name, data ) {
+		return dataPriv.access( elem, name, data );
+	},
+
+	_removeData: function( elem, name ) {
+		dataPriv.remove( elem, name );
+	}
+} );
+
+jQuery.fn.extend( {
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = dataUser.get( elem );
+
+				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE 11 only
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = jQuery.camelCase( name.slice( 5 ) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					dataPriv.set( elem, "hasDataAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each( function() {
+				dataUser.set( this, key );
+			} );
+		}
+
+		return access( this, function( value ) {
+			var data;
+
+			// The calling jQuery object (element matches) is not empty
+			// (and therefore has an element appears at this[ 0 ]) and the
+			// `value` parameter was not undefined. An empty jQuery object
+			// will result in `undefined` for elem = this[ 0 ] which will
+			// throw an exception if an attempt to read a data cache is made.
+			if ( elem && value === undefined ) {
+
+				// Attempt to get data from the cache
+				// The key will always be camelCased in Data
+				data = dataUser.get( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to "discover" the data in
+				// HTML5 custom data-* attrs
+				data = dataAttr( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// We tried really hard, but the data doesn't exist.
+				return;
+			}
+
+			// Set the data...
+			this.each( function() {
+
+				// We always store the camelCased key
+				dataUser.set( this, key, value );
+			} );
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each( function() {
+			dataUser.remove( this, key );
+		} );
+	}
+} );
+
+
+jQuery.extend( {
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = dataPriv.get( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || Array.isArray( data ) ) {
+					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// Clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// Not public - generate a queueHooks object, or return the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+			empty: jQuery.Callbacks( "once memory" ).add( function() {
+				dataPriv.remove( elem, [ type + "queue", key ] );
+			} )
+		} );
+	}
+} );
+
+jQuery.fn.extend( {
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[ 0 ], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each( function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// Ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			} );
+	},
+	dequeue: function( type ) {
+		return this.each( function() {
+			jQuery.dequeue( this, type );
+		} );
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHiddenWithinTree = function( elem, el ) {
+
+		// isHiddenWithinTree might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+
+		// Inline style trumps all
+		return elem.style.display === "none" ||
+			elem.style.display === "" &&
+
+			// Otherwise, check computed style
+			// Support: Firefox <=43 - 45
+			// Disconnected elements can have computed display: none, so first confirm that elem is
+			// in the document.
+			jQuery.contains( elem.ownerDocument, elem ) &&
+
+			jQuery.css( elem, "display" ) === "none";
+	};
+
+var swap = function( elem, options, callback, args ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.apply( elem, args || [] );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+	var adjusted,
+		scale = 1,
+		maxIterations = 20,
+		currentValue = tween ?
+			function() {
+				return tween.cur();
+			} :
+			function() {
+				return jQuery.css( elem, prop, "" );
+			},
+		initial = currentValue(),
+		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+		// Starting value computation is required for potential unit mismatches
+		initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+			rcssNum.exec( jQuery.css( elem, prop ) );
+
+	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+		// Trust units reported by jQuery.css
+		unit = unit || initialInUnit[ 3 ];
+
+		// Make sure we update the tween properties later on
+		valueParts = valueParts || [];
+
+		// Iteratively approximate from a nonzero starting point
+		initialInUnit = +initial || 1;
+
+		do {
+
+			// If previous iteration zeroed out, double until we get *something*.
+			// Use string for doubling so we don't accidentally see scale as unchanged below
+			scale = scale || ".5";
+
+			// Adjust and apply
+			initialInUnit = initialInUnit / scale;
+			jQuery.style( elem, prop, initialInUnit + unit );
+
+		// Update scale, tolerating zero or NaN from tween.cur()
+		// Break the loop if scale is unchanged or perfect, or if we've just had enough.
+		} while (
+			scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+		);
+	}
+
+	if ( valueParts ) {
+		initialInUnit = +initialInUnit || +initial || 0;
+
+		// Apply relative offset (+=/-=) if specified
+		adjusted = valueParts[ 1 ] ?
+			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+			+valueParts[ 2 ];
+		if ( tween ) {
+			tween.unit = unit;
+			tween.start = initialInUnit;
+			tween.end = adjusted;
+		}
+	}
+	return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+	var temp,
+		doc = elem.ownerDocument,
+		nodeName = elem.nodeName,
+		display = defaultDisplayMap[ nodeName ];
+
+	if ( display ) {
+		return display;
+	}
+
+	temp = doc.body.appendChild( doc.createElement( nodeName ) );
+	display = jQuery.css( temp, "display" );
+
+	temp.parentNode.removeChild( temp );
+
+	if ( display === "none" ) {
+		display = "block";
+	}
+	defaultDisplayMap[ nodeName ] = display;
+
+	return display;
+}
+
+function showHide( elements, show ) {
+	var display, elem,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	// Determine new display value for elements that need to change
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		display = elem.style.display;
+		if ( show ) {
+
+			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+			// check is required in this first loop unless we have a nonempty display value (either
+			// inline or about-to-be-restored)
+			if ( display === "none" ) {
+				values[ index ] = dataPriv.get( elem, "display" ) || null;
+				if ( !values[ index ] ) {
+					elem.style.display = "";
+				}
+			}
+			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+				values[ index ] = getDefaultDisplay( elem );
+			}
+		} else {
+			if ( display !== "none" ) {
+				values[ index ] = "none";
+
+				// Remember what we're overwriting
+				dataPriv.set( elem, "display", display );
+			}
+		}
+	}
+
+	// Set the display of the elements in a second loop to avoid constant reflow
+	for ( index = 0; index < length; index++ ) {
+		if ( values[ index ] != null ) {
+			elements[ index ].style.display = values[ index ];
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend( {
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each( function() {
+			if ( isHiddenWithinTree( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		} );
+	}
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
+
+var rscriptType = ( /^$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+	// Support: IE <=9 only
+	option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+	// XHTML parsers do not magically insert elements in the
+	// same way that tag soup parsers do. So we cannot shorten
+	// this by omitting <tbody> or other required elements.
+	thead: [ 1, "<table>", "</table>" ],
+	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+	_default: [ 0, "", "" ]
+};
+
+// Support: IE <=9 only
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+	// Support: IE <=9 - 11 only
+	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
+	var ret;
+
+	if ( typeof context.getElementsByTagName !== "undefined" ) {
+		ret = context.getElementsByTagName( tag || "*" );
+
+	} else if ( typeof context.querySelectorAll !== "undefined" ) {
+		ret = context.querySelectorAll( tag || "*" );
+
+	} else {
+		ret = [];
+	}
+
+	if ( tag === undefined || tag && nodeName( context, tag ) ) {
+		return jQuery.merge( [ context ], ret );
+	}
+
+	return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		dataPriv.set(
+			elems[ i ],
+			"globalEval",
+			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+	var elem, tmp, tag, wrap, contains, j,
+		fragment = context.createDocumentFragment(),
+		nodes = [],
+		i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		elem = elems[ i ];
+
+		if ( elem || elem === 0 ) {
+
+			// Add nodes directly
+			if ( jQuery.type( elem ) === "object" ) {
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+			// Convert non-html into a text node
+			} else if ( !rhtml.test( elem ) ) {
+				nodes.push( context.createTextNode( elem ) );
+
+			// Convert html into DOM nodes
+			} else {
+				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+				// Deserialize a standard representation
+				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+				wrap = wrapMap[ tag ] || wrapMap._default;
+				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+				// Descend through wrappers to the right content
+				j = wrap[ 0 ];
+				while ( j-- ) {
+					tmp = tmp.lastChild;
+				}
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, tmp.childNodes );
+
+				// Remember the top-level container
+				tmp = fragment.firstChild;
+
+				// Ensure the created nodes are orphaned (#12392)
+				tmp.textContent = "";
+			}
+		}
+	}
+
+	// Remove wrapper from fragment
+	fragment.textContent = "";
+
+	i = 0;
+	while ( ( elem = nodes[ i++ ] ) ) {
+
+		// Skip elements already in the context collection (trac-4087)
+		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+			if ( ignored ) {
+				ignored.push( elem );
+			}
+			continue;
+		}
+
+		contains = jQuery.contains( elem.ownerDocument, elem );
+
+		// Append to fragment
+		tmp = getAll( fragment.appendChild( elem ), "script" );
+
+		// Preserve script evaluation history
+		if ( contains ) {
+			setGlobalEval( tmp );
+		}
+
+		// Capture executables
+		if ( scripts ) {
+			j = 0;
+			while ( ( elem = tmp[ j++ ] ) ) {
+				if ( rscriptType.test( elem.type || "" ) ) {
+					scripts.push( elem );
+				}
+			}
+		}
+	}
+
+	return fragment;
+}
+
+
+( function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// Support: Android 4.0 - 4.3 only
+	// Check state lost if the name is set (#11217)
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Android <=4.1 only
+	// Older WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE <=11 only
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+var documentElement = document.documentElement;
+
+
+
+var
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+// Support: IE <=9 only
+// See #13393 for more info
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+	var origFn, type;
+
+	// Types can be a map of types/handlers
+	if ( typeof types === "object" ) {
+
+		// ( types-Object, selector, data )
+		if ( typeof selector !== "string" ) {
+
+			// ( types-Object, data )
+			data = data || selector;
+			selector = undefined;
+		}
+		for ( type in types ) {
+			on( elem, type, selector, data, types[ type ], one );
+		}
+		return elem;
+	}
+
+	if ( data == null && fn == null ) {
+
+		// ( types, fn )
+		fn = selector;
+		data = selector = undefined;
+	} else if ( fn == null ) {
+		if ( typeof selector === "string" ) {
+
+			// ( types, selector, fn )
+			fn = data;
+			data = undefined;
+		} else {
+
+			// ( types, data, fn )
+			fn = data;
+			data = selector;
+			selector = undefined;
+		}
+	}
+	if ( fn === false ) {
+		fn = returnFalse;
+	} else if ( !fn ) {
+		return elem;
+	}
+
+	if ( one === 1 ) {
+		origFn = fn;
+		fn = function( event ) {
+
+			// Can use an empty set, since event contains the info
+			jQuery().off( event );
+			return origFn.apply( this, arguments );
+		};
+
+		// Use same guid so caller can remove using origFn
+		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+	}
+	return elem.each( function() {
+		jQuery.event.add( this, types, fn, data, selector );
+	} );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.get( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Ensure that invalid selectors throw exceptions at attach time
+		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
+		if ( selector ) {
+			jQuery.find.matchesSelector( documentElement, selector );
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !( events = elemData.events ) ) {
+			events = elemData.events = {};
+		}
+		if ( !( eventHandle = elemData.handle ) ) {
+			eventHandle = elemData.handle = function( e ) {
+
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+			};
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend( {
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join( "." )
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !( handlers = events[ type ] ) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener if the special events handler returns false
+				if ( !special.setup ||
+					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+		if ( !elemData || !( events = elemData.events ) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[ 2 ] &&
+				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector ||
+						selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown ||
+					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove data and the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			dataPriv.remove( elem, "handle events" );
+		}
+	},
+
+	dispatch: function( nativeEvent ) {
+
+		// Make a writable jQuery.Event from the native event object
+		var event = jQuery.event.fix( nativeEvent );
+
+		var i, j, ret, matched, handleObj, handlerQueue,
+			args = new Array( arguments.length ),
+			handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[ 0 ] = event;
+
+		for ( i = 1; i < arguments.length; i++ ) {
+			args[ i ] = arguments[ i ];
+		}
+
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( ( handleObj = matched.handlers[ j++ ] ) &&
+				!event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
+				// a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+						handleObj.handler ).apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( ( event.result = ret ) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, handleObj, sel, matchedHandlers, matchedSelectors,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		if ( delegateCount &&
+
+			// Support: IE <=9
+			// Black-hole SVG <use> instance trees (trac-13180)
+			cur.nodeType &&
+
+			// Support: Firefox <=42
+			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+			// Support: IE 11 only
+			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+			!( event.type === "click" && event.button >= 1 ) ) {
+
+			for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+					matchedHandlers = [];
+					matchedSelectors = {};
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matchedSelectors[ sel ] === undefined ) {
+							matchedSelectors[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) > -1 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matchedSelectors[ sel ] ) {
+							matchedHandlers.push( handleObj );
+						}
+					}
+					if ( matchedHandlers.length ) {
+						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		cur = this;
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+		}
+
+		return handlerQueue;
+	},
+
+	addProp: function( name, hook ) {
+		Object.defineProperty( jQuery.Event.prototype, name, {
+			enumerable: true,
+			configurable: true,
+
+			get: jQuery.isFunction( hook ) ?
+				function() {
+					if ( this.originalEvent ) {
+							return hook( this.originalEvent );
+					}
+				} :
+				function() {
+					if ( this.originalEvent ) {
+							return this.originalEvent[ name ];
+					}
+				},
+
+			set: function( value ) {
+				Object.defineProperty( this, name, {
+					enumerable: true,
+					configurable: true,
+					writable: true,
+					value: value
+				} );
+			}
+		} );
+	},
+
+	fix: function( originalEvent ) {
+		return originalEvent[ jQuery.expando ] ?
+			originalEvent :
+			new jQuery.Event( originalEvent );
+	},
+
+	special: {
+		load: {
+
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		focus: {
+
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== safeActiveElement() && this.focus ) {
+					this.focus();
+					return false;
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === safeActiveElement() && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+		click: {
+
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
+					this.click();
+					return false;
+				}
+			},
+
+			// For cross-browser consistency, don't fire native .click() on links
+			_default: function( event ) {
+				return nodeName( event.target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	}
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+	// This "if" is needed for plain objects
+	if ( elem.removeEventListener ) {
+		elem.removeEventListener( type, handle );
+	}
+};
+
+jQuery.Event = function( src, props ) {
+
+	// Allow instantiation without the 'new' keyword
+	if ( !( this instanceof jQuery.Event ) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+
+				// Support: Android <=2.3 only
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+		// Create target properties
+		// Support: Safari <=6 - 7 only
+		// Target should not be a text node (#504, #13143)
+		this.target = ( src.target && src.target.nodeType === 3 ) ?
+			src.target.parentNode :
+			src.target;
+
+		this.currentTarget = src.currentTarget;
+		this.relatedTarget = src.relatedTarget;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	constructor: jQuery.Event,
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+	isSimulated: false,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.preventDefault();
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopPropagation();
+		}
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+	altKey: true,
+	bubbles: true,
+	cancelable: true,
+	changedTouches: true,
+	ctrlKey: true,
+	detail: true,
+	eventPhase: true,
+	metaKey: true,
+	pageX: true,
+	pageY: true,
+	shiftKey: true,
+	view: true,
+	"char": true,
+	charCode: true,
+	key: true,
+	keyCode: true,
+	button: true,
+	buttons: true,
+	clientX: true,
+	clientY: true,
+	offsetX: true,
+	offsetY: true,
+	pointerId: true,
+	pointerType: true,
+	screenX: true,
+	screenY: true,
+	targetTouches: true,
+	toElement: true,
+	touches: true,
+
+	which: function( event ) {
+		var button = event.button;
+
+		// Add which for key events
+		if ( event.which == null && rkeyEvent.test( event.type ) ) {
+			return event.charCode != null ? event.charCode : event.keyCode;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+			if ( button & 1 ) {
+				return 1;
+			}
+
+			if ( button & 2 ) {
+				return 3;
+			}
+
+			if ( button & 4 ) {
+				return 2;
+			}
+
+			return 0;
+		}
+
+		return event.which;
+	}
+}, jQuery.event.addProp );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mouseenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+} );
+
+jQuery.fn.extend( {
+
+	on: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn );
+	},
+	one: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ?
+					handleObj.origType + "." + handleObj.namespace :
+					handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each( function() {
+			jQuery.event.remove( this, types, fn, selector );
+		} );
+	}
+} );
+
+
+var
+
+	/* eslint-disable max-len */
+
+	// See https://github.com/eslint/eslint/issues/3229
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+
+	/* eslint-enable */
+
+	// Support: IE <=10 - 11, Edge 12 - 13
+	// In IE/Edge using regex groups here causes severe slowdowns.
+	// See https://connect.microsoft.com/IE/feedback/details/1736512/
+	rnoInnerhtml = /<script|<style|<link/i,
+
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+	if ( nodeName( elem, "table" ) &&
+		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+		return jQuery( ">tbody", elem )[ 0 ] || elem;
+	}
+
+	return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+
+	if ( match ) {
+		elem.type = match[ 1 ];
+	} else {
+		elem.removeAttribute( "type" );
+	}
+
+	return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// 1. Copy private data: events, handlers, etc.
+	if ( dataPriv.hasData( src ) ) {
+		pdataOld = dataPriv.access( src );
+		pdataCur = dataPriv.set( dest, pdataOld );
+		events = pdataOld.events;
+
+		if ( events ) {
+			delete pdataCur.handle;
+			pdataCur.events = {};
+
+			for ( type in events ) {
+				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type, events[ type ][ i ] );
+				}
+			}
+		}
+	}
+
+	// 2. Copy user data
+	if ( dataUser.hasData( src ) ) {
+		udataOld = dataUser.access( src );
+		udataCur = jQuery.extend( {}, udataOld );
+
+		dataUser.set( dest, udataCur );
+	}
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+	var nodeName = dest.nodeName.toLowerCase();
+
+	// Fails to persist the checked state of a cloned checkbox or radio button.
+	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		dest.checked = src.checked;
+
+	// Fails to return the selected option to the default selected state when cloning options
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+	// Flatten any nested arrays
+	args = concat.apply( [], args );
+
+	var fragment, first, scripts, hasScripts, node, doc,
+		i = 0,
+		l = collection.length,
+		iNoClone = l - 1,
+		value = args[ 0 ],
+		isFunction = jQuery.isFunction( value );
+
+	// We can't cloneNode fragments that contain checked, in WebKit
+	if ( isFunction ||
+			( l > 1 && typeof value === "string" &&
+				!support.checkClone && rchecked.test( value ) ) ) {
+		return collection.each( function( index ) {
+			var self = collection.eq( index );
+			if ( isFunction ) {
+				args[ 0 ] = value.call( this, index, self.html() );
+			}
+			domManip( self, args, callback, ignored );
+		} );
+	}
+
+	if ( l ) {
+		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+		first = fragment.firstChild;
+
+		if ( fragment.childNodes.length === 1 ) {
+			fragment = first;
+		}
+
+		// Require either new content or an interest in ignored elements to invoke the callback
+		if ( first || ignored ) {
+			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+			hasScripts = scripts.length;
+
+			// Use the original fragment for the last item
+			// instead of the first because it can end up
+			// being emptied incorrectly in certain situations (#8070).
+			for ( ; i < l; i++ ) {
+				node = fragment;
+
+				if ( i !== iNoClone ) {
+					node = jQuery.clone( node, true, true );
+
+					// Keep references to cloned scripts for later restoration
+					if ( hasScripts ) {
+
+						// Support: Android <=4.0 only, PhantomJS 1 only
+						// push.apply(_, arraylike) throws on ancient WebKit
+						jQuery.merge( scripts, getAll( node, "script" ) );
+					}
+				}
+
+				callback.call( collection[ i ], node, i );
+			}
+
+			if ( hasScripts ) {
+				doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+				// Reenable scripts
+				jQuery.map( scripts, restoreScript );
+
+				// Evaluate executable scripts on first document insertion
+				for ( i = 0; i < hasScripts; i++ ) {
+					node = scripts[ i ];
+					if ( rscriptType.test( node.type || "" ) &&
+						!dataPriv.access( node, "globalEval" ) &&
+						jQuery.contains( doc, node ) ) {
+
+						if ( node.src ) {
+
+							// Optional AJAX dependency, but won't run scripts if not present
+							if ( jQuery._evalUrl ) {
+								jQuery._evalUrl( node.src );
+							}
+						} else {
+							DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return collection;
+}
+
+function remove( elem, selector, keepData ) {
+	var node,
+		nodes = selector ? jQuery.filter( selector, elem ) : elem,
+		i = 0;
+
+	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+		if ( !keepData && node.nodeType === 1 ) {
+			jQuery.cleanData( getAll( node ) );
+		}
+
+		if ( node.parentNode ) {
+			if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+				setGlobalEval( getAll( node, "script" ) );
+			}
+			node.parentNode.removeChild( node );
+		}
+	}
+
+	return elem;
+}
+
+jQuery.extend( {
+	htmlPrefilter: function( html ) {
+		return html.replace( rxhtmlTag, "<$1></$2>" );
+	},
+
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var i, l, srcElements, destElements,
+			clone = elem.cloneNode( true ),
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		// Fix IE cloning issues
+		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+				!jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			for ( i = 0, l = srcElements.length; i < l; i++ ) {
+				fixInput( srcElements[ i ], destElements[ i ] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0, l = srcElements.length; i < l; i++ ) {
+					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	cleanData: function( elems ) {
+		var data, elem, type,
+			special = jQuery.event.special,
+			i = 0;
+
+		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+			if ( acceptData( elem ) ) {
+				if ( ( data = elem[ dataPriv.expando ] ) ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataPriv.expando ] = undefined;
+				}
+				if ( elem[ dataUser.expando ] ) {
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataUser.expando ] = undefined;
+				}
+			}
+		}
+	}
+} );
+
+jQuery.fn.extend( {
+	detach: function( selector ) {
+		return remove( this, selector, true );
+	},
+
+	remove: function( selector ) {
+		return remove( this, selector );
+	},
+
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().each( function() {
+					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+						this.textContent = value;
+					}
+				} );
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		} );
+	},
+
+	prepend: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		} );
+	},
+
+	before: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		} );
+	},
+
+	after: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		} );
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; ( elem = this[ i ] ) != null; i++ ) {
+			if ( elem.nodeType === 1 ) {
+
+				// Prevent memory leaks
+				jQuery.cleanData( getAll( elem, false ) );
+
+				// Remove any remaining nodes
+				elem.textContent = "";
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		} );
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined && elem.nodeType === 1 ) {
+				return elem.innerHTML;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = jQuery.htmlPrefilter( value );
+
+				try {
+					for ( ; i < l; i++ ) {
+						elem = this[ i ] || {};
+
+						// Remove element nodes and prevent memory leaks
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch ( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var ignored = [];
+
+		// Make the changes, replacing each non-ignored context element with the new content
+		return domManip( this, arguments, function( elem ) {
+			var parent = this.parentNode;
+
+			if ( jQuery.inArray( this, ignored ) < 0 ) {
+				jQuery.cleanData( getAll( this ) );
+				if ( parent ) {
+					parent.replaceChild( elem, this );
+				}
+			}
+
+		// Force callback invocation
+		}, ignored );
+	}
+} );
+
+jQuery.each( {
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1,
+			i = 0;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Support: Android <=4.0 only, PhantomJS 1 only
+			// .get() because push.apply(_, arraylike) throws on ancient WebKit
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+} );
+var rmargin = ( /^margin/ );
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		var view = elem.ownerDocument.defaultView;
+
+		if ( !view || !view.opener ) {
+			view = window;
+		}
+
+		return view.getComputedStyle( elem );
+	};
+
+
+
+( function() {
+
+	// Executing both pixelPosition & boxSizingReliable tests require only one layout
+	// so they're executed at the same time to save the second computation.
+	function computeStyleTests() {
+
+		// This is a singleton, we need to execute it only once
+		if ( !div ) {
+			return;
+		}
+
+		div.style.cssText =
+			"box-sizing:border-box;" +
+			"position:relative;display:block;" +
+			"margin:auto;border:1px;padding:1px;" +
+			"top:1%;width:50%";
+		div.innerHTML = "";
+		documentElement.appendChild( container );
+
+		var divStyle = window.getComputedStyle( div );
+		pixelPositionVal = divStyle.top !== "1%";
+
+		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+		reliableMarginLeftVal = divStyle.marginLeft === "2px";
+		boxSizingReliableVal = divStyle.width === "4px";
+
+		// Support: Android 4.0 - 4.3 only
+		// Some styles come back with percentage values, even though they shouldn't
+		div.style.marginRight = "50%";
+		pixelMarginRightVal = divStyle.marginRight === "4px";
+
+		documentElement.removeChild( container );
+
+		// Nullify the div so it wouldn't be stored in the memory and
+		// it will also be a sign that checks already performed
+		div = null;
+	}
+
+	var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	// Finish early in limited (non-browser) environments
+	if ( !div.style ) {
+		return;
+	}
+
+	// Support: IE <=9 - 11 only
+	// Style of cloned element affects source element cloned (#8908)
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
+		"padding:0;margin-top:1px;position:absolute";
+	container.appendChild( div );
+
+	jQuery.extend( support, {
+		pixelPosition: function() {
+			computeStyleTests();
+			return pixelPositionVal;
+		},
+		boxSizingReliable: function() {
+			computeStyleTests();
+			return boxSizingReliableVal;
+		},
+		pixelMarginRight: function() {
+			computeStyleTests();
+			return pixelMarginRightVal;
+		},
+		reliableMarginLeft: function() {
+			computeStyleTests();
+			return reliableMarginLeftVal;
+		}
+	} );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+	var width, minWidth, maxWidth, ret,
+
+		// Support: Firefox 51+
+		// Retrieving style before computed somehow
+		// fixes an issue with getting wrong values
+		// on detached elements
+		style = elem.style;
+
+	computed = computed || getStyles( elem );
+
+	// getPropertyValue is needed for:
+	//   .css('filter') (IE 9 only, #12537)
+	//   .css('--customProperty) (#3144)
+	if ( computed ) {
+		ret = computed.getPropertyValue( name ) || computed[ name ];
+
+		if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+			ret = jQuery.style( elem, name );
+		}
+
+		// A tribute to the "awesome hack by Dean Edwards"
+		// Android Browser returns percentage for some values,
+		// but width seems to be reliably pixels.
+		// This is against the CSSOM draft spec:
+		// https://drafts.csswg.org/cssom/#resolved-values
+		if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+			// Remember the original values
+			width = style.width;
+			minWidth = style.minWidth;
+			maxWidth = style.maxWidth;
+
+			// Put in the new values to get a computed value out
+			style.minWidth = style.maxWidth = style.width = ret;
+			ret = computed.width;
+
+			// Revert the changed values
+			style.width = width;
+			style.minWidth = minWidth;
+			style.maxWidth = maxWidth;
+		}
+	}
+
+	return ret !== undefined ?
+
+		// Support: IE <=9 - 11 only
+		// IE returns zIndex value as an integer.
+		ret + "" :
+		ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+
+				// Hook not needed (or it's not possible to use it due
+				// to missing dependency), remove it.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+			return ( this.get = hookFn ).apply( this, arguments );
+		}
+	};
+}
+
+
+var
+
+	// Swappable if display is none or starts with table
+	// except "table", "table-cell", or "table-caption"
+	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rcustomProp = /^--/,
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	},
+
+	cssPrefixes = [ "Webkit", "Moz", "ms" ],
+	emptyStyle = document.createElement( "div" ).style;
+
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
+
+	// Shortcut for names that are not vendor prefixed
+	if ( name in emptyStyle ) {
+		return name;
+	}
+
+	// Check for vendor prefixed names
+	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in emptyStyle ) {
+			return name;
+		}
+	}
+}
+
+// Return a property mapped along what jQuery.cssProps suggests or to
+// a vendor prefixed property.
+function finalPropName( name ) {
+	var ret = jQuery.cssProps[ name ];
+	if ( !ret ) {
+		ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
+	}
+	return ret;
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+
+	// Any relative (+/-) values have already been
+	// normalized at this point
+	var matches = rcssNum.exec( value );
+	return matches ?
+
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i,
+		val = 0;
+
+	// If we already have the right measurement, avoid augmentation
+	if ( extra === ( isBorderBox ? "border" : "content" ) ) {
+		i = 4;
+
+	// Otherwise initialize for horizontal or vertical properties
+	} else {
+		i = name === "width" ? 1 : 0;
+	}
+
+	for ( ; i < 4; i += 2 ) {
+
+		// Both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// At this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+
+			// At this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// At this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with computed style
+	var valueIsBorderBox,
+		styles = getStyles( elem ),
+		val = curCSS( elem, name, styles ),
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// Computed unit is not pixels. Stop here and return.
+	if ( rnumnonpx.test( val ) ) {
+		return val;
+	}
+
+	// Check for style in case a browser which returns unreliable values
+	// for getComputedStyle silently falls back to the reliable elem.style
+	valueIsBorderBox = isBorderBox &&
+		( support.boxSizingReliable() || val === elem.style[ name ] );
+
+	// Fall back to offsetWidth/Height when value is "auto"
+	// This happens for inline elements with no explicit setting (gh-3571)
+	if ( val === "auto" ) {
+		val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
+	}
+
+	// Normalize "", auto, and prepare for extra
+	val = parseFloat( val ) || 0;
+
+	// Use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+jQuery.extend( {
+
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"animationIterationCount": true,
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		"float": "cssFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			isCustomProp = rcustomProp.test( name ),
+			style = elem.style;
+
+		// Make sure that we're working with the right name. We don't
+		// want to query the value if it is a CSS custom property
+		// since they are user-defined.
+		if ( !isCustomProp ) {
+			name = finalPropName( origName );
+		}
+
+		// Gets hook for the prefixed version, then unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Convert "+=" or "-=" to relative numbers (#7345)
+			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+				value = adjustCSS( elem, name, ret );
+
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set (#7116)
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add the unit (except for certain CSS properties)
+			if ( type === "number" ) {
+				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+			}
+
+			// background-* props affect original clone's values
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !( "set" in hooks ) ||
+				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+				if ( isCustomProp ) {
+					style.setProperty( name, value );
+				} else {
+					style[ name ] = value;
+				}
+			}
+
+		} else {
+
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks &&
+				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = jQuery.camelCase( name ),
+			isCustomProp = rcustomProp.test( name );
+
+		// Make sure that we're working with the right name. We don't
+		// want to modify the value if it is a CSS custom property
+		// since they are user-defined.
+		if ( !isCustomProp ) {
+			name = finalPropName( origName );
+		}
+
+		// Try prefixed name followed by the unprefixed name
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		// Convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Make numeric if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || isFinite( num ) ? num || 0 : val;
+		}
+
+		return val;
+	}
+} );
+
+jQuery.each( [ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+
+				// Certain elements can have dimension info if we invisibly show them
+				// but it must have a current display style that would benefit
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+					// Support: Safari 8+
+					// Table columns in Safari have non-zero offsetWidth & zero
+					// getBoundingClientRect().width unless display is changed.
+					// Support: IE <=11 only
+					// Running getBoundingClientRect on a disconnected node
+					// in IE throws an error.
+					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+						swap( elem, cssShow, function() {
+							return getWidthOrHeight( elem, name, extra );
+						} ) :
+						getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var matches,
+				styles = extra && getStyles( elem ),
+				subtract = extra && augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				);
+
+			// Convert to pixels if value adjustment is needed
+			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+				( matches[ 3 ] || "px" ) !== "px" ) {
+
+				elem.style[ name ] = value;
+				value = jQuery.css( elem, name );
+			}
+
+			return setPositiveNumber( elem, value, subtract );
+		}
+	};
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+	function( elem, computed ) {
+		if ( computed ) {
+			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+				elem.getBoundingClientRect().left -
+					swap( elem, { marginLeft: 0 }, function() {
+						return elem.getBoundingClientRect().left;
+					} )
+				) + "px";
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// Assumes a single number if not a string
+				parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+} );
+
+jQuery.fn.extend( {
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( Array.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	}
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || jQuery.easing._default;
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			// Use a property on the element directly when it is not a DOM element,
+			// or when there is no matching style property that exists.
+			if ( tween.elem.nodeType !== 1 ||
+				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// Passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails.
+			// Simple values such as "10px" are parsed to Float;
+			// complex values such as "rotate(1rad)" are returned as-is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+
+			// Use step hook for back compat.
+			// Use cssHook if its there.
+			// Use .style if available and use plain properties where available.
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.nodeType === 1 &&
+				( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
+					jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	},
+	_default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, inProgress,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rrun = /queueHooks$/;
+
+function schedule() {
+	if ( inProgress ) {
+		if ( document.hidden === false && window.requestAnimationFrame ) {
+			window.requestAnimationFrame( schedule );
+		} else {
+			window.setTimeout( schedule, jQuery.fx.interval );
+		}
+
+		jQuery.fx.tick();
+	}
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	window.setTimeout( function() {
+		fxNow = undefined;
+	} );
+	return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		i = 0,
+		attrs = { height: type };
+
+	// If we include width, step value is 1 to do all cssExpand values,
+	// otherwise step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+			// We're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+		isBox = "width" in props || "height" in props,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHiddenWithinTree( elem ),
+		dataShow = dataPriv.get( elem, "fxshow" );
+
+	// Queue-skipping animations hijack the fx hooks
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always( function() {
+
+			// Ensure the complete handler is called before this completes
+			anim.always( function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			} );
+		} );
+	}
+
+	// Detect show/hide animations
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.test( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// Pretend to be hidden if this is a "show" and
+				// there is still data from a stopped show/hide
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+
+				// Ignore all other no-op show/hide data
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+		}
+	}
+
+	// Bail out if this is a no-op like .hide().hide()
+	propTween = !jQuery.isEmptyObject( props );
+	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+		return;
+	}
+
+	// Restrict "overflow" and "display" styles during box animations
+	if ( isBox && elem.nodeType === 1 ) {
+
+		// Support: IE <=9 - 11, Edge 12 - 13
+		// Record all 3 overflow attributes because IE does not infer the shorthand
+		// from identically-valued overflowX and overflowY
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Identify a display type, preferring old show/hide data over the CSS cascade
+		restoreDisplay = dataShow && dataShow.display;
+		if ( restoreDisplay == null ) {
+			restoreDisplay = dataPriv.get( elem, "display" );
+		}
+		display = jQuery.css( elem, "display" );
+		if ( display === "none" ) {
+			if ( restoreDisplay ) {
+				display = restoreDisplay;
+			} else {
+
+				// Get nonempty value(s) by temporarily forcing visibility
+				showHide( [ elem ], true );
+				restoreDisplay = elem.style.display || restoreDisplay;
+				display = jQuery.css( elem, "display" );
+				showHide( [ elem ] );
+			}
+		}
+
+		// Animate inline elements as inline-block
+		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+			if ( jQuery.css( elem, "float" ) === "none" ) {
+
+				// Restore the original display value at the end of pure show/hide animations
+				if ( !propTween ) {
+					anim.done( function() {
+						style.display = restoreDisplay;
+					} );
+					if ( restoreDisplay == null ) {
+						display = style.display;
+						restoreDisplay = display === "none" ? "" : display;
+					}
+				}
+				style.display = "inline-block";
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		anim.always( function() {
+			style.overflow = opts.overflow[ 0 ];
+			style.overflowX = opts.overflow[ 1 ];
+			style.overflowY = opts.overflow[ 2 ];
+		} );
+	}
+
+	// Implement show/hide animations
+	propTween = false;
+	for ( prop in orig ) {
+
+		// General show/hide setup for this element animation
+		if ( !propTween ) {
+			if ( dataShow ) {
+				if ( "hidden" in dataShow ) {
+					hidden = dataShow.hidden;
+				}
+			} else {
+				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+			}
+
+			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+			if ( toggle ) {
+				dataShow.hidden = !hidden;
+			}
+
+			// Show elements before animating them
+			if ( hidden ) {
+				showHide( [ elem ], true );
+			}
+
+			/* eslint-disable no-loop-func */
+
+			anim.done( function() {
+
+			/* eslint-enable no-loop-func */
+
+				// The final step of a "hide" animation is actually hiding the element
+				if ( !hidden ) {
+					showHide( [ elem ] );
+				}
+				dataPriv.remove( elem, "fxshow" );
+				for ( prop in orig ) {
+					jQuery.style( elem, prop, orig[ prop ] );
+				}
+			} );
+		}
+
+		// Per-property setup
+		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+		if ( !( prop in dataShow ) ) {
+			dataShow[ prop ] = propTween.start;
+			if ( hidden ) {
+				propTween.end = propTween.start;
+				propTween.start = 0;
+			}
+		}
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( Array.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// Not quite $.extend, this won't overwrite existing keys.
+			// Reusing 'index' because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = Animation.prefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+
+			// Don't match elem in the :animated selector
+			delete tick.elem;
+		} ),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+				// Support: Android 2.3 only
+				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+			// If there's more to do, yield
+			if ( percent < 1 && length ) {
+				return remaining;
+			}
+
+			// If this was an empty animation, synthesize a final progress notification
+			if ( !length ) {
+				deferred.notifyWith( elem, [ animation, 1, 0 ] );
+			}
+
+			// Resolve the animation and report its conclusion
+			deferred.resolveWith( elem, [ animation ] );
+			return false;
+		},
+		animation = deferred.promise( {
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, {
+				specialEasing: {},
+				easing: jQuery.easing._default
+			}, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+
+					// If we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// Resolve when we played the last frame; otherwise, reject
+				if ( gotoEnd ) {
+					deferred.notifyWith( elem, [ animation, 1, 0 ] );
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		} ),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length; index++ ) {
+		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			if ( jQuery.isFunction( result.stop ) ) {
+				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+					jQuery.proxy( result.stop, result );
+			}
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	// Attach callbacks from options
+	animation
+		.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		} )
+	);
+
+	return animation;
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweeners: {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value );
+			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+			return tween;
+		} ]
+	},
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.match( rnothtmlwhite );
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length; index++ ) {
+			prop = props[ index ];
+			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+			Animation.tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilters: [ defaultPrefilter ],
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			Animation.prefilters.unshift( callback );
+		} else {
+			Animation.prefilters.push( callback );
+		}
+	}
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	// Go to the end state if fx are off
+	if ( jQuery.fx.off ) {
+		opt.duration = 0;
+
+	} else {
+		if ( typeof opt.duration !== "number" ) {
+			if ( opt.duration in jQuery.fx.speeds ) {
+				opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+			} else {
+				opt.duration = jQuery.fx.speeds._default;
+			}
+		}
+	}
+
+	// Normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend( {
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// Show any hidden elements after setting opacity to 0
+		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+			// Animate to the value specified
+			.end().animate( { opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || dataPriv.get( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each( function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = dataPriv.get( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this &&
+					( type == null || timers[ index ].queue === type ) ) {
+
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Start the next in the queue if the last step wasn't forced.
+			// Timers currently will call their complete callbacks, which
+			// will dequeue but only if they were gotoEnd.
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		} );
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each( function() {
+			var index,
+				data = dataPriv.get( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// Enable finishing flag on private data
+			data.finish = true;
+
+			// Empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// Look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// Turn off finishing flag
+			delete data.finish;
+		} );
+	}
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+	slideDown: genFx( "show" ),
+	slideUp: genFx( "hide" ),
+	slideToggle: genFx( "toggle" ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		i = 0,
+		timers = jQuery.timers;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+
+		// Run the timer and safely remove it when done (allowing for external removal)
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	jQuery.fx.start();
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+	if ( inProgress ) {
+		return;
+	}
+
+	inProgress = true;
+	schedule();
+};
+
+jQuery.fx.stop = function() {
+	inProgress = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = window.setTimeout( next, time );
+		hooks.stop = function() {
+			window.clearTimeout( timeout );
+		};
+	} );
+};
+
+
+( function() {
+	var input = document.createElement( "input" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	input.type = "checkbox";
+
+	// Support: Android <=4.3 only
+	// Default value for a checkbox should be "on"
+	support.checkOn = input.value !== "";
+
+	// Support: IE <=11 only
+	// Must access selectedIndex to make default options select
+	support.optSelected = opt.selected;
+
+	// Support: IE <=11 only
+	// An input loses its value after becoming a radio
+	input = document.createElement( "input" );
+	input.value = "t";
+	input.type = "radio";
+	support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+	attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each( function() {
+			jQuery.removeAttr( this, name );
+		} );
+	}
+} );
+
+jQuery.extend( {
+	attr: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set attributes on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// Attribute hooks are determined by the lowercase version
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+		}
+
+		if ( value !== undefined ) {
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+			}
+
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			elem.setAttribute( name, value + "" );
+			return value;
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		ret = jQuery.find.attr( elem, name );
+
+		// Non-existent attributes return null, we normalize to undefined
+		return ret == null ? undefined : ret;
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					nodeName( elem, "input" ) ) {
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name,
+			i = 0,
+
+			// Attribute names can contain non-HTML whitespace characters
+			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+			attrNames = value && value.match( rnothtmlwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( ( name = attrNames[ i++ ] ) ) {
+				elem.removeAttribute( name );
+			}
+		}
+	}
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			elem.setAttribute( name, name );
+		}
+		return name;
+	}
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = function( elem, name, isXML ) {
+		var ret, handle,
+			lowercaseName = name.toLowerCase();
+
+		if ( !isXML ) {
+
+			// Avoid an infinite loop by temporarily removing this function from the getter
+			handle = attrHandle[ lowercaseName ];
+			attrHandle[ lowercaseName ] = ret;
+			ret = getter( elem, name, isXML ) != null ?
+				lowercaseName :
+				null;
+			attrHandle[ lowercaseName ] = handle;
+		}
+		return ret;
+	};
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+	rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		return this.each( function() {
+			delete this[ jQuery.propFix[ name ] || name ];
+		} );
+	}
+} );
+
+jQuery.extend( {
+	prop: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set properties on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			return ( elem[ name ] = value );
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		return elem[ name ];
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+
+				// Support: IE <=9 - 11 only
+				// elem.tabIndex doesn't always return the
+				// correct value when it hasn't been explicitly set
+				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				// Use proper attribute retrieval(#12072)
+				var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+				if ( tabindex ) {
+					return parseInt( tabindex, 10 );
+				}
+
+				if (
+					rfocusable.test( elem.nodeName ) ||
+					rclickable.test( elem.nodeName ) &&
+					elem.href
+				) {
+					return 0;
+				}
+
+				return -1;
+			}
+		}
+	},
+
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	}
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+
+			/* eslint no-unused-expressions: "off" */
+
+			var parent = elem.parentNode;
+			if ( parent && parent.parentNode ) {
+				parent.parentNode.selectedIndex;
+			}
+			return null;
+		},
+		set: function( elem ) {
+
+			/* eslint no-unused-expressions: "off" */
+
+			var parent = elem.parentNode;
+			if ( parent ) {
+				parent.selectedIndex;
+
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	};
+}
+
+jQuery.each( [
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+	// Strip and collapse whitespace according to HTML spec
+	// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
+	function stripAndCollapse( value ) {
+		var tokens = value.match( rnothtmlwhite ) || [];
+		return tokens.join( " " );
+	}
+
+
+function getClass( elem ) {
+	return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+jQuery.fn.extend( {
+	addClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( typeof value === "string" && value ) {
+			classes = value.match( rnothtmlwhite ) || [];
+
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = stripAndCollapse( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( !arguments.length ) {
+			return this.attr( "class", "" );
+		}
+
+		if ( typeof value === "string" && value ) {
+			classes = value.match( rnothtmlwhite ) || [];
+
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = stripAndCollapse( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value;
+
+		if ( typeof stateVal === "boolean" && type === "string" ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).toggleClass(
+					value.call( this, i, getClass( this ), stateVal ),
+					stateVal
+				);
+			} );
+		}
+
+		return this.each( function() {
+			var className, i, self, classNames;
+
+			if ( type === "string" ) {
+
+				// Toggle individual class names
+				i = 0;
+				self = jQuery( this );
+				classNames = value.match( rnothtmlwhite ) || [];
+
+				while ( ( className = classNames[ i++ ] ) ) {
+
+					// Check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( value === undefined || type === "boolean" ) {
+				className = getClass( this );
+				if ( className ) {
+
+					// Store className if set
+					dataPriv.set( this, "__className__", className );
+				}
+
+				// If the element has a class name or if we're passed `false`,
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				if ( this.setAttribute ) {
+					this.setAttribute( "class",
+						className || value === false ?
+						"" :
+						dataPriv.get( this, "__className__" ) || ""
+					);
+				}
+			}
+		} );
+	},
+
+	hasClass: function( selector ) {
+		var className, elem,
+			i = 0;
+
+		className = " " + selector + " ";
+		while ( ( elem = this[ i++ ] ) ) {
+			if ( elem.nodeType === 1 &&
+				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+					return true;
+			}
+		}
+
+		return false;
+	}
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[ 0 ];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] ||
+					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks &&
+					"get" in hooks &&
+					( ret = hooks.get( elem, "value" ) ) !== undefined
+				) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				// Handle most common string cases
+				if ( typeof ret === "string" ) {
+					return ret.replace( rreturn, "" );
+				}
+
+				// Handle cases where value is null/undef or number
+				return ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each( function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+
+			} else if ( typeof val === "number" ) {
+				val += "";
+
+			} else if ( Array.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				} );
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		} );
+	}
+} );
+
+jQuery.extend( {
+	valHooks: {
+		option: {
+			get: function( elem ) {
+
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+
+					// Support: IE <=10 - 11 only
+					// option.text throws exceptions (#14686, #14858)
+					// Strip and collapse whitespace
+					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+					stripAndCollapse( jQuery.text( elem ) );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option, i,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one",
+					values = one ? null : [],
+					max = one ? index + 1 : options.length;
+
+				if ( index < 0 ) {
+					i = max;
+
+				} else {
+					i = one ? index : 0;
+				}
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// Support: IE <=9 only
+					// IE8-9 doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+
+							// Don't return options that are disabled or in a disabled optgroup
+							!option.disabled &&
+							( !option.parentNode.disabled ||
+								!nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+
+					/* eslint-disable no-cond-assign */
+
+					if ( option.selected =
+						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+					) {
+						optionSet = true;
+					}
+
+					/* eslint-enable no-cond-assign */
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	}
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( Array.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+		};
+	}
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
+
+jQuery.extend( jQuery.event, {
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "." ) > -1 ) {
+
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split( "." );
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join( "." );
+		event.rnamespace = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === ( elem.ownerDocument || document ) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+				dataPriv.get( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( ( !special._default ||
+				special._default.apply( eventPath.pop(), data ) === false ) &&
+				acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name as the event.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					elem[ type ]();
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	// Piggyback on a donor event to simulate a different one
+	// Used only for `focus(in | out)` events
+	simulate: function( type, elem, event ) {
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true
+			}
+		);
+
+		jQuery.event.trigger( e, null, elem );
+	}
+
+} );
+
+jQuery.fn.extend( {
+
+	trigger: function( type, data ) {
+		return this.each( function() {
+			jQuery.event.trigger( type, data, this );
+		} );
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[ 0 ];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+} );
+
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
+	function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+} );
+
+jQuery.fn.extend( {
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+} );
+
+
+
+
+support.focusin = "onfocusin" in window;
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+		};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				var doc = this.ownerDocument || this,
+					attaches = dataPriv.access( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this,
+					attaches = dataPriv.access( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					dataPriv.remove( doc, fix );
+
+				} else {
+					dataPriv.access( doc, fix, attaches );
+				}
+			}
+		};
+	} );
+}
+var location = window.location;
+
+var nonce = jQuery.now();
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+
+	// Support: IE 9 - 11 only
+	// IE throws on parseFromString with invalid input.
+	try {
+		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+	} catch ( e ) {
+		xml = undefined;
+	}
+
+	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( Array.isArray( obj ) ) {
+
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams(
+					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+					v,
+					traditional,
+					add
+				);
+			}
+		} );
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, valueOrFunction ) {
+
+			// If value is a function, invoke it and use its return value
+			var value = jQuery.isFunction( valueOrFunction ) ?
+				valueOrFunction() :
+				valueOrFunction;
+
+			s[ s.length ] = encodeURIComponent( key ) + "=" +
+				encodeURIComponent( value == null ? "" : value );
+		};
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		} );
+
+	} else {
+
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map( function() {
+
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		} )
+		.filter( function() {
+			var type = this.type;
+
+			// Use .is( ":disabled" ) so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		} )
+		.map( function( i, elem ) {
+			var val = jQuery( this ).val();
+
+			if ( val == null ) {
+				return null;
+			}
+
+			if ( Array.isArray( val ) ) {
+				return jQuery.map( val, function( val ) {
+					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+				} );
+			}
+
+			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		} ).get();
+	}
+} );
+
+
+var
+	r20 = /%20/g,
+	rhash = /#.*$/,
+	rantiCache = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Anchor tag for parsing the document origin
+	originAnchor = document.createElement( "a" );
+	originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+
+			// For each dataType in the dataTypeExpression
+			while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+				// Prepend if requested
+				if ( dataType[ 0 ] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+				// Otherwise append
+				} else {
+					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" &&
+				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		} );
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+			// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s.throws ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return {
+								state: "parsererror",
+								error: conv ? e : "No conversion from " + prev + " to " + current
+							};
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: location.href,
+		type: "GET",
+		isLocal: rlocalProtocol.test( location.protocol ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /\bxml\b/,
+			html: /\bhtml/,
+			json: /\bjson\b/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": JSON.parse,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+
+			// URL without anti-cache param
+			cacheURL,
+
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+
+			// timeout handle
+			timeoutTimer,
+
+			// Url cleanup var
+			urlAnchor,
+
+			// Request state (becomes false upon send and true upon completion)
+			completed,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			// Loop variable
+			i,
+
+			// uncached part of the url
+			uncached,
+
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+
+			// Callbacks context
+			callbackContext = s.context || s,
+
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context &&
+				( callbackContext.nodeType || callbackContext.jquery ) ?
+					jQuery( callbackContext ) :
+					jQuery.event,
+
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+
+			// Default abort message
+			strAbort = "canceled",
+
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( completed ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return completed ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( completed == null ) {
+						name = requestHeadersNames[ name.toLowerCase() ] =
+							requestHeadersNames[ name.toLowerCase() ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( completed == null ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( completed ) {
+
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						} else {
+
+							// Lazy-add the new callbacks in a way that preserves old ones
+							for ( code in map ) {
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || location.href ) + "" )
+			.replace( rprotocol, location.protocol + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
+
+		// A cross-domain request is in order when the origin doesn't match the current origin.
+		if ( s.crossDomain == null ) {
+			urlAnchor = document.createElement( "a" );
+
+			// Support: IE <=8 - 11, Edge 12 - 13
+			// IE throws exception on accessing the href property if url is malformed,
+			// e.g. http://example.com:80x/
+			try {
+				urlAnchor.href = s.url;
+
+				// Support: IE <=8 - 11 only
+				// Anchor's host property isn't correctly set when s.url is relative
+				urlAnchor.href = urlAnchor.href;
+				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+					urlAnchor.protocol + "//" + urlAnchor.host;
+			} catch ( e ) {
+
+				// If there is an error parsing the URL, assume it is crossDomain,
+				// it can be rejected by the transport if it is invalid
+				s.crossDomain = true;
+			}
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( completed ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		// Remove hash to simplify url manipulation
+		cacheURL = s.url.replace( rhash, "" );
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// Remember the hash so we can put it back
+			uncached = s.url.slice( cacheURL.length );
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add or update anti-cache param if needed
+			if ( s.cache === false ) {
+				cacheURL = cacheURL.replace( rantiCache, "$1" );
+				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
+			}
+
+			// Put hash and anti-cache on the URL that will be requested (gh-1732)
+			s.url = cacheURL + uncached;
+
+		// Change '%20' to '+' if this is encoded form body content (gh-2658)
+		} else if ( s.data && s.processData &&
+			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+			s.data = s.data.replace( r20, "+" );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+				s.accepts[ s.dataTypes[ 0 ] ] +
+					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend &&
+			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// Aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		completeDeferred.add( s.complete );
+		jqXHR.done( s.success );
+		jqXHR.fail( s.error );
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+
+			// If request was aborted inside ajaxSend, stop there
+			if ( completed ) {
+				return jqXHR;
+			}
+
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = window.setTimeout( function() {
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				completed = false;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+
+				// Rethrow post-completion exceptions
+				if ( completed ) {
+					throw e;
+				}
+
+				// Propagate others as results
+				done( -1, e );
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Ignore repeat invocations
+			if ( completed ) {
+				return;
+			}
+
+			completed = true;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				window.clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader( "Last-Modified" );
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader( "etag" );
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+
+				// Extract error from statusText and normalize for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+
+		// Shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		// The url can be an options object (which then must have .url)
+		return jQuery.ajax( jQuery.extend( {
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		}, jQuery.isPlainObject( url ) && url ) );
+	};
+} );
+
+
+jQuery._evalUrl = function( url ) {
+	return jQuery.ajax( {
+		url: url,
+
+		// Make this explicit, since user can override this through ajaxSetup (#11264)
+		type: "GET",
+		dataType: "script",
+		cache: true,
+		async: false,
+		global: false,
+		"throws": true
+	} );
+};
+
+
+jQuery.fn.extend( {
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( this[ 0 ] ) {
+			if ( jQuery.isFunction( html ) ) {
+				html = html.call( this[ 0 ] );
+			}
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map( function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			} ).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapInner( html.call( this, i ) );
+			} );
+		}
+
+		return this.each( function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		} );
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each( function( i ) {
+			jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
+		} );
+	},
+
+	unwrap: function( selector ) {
+		this.parent( selector ).not( "body" ).each( function() {
+			jQuery( this ).replaceWith( this.childNodes );
+		} );
+		return this;
+	}
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+	return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+		// File protocol always yields status code 0, assume 200
+		0: 200,
+
+		// Support: IE <=9 only
+		// #1450: sometimes IE returns 1223 when it should be 204
+		1223: 204
+	},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+	var callback, errorCallback;
+
+	// Cross domain only allowed if supported through XMLHttpRequest
+	if ( support.cors || xhrSupported && !options.crossDomain ) {
+		return {
+			send: function( headers, complete ) {
+				var i,
+					xhr = options.xhr();
+
+				xhr.open(
+					options.type,
+					options.url,
+					options.async,
+					options.username,
+					options.password
+				);
+
+				// Apply custom fields if provided
+				if ( options.xhrFields ) {
+					for ( i in options.xhrFields ) {
+						xhr[ i ] = options.xhrFields[ i ];
+					}
+				}
+
+				// Override mime type if needed
+				if ( options.mimeType && xhr.overrideMimeType ) {
+					xhr.overrideMimeType( options.mimeType );
+				}
+
+				// X-Requested-With header
+				// For cross-domain requests, seeing as conditions for a preflight are
+				// akin to a jigsaw puzzle, we simply never set it to be sure.
+				// (it can always be set on a per-request basis or even using ajaxSetup)
+				// For same-domain requests, won't change header if already provided.
+				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+					headers[ "X-Requested-With" ] = "XMLHttpRequest";
+				}
+
+				// Set headers
+				for ( i in headers ) {
+					xhr.setRequestHeader( i, headers[ i ] );
+				}
+
+				// Callback
+				callback = function( type ) {
+					return function() {
+						if ( callback ) {
+							callback = errorCallback = xhr.onload =
+								xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
+
+							if ( type === "abort" ) {
+								xhr.abort();
+							} else if ( type === "error" ) {
+
+								// Support: IE <=9 only
+								// On a manual native abort, IE9 throws
+								// errors on any property access that is not readyState
+								if ( typeof xhr.status !== "number" ) {
+									complete( 0, "error" );
+								} else {
+									complete(
+
+										// File: protocol always yields status 0; see #8605, #14207
+										xhr.status,
+										xhr.statusText
+									);
+								}
+							} else {
+								complete(
+									xhrSuccessStatus[ xhr.status ] || xhr.status,
+									xhr.statusText,
+
+									// Support: IE <=9 only
+									// IE9 has no XHR2 but throws on binary (trac-11426)
+									// For XHR2 non-text, let the caller handle it (gh-2498)
+									( xhr.responseType || "text" ) !== "text"  ||
+									typeof xhr.responseText !== "string" ?
+										{ binary: xhr.response } :
+										{ text: xhr.responseText },
+									xhr.getAllResponseHeaders()
+								);
+							}
+						}
+					};
+				};
+
+				// Listen to events
+				xhr.onload = callback();
+				errorCallback = xhr.onerror = callback( "error" );
+
+				// Support: IE 9 only
+				// Use onreadystatechange to replace onabort
+				// to handle uncaught aborts
+				if ( xhr.onabort !== undefined ) {
+					xhr.onabort = errorCallback;
+				} else {
+					xhr.onreadystatechange = function() {
+
+						// Check readyState before timeout as it changes
+						if ( xhr.readyState === 4 ) {
+
+							// Allow onerror to be called first,
+							// but that will not handle a native abort
+							// Also, save errorCallback to a variable
+							// as xhr.onerror cannot be accessed
+							window.setTimeout( function() {
+								if ( callback ) {
+									errorCallback();
+								}
+							} );
+						}
+					};
+				}
+
+				// Create the abort callback
+				callback = callback( "abort" );
+
+				try {
+
+					// Do send the request (this may raise an exception)
+					xhr.send( options.hasContent && options.data || null );
+				} catch ( e ) {
+
+					// #14683: Only rethrow if this hasn't been notified as an error yet
+					if ( callback ) {
+						throw e;
+					}
+				}
+			},
+
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+	if ( s.crossDomain ) {
+		s.contents.script = false;
+	}
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+	accepts: {
+		script: "text/javascript, application/javascript, " +
+			"application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /\b(?:java|ecma)script\b/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+	}
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+		var script, callback;
+		return {
+			send: function( _, complete ) {
+				script = jQuery( "<script>" ).prop( {
+					charset: s.scriptCharset,
+					src: s.url
+				} ).on(
+					"load error",
+					callback = function( evt ) {
+						script.remove();
+						callback = null;
+						if ( evt ) {
+							complete( evt.type === "error" ? 404 : 200, evt.type );
+						}
+					}
+				);
+
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				document.head.appendChild( script[ 0 ] );
+			},
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" &&
+				( s.contentType || "" )
+					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+				rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters[ "script json" ] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// Force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always( function() {
+
+			// If previous value didn't exist - remove it
+			if ( overwritten === undefined ) {
+				jQuery( window ).removeProp( callbackName );
+
+			// Otherwise restore preexisting value
+			} else {
+				window[ callbackName ] = overwritten;
+			}
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+
+				// Make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// Save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		} );
+
+		// Delegate to script
+		return "script";
+	}
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+	var body = document.implementation.createHTMLDocument( "" ).body;
+	body.innerHTML = "<form></form><form></form>";
+	return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( typeof data !== "string" ) {
+		return [];
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+
+	var base, parsed, scripts;
+
+	if ( !context ) {
+
+		// Stop scripts or inline event handlers from being executed immediately
+		// by using document.implementation
+		if ( support.createHTMLDocument ) {
+			context = document.implementation.createHTMLDocument( "" );
+
+			// Set the base href for the created document
+			// so any parsed elements with URLs
+			// are based on the document's URL (gh-2965)
+			base = context.createElement( "base" );
+			base.href = document.location.href;
+			context.head.appendChild( base );
+		} else {
+			context = document;
+		}
+	}
+
+	parsed = rsingleTag.exec( data );
+	scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[ 1 ] ) ];
+	}
+
+	parsed = buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	var selector, type, response,
+		self = this,
+		off = url.indexOf( " " );
+
+	if ( off > -1 ) {
+		selector = stripAndCollapse( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax( {
+			url: url,
+
+			// If "type" variable is undefined, then "GET" method will be used.
+			// Make value of this field explicit since
+			// user can override it through ajaxSetup method
+			type: type || "GET",
+			dataType: "html",
+			data: params
+		} ).done( function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		// If the request succeeds, this function gets "data", "status", "jqXHR"
+		// but they are ignored because response was set above.
+		// If it fails, this function gets "jqXHR", "status", "error"
+		} ).always( callback && function( jqXHR, status ) {
+			self.each( function() {
+				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+			} );
+		} );
+	}
+
+	return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [
+	"ajaxStart",
+	"ajaxStop",
+	"ajaxComplete",
+	"ajaxError",
+	"ajaxSuccess",
+	"ajaxSend"
+], function( i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+} );
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+	return jQuery.grep( jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	} ).length;
+};
+
+
+
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// Set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+		// Need to be able to calculate position if either
+		// top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+
+			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend( {
+	offset: function( options ) {
+
+		// Preserve chaining for setter
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each( function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				} );
+		}
+
+		var doc, docElem, rect, win,
+			elem = this[ 0 ];
+
+		if ( !elem ) {
+			return;
+		}
+
+		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+		// Support: IE <=11 only
+		// Running getBoundingClientRect on a
+		// disconnected node in IE throws an error
+		if ( !elem.getClientRects().length ) {
+			return { top: 0, left: 0 };
+		}
+
+		rect = elem.getBoundingClientRect();
+
+		doc = elem.ownerDocument;
+		docElem = doc.documentElement;
+		win = doc.defaultView;
+
+		return {
+			top: rect.top + win.pageYOffset - docElem.clientTop,
+			left: rect.left + win.pageXOffset - docElem.clientLeft
+		};
+	},
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+		// because it is its only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+			// Assume getBoundingClientRect is there when computed position is fixed
+			offset = elem.getBoundingClientRect();
+
+		} else {
+
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset = {
+				top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
+				left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
+			};
+		}
+
+		// Subtract parent offsets and element margins
+		return {
+			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	// This method will return documentElement in the following cases:
+	// 1) For the element inside the iframe without offsetParent, this method will return
+	//    documentElement of the parent window
+	// 2) For the hidden or detached element
+	// 3) For body or html element, i.e. in case of the html node - it will return itself
+	//
+	// but those exceptions were never presented as a real life use-cases
+	// and might be considered as more preferable results.
+	//
+	// This logic, however, is not guaranteed and can change at any point in the future
+	offsetParent: function() {
+		return this.map( function() {
+			var offsetParent = this.offsetParent;
+
+			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+
+			return offsetParent || documentElement;
+		} );
+	}
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = "pageYOffset" === prop;
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+
+			// Coalesce documents and windows
+			var win;
+			if ( jQuery.isWindow( elem ) ) {
+				win = elem;
+			} else if ( elem.nodeType === 9 ) {
+				win = elem.defaultView;
+			}
+
+			if ( val === undefined ) {
+				return win ? win[ prop ] : elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : win.pageXOffset,
+					top ? val : win.pageYOffset
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length );
+	};
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+
+				// If curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+		function( defaultExtra, funcName ) {
+
+		// Margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+
+					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+					return funcName.indexOf( "outer" ) === 0 ?
+						elem[ "inner" + name ] :
+						elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable );
+		};
+	} );
+} );
+
+
+jQuery.fn.extend( {
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ?
+			this.off( selector, "**" ) :
+			this.off( types, selector || "**", fn );
+	}
+} );
+
+jQuery.holdReady = function( hold ) {
+	if ( hold ) {
+		jQuery.readyWait++;
+	} else {
+		jQuery.ready( true );
+	}
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	} );
+}
+
+
+
+
+var
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+} );
+</script> 
+  <script>/* FileSaver.js
+ * A saveAs() FileSaver implementation.
+ * 1.3.2
+ * 2016-06-16 18:25:19
+ *
+ * By Eli Grey, http://eligrey.com
+ * License: MIT
+ *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
+ */
+
+/*global self */
+/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
+
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
+
+var saveAs = saveAs || (function(view) {
+	"use strict";
+	// IE <10 is explicitly unsupported
+	if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
+		return;
+	}
+	var
+		  doc = view.document
+		  // only get URL when necessary in case Blob.js hasn't overridden it yet
+		, get_URL = function() {
+			return view.URL || view.webkitURL || view;
+		}
+		, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
+		, can_use_save_link = "download" in save_link
+		, click = function(node) {
+			var event = new MouseEvent("click");
+			node.dispatchEvent(event);
+		}
+		, is_safari = /constructor/i.test(view.HTMLElement) || view.safari
+		, is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent)
+		, throw_outside = function(ex) {
+			(view.setImmediate || view.setTimeout)(function() {
+				throw ex;
+			}, 0);
+		}
+		, force_saveable_type = "application/octet-stream"
+		// the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to
+		, arbitrary_revoke_timeout = 1000 * 40 // in ms
+		, revoke = function(file) {
+			var revoker = function() {
+				if (typeof file === "string") { // file is an object URL
+					get_URL().revokeObjectURL(file);
+				} else { // file is a File
+					file.remove();
+				}
+			};
+			setTimeout(revoker, arbitrary_revoke_timeout);
+		}
+		, dispatch = function(filesaver, event_types, event) {
+			event_types = [].concat(event_types);
+			var i = event_types.length;
+			while (i--) {
+				var listener = filesaver["on" + event_types[i]];
+				if (typeof listener === "function") {
+					try {
+						listener.call(filesaver, event || filesaver);
+					} catch (ex) {
+						throw_outside(ex);
+					}
+				}
+			}
+		}
+		, auto_bom = function(blob) {
+			// prepend BOM for UTF-8 XML and text/* types (including HTML)
+			// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
+			if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
+				return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});
+			}
+			return blob;
+		}
+		, FileSaver = function(blob, name, no_auto_bom) {
+			if (!no_auto_bom) {
+				blob = auto_bom(blob);
+			}
+			// First try a.download, then web filesystem, then object URLs
+			var
+				  filesaver = this
+				, type = blob.type
+				, force = type === force_saveable_type
+				, object_url
+				, dispatch_all = function() {
+					dispatch(filesaver, "writestart progress write writeend".split(" "));
+				}
+				// on any filesys errors revert to saving with object URLs
+				, fs_error = function() {
+					if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {
+						// Safari doesn't allow downloading of blob urls
+						var reader = new FileReader();
+						reader.onloadend = function() {
+							var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');
+							var popup = view.open(url, '_blank');
+							if(!popup) view.location.href = url;
+							url=undefined; // release reference before dispatching
+							filesaver.readyState = filesaver.DONE;
+							dispatch_all();
+						};
+						reader.readAsDataURL(blob);
+						filesaver.readyState = filesaver.INIT;
+						return;
+					}
+					// don't create more object URLs than needed
+					if (!object_url) {
+						object_url = get_URL().createObjectURL(blob);
+					}
+					if (force) {
+						view.location.href = object_url;
+					} else {
+						var opened = view.open(object_url, "_blank");
+						if (!opened) {
+							// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html
+							view.location.href = object_url;
+						}
+					}
+					filesaver.readyState = filesaver.DONE;
+					dispatch_all();
+					revoke(object_url);
+				}
+			;
+			filesaver.readyState = filesaver.INIT;
+
+			if (can_use_save_link) {
+				object_url = get_URL().createObjectURL(blob);
+				setTimeout(function() {
+					save_link.href = object_url;
+					save_link.download = name;
+					click(save_link);
+					dispatch_all();
+					revoke(object_url);
+					filesaver.readyState = filesaver.DONE;
+				});
+				return;
+			}
+
+			fs_error();
+		}
+		, FS_proto = FileSaver.prototype
+		, saveAs = function(blob, name, no_auto_bom) {
+			return new FileSaver(blob, name || blob.name || "download", no_auto_bom);
+		}
+	;
+	// IE 10+ (native saveAs)
+	if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
+		return function(blob, name, no_auto_bom) {
+			name = name || blob.name || "download";
+
+			if (!no_auto_bom) {
+				blob = auto_bom(blob);
+			}
+			return navigator.msSaveOrOpenBlob(blob, name);
+		};
+	}
+
+	FS_proto.abort = function(){};
+	FS_proto.readyState = FS_proto.INIT = 0;
+	FS_proto.WRITING = 1;
+	FS_proto.DONE = 2;
+
+	FS_proto.error =
+	FS_proto.onwritestart =
+	FS_proto.onprogress =
+	FS_proto.onwrite =
+	FS_proto.onabort =
+	FS_proto.onerror =
+	FS_proto.onwriteend =
+		null;
+
+	return saveAs;
+}(
+	   typeof self !== "undefined" && self
+	|| typeof window !== "undefined" && window
+	|| this.content
+));
+// `self` is undefined in Firefox for Android content script context
+// while `this` is nsIContentFrameMessageManager
+// with an attribute `content` that corresponds to the window
+
+if (typeof module !== "undefined" && module.exports) {
+  module.exports.saveAs = saveAs;
+} else if ((typeof define !== "undefined" && define !== null) && (define.amd !== null)) {
+  define("FileSaver.js", function() {
+    return saveAs;
+  });
+}
+</script> 
+  <script>var URI=function(){function parse(uriStr){var m=(""+uriStr).match(URI_RE_);if(!m){return null}return new URI(nullIfAbsent(m[1]),nullIfAbsent(m[2]),nullIfAbsent(m[3]),nullIfAbsent(m[4]),nullIfAbsent(m[5]),nullIfAbsent(m[6]),nullIfAbsent(m[7]))}function create(scheme,credentials,domain,port,path,query,fragment){var uri=new URI(encodeIfExists2(scheme,URI_DISALLOWED_IN_SCHEME_OR_CREDENTIALS_),encodeIfExists2(credentials,URI_DISALLOWED_IN_SCHEME_OR_CREDENTIALS_),encodeIfExists(domain),port>0?port.toString():null,encodeIfExists2(path,URI_DISALLOWED_IN_PATH_),null,encodeIfExists(fragment));if(query){if("string"===typeof query){uri.setRawQuery(query.replace(/[^?&=0-9A-Za-z_\-~.%]/g,encodeOne))}else{uri.setAllParameters(query)}}return uri}function encodeIfExists(unescapedPart){if("string"==typeof unescapedPart){return encodeURIComponent(unescapedPart)}return null}function encodeIfExists2(unescapedPart,extra){if("string"==typeof unescapedPart){return encodeURI(unescapedPart).replace(extra,encodeOne)}return null}function encodeOne(ch){var n=ch.charCodeAt(0);return"%"+"0123456789ABCDEF".charAt(n>>4&15)+"0123456789ABCDEF".charAt(n&15)}function normPath(path){return path.replace(/(^|\/)\.(?:\/|$)/g,"$1").replace(/\/{2,}/g,"/")}var PARENT_DIRECTORY_HANDLER=new RegExp(""+"(/|^)"+"(?:[^./][^/]*|\\.{2,}(?:[^./][^/]*)|\\.{3,}[^/]*)"+"/\\.\\.(?:/|$)");var PARENT_DIRECTORY_HANDLER_RE=new RegExp(PARENT_DIRECTORY_HANDLER);var EXTRA_PARENT_PATHS_RE=/^(?:\.\.\/)*(?:\.\.$)?/;function collapse_dots(path){if(path===null){return null}var p=normPath(path);var r=PARENT_DIRECTORY_HANDLER_RE;for(var q;(q=p.replace(r,"$1"))!=p;p=q){}return p}function resolve(baseUri,relativeUri){var absoluteUri=baseUri.clone();var overridden=relativeUri.hasScheme();if(overridden){absoluteUri.setRawScheme(relativeUri.getRawScheme())}else{overridden=relativeUri.hasCredentials()}if(overridden){absoluteUri.setRawCredentials(relativeUri.getRawCredentials())}else{overridden=relativeUri.hasDomain()}if(overridden){absoluteUri.setRawDomain(relativeUri.getRawDomain())}else{overridden=relativeUri.hasPort()}var rawPath=relativeUri.getRawPath();var simplifiedPath=collapse_dots(rawPath);if(overridden){absoluteUri.setPort(relativeUri.getPort());simplifiedPath=simplifiedPath&&simplifiedPath.replace(EXTRA_PARENT_PATHS_RE,"")}else{overridden=!!rawPath;if(overridden){if(simplifiedPath.charCodeAt(0)!==47){var absRawPath=collapse_dots(absoluteUri.getRawPath()||"").replace(EXTRA_PARENT_PATHS_RE,"");var slash=absRawPath.lastIndexOf("/")+1;simplifiedPath=collapse_dots((slash?absRawPath.substring(0,slash):"")+collapse_dots(rawPath)).replace(EXTRA_PARENT_PATHS_RE,"")}}else{simplifiedPath=simplifiedPath&&simplifiedPath.replace(EXTRA_PARENT_PATHS_RE,"");if(simplifiedPath!==rawPath){absoluteUri.setRawPath(simplifiedPath)}}}if(overridden){absoluteUri.setRawPath(simplifiedPath)}else{overridden=relativeUri.hasQuery()}if(overridden){absoluteUri.setRawQuery(relativeUri.getRawQuery())}else{overridden=relativeUri.hasFragment()}if(overridden){absoluteUri.setRawFragment(relativeUri.getRawFragment())}return absoluteUri}function URI(rawScheme,rawCredentials,rawDomain,port,rawPath,rawQuery,rawFragment){this.scheme_=rawScheme;this.credentials_=rawCredentials;this.domain_=rawDomain;this.port_=port;this.path_=rawPath;this.query_=rawQuery;this.fragment_=rawFragment;this.paramCache_=null}URI.prototype.toString=function(){var out=[];if(null!==this.scheme_){out.push(this.scheme_,":")}if(null!==this.domain_){out.push("//");if(null!==this.credentials_){out.push(this.credentials_,"@")}out.push(this.domain_);if(null!==this.port_){out.push(":",this.port_.toString())}}if(null!==this.path_){out.push(this.path_)}if(null!==this.query_){out.push("?",this.query_)}if(null!==this.fragment_){out.push("#",this.fragment_)}return out.join("")};URI.prototype.clone=function(){return new URI(this.scheme_,this.credentials_,this.domain_,this.port_,this.path_,this.query_,this.fragment_)};URI.prototype.getScheme=function(){return this.scheme_&&decodeURIComponent(this.scheme_).toLowerCase()};URI.prototype.getRawScheme=function(){return this.scheme_};URI.prototype.setScheme=function(newScheme){this.scheme_=encodeIfExists2(newScheme,URI_DISALLOWED_IN_SCHEME_OR_CREDENTIALS_);return this};URI.prototype.setRawScheme=function(newScheme){this.scheme_=newScheme?newScheme:null;return this};URI.prototype.hasScheme=function(){return null!==this.scheme_};URI.prototype.getCredentials=function(){return this.credentials_&&decodeURIComponent(this.credentials_)};URI.prototype.getRawCredentials=function(){return this.credentials_};URI.prototype.setCredentials=function(newCredentials){this.credentials_=encodeIfExists2(newCredentials,URI_DISALLOWED_IN_SCHEME_OR_CREDENTIALS_);return this};URI.prototype.setRawCredentials=function(newCredentials){this.credentials_=newCredentials?newCredentials:null;return this};URI.prototype.hasCredentials=function(){return null!==this.credentials_};URI.prototype.getDomain=function(){return this.domain_&&decodeURIComponent(this.domain_)};URI.prototype.getRawDomain=function(){return this.domain_};URI.prototype.setDomain=function(newDomain){return this.setRawDomain(newDomain&&encodeURIComponent(newDomain))};URI.prototype.setRawDomain=function(newDomain){this.domain_=newDomain?newDomain:null;return this.setRawPath(this.path_)};URI.prototype.hasDomain=function(){return null!==this.domain_};URI.prototype.getPort=function(){return this.port_&&decodeURIComponent(this.port_)};URI.prototype.setPort=function(newPort){if(newPort){newPort=Number(newPort);if(newPort!==(newPort&65535)){throw new Error("Bad port number "+newPort)}this.port_=""+newPort}else{this.port_=null}return this};URI.prototype.hasPort=function(){return null!==this.port_};URI.prototype.getPath=function(){return this.path_&&decodeURIComponent(this.path_)};URI.prototype.getRawPath=function(){return this.path_};URI.prototype.setPath=function(newPath){return this.setRawPath(encodeIfExists2(newPath,URI_DISALLOWED_IN_PATH_))};URI.prototype.setRawPath=function(newPath){if(newPath){newPath=String(newPath);this.path_=!this.domain_||/^\//.test(newPath)?newPath:"/"+newPath}else{this.path_=null}return this};URI.prototype.hasPath=function(){return null!==this.path_};URI.prototype.getQuery=function(){return this.query_&&decodeURIComponent(this.query_).replace(/\+/g," ")};URI.prototype.getRawQuery=function(){return this.query_};URI.prototype.setQuery=function(newQuery){this.paramCache_=null;this.query_=encodeIfExists(newQuery);return this};URI.prototype.setRawQuery=function(newQuery){this.paramCache_=null;this.query_=newQuery?newQuery:null;return this};URI.prototype.hasQuery=function(){return null!==this.query_};URI.prototype.setAllParameters=function(params){if(typeof params==="object"){if(!(params instanceof Array)&&(params instanceof Object||Object.prototype.toString.call(params)!=="[object Array]")){var newParams=[];var i=-1;for(var k in params){var v=params[k];if("string"===typeof v){newParams[++i]=k;newParams[++i]=v}}params=newParams}}this.paramCache_=null;var queryBuf=[];var separator="";for(var j=0;j<params.length;){var k=params[j++];var v=params[j++];queryBuf.push(separator,encodeURIComponent(k.toString()));separator="&";if(v){queryBuf.push("=",encodeURIComponent(v.toString()))}}this.query_=queryBuf.join("");return this};URI.prototype.checkParameterCache_=function(){if(!this.paramCache_){var q=this.query_;if(!q){this.paramCache_=[]}else{var cgiParams=q.split(/[&\?]/);var out=[];var k=-1;for(var i=0;i<cgiParams.length;++i){var m=cgiParams[i].match(/^([^=]*)(?:=(.*))?$/);out[++k]=decodeURIComponent(m[1]).replace(/\+/g," ");out[++k]=decodeURIComponent(m[2]||"").replace(/\+/g," ")}this.paramCache_=out}}};URI.prototype.setParameterValues=function(key,values){if(typeof values==="string"){values=[values]}this.checkParameterCache_();var newValueIndex=0;var pc=this.paramCache_;var params=[];for(var i=0,k=0;i<pc.length;i+=2){if(key===pc[i]){if(newValueIndex<values.length){params.push(key,values[newValueIndex++])}}else{params.push(pc[i],pc[i+1])}}while(newValueIndex<values.length){params.push(key,values[newValueIndex++])}this.setAllParameters(params);return this};URI.prototype.removeParameter=function(key){return this.setParameterValues(key,[])};URI.prototype.getAllParameters=function(){this.checkParameterCache_();return this.paramCache_.slice(0,this.paramCache_.length)};URI.prototype.getParameterValues=function(paramNameUnescaped){this.checkParameterCache_();var values=[];for(var i=0;i<this.paramCache_.length;i+=2){if(paramNameUnescaped===this.paramCache_[i]){values.push(this.paramCache_[i+1])}}return values};URI.prototype.getParameterMap=function(paramNameUnescaped){this.checkParameterCache_();var paramMap={};for(var i=0;i<this.paramCache_.length;i+=2){var key=this.paramCache_[i++],value=this.paramCache_[i++];if(!(key in paramMap)){paramMap[key]=[value]}else{paramMap[key].push(value)}}return paramMap};URI.prototype.getParameterValue=function(paramNameUnescaped){this.checkParameterCache_();for(var i=0;i<this.paramCache_.length;i+=2){if(paramNameUnescaped===this.paramCache_[i]){return this.paramCache_[i+1]}}return null};URI.prototype.getFragment=function(){return this.fragment_&&decodeURIComponent(this.fragment_)};URI.prototype.getRawFragment=function(){return this.fragment_};URI.prototype.setFragment=function(newFragment){this.fragment_=newFragment?encodeURIComponent(newFragment):null;return this};URI.prototype.setRawFragment=function(newFragment){this.fragment_=newFragment?newFragment:null;return this};URI.prototype.hasFragment=function(){return null!==this.fragment_};function nullIfAbsent(matchPart){return"string"==typeof matchPart&&matchPart.length>0?matchPart:null}var URI_RE_=new RegExp("^"+"(?:"+"([^:/?#]+)"+":)?"+"(?://"+"(?:([^/?#]*)@)?"+"([^/?#:@]*)"+"(?::([0-9]+))?"+")?"+"([^?#]+)?"+"(?:\\?([^#]*))?"+"(?:#(.*))?"+"$");var URI_DISALLOWED_IN_SCHEME_OR_CREDENTIALS_=/[#\/\?@]/g;var URI_DISALLOWED_IN_PATH_=/[\#\?]/g;URI.parse=parse;URI.create=create;URI.resolve=resolve;URI.collapse_dots=collapse_dots;URI.utils={mimeTypeOf:function(uri){var uriObj=parse(uri);if(/\.html$/.test(uriObj.getPath())){return"text/html"}else{return"application/javascript"}},resolve:function(base,uri){if(base){return resolve(parse(base),parse(uri)).toString()}else{return""+uri}}};return URI}();if(typeof window!=="undefined"){window["URI"]=URI}var html4={};html4.atype={NONE:0,URI:1,URI_FRAGMENT:11,SCRIPT:2,STYLE:3,HTML:12,ID:4,IDREF:5,IDREFS:6,GLOBAL_NAME:7,LOCAL_NAME:8,CLASSES:9,FRAME_TARGET:10,MEDIA_QUERY:13};html4["atype"]=html4.atype;html4.ATTRIBS={"*::class":9,"*::dir":0,"*::draggable":0,"*::hidden":0,"*::id":4,"*::inert":0,"*::itemprop":0,"*::itemref":6,"*::itemscope":0,"*::lang":0,"*::onblur":2,"*::onchange":2,"*::onclick":2,"*::ondblclick":2,"*::onerror":2,"*::onfocus":2,"*::onkeydown":2,"*::onkeypress":2,"*::onkeyup":2,"*::onload":2,"*::onmousedown":2,"*::onmousemove":2,"*::onmouseout":2,"*::onmouseover":2,"*::onmouseup":2,"*::onreset":2,"*::onscroll":2,"*::onselect":2,"*::onsubmit":2,"*::ontouchcancel":2,"*::ontouchend":2,"*::ontouchenter":2,"*::ontouchleave":2,"*::ontouchmove":2,"*::ontouchstart":2,"*::onunload":2,"*::spellcheck":0,"*::style":3,"*::tabindex":0,"*::title":0,"*::translate":0,"a::accesskey":0,"a::coords":0,"a::href":1,"a::hreflang":0,"a::name":7,"a::onblur":2,"a::onfocus":2,"a::shape":0,"a::target":10,"a::type":0,"area::accesskey":0,"area::alt":0,"area::coords":0,"area::href":1,"area::nohref":0,"area::onblur":2,"area::onfocus":2,"area::shape":0,"area::target":10,"audio::controls":0,"audio::loop":0,"audio::mediagroup":5,"audio::muted":0,"audio::preload":0,"audio::src":1,"bdo::dir":0,"blockquote::cite":1,"br::clear":0,"button::accesskey":0,"button::disabled":0,"button::name":8,"button::onblur":2,"button::onfocus":2,"button::type":0,"button::value":0,"canvas::height":0,"canvas::width":0,"caption::align":0,"col::align":0,"col::char":0,"col::charoff":0,"col::span":0,"col::valign":0,"col::width":0,"colgroup::align":0,"colgroup::char":0,"colgroup::charoff":0,"colgroup::span":0,"colgroup::valign":0,"colgroup::width":0,"command::checked":0,"command::command":5,"command::disabled":0,"command::icon":1,"command::label":0,"command::radiogroup":0,"command::type":0,"data::value":0,"del::cite":1,"del::datetime":0,"details::open":0,"dir::compact":0,"div::align":0,"dl::compact":0,"fieldset::disabled":0,"font::color":0,"font::face":0,"font::size":0,"form::accept":0,"form::action":1,"form::autocomplete":0,"form::enctype":0,"form::method":0,"form::name":7,"form::novalidate":0,"form::onreset":2,"form::onsubmit":2,"form::target":10,"h1::align":0,"h2::align":0,"h3::align":0,"h4::align":0,"h5::align":0,"h6::align":0,"hr::align":0,"hr::noshade":0,"hr::size":0,"hr::width":0,"iframe::align":0,"iframe::frameborder":0,"iframe::height":0,"iframe::marginheight":0,"iframe::marginwidth":0,"iframe::width":0,"img::align":0,"img::alt":0,"img::border":0,"img::height":0,"img::hspace":0,"img::ismap":0,"img::name":7,"img::src":1,"img::usemap":11,"img::vspace":0,"img::width":0,"input::accept":0,"input::accesskey":0,"input::align":0,"input::alt":0,"input::autocomplete":0,"input::checked":0,"input::disabled":0,"input::inputmode":0,"input::ismap":0,"input::list":5,"input::max":0,"input::maxlength":0,"input::min":0,"input::multiple":0,"input::name":8,"input::onblur":2,"input::onchange":2,"input::onfocus":2,"input::onselect":2,"input::pattern":0,"input::placeholder":0,"input::readonly":0,"input::required":0,"input::size":0,"input::src":1,"input::step":0,"input::type":0,"input::usemap":11,"input::value":0,"ins::cite":1,"ins::datetime":0,"label::accesskey":0,"label::for":5,"label::onblur":2,"label::onfocus":2,"legend::accesskey":0,"legend::align":0,"li::type":0,"li::value":0,"map::name":7,"menu::compact":0,"menu::label":0,"menu::type":0,"meter::high":0,"meter::low":0,"meter::max":0,"meter::min":0,"meter::optimum":0,"meter::value":0,"ol::compact":0,"ol::reversed":0,"ol::start":0,"ol::type":0,"optgroup::disabled":0,"optgroup::label":0,"option::disabled":0,"option::label":0,"option::selected":0,"option::value":0,"output::for":6,"output::name":8,"p::align":0,"pre::width":0,"progress::max":0,"progress::min":0,"progress::value":0,"q::cite":1,"select::autocomplete":0,"select::disabled":0,"select::multiple":0,"select::name":8,"select::onblur":2,"select::onchange":2,"select::onfocus":2,"select::required":0,"select::size":0,"source::type":0,"table::align":0,"table::bgcolor":0,"table::border":0,"table::cellpadding":0,"table::cellspacing":0,"table::frame":0,"table::rules":0,"table::summary":0,"table::width":0,"tbody::align":0,"tbody::char":0,"tbody::charoff":0,"tbody::valign":0,"td::abbr":0,"td::align":0,"td::axis":0,"td::bgcolor":0,"td::char":0,"td::charoff":0,"td::colspan":0,"td::headers":6,"td::height":0,"td::nowrap":0,"td::rowspan":0,"td::scope":0,"td::valign":0,"td::width":0,"textarea::accesskey":0,"textarea::autocomplete":0,"textarea::cols":0,"textarea::disabled":0,"textarea::inputmode":0,"textarea::name":8,"textarea::onblur":2,"textarea::onchange":2,"textarea::onfocus":2,"textarea::onselect":2,"textarea::placeholder":0,"textarea::readonly":0,"textarea::required":0,"textarea::rows":0,"textarea::wrap":0,"tfoot::align":0,"tfoot::char":0,"tfoot::charoff":0,"tfoot::valign":0,"th::abbr":0,"th::align":0,"th::axis":0,"th::bgcolor":0,"th::char":0,"th::charoff":0,"th::colspan":0,"th::headers":6,"th::height":0,"th::nowrap":0,"th::rowspan":0,"th::scope":0,"th::valign":0,"th::width":0,"thead::align":0,"thead::char":0,"thead::charoff":0,"thead::valign":0,"tr::align":0,"tr::bgcolor":0,"tr::char":0,"tr::charoff":0,"tr::valign":0,"track::default":0,"track::kind":0,"track::label":0,"track::srclang":0,"ul::compact":0,"ul::type":0,"video::controls":0,"video::height":0,"video::loop":0,"video::mediagroup":5,"video::muted":0,"video::poster":1,"video::preload":0,"video::src":1,"video::width":0};html4["ATTRIBS"]=html4.ATTRIBS;html4.eflags={OPTIONAL_ENDTAG:1,EMPTY:2,CDATA:4,RCDATA:8,UNSAFE:16,FOLDABLE:32,SCRIPT:64,STYLE:128,VIRTUALIZED:256};html4["eflags"]=html4.eflags;html4.ELEMENTS={a:0,abbr:0,acronym:0,address:0,applet:272,area:2,article:0,aside:0,audio:0,b:0,base:274,basefont:274,bdi:0,bdo:0,big:0,blockquote:0,body:305,br:2,button:0,canvas:0,caption:0,center:0,cite:0,code:0,col:2,colgroup:1,command:2,data:0,datalist:0,dd:1,del:0,details:0,dfn:0,dialog:272,dir:0,div:0,dl:0,dt:1,em:0,fieldset:0,figcaption:0,figure:0,font:0,footer:0,form:0,frame:274,frameset:272,h1:0,h2:0,h3:0,h4:0,h5:0,h6:0,head:305,header:0,hgroup:0,hr:2,html:305,i:0,iframe:4,img:2,input:2,ins:0,isindex:274,kbd:0,keygen:274,label:0,legend:0,li:1,link:274,map:0,mark:0,menu:0,meta:274,meter:0,nav:0,nobr:0,noembed:276,noframes:276,noscript:276,object:272,ol:0,optgroup:0,option:1,output:0,p:1,param:274,pre:0,progress:0,q:0,s:0,samp:0,script:84,section:0,select:0,small:0,source:2,span:0,strike:0,strong:0,style:148,sub:0,summary:0,sup:0,table:0,tbody:1,td:1,textarea:8,tfoot:1,th:1,thead:1,time:0,title:280,tr:1,track:2,tt:0,u:0,ul:0,"var":0,video:0,wbr:2};html4["ELEMENTS"]=html4.ELEMENTS;html4.ELEMENT_DOM_INTERFACES={a:"HTMLAnchorElement",abbr:"HTMLElement",acronym:"HTMLElement",address:"HTMLElement",applet:"HTMLAppletElement",area:"HTMLAreaElement",article:"HTMLElement",aside:"HTMLElement",audio:"HTMLAudioElement",b:"HTMLElement",base:"HTMLBaseElement",basefont:"HTMLBaseFontElement",bdi:"HTMLElement",bdo:"HTMLElement",big:"HTMLElement",blockquote:"HTMLQuoteElement",body:"HTMLBodyElement",br:"HTMLBRElement",button:"HTMLButtonElement",canvas:"HTMLCanvasElement",caption:"HTMLTableCaptionElement",center:"HTMLElement",cite:"HTMLElement",code:"HTMLElement",col:"HTMLTableColElement",colgroup:"HTMLTableColElement",command:"HTMLCommandElement",data:"HTMLElement",datalist:"HTMLDataListElement",dd:"HTMLElement",del:"HTMLModElement",details:"HTMLDetailsElement",dfn:"HTMLElement",dialog:"HTMLDialogElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",dl:"HTMLDListElement",dt:"HTMLElement",em:"HTMLElement",fieldset:"HTMLFieldSetElement",figcaption:"HTMLElement",figure:"HTMLElement",font:"HTMLFontElement",footer:"HTMLElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",h1:"HTMLHeadingElement",h2:"HTMLHeadingElement",h3:"HTMLHeadingElement",h4:"HTMLHeadingElement",h5:"HTMLHeadingElement",h6:"HTMLHeadingElement",head:"HTMLHeadElement",header:"HTMLElement",hgroup:"HTMLElement",hr:"HTMLHRElement",html:"HTMLHtmlElement",i:"HTMLElement",iframe:"HTMLIFrameElement",img:"HTMLImageElement",input:"HTMLInputElement",ins:"HTMLModElement",isindex:"HTMLUnknownElement",kbd:"HTMLElement",keygen:"HTMLKeygenElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",li:"HTMLLIElement",link:"HTMLLinkElement",map:"HTMLMapElement",mark:"HTMLElement",menu:"HTMLMenuElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",nav:"HTMLElement",nobr:"HTMLElement",noembed:"HTMLElement",noframes:"HTMLElement",noscript:"HTMLElement",object:"HTMLObjectElement",ol:"HTMLOListElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",s:"HTMLElement",samp:"HTMLElement",script:"HTMLScriptElement",section:"HTMLElement",select:"HTMLSelectElement",small:"HTMLElement",source:"HTMLSourceElement",span:"HTMLSpanElement",strike:"HTMLElement",strong:"HTMLElement",style:"HTMLStyleElement",sub:"HTMLElement",summary:"HTMLElement",sup:"HTMLElement",table:"HTMLTableElement",tbody:"HTMLTableSectionElement",td:"HTMLTableDataCellElement",textarea:"HTMLTextAreaElement",tfoot:"HTMLTableSectionElement",th:"HTMLTableHeaderCellElement",thead:"HTMLTableSectionElement",time:"HTMLTimeElement",title:"HTMLTitleElement",tr:"HTMLTableRowElement",track:"HTMLTrackElement",tt:"HTMLElement",u:"HTMLElement",ul:"HTMLUListElement","var":"HTMLElement",video:"HTMLVideoElement",wbr:"HTMLElement"};html4["ELEMENT_DOM_INTERFACES"]=html4.ELEMENT_DOM_INTERFACES;html4.ueffects={NOT_LOADED:0,SAME_DOCUMENT:1,NEW_DOCUMENT:2};html4["ueffects"]=html4.ueffects;html4.URIEFFECTS={"a::href":2,"area::href":2,"audio::src":1,"blockquote::cite":0,"command::icon":1,"del::cite":0,"form::action":2,"img::src":1,"input::src":1,"ins::cite":0,"q::cite":0,"video::poster":1,"video::src":1};html4["URIEFFECTS"]=html4.URIEFFECTS;html4.ltypes={UNSANDBOXED:2,SANDBOXED:1,DATA:0};html4["ltypes"]=html4.ltypes;html4.LOADERTYPES={"a::href":2,"area::href":2,"audio::src":2,"blockquote::cite":2,"command::icon":1,"del::cite":2,"form::action":2,"img::src":1,"input::src":1,"ins::cite":2,"q::cite":2,"video::poster":1,"video::src":2};html4["LOADERTYPES"]=html4.LOADERTYPES;if(typeof window!=="undefined"){window["html4"]=html4}if("I".toLowerCase()!=="i"){throw"I/i problem"}var defs={};defs.TagPolicyDecision;defs.TagPolicy;var html=function(html4){var parseCssDeclarations,sanitizeCssProperty,cssSchema;if("undefined"!==typeof window){parseCssDeclarations=window["parseCssDeclarations"];sanitizeCssProperty=window["sanitizeCssProperty"];cssSchema=window["cssSchema"]}var ENTITIES={lt:"<",LT:"<",gt:">",GT:">",amp:"&",AMP:"&",quot:'"',apos:"'",nbsp:" "};var decimalEscapeRe=/^#(\d+)$/;var hexEscapeRe=/^#x([0-9A-Fa-f]+)$/;var safeEntityNameRe=/^[A-Za-z][A-za-z0-9]+$/;var entityLookupElement="undefined"!==typeof window&&window["document"]?window["document"].createElement("textarea"):null;function lookupEntity(name){if(ENTITIES.hasOwnProperty(name)){return ENTITIES[name]}var m=name.match(decimalEscapeRe);if(m){return String.fromCharCode(parseInt(m[1],10))}else if(!!(m=name.match(hexEscapeRe))){return String.fromCharCode(parseInt(m[1],16))}else if(entityLookupElement&&safeEntityNameRe.test(name)){entityLookupElement.innerHTML="&"+name+";";var text=entityLookupElement.textContent;ENTITIES[name]=text;return text}else{return"&"+name+";"}}function decodeOneEntity(_,name){return lookupEntity(name)}var nulRe=/\0/g;function stripNULs(s){return s.replace(nulRe,"")}var ENTITY_RE_1=/&(#[0-9]+|#[xX][0-9A-Fa-f]+|\w+);/g;var ENTITY_RE_2=/^(#[0-9]+|#[xX][0-9A-Fa-f]+|\w+);/;function unescapeEntities(s){return s.replace(ENTITY_RE_1,decodeOneEntity)}var ampRe=/&/g;var looseAmpRe=/&([^a-z#]|#(?:[^0-9x]|x(?:[^0-9a-f]|$)|$)|$)/gi;var ltRe=/[<]/g;var gtRe=/>/g;var quotRe=/\"/g;function escapeAttrib(s){return(""+s).replace(ampRe,"&amp;").replace(ltRe,"&lt;").replace(gtRe,"&gt;").replace(quotRe,"&#34;")}function normalizeRCData(rcdata){return rcdata.replace(looseAmpRe,"&amp;$1").replace(ltRe,"&lt;").replace(gtRe,"&gt;")}var ATTR_RE=new RegExp("^\\s*"+"([-.:\\w]+)"+"(?:"+("\\s*(=)\\s*"+"("+('(")[^"]*("|$)'+"|"+"(')[^']*('|$)"+"|"+"(?=[a-z][-\\w]*\\s*=)"+"|"+"[^\"'\\s]*")+")")+")?","i");var splitWillCapture="a,b".split(/(,)/).length===3;var EFLAGS_TEXT=html4.eflags["CDATA"]|html4.eflags["RCDATA"];function makeSaxParser(handler){var hcopy={cdata:handler.cdata||handler["cdata"],comment:handler.comment||handler["comment"],endDoc:handler.endDoc||handler["endDoc"],endTag:handler.endTag||handler["endTag"],pcdata:handler.pcdata||handler["pcdata"],rcdata:handler.rcdata||handler["rcdata"],startDoc:handler.startDoc||handler["startDoc"],startTag:handler.startTag||handler["startTag"]};return function(htmlText,param){return parse(htmlText,hcopy,param)}}var continuationMarker={};function parse(htmlText,handler,param){var m,p,tagName;var parts=htmlSplit(htmlText);var state={noMoreGT:false,noMoreEndComments:false};parseCPS(handler,parts,0,state,param)}function continuationMaker(h,parts,initial,state,param){return function(){parseCPS(h,parts,initial,state,param)}}function parseCPS(h,parts,initial,state,param){try{if(h.startDoc&&initial==0){h.startDoc(param)}var m,p,tagName;for(var pos=initial,end=parts.length;pos<end;){var current=parts[pos++];var next=parts[pos];switch(current){case"&":if(ENTITY_RE_2.test(next)){if(h.pcdata){h.pcdata("&"+next,param,continuationMarker,continuationMaker(h,parts,pos,state,param))}pos++}else{if(h.pcdata){h.pcdata("&amp;",param,continuationMarker,continuationMaker(h,parts,pos,state,param))}}break;case"</":if(m=/^([-\w:]+)[^\'\"]*/.exec(next)){if(m[0].length===next.length&&parts[pos+1]===">"){pos+=2;tagName=m[1].toLowerCase();if(h.endTag){h.endTag(tagName,param,continuationMarker,continuationMaker(h,parts,pos,state,param))}}else{pos=parseEndTag(parts,pos,h,param,continuationMarker,state)}}else{if(h.pcdata){h.pcdata("&lt;/",param,continuationMarker,continuationMaker(h,parts,pos,state,param))}}break;case"<":if(m=/^([-\w:]+)\s*\/?/.exec(next)){if(m[0].length===next.length&&parts[pos+1]===">"){pos+=2;tagName=m[1].toLowerCase();if(h.startTag){h.startTag(tagName,[],param,continuationMarker,continuationMaker(h,parts,pos,state,param))}var eflags=html4.ELEMENTS[tagName];if(eflags&EFLAGS_TEXT){var tag={name:tagName,next:pos,eflags:eflags};pos=parseText(parts,tag,h,param,continuationMarker,state)}}else{pos=parseStartTag(parts,pos,h,param,continuationMarker,state)}}else{if(h.pcdata){h.pcdata("&lt;",param,continuationMarker,continuationMaker(h,parts,pos,state,param))}}break;case"<!--":if(!state.noMoreEndComments){for(p=pos+1;p<end;p++){if(parts[p]===">"&&/--$/.test(parts[p-1])){break}}if(p<end){if(h.comment){var comment=parts.slice(pos,p).join("");h.comment(comment.substr(0,comment.length-2),param,continuationMarker,continuationMaker(h,parts,p+1,state,param))}pos=p+1}else{state.noMoreEndComments=true}}if(state.noMoreEndComments){if(h.pcdata){h.pcdata("&lt;!--",param,continuationMarker,continuationMaker(h,parts,pos,state,param))}}break;case"<!":if(!/^\w/.test(next)){if(h.pcdata){h.pcdata("&lt;!",param,continuationMarker,continuationMaker(h,parts,pos,state,param))}}else{if(!state.noMoreGT){for(p=pos+1;p<end;p++){if(parts[p]===">"){break}}if(p<end){pos=p+1}else{state.noMoreGT=true}}if(state.noMoreGT){if(h.pcdata){h.pcdata("&lt;!",param,continuationMarker,continuationMaker(h,parts,pos,state,param))}}}break;case"<?":if(!state.noMoreGT){for(p=pos+1;p<end;p++){if(parts[p]===">"){break}}if(p<end){pos=p+1}else{state.noMoreGT=true}}if(state.noMoreGT){if(h.pcdata){h.pcdata("&lt;?",param,continuationMarker,continuationMaker(h,parts,pos,state,param))}}break;case">":if(h.pcdata){h.pcdata("&gt;",param,continuationMarker,continuationMaker(h,parts,pos,state,param))}break;case"":break;default:if(h.pcdata){h.pcdata(current,param,continuationMarker,continuationMaker(h,parts,pos,state,param))}break}}if(h.endDoc){h.endDoc(param)}}catch(e){if(e!==continuationMarker){throw e}}}function htmlSplit(str){var re=/(<\/|<\!--|<[!?]|[&<>])/g;str+="";if(splitWillCapture){return str.split(re)}else{var parts=[];var lastPos=0;var m;while((m=re.exec(str))!==null){parts.push(str.substring(lastPos,m.index));parts.push(m[0]);lastPos=m.index+m[0].length}parts.push(str.substring(lastPos));return parts}}function parseEndTag(parts,pos,h,param,continuationMarker,state){var tag=parseTagAndAttrs(parts,pos);if(!tag){return parts.length}if(h.endTag){h.endTag(tag.name,param,continuationMarker,continuationMaker(h,parts,pos,state,param))}return tag.next}function parseStartTag(parts,pos,h,param,continuationMarker,state){var tag=parseTagAndAttrs(parts,pos);if(!tag){return parts.length}if(h.startTag){h.startTag(tag.name,tag.attrs,param,continuationMarker,continuationMaker(h,parts,tag.next,state,param))}if(tag.eflags&EFLAGS_TEXT){return parseText(parts,tag,h,param,continuationMarker,state)}else{return tag.next}}var endTagRe={};function parseText(parts,tag,h,param,continuationMarker,state){var end=parts.length;if(!endTagRe.hasOwnProperty(tag.name)){endTagRe[tag.name]=new RegExp("^"+tag.name+"(?:[\\s\\/]|$)","i")}var re=endTagRe[tag.name];var first=tag.next;var p=tag.next+1;for(;p<end;p++){if(parts[p-1]==="</"&&re.test(parts[p])){break}}if(p<end){p-=1}var buf=parts.slice(first,p).join("");if(tag.eflags&html4.eflags["CDATA"]){if(h.cdata){h.cdata(buf,param,continuationMarker,continuationMaker(h,parts,p,state,param))}}else if(tag.eflags&html4.eflags["RCDATA"]){if(h.rcdata){h.rcdata(normalizeRCData(buf),param,continuationMarker,continuationMaker(h,parts,p,state,param))}}else{throw new Error("bug")}return p}function parseTagAndAttrs(parts,pos){var m=/^([-\w:]+)/.exec(parts[pos]);var tag={};tag.name=m[1].toLowerCase();tag.eflags=html4.ELEMENTS[tag.name];var buf=parts[pos].substr(m[0].length);var p=pos+1;var end=parts.length;for(;p<end;p++){if(parts[p]===">"){break}buf+=parts[p]}if(end<=p){return void 0}var attrs=[];while(buf!==""){m=ATTR_RE.exec(buf);if(!m){buf=buf.replace(/^[\s\S][^a-z\s]*/,"")}else if(m[4]&&!m[5]||m[6]&&!m[7]){var quote=m[4]||m[6];var sawQuote=false;var abuf=[buf,parts[p++]];for(;p<end;p++){if(sawQuote){if(parts[p]===">"){break}}else if(0<=parts[p].indexOf(quote)){sawQuote=true}abuf.push(parts[p])}if(end<=p){break}buf=abuf.join("");continue}else{var aName=m[1].toLowerCase();var aValue=m[2]?decodeValue(m[3]):"";attrs.push(aName,aValue);buf=buf.substr(m[0].length)}}tag.attrs=attrs;tag.next=p+1;return tag}function decodeValue(v){var q=v.charCodeAt(0);if(q===34||q===39){v=v.substr(1,v.length-2)}return unescapeEntities(stripNULs(v))}function makeHtmlSanitizer(tagPolicy){var stack;var ignoring;var emit=function(text,out){if(!ignoring){out.push(text)}};return makeSaxParser({startDoc:function(_){stack=[];ignoring=false},startTag:function(tagNameOrig,attribs,out){if(ignoring){return}if(!html4.ELEMENTS.hasOwnProperty(tagNameOrig)){return}var eflagsOrig=html4.ELEMENTS[tagNameOrig];if(eflagsOrig&html4.eflags["FOLDABLE"]){return}var decision=tagPolicy(tagNameOrig,attribs);if(!decision){ignoring=!(eflagsOrig&html4.eflags["EMPTY"]);return}else if(typeof decision!=="object"){throw new Error("tagPolicy did not return object (old API?)")}if("attribs"in decision){attribs=decision["attribs"]}else{throw new Error("tagPolicy gave no attribs")}var eflagsRep;var tagNameRep;if("tagName"in decision){tagNameRep=decision["tagName"];eflagsRep=html4.ELEMENTS[tagNameRep]}else{tagNameRep=tagNameOrig;eflagsRep=eflagsOrig}if(eflagsOrig&html4.eflags["OPTIONAL_ENDTAG"]){var onStack=stack[stack.length-1];if(onStack&&onStack.orig===tagNameOrig&&(onStack.rep!==tagNameRep||tagNameOrig!==tagNameRep)){out.push("</",onStack.rep,">")}}if(!(eflagsOrig&html4.eflags["EMPTY"])){stack.push({orig:tagNameOrig,rep:tagNameRep})}out.push("<",tagNameRep);for(var i=0,n=attribs.length;i<n;i+=2){var attribName=attribs[i],value=attribs[i+1];if(value!==null&&value!==void 0){out.push(" ",attribName,'="',escapeAttrib(value),'"')}}out.push(">");if(eflagsOrig&html4.eflags["EMPTY"]&&!(eflagsRep&html4.eflags["EMPTY"])){out.push("</",tagNameRep,">")}},endTag:function(tagName,out){if(ignoring){ignoring=false;return}if(!html4.ELEMENTS.hasOwnProperty(tagName)){return}var eflags=html4.ELEMENTS[tagName];if(!(eflags&(html4.eflags["EMPTY"]|html4.eflags["FOLDABLE"]))){var index;if(eflags&html4.eflags["OPTIONAL_ENDTAG"]){for(index=stack.length;--index>=0;){var stackElOrigTag=stack[index].orig;if(stackElOrigTag===tagName){break}if(!(html4.ELEMENTS[stackElOrigTag]&html4.eflags["OPTIONAL_ENDTAG"])){return}}}else{for(index=stack.length;--index>=0;){if(stack[index].orig===tagName){break}}}if(index<0){return}for(var i=stack.length;--i>index;){var stackElRepTag=stack[i].rep;if(!(html4.ELEMENTS[stackElRepTag]&html4.eflags["OPTIONAL_ENDTAG"])){out.push("</",stackElRepTag,">")}}if(index<stack.length){tagName=stack[index].rep}stack.length=index;out.push("</",tagName,">")}},pcdata:emit,rcdata:emit,cdata:emit,endDoc:function(out){for(;stack.length;stack.length--){out.push("</",stack[stack.length-1].rep,">")}}})}var ALLOWED_URI_SCHEMES=/^(?:https?|mailto)$/i;function safeUri(uri,effect,ltype,hints,naiveUriRewriter){if(!naiveUriRewriter){return null}try{var parsed=URI.parse(""+uri);if(parsed){if(!parsed.hasScheme()||ALLOWED_URI_SCHEMES.test(parsed.getScheme())){var safe=naiveUriRewriter(parsed,effect,ltype,hints);return safe?safe.toString():null}}}catch(e){return null}return null}function log(logger,tagName,attribName,oldValue,newValue){if(!attribName){logger(tagName+" removed",{change:"removed",tagName:tagName})}if(oldValue!==newValue){var changed="changed";if(oldValue&&!newValue){
+changed="removed"}else if(!oldValue&&newValue){changed="added"}logger(tagName+"."+attribName+" "+changed,{change:changed,tagName:tagName,attribName:attribName,oldValue:oldValue,newValue:newValue})}}function lookupAttribute(map,tagName,attribName){var attribKey;attribKey=tagName+"::"+attribName;if(map.hasOwnProperty(attribKey)){return map[attribKey]}attribKey="*::"+attribName;if(map.hasOwnProperty(attribKey)){return map[attribKey]}return void 0}function getAttributeType(tagName,attribName){return lookupAttribute(html4.ATTRIBS,tagName,attribName)}function getLoaderType(tagName,attribName){return lookupAttribute(html4.LOADERTYPES,tagName,attribName)}function getUriEffect(tagName,attribName){return lookupAttribute(html4.URIEFFECTS,tagName,attribName)}function sanitizeAttribs(tagName,attribs,opt_naiveUriRewriter,opt_nmTokenPolicy,opt_logger){for(var i=0;i<attribs.length;i+=2){var attribName=attribs[i];var value=attribs[i+1];var oldValue=value;var atype=null,attribKey;if((attribKey=tagName+"::"+attribName,html4.ATTRIBS.hasOwnProperty(attribKey))||(attribKey="*::"+attribName,html4.ATTRIBS.hasOwnProperty(attribKey))){atype=html4.ATTRIBS[attribKey]}if(atype!==null){switch(atype){case html4.atype["NONE"]:break;case html4.atype["SCRIPT"]:value=null;if(opt_logger){log(opt_logger,tagName,attribName,oldValue,value)}break;case html4.atype["STYLE"]:if("undefined"===typeof parseCssDeclarations){value=null;if(opt_logger){log(opt_logger,tagName,attribName,oldValue,value)}break}var sanitizedDeclarations=[];parseCssDeclarations(value,{declaration:function(property,tokens){var normProp=property.toLowerCase();sanitizeCssProperty(normProp,tokens,opt_naiveUriRewriter?function(url){return safeUri(url,html4.ueffects.SAME_DOCUMENT,html4.ltypes.SANDBOXED,{TYPE:"CSS",CSS_PROP:normProp},opt_naiveUriRewriter)}:null);if(tokens.length){sanitizedDeclarations.push(normProp+": "+tokens.join(" "))}}});value=sanitizedDeclarations.length>0?sanitizedDeclarations.join(" ; "):null;if(opt_logger){log(opt_logger,tagName,attribName,oldValue,value)}break;case html4.atype["ID"]:case html4.atype["IDREF"]:case html4.atype["IDREFS"]:case html4.atype["GLOBAL_NAME"]:case html4.atype["LOCAL_NAME"]:case html4.atype["CLASSES"]:value=opt_nmTokenPolicy?opt_nmTokenPolicy(value):value;if(opt_logger){log(opt_logger,tagName,attribName,oldValue,value)}break;case html4.atype["URI"]:value=safeUri(value,getUriEffect(tagName,attribName),getLoaderType(tagName,attribName),{TYPE:"MARKUP",XML_ATTR:attribName,XML_TAG:tagName},opt_naiveUriRewriter);if(opt_logger){log(opt_logger,tagName,attribName,oldValue,value)}break;case html4.atype["URI_FRAGMENT"]:if(value&&"#"===value.charAt(0)){value=value.substring(1);value=opt_nmTokenPolicy?opt_nmTokenPolicy(value):value;if(value!==null&&value!==void 0){value="#"+value}}else{value=null}if(opt_logger){log(opt_logger,tagName,attribName,oldValue,value)}break;default:value=null;if(opt_logger){log(opt_logger,tagName,attribName,oldValue,value)}break}}else{value=null;if(opt_logger){log(opt_logger,tagName,attribName,oldValue,value)}}attribs[i+1]=value}return attribs}function makeTagPolicy(opt_naiveUriRewriter,opt_nmTokenPolicy,opt_logger){return function(tagName,attribs){if(!(html4.ELEMENTS[tagName]&html4.eflags["UNSAFE"])){return{attribs:sanitizeAttribs(tagName,attribs,opt_naiveUriRewriter,opt_nmTokenPolicy,opt_logger)}}else{if(opt_logger){log(opt_logger,tagName,undefined,undefined,undefined)}}}}function sanitizeWithPolicy(inputHtml,tagPolicy){var outputArray=[];makeHtmlSanitizer(tagPolicy)(inputHtml,outputArray);return outputArray.join("")}function sanitize(inputHtml,opt_naiveUriRewriter,opt_nmTokenPolicy,opt_logger){var tagPolicy=makeTagPolicy(opt_naiveUriRewriter,opt_nmTokenPolicy,opt_logger);return sanitizeWithPolicy(inputHtml,tagPolicy)}var html={};html.escapeAttrib=html["escapeAttrib"]=escapeAttrib;html.makeHtmlSanitizer=html["makeHtmlSanitizer"]=makeHtmlSanitizer;html.makeSaxParser=html["makeSaxParser"]=makeSaxParser;html.makeTagPolicy=html["makeTagPolicy"]=makeTagPolicy;html.normalizeRCData=html["normalizeRCData"]=normalizeRCData;html.sanitize=html["sanitize"]=sanitize;html.sanitizeAttribs=html["sanitizeAttribs"]=sanitizeAttribs;html.sanitizeWithPolicy=html["sanitizeWithPolicy"]=sanitizeWithPolicy;html.unescapeEntities=html["unescapeEntities"]=unescapeEntities;return html}(html4);var html_sanitize=html["sanitize"];if(typeof window!=="undefined"){window["html"]=html;window["html_sanitize"]=html_sanitize}</script> 
+  <script>// Released under MIT license
+// Copyright (c) 2009-2010 Dominic Baggott
+// Copyright (c) 2009-2010 Ash Berlin
+// Copyright (c) 2011 Christoph Dorn <christoph@christophdorn.com> (http://www.christophdorn.com)
+
+/*jshint browser:true, devel:true */
+
+(function( expose ) {
+
+/**
+ *  class Markdown
+ *
+ *  Markdown processing in Javascript done right. We have very particular views
+ *  on what constitutes 'right' which include:
+ *
+ *  - produces well-formed HTML (this means that em and strong nesting is
+ *    important)
+ *
+ *  - has an intermediate representation to allow processing of parsed data (We
+ *    in fact have two, both as [JsonML]: a markdown tree and an HTML tree).
+ *
+ *  - is easily extensible to add new dialects without having to rewrite the
+ *    entire parsing mechanics
+ *
+ *  - has a good test suite
+ *
+ *  This implementation fulfills all of these (except that the test suite could
+ *  do with expanding to automatically run all the fixtures from other Markdown
+ *  implementations.)
+ *
+ *  ##### Intermediate Representation
+ *
+ *  *TODO* Talk about this :) Its JsonML, but document the node names we use.
+ *
+ *  [JsonML]: http://jsonml.org/ "JSON Markup Language"
+ **/
+var Markdown = expose.Markdown = function(dialect) {
+  switch (typeof dialect) {
+    case "undefined":
+      this.dialect = Markdown.dialects.Gruber;
+      break;
+    case "object":
+      this.dialect = dialect;
+      break;
+    default:
+      if ( dialect in Markdown.dialects ) {
+        this.dialect = Markdown.dialects[dialect];
+      }
+      else {
+        throw new Error("Unknown Markdown dialect '" + String(dialect) + "'");
+      }
+      break;
+  }
+  this.em_state = [];
+  this.strong_state = [];
+  this.debug_indent = "";
+};
+
+/**
+ *  parse( markdown, [dialect] ) -> JsonML
+ *  - markdown (String): markdown string to parse
+ *  - dialect (String | Dialect): the dialect to use, defaults to gruber
+ *
+ *  Parse `markdown` and return a markdown document as a Markdown.JsonML tree.
+ **/
+expose.parse = function( source, dialect ) {
+  // dialect will default if undefined
+  var md = new Markdown( dialect );
+  return md.toTree( source );
+};
+
+/**
+ *  toHTML( markdown, [dialect]  ) -> String
+ *  toHTML( md_tree ) -> String
+ *  - markdown (String): markdown string to parse
+ *  - md_tree (Markdown.JsonML): parsed markdown tree
+ *
+ *  Take markdown (either as a string or as a JsonML tree) and run it through
+ *  [[toHTMLTree]] then turn it into a well-formated HTML fragment.
+ **/
+expose.toHTML = function toHTML( source , dialect , options ) {
+  var input = expose.toHTMLTree( source , dialect , options );
+
+  return expose.renderJsonML( input );
+};
+
+/**
+ *  toHTMLTree( markdown, [dialect] ) -> JsonML
+ *  toHTMLTree( md_tree ) -> JsonML
+ *  - markdown (String): markdown string to parse
+ *  - dialect (String | Dialect): the dialect to use, defaults to gruber
+ *  - md_tree (Markdown.JsonML): parsed markdown tree
+ *
+ *  Turn markdown into HTML, represented as a JsonML tree. If a string is given
+ *  to this function, it is first parsed into a markdown tree by calling
+ *  [[parse]].
+ **/
+expose.toHTMLTree = function toHTMLTree( input, dialect , options ) {
+  // convert string input to an MD tree
+  if ( typeof input ==="string" ) input = this.parse( input, dialect );
+
+  // Now convert the MD tree to an HTML tree
+
+  // remove references from the tree
+  var attrs = extract_attr( input ),
+      refs = {};
+
+  if ( attrs && attrs.references ) {
+    refs = attrs.references;
+  }
+
+  var html = convert_tree_to_html( input, refs , options );
+  merge_text_nodes( html );
+  return html;
+};
+
+// For Spidermonkey based engines
+function mk_block_toSource() {
+  return "Markdown.mk_block( " +
+          uneval(this.toString()) +
+          ", " +
+          uneval(this.trailing) +
+          ", " +
+          uneval(this.lineNumber) +
+          " )";
+}
+
+// node
+function mk_block_inspect() {
+  var util = require("util");
+  return "Markdown.mk_block( " +
+          util.inspect(this.toString()) +
+          ", " +
+          util.inspect(this.trailing) +
+          ", " +
+          util.inspect(this.lineNumber) +
+          " )";
+
+}
+
+var mk_block = Markdown.mk_block = function(block, trail, line) {
+  // Be helpful for default case in tests.
+  if ( arguments.length == 1 ) trail = "\n\n";
+
+  var s = new String(block);
+  s.trailing = trail;
+  // To make it clear its not just a string
+  s.inspect = mk_block_inspect;
+  s.toSource = mk_block_toSource;
+
+  if ( line != undefined )
+    s.lineNumber = line;
+
+  return s;
+};
+
+function count_lines( str ) {
+  var n = 0, i = -1;
+  while ( ( i = str.indexOf("\n", i + 1) ) !== -1 ) n++;
+  return n;
+}
+
+// Internal - split source into rough blocks
+Markdown.prototype.split_blocks = function splitBlocks( input, startLine ) {
+  input = input.replace(/(\r\n|\n|\r)/g, "\n");
+  // [\s\S] matches _anything_ (newline or space)
+  // [^] is equivalent but doesn't work in IEs.
+  var re = /([\s\S]+?)($|\n#|\n(?:\s*\n|$)+)/g,
+      blocks = [],
+      m;
+
+  var line_no = 1;
+
+  if ( ( m = /^(\s*\n)/.exec(input) ) != null ) {
+    // skip (but count) leading blank lines
+    line_no += count_lines( m[0] );
+    re.lastIndex = m[0].length;
+  }
+
+  while ( ( m = re.exec(input) ) !== null ) {
+    if (m[2] == "\n#") {
+      m[2] = "\n";
+      re.lastIndex--;
+    }
+    blocks.push( mk_block( m[1], m[2], line_no ) );
+    line_no += count_lines( m[0] );
+  }
+
+  return blocks;
+};
+
+/**
+ *  Markdown#processBlock( block, next ) -> undefined | [ JsonML, ... ]
+ *  - block (String): the block to process
+ *  - next (Array): the following blocks
+ *
+ * Process `block` and return an array of JsonML nodes representing `block`.
+ *
+ * It does this by asking each block level function in the dialect to process
+ * the block until one can. Succesful handling is indicated by returning an
+ * array (with zero or more JsonML nodes), failure by a false value.
+ *
+ * Blocks handlers are responsible for calling [[Markdown#processInline]]
+ * themselves as appropriate.
+ *
+ * If the blocks were split incorrectly or adjacent blocks need collapsing you
+ * can adjust `next` in place using shift/splice etc.
+ *
+ * If any of this default behaviour is not right for the dialect, you can
+ * define a `__call__` method on the dialect that will get invoked to handle
+ * the block processing.
+ */
+Markdown.prototype.processBlock = function processBlock( block, next ) {
+  var cbs = this.dialect.block,
+      ord = cbs.__order__;
+
+  if ( "__call__" in cbs ) {
+    return cbs.__call__.call(this, block, next);
+  }
+
+  for ( var i = 0; i < ord.length; i++ ) {
+    //D:this.debug( "Testing", ord[i] );
+    var res = cbs[ ord[i] ].call( this, block, next );
+    if ( res ) {
+      //D:this.debug("  matched");
+      if ( !isArray(res) || ( res.length > 0 && !( isArray(res[0]) ) ) )
+        this.debug(ord[i], "didn't return a proper array");
+      //D:this.debug( "" );
+      return res;
+    }
+  }
+
+  // Uhoh! no match! Should we throw an error?
+  return [];
+};
+
+Markdown.prototype.processInline = function processInline( block ) {
+  return this.dialect.inline.__call__.call( this, String( block ) );
+};
+
+/**
+ *  Markdown#toTree( source ) -> JsonML
+ *  - source (String): markdown source to parse
+ *
+ *  Parse `source` into a JsonML tree representing the markdown document.
+ **/
+// custom_tree means set this.tree to `custom_tree` and restore old value on return
+Markdown.prototype.toTree = function toTree( source, custom_root ) {
+  var blocks = source instanceof Array ? source : this.split_blocks( source );
+
+  // Make tree a member variable so its easier to mess with in extensions
+  var old_tree = this.tree;
+  try {
+    this.tree = custom_root || this.tree || [ "markdown" ];
+
+    blocks:
+    while ( blocks.length ) {
+      var b = this.processBlock( blocks.shift(), blocks );
+
+      // Reference blocks and the like won't return any content
+      if ( !b.length ) continue blocks;
+
+      this.tree.push.apply( this.tree, b );
+    }
+    return this.tree;
+  }
+  finally {
+    if ( custom_root ) {
+      this.tree = old_tree;
+    }
+  }
+};
+
+// Noop by default
+Markdown.prototype.debug = function () {
+  var args = Array.prototype.slice.call( arguments);
+  args.unshift(this.debug_indent);
+  if ( typeof print !== "undefined" )
+      print.apply( print, args );
+  if ( typeof console !== "undefined" && typeof console.log !== "undefined" )
+      console.log.apply( null, args );
+}
+
+Markdown.prototype.loop_re_over_block = function( re, block, cb ) {
+  // Dont use /g regexps with this
+  var m,
+      b = block.valueOf();
+
+  while ( b.length && (m = re.exec(b) ) != null ) {
+    b = b.substr( m[0].length );
+    cb.call(this, m);
+  }
+  return b;
+};
+
+/**
+ * Markdown.dialects
+ *
+ * Namespace of built-in dialects.
+ **/
+Markdown.dialects = {};
+
+/**
+ * Markdown.dialects.Gruber
+ *
+ * The default dialect that follows the rules set out by John Gruber's
+ * markdown.pl as closely as possible. Well actually we follow the behaviour of
+ * that script which in some places is not exactly what the syntax web page
+ * says.
+ **/
+Markdown.dialects.Gruber = {
+  block: {
+    atxHeader: function atxHeader( block, next ) {
+      var m = block.match( /^(#{1,6})\s*(.*?)\s*#*\s*(?:\n|$)/ );
+
+      if ( !m ) return undefined;
+
+      var header = [ "header", { level: m[ 1 ].length } ];
+      Array.prototype.push.apply(header, this.processInline(m[ 2 ]));
+
+      if ( m[0].length < block.length )
+        next.unshift( mk_block( block.substr( m[0].length ), block.trailing, block.lineNumber + 2 ) );
+
+      return [ header ];
+    },
+
+    setextHeader: function setextHeader( block, next ) {
+      var m = block.match( /^(.*)\n([-=])\2\2+(?:\n|$)/ );
+
+      if ( !m ) return undefined;
+
+      var level = ( m[ 2 ] === "=" ) ? 1 : 2;
+      var header = [ "header", { level : level }, m[ 1 ] ];
+
+      if ( m[0].length < block.length )
+        next.unshift( mk_block( block.substr( m[0].length ), block.trailing, block.lineNumber + 2 ) );
+
+      return [ header ];
+    },
+
+    code: function code( block, next ) {
+      // |    Foo
+      // |bar
+      // should be a code block followed by a paragraph. Fun
+      //
+      // There might also be adjacent code block to merge.
+
+      var ret = [],
+          re = /^(?: {0,3}\t| {4})(.*)\n?/,
+          lines;
+
+      // 4 spaces + content
+      if ( !block.match( re ) ) return undefined;
+
+      block_search:
+      do {
+        // Now pull out the rest of the lines
+        var b = this.loop_re_over_block(
+                  re, block.valueOf(), function( m ) { ret.push( m[1] ); } );
+
+        if ( b.length ) {
+          // Case alluded to in first comment. push it back on as a new block
+          next.unshift( mk_block(b, block.trailing) );
+          break block_search;
+        }
+        else if ( next.length ) {
+          // Check the next block - it might be code too
+          if ( !next[0].match( re ) ) break block_search;
+
+          // Pull how how many blanks lines follow - minus two to account for .join
+          ret.push ( block.trailing.replace(/[^\n]/g, "").substring(2) );
+
+          block = next.shift();
+        }
+        else {
+          break block_search;
+        }
+      } while ( true );
+
+      return [ [ "code_block", ret.join("\n") ] ];
+    },
+
+    horizRule: function horizRule( block, next ) {
+      // this needs to find any hr in the block to handle abutting blocks
+      var m = block.match( /^(?:([\s\S]*?)\n)?[ \t]*([-_*])(?:[ \t]*\2){2,}[ \t]*(?:\n([\s\S]*))?$/ );
+
+      if ( !m ) {
+        return undefined;
+      }
+
+      var jsonml = [ [ "hr" ] ];
+
+      // if there's a leading abutting block, process it
+      if ( m[ 1 ] ) {
+        jsonml.unshift.apply( jsonml, this.processBlock( m[ 1 ], [] ) );
+      }
+
+      // if there's a trailing abutting block, stick it into next
+      if ( m[ 3 ] ) {
+        next.unshift( mk_block( m[ 3 ] ) );
+      }
+
+      return jsonml;
+    },
+
+    // There are two types of lists. Tight and loose. Tight lists have no whitespace
+    // between the items (and result in text just in the <li>) and loose lists,
+    // which have an empty line between list items, resulting in (one or more)
+    // paragraphs inside the <li>.
+    //
+    // There are all sorts weird edge cases about the original markdown.pl's
+    // handling of lists:
+    //
+    // * Nested lists are supposed to be indented by four chars per level. But
+    //   if they aren't, you can get a nested list by indenting by less than
+    //   four so long as the indent doesn't match an indent of an existing list
+    //   item in the 'nest stack'.
+    //
+    // * The type of the list (bullet or number) is controlled just by the
+    //    first item at the indent. Subsequent changes are ignored unless they
+    //    are for nested lists
+    //
+    lists: (function( ) {
+      // Use a closure to hide a few variables.
+      var any_list = "[*+-]|\\d+\\.",
+          bullet_list = /[*+-]/,
+          number_list = /\d+\./,
+          // Capture leading indent as it matters for determining nested lists.
+          is_list_re = new RegExp( "^( {0,3})(" + any_list + ")[ \t]+" ),
+          indent_re = "(?: {0,3}\\t| {4})";
+
+      // TODO: Cache this regexp for certain depths.
+      // Create a regexp suitable for matching an li for a given stack depth
+      function regex_for_depth( depth ) {
+
+        return new RegExp(
+          // m[1] = indent, m[2] = list_type
+          "(?:^(" + indent_re + "{0," + depth + "} {0,3})(" + any_list + ")\\s+)|" +
+          // m[3] = cont
+          "(^" + indent_re + "{0," + (depth-1) + "}[ ]{0,4})"
+        );
+      }
+      function expand_tab( input ) {
+        return input.replace( / {0,3}\t/g, "    " );
+      }
+
+      // Add inline content `inline` to `li`. inline comes from processInline
+      // so is an array of content
+      function add(li, loose, inline, nl) {
+        if ( loose ) {
+          li.push( [ "para" ].concat(inline) );
+          return;
+        }
+        // Hmmm, should this be any block level element or just paras?
+        var add_to = li[li.length -1] instanceof Array && li[li.length - 1][0] == "para"
+                   ? li[li.length -1]
+                   : li;
+
+        // If there is already some content in this list, add the new line in
+        if ( nl && li.length > 1 ) inline.unshift(nl);
+
+        for ( var i = 0; i < inline.length; i++ ) {
+          var what = inline[i],
+              is_str = typeof what == "string";
+          if ( is_str && add_to.length > 1 && typeof add_to[add_to.length-1] == "string" ) {
+            add_to[ add_to.length-1 ] += what;
+          }
+          else {
+            add_to.push( what );
+          }
+        }
+      }
+
+      // contained means have an indent greater than the current one. On
+      // *every* line in the block
+      function get_contained_blocks( depth, blocks ) {
+
+        var re = new RegExp( "^(" + indent_re + "{" + depth + "}.*?\\n?)*$" ),
+            replace = new RegExp("^" + indent_re + "{" + depth + "}", "gm"),
+            ret = [];
+
+        while ( blocks.length > 0 ) {
+          if ( re.exec( blocks[0] ) ) {
+            var b = blocks.shift(),
+                // Now remove that indent
+                x = b.replace( replace, "");
+
+            ret.push( mk_block( x, b.trailing, b.lineNumber ) );
+          }
+          else {
+            break;
+          }
+        }
+        return ret;
+      }
+
+      // passed to stack.forEach to turn list items up the stack into paras
+      function paragraphify(s, i, stack) {
+        var list = s.list;
+        var last_li = list[list.length-1];
+
+        if ( last_li[1] instanceof Array && last_li[1][0] == "para" ) {
+          return;
+        }
+        if ( i + 1 == stack.length ) {
+          // Last stack frame
+          // Keep the same array, but replace the contents
+          last_li.push( ["para"].concat( last_li.splice(1, last_li.length - 1) ) );
+        }
+        else {
+          var sublist = last_li.pop();
+          last_li.push( ["para"].concat( last_li.splice(1, last_li.length - 1) ), sublist );
+        }
+      }
+
+      // The matcher function
+      return function( block, next ) {
+        var m = block.match( is_list_re );
+        if ( !m ) return undefined;
+
+        function make_list( m ) {
+          var list = bullet_list.exec( m[2] )
+                   ? ["bulletlist"]
+                   : ["numberlist"];
+
+          stack.push( { list: list, indent: m[1] } );
+          return list;
+        }
+
+
+        var stack = [], // Stack of lists for nesting.
+            list = make_list( m ),
+            last_li,
+            loose = false,
+            ret = [ stack[0].list ],
+            i;
+
+        // Loop to search over block looking for inner block elements and loose lists
+        loose_search:
+        while ( true ) {
+          // Split into lines preserving new lines at end of line
+          var lines = block.split( /(?=\n)/ );
+
+          // We have to grab all lines for a li and call processInline on them
+          // once as there are some inline things that can span lines.
+          var li_accumulate = "";
+
+          // Loop over the lines in this block looking for tight lists.
+          tight_search:
+          for ( var line_no = 0; line_no < lines.length; line_no++ ) {
+            var nl = "",
+                l = lines[line_no].replace(/^\n/, function(n) { nl = n; return ""; });
+
+            // TODO: really should cache this
+            var line_re = regex_for_depth( stack.length );
+
+            m = l.match( line_re );
+            //print( "line:", uneval(l), "\nline match:", uneval(m) );
+
+            // We have a list item
+            if ( m[1] !== undefined ) {
+              // Process the previous list item, if any
+              if ( li_accumulate.length ) {
+                add( last_li, loose, this.processInline( li_accumulate ), nl );
+                // Loose mode will have been dealt with. Reset it
+                loose = false;
+                li_accumulate = "";
+              }
+
+              m[1] = expand_tab( m[1] );
+              var wanted_depth = Math.floor(m[1].length/4)+1;
+              //print( "want:", wanted_depth, "stack:", stack.length);
+              if ( wanted_depth > stack.length ) {
+                // Deep enough for a nested list outright
+                //print ( "new nested list" );
+                list = make_list( m );
+                last_li.push( list );
+                last_li = list[1] = [ "listitem" ];
+              }
+              else {
+                // We aren't deep enough to be strictly a new level. This is
+                // where Md.pl goes nuts. If the indent matches a level in the
+                // stack, put it there, else put it one deeper then the
+                // wanted_depth deserves.
+                var found = false;
+                for ( i = 0; i < stack.length; i++ ) {
+                  if ( stack[ i ].indent != m[1] ) continue;
+                  list = stack[ i ].list;
+                  stack.splice( i+1, stack.length - (i+1) );
+                  found = true;
+                  break;
+                }
+
+                if (!found) {
+                  //print("not found. l:", uneval(l));
+                  wanted_depth++;
+                  if ( wanted_depth <= stack.length ) {
+                    stack.splice(wanted_depth, stack.length - wanted_depth);
+                    //print("Desired depth now", wanted_depth, "stack:", stack.length);
+                    list = stack[wanted_depth-1].list;
+                    //print("list:", uneval(list) );
+                  }
+                  else {
+                    //print ("made new stack for messy indent");
+                    list = make_list(m);
+                    last_li.push(list);
+                  }
+                }
+
+                //print( uneval(list), "last", list === stack[stack.length-1].list );
+                last_li = [ "listitem" ];
+                list.push(last_li);
+              } // end depth of shenegains
+              nl = "";
+            }
+
+            // Add content
+            if ( l.length > m[0].length ) {
+              li_accumulate += nl + l.substr( m[0].length );
+            }
+          } // tight_search
+
+          if ( li_accumulate.length ) {
+            add( last_li, loose, this.processInline( li_accumulate ), nl );
+            // Loose mode will have been dealt with. Reset it
+            loose = false;
+            li_accumulate = "";
+          }
+
+          // Look at the next block - we might have a loose list. Or an extra
+          // paragraph for the current li
+          var contained = get_contained_blocks( stack.length, next );
+
+          // Deal with code blocks or properly nested lists
+          if ( contained.length > 0 ) {
+            // Make sure all listitems up the stack are paragraphs
+            forEach( stack, paragraphify, this);
+
+            last_li.push.apply( last_li, this.toTree( contained, [] ) );
+          }
+
+          var next_block = next[0] && next[0].valueOf() || "";
+
+          if ( next_block.match(is_list_re) || next_block.match( /^ / ) ) {
+            block = next.shift();
+
+            // Check for an HR following a list: features/lists/hr_abutting
+            var hr = this.dialect.block.horizRule( block, next );
+
+            if ( hr ) {
+              ret.push.apply(ret, hr);
+              break;
+            }
+
+            // Make sure all listitems up the stack are paragraphs
+            forEach( stack, paragraphify, this);
+
+            loose = true;
+            continue loose_search;
+          }
+          break;
+        } // loose_search
+
+        return ret;
+      };
+    })(),
+
+    blockquote: function blockquote( block, next ) {
+      if ( !block.match( /^>/m ) )
+        return undefined;
+
+      var jsonml = [];
+
+      // separate out the leading abutting block, if any. I.e. in this case:
+      //
+      //  a
+      //  > b
+      //
+      if ( block[ 0 ] != ">" ) {
+        var lines = block.split( /\n/ ),
+            prev = [],
+            line_no = block.lineNumber;
+
+        // keep shifting lines until you find a crotchet
+        while ( lines.length && lines[ 0 ][ 0 ] != ">" ) {
+            prev.push( lines.shift() );
+            line_no++;
+        }
+
+        var abutting = mk_block( prev.join( "\n" ), "\n", block.lineNumber );
+        jsonml.push.apply( jsonml, this.processBlock( abutting, [] ) );
+        // reassemble new block of just block quotes!
+        block = mk_block( lines.join( "\n" ), block.trailing, line_no );
+      }
+
+
+      // if the next block is also a blockquote merge it in
+      while ( next.length && next[ 0 ][ 0 ] == ">" ) {
+        var b = next.shift();
+        block = mk_block( block + block.trailing + b, b.trailing, block.lineNumber );
+      }
+
+      // Strip off the leading "> " and re-process as a block.
+      var input = block.replace( /^> ?/gm, "" ),
+          old_tree = this.tree,
+          processedBlock = this.toTree( input, [ "blockquote" ] ),
+          attr = extract_attr( processedBlock );
+
+      // If any link references were found get rid of them
+      if ( attr && attr.references ) {
+        delete attr.references;
+        // And then remove the attribute object if it's empty
+        if ( isEmpty( attr ) ) {
+          processedBlock.splice( 1, 1 );
+        }
+      }
+
+      jsonml.push( processedBlock );
+      return jsonml;
+    },
+
+    referenceDefn: function referenceDefn( block, next) {
+      var re = /^\s*\[(.*?)\]:\s*(\S+)(?:\s+(?:(['"])(.*?)\3|\((.*?)\)))?\n?/;
+      // interesting matches are [ , ref_id, url, , title, title ]
+
+      if ( !block.match(re) )
+        return undefined;
+
+      // make an attribute node if it doesn't exist
+      if ( !extract_attr( this.tree ) ) {
+        this.tree.splice( 1, 0, {} );
+      }
+
+      var attrs = extract_attr( this.tree );
+
+      // make a references hash if it doesn't exist
+      if ( attrs.references === undefined ) {
+        attrs.references = {};
+      }
+
+      var b = this.loop_re_over_block(re, block, function( m ) {
+
+        if ( m[2] && m[2][0] == "<" && m[2][m[2].length-1] == ">" )
+          m[2] = m[2].substring( 1, m[2].length - 1 );
+
+        var ref = attrs.references[ m[1].toLowerCase() ] = {
+          href: m[2]
+        };
+
+        if ( m[4] !== undefined )
+          ref.title = m[4];
+        else if ( m[5] !== undefined )
+          ref.title = m[5];
+
+      } );
+
+      if ( b.length )
+        next.unshift( mk_block( b, block.trailing ) );
+
+      return [];
+    },
+
+    para: function para( block, next ) {
+      // everything's a para!
+      return [ ["para"].concat( this.processInline( block ) ) ];
+    }
+  }
+};
+
+Markdown.dialects.Gruber.inline = {
+
+    __oneElement__: function oneElement( text, patterns_or_re, previous_nodes ) {
+      var m,
+          res,
+          lastIndex = 0;
+
+      patterns_or_re = patterns_or_re || this.dialect.inline.__patterns__;
+      var re = new RegExp( "([\\s\\S]*?)(" + (patterns_or_re.source || patterns_or_re) + ")" );
+
+      m = re.exec( text );
+      if (!m) {
+        // Just boring text
+        return [ text.length, text ];
+      }
+      else if ( m[1] ) {
+        // Some un-interesting text matched. Return that first
+        return [ m[1].length, m[1] ];
+      }
+
+      var res;
+      if ( m[2] in this.dialect.inline ) {
+        res = this.dialect.inline[ m[2] ].call(
+                  this,
+                  text.substr( m.index ), m, previous_nodes || [] );
+      }
+      // Default for now to make dev easier. just slurp special and output it.
+      res = res || [ m[2].length, m[2] ];
+      return res;
+    },
+
+    __call__: function inline( text, patterns ) {
+
+      var out = [],
+          res;
+
+      function add(x) {
+        //D:self.debug("  adding output", uneval(x));
+        if ( typeof x == "string" && typeof out[out.length-1] == "string" )
+          out[ out.length-1 ] += x;
+        else
+          out.push(x);
+      }
+
+      while ( text.length > 0 ) {
+        res = this.dialect.inline.__oneElement__.call(this, text, patterns, out );
+        text = text.substr( res.shift() );
+        forEach(res, add )
+      }
+
+      return out;
+    },
+
+    // These characters are intersting elsewhere, so have rules for them so that
+    // chunks of plain text blocks don't include them
+    "]": function () {},
+    "}": function () {},
+
+    __escape__ : /^\\[\\`\*_{}\[\]()#\+.!\-]/,
+
+    "\\": function escaped( text ) {
+      // [ length of input processed, node/children to add... ]
+      // Only esacape: \ ` * _ { } [ ] ( ) # * + - . !
+      if ( this.dialect.inline.__escape__.exec( text ) )
+        return [ 2, text.charAt( 1 ) ];
+      else
+        // Not an esacpe
+        return [ 1, "\\" ];
+    },
+
+    "![": function image( text ) {
+
+      // Unlike images, alt text is plain text only. no other elements are
+      // allowed in there
+
+      // ![Alt text](/path/to/img.jpg "Optional title")
+      //      1          2            3       4         <--- captures
+      var m = text.match( /^!\[(.*?)\][ \t]*\([ \t]*([^")]*?)(?:[ \t]+(["'])(.*?)\3)?[ \t]*\)/ );
+
+      if ( m ) {
+        if ( m[2] && m[2][0] == "<" && m[2][m[2].length-1] == ">" )
+          m[2] = m[2].substring( 1, m[2].length - 1 );
+
+        m[2] = this.dialect.inline.__call__.call( this, m[2], /\\/ )[0];
+
+        var attrs = { alt: m[1], href: m[2] || "" };
+        if ( m[4] !== undefined)
+          attrs.title = m[4];
+
+        return [ m[0].length, [ "img", attrs ] ];
+      }
+
+      // ![Alt text][id]
+      m = text.match( /^!\[(.*?)\][ \t]*\[(.*?)\]/ );
+
+      if ( m ) {
+        // We can't check if the reference is known here as it likely wont be
+        // found till after. Check it in md tree->hmtl tree conversion
+        return [ m[0].length, [ "img_ref", { alt: m[1], ref: m[2].toLowerCase(), original: m[0] } ] ];
+      }
+
+      // Just consume the '!['
+      return [ 2, "![" ];
+    },
+
+    "[": function link( text ) {
+
+      var orig = String(text);
+      // Inline content is possible inside `link text`
+      var res = Markdown.DialectHelpers.inline_until_char.call( this, text.substr(1), "]" );
+
+      // No closing ']' found. Just consume the [
+      if ( !res ) return [ 1, "[" ];
+
+      var consumed = 1 + res[ 0 ],
+          children = res[ 1 ],
+          link,
+          attrs;
+
+      // At this point the first [...] has been parsed. See what follows to find
+      // out which kind of link we are (reference or direct url)
+      text = text.substr( consumed );
+
+      // [link text](/path/to/img.jpg "Optional title")
+      //                 1            2       3         <--- captures
+      // This will capture up to the last paren in the block. We then pull
+      // back based on if there a matching ones in the url
+      //    ([here](/url/(test))
+      // The parens have to be balanced
+      var m = text.match( /^\s*\([ \t]*([^"']*)(?:[ \t]+(["'])(.*?)\2)?[ \t]*\)/ );
+      if ( m ) {
+        var url = m[1];
+        consumed += m[0].length;
+
+        if ( url && url[0] == "<" && url[url.length-1] == ">" )
+          url = url.substring( 1, url.length - 1 );
+
+        // If there is a title we don't have to worry about parens in the url
+        if ( !m[3] ) {
+          var open_parens = 1; // One open that isn't in the capture
+          for ( var len = 0; len < url.length; len++ ) {
+            switch ( url[len] ) {
+            case "(":
+              open_parens++;
+              break;
+            case ")":
+              if ( --open_parens == 0) {
+                consumed -= url.length - len;
+                url = url.substring(0, len);
+              }
+              break;
+            }
+          }
+        }
+
+        // Process escapes only
+        url = this.dialect.inline.__call__.call( this, url, /\\/ )[0];
+
+        attrs = { href: url || "" };
+        if ( m[3] !== undefined)
+          attrs.title = m[3];
+
+        link = [ "link", attrs ].concat( children );
+        return [ consumed, link ];
+      }
+
+      // [Alt text][id]
+      // [Alt text] [id]
+      m = text.match( /^\s*\[(.*?)\]/ );
+
+      if ( m ) {
+
+        consumed += m[ 0 ].length;
+
+        // [links][] uses links as its reference
+        attrs = { ref: ( m[ 1 ] || String(children) ).toLowerCase(),  original: orig.substr( 0, consumed ) };
+
+        link = [ "link_ref", attrs ].concat( children );
+
+        // We can't check if the reference is known here as it likely wont be
+        // found till after. Check it in md tree->hmtl tree conversion.
+        // Store the original so that conversion can revert if the ref isn't found.
+        return [ consumed, link ];
+      }
+
+      // [id]
+      // Only if id is plain (no formatting.)
+      if ( children.length == 1 && typeof children[0] == "string" ) {
+
+        attrs = { ref: children[0].toLowerCase(),  original: orig.substr( 0, consumed ) };
+        link = [ "link_ref", attrs, children[0] ];
+        return [ consumed, link ];
+      }
+
+      // Just consume the "["
+      return [ 1, "[" ];
+    },
+
+
+    "<": function autoLink( text ) {
+      var m;
+
+      if ( ( m = text.match( /^<(?:((https?|ftp|mailto):[^>]+)|(.*?@.*?\.[a-zA-Z]+))>/ ) ) != null ) {
+        if ( m[3] ) {
+          return [ m[0].length, [ "link", { href: "mailto:" + m[3] }, m[3] ] ];
+
+        }
+        else if ( m[2] == "mailto" ) {
+          return [ m[0].length, [ "link", { href: m[1] }, m[1].substr("mailto:".length ) ] ];
+        }
+        else
+          return [ m[0].length, [ "link", { href: m[1] }, m[1] ] ];
+      }
+
+      return [ 1, "<" ];
+    },
+
+    "`": function inlineCode( text ) {
+      // Inline code block. as many backticks as you like to start it
+      // Always skip over the opening ticks.
+      var m = text.match( /(`+)(([\s\S]*?)\1)/ );
+
+      if ( m && m[2] )
+        return [ m[1].length + m[2].length, [ "inlinecode", m[3] ] ];
+      else {
+        // TODO: No matching end code found - warn!
+        return [ 1, "`" ];
+      }
+    },
+
+    "  \n": function lineBreak( text ) {
+      return [ 3, [ "linebreak" ] ];
+    }
+
+};
+
+// Meta Helper/generator method for em and strong handling
+function strong_em( tag, md ) {
+
+  var state_slot = tag + "_state",
+      other_slot = tag == "strong" ? "em_state" : "strong_state";
+
+  function CloseTag(len) {
+    this.len_after = len;
+    this.name = "close_" + md;
+  }
+
+  return function ( text, orig_match ) {
+
+    if ( this[state_slot][0] == md ) {
+      // Most recent em is of this type
+      //D:this.debug("closing", md);
+      this[state_slot].shift();
+
+      // "Consume" everything to go back to the recrusion in the else-block below
+      return[ text.length, new CloseTag(text.length-md.length) ];
+    }
+    else {
+      // Store a clone of the em/strong states
+      var other = this[other_slot].slice(),
+          state = this[state_slot].slice();
+
+      this[state_slot].unshift(md);
+
+      //D:this.debug_indent += "  ";
+
+      // Recurse
+      var res = this.processInline( text.substr( md.length ) );
+      //D:this.debug_indent = this.debug_indent.substr(2);
+
+      var last = res[res.length - 1];
+
+      //D:this.debug("processInline from", tag + ": ", uneval( res ) );
+
+      var check = this[state_slot].shift();
+      if ( last instanceof CloseTag ) {
+        res.pop();
+        // We matched! Huzzah.
+        var consumed = text.length - last.len_after;
+        return [ consumed, [ tag ].concat(res) ];
+      }
+      else {
+        // Restore the state of the other kind. We might have mistakenly closed it.
+        this[other_slot] = other;
+        this[state_slot] = state;
+
+        // We can't reuse the processed result as it could have wrong parsing contexts in it.
+        return [ md.length, md ];
+      }
+    }
+  }; // End returned function
+}
+
+Markdown.dialects.Gruber.inline["**"] = strong_em("strong", "**");
+Markdown.dialects.Gruber.inline["__"] = strong_em("strong", "__");
+Markdown.dialects.Gruber.inline["*"]  = strong_em("em", "*");
+Markdown.dialects.Gruber.inline["_"]  = strong_em("em", "_");
+
+
+// Build default order from insertion order.
+Markdown.buildBlockOrder = function(d) {
+  var ord = [];
+  for ( var i in d ) {
+    if ( i == "__order__" || i == "__call__" ) continue;
+    ord.push( i );
+  }
+  d.__order__ = ord;
+};
+
+// Build patterns for inline matcher
+Markdown.buildInlinePatterns = function(d) {
+  var patterns = [];
+
+  for ( var i in d ) {
+    // __foo__ is reserved and not a pattern
+    if ( i.match( /^__.*__$/) ) continue;
+    var l = i.replace( /([\\.*+?|()\[\]{}])/g, "\\$1" )
+             .replace( /\n/, "\\n" );
+    patterns.push( i.length == 1 ? l : "(?:" + l + ")" );
+  }
+
+  patterns = patterns.join("|");
+  d.__patterns__ = patterns;
+  //print("patterns:", uneval( patterns ) );
+
+  var fn = d.__call__;
+  d.__call__ = function(text, pattern) {
+    if ( pattern != undefined ) {
+      return fn.call(this, text, pattern);
+    }
+    else
+    {
+      return fn.call(this, text, patterns);
+    }
+  };
+};
+
+Markdown.DialectHelpers = {};
+Markdown.DialectHelpers.inline_until_char = function( text, want ) {
+  var consumed = 0,
+      nodes = [];
+
+  while ( true ) {
+    if ( text.charAt( consumed ) == want ) {
+      // Found the character we were looking for
+      consumed++;
+      return [ consumed, nodes ];
+    }
+
+    if ( consumed >= text.length ) {
+      // No closing char found. Abort.
+      return null;
+    }
+
+    var res = this.dialect.inline.__oneElement__.call(this, text.substr( consumed ) );
+    consumed += res[ 0 ];
+    // Add any returned nodes.
+    nodes.push.apply( nodes, res.slice( 1 ) );
+  }
+}
+
+// Helper function to make sub-classing a dialect easier
+Markdown.subclassDialect = function( d ) {
+  function Block() {}
+  Block.prototype = d.block;
+  function Inline() {}
+  Inline.prototype = d.inline;
+
+  return { block: new Block(), inline: new Inline() };
+};
+
+Markdown.buildBlockOrder ( Markdown.dialects.Gruber.block );
+Markdown.buildInlinePatterns( Markdown.dialects.Gruber.inline );
+
+Markdown.dialects.Maruku = Markdown.subclassDialect( Markdown.dialects.Gruber );
+
+Markdown.dialects.Maruku.processMetaHash = function processMetaHash( meta_string ) {
+  var meta = split_meta_hash( meta_string ),
+      attr = {};
+
+  for ( var i = 0; i < meta.length; ++i ) {
+    // id: #foo
+    if ( /^#/.test( meta[ i ] ) ) {
+      attr.id = meta[ i ].substring( 1 );
+    }
+    // class: .foo
+    else if ( /^\./.test( meta[ i ] ) ) {
+      // if class already exists, append the new one
+      if ( attr["class"] ) {
+        attr["class"] = attr["class"] + meta[ i ].replace( /./, " " );
+      }
+      else {
+        attr["class"] = meta[ i ].substring( 1 );
+      }
+    }
+    // attribute: foo=bar
+    else if ( /\=/.test( meta[ i ] ) ) {
+      var s = meta[ i ].split( /\=/ );
+      attr[ s[ 0 ] ] = s[ 1 ];
+    }
+  }
+
+  return attr;
+}
+
+function split_meta_hash( meta_string ) {
+  var meta = meta_string.split( "" ),
+      parts = [ "" ],
+      in_quotes = false;
+
+  while ( meta.length ) {
+    var letter = meta.shift();
+    switch ( letter ) {
+      case " " :
+        // if we're in a quoted section, keep it
+        if ( in_quotes ) {
+          parts[ parts.length - 1 ] += letter;
+        }
+        // otherwise make a new part
+        else {
+          parts.push( "" );
+        }
+        break;
+      case "'" :
+      case '"' :
+        // reverse the quotes and move straight on
+        in_quotes = !in_quotes;
+        break;
+      case "\\" :
+        // shift off the next letter to be used straight away.
+        // it was escaped so we'll keep it whatever it is
+        letter = meta.shift();
+      default :
+        parts[ parts.length - 1 ] += letter;
+        break;
+    }
+  }
+
+  return parts;
+}
+
+Markdown.dialects.Maruku.block.document_meta = function document_meta( block, next ) {
+  // we're only interested in the first block
+  if ( block.lineNumber > 1 ) return undefined;
+
+  // document_meta blocks consist of one or more lines of `Key: Value\n`
+  if ( ! block.match( /^(?:\w+:.*\n)*\w+:.*$/ ) ) return undefined;
+
+  // make an attribute node if it doesn't exist
+  if ( !extract_attr( this.tree ) ) {
+    this.tree.splice( 1, 0, {} );
+  }
+
+  var pairs = block.split( /\n/ );
+  for ( p in pairs ) {
+    var m = pairs[ p ].match( /(\w+):\s*(.*)$/ ),
+        key = m[ 1 ].toLowerCase(),
+        value = m[ 2 ];
+
+    this.tree[ 1 ][ key ] = value;
+  }
+
+  // document_meta produces no content!
+  return [];
+};
+
+Markdown.dialects.Maruku.block.block_meta = function block_meta( block, next ) {
+  // check if the last line of the block is an meta hash
+  var m = block.match( /(^|\n) {0,3}\{:\s*((?:\\\}|[^\}])*)\s*\}$/ );
+  if ( !m ) return undefined;
+
+  // process the meta hash
+  var attr = this.dialect.processMetaHash( m[ 2 ] );
+
+  var hash;
+
+  // if we matched ^ then we need to apply meta to the previous block
+  if ( m[ 1 ] === "" ) {
+    var node = this.tree[ this.tree.length - 1 ];
+    hash = extract_attr( node );
+
+    // if the node is a string (rather than JsonML), bail
+    if ( typeof node === "string" ) return undefined;
+
+    // create the attribute hash if it doesn't exist
+    if ( !hash ) {
+      hash = {};
+      node.splice( 1, 0, hash );
+    }
+
+    // add the attributes in
+    for ( a in attr ) {
+      hash[ a ] = attr[ a ];
+    }
+
+    // return nothing so the meta hash is removed
+    return [];
+  }
+
+  // pull the meta hash off the block and process what's left
+  var b = block.replace( /\n.*$/, "" ),
+      result = this.processBlock( b, [] );
+
+  // get or make the attributes hash
+  hash = extract_attr( result[ 0 ] );
+  if ( !hash ) {
+    hash = {};
+    result[ 0 ].splice( 1, 0, hash );
+  }
+
+  // attach the attributes to the block
+  for ( a in attr ) {
+    hash[ a ] = attr[ a ];
+  }
+
+  return result;
+};
+
+Markdown.dialects.Maruku.block.definition_list = function definition_list( block, next ) {
+  // one or more terms followed by one or more definitions, in a single block
+  var tight = /^((?:[^\s:].*\n)+):\s+([\s\S]+)$/,
+      list = [ "dl" ],
+      i, m;
+
+  // see if we're dealing with a tight or loose block
+  if ( ( m = block.match( tight ) ) ) {
+    // pull subsequent tight DL blocks out of `next`
+    var blocks = [ block ];
+    while ( next.length && tight.exec( next[ 0 ] ) ) {
+      blocks.push( next.shift() );
+    }
+
+    for ( var b = 0; b < blocks.length; ++b ) {
+      var m = blocks[ b ].match( tight ),
+          terms = m[ 1 ].replace( /\n$/, "" ).split( /\n/ ),
+          defns = m[ 2 ].split( /\n:\s+/ );
+
+      // print( uneval( m ) );
+
+      for ( i = 0; i < terms.length; ++i ) {
+        list.push( [ "dt", terms[ i ] ] );
+      }
+
+      for ( i = 0; i < defns.length; ++i ) {
+        // run inline processing over the definition
+        list.push( [ "dd" ].concat( this.processInline( defns[ i ].replace( /(\n)\s+/, "$1" ) ) ) );
+      }
+    }
+  }
+  else {
+    return undefined;
+  }
+
+  return [ list ];
+};
+
+// splits on unescaped instances of @ch. If @ch is not a character the result
+// can be unpredictable
+
+Markdown.dialects.Maruku.block.table = function table (block, next) {
+
+    var _split_on_unescaped = function(s, ch) {
+        ch = ch || '\\s';
+        if (ch.match(/^[\\|\[\]{}?*.+^$]$/)) { ch = '\\' + ch; }
+        var res = [ ],
+            r = new RegExp('^((?:\\\\.|[^\\\\' + ch + '])*)' + ch + '(.*)'),
+            m;
+        while(m = s.match(r)) {
+            res.push(m[1]);
+            s = m[2];
+        }
+        res.push(s);
+        return res;
+    }
+
+    var leading_pipe = /^ {0,3}\|(.+)\n {0,3}\|\s*([\-:]+[\-| :]*)\n((?:\s*\|.*(?:\n|$))*)(?=\n|$)/,
+        // find at least an unescaped pipe in each line
+        no_leading_pipe = /^ {0,3}(\S(?:\\.|[^\\|])*\|.*)\n {0,3}([\-:]+\s*\|[\-| :]*)\n((?:(?:\\.|[^\\|])*\|.*(?:\n|$))*)(?=\n|$)/,
+        i, m;
+    if (m = block.match(leading_pipe)) {
+        // remove leading pipes in contents
+        // (header and horizontal rule already have the leading pipe left out)
+        m[3] = m[3].replace(/^\s*\|/gm, '');
+    } else if (! ( m = block.match(no_leading_pipe))) {
+        return undefined;
+    }
+
+    var table = [ "table", [ "thead", [ "tr" ] ], [ "tbody" ] ];
+
+    // remove trailing pipes, then split on pipes
+    // (no escaped pipes are allowed in horizontal rule)
+    m[2] = m[2].replace(/\|\s*$/, '').split('|');
+
+    // process alignment
+    var html_attrs = [ ];
+    forEach (m[2], function (s) {
+        if (s.match(/^\s*-+:\s*$/))       html_attrs.push({align: "right"});
+        else if (s.match(/^\s*:-+\s*$/))  html_attrs.push({align: "left"});
+        else if (s.match(/^\s*:-+:\s*$/)) html_attrs.push({align: "center"});
+        else                              html_attrs.push({});
+    });
+
+    // now for the header, avoid escaped pipes
+    m[1] = _split_on_unescaped(m[1].replace(/\|\s*$/, ''), '|');
+    for (i = 0; i < m[1].length; i++) {
+        table[1][1].push(['th', html_attrs[i] || {}].concat(
+            this.processInline(m[1][i].trim())));
+    }
+
+    // now for body contents
+    forEach (m[3].replace(/\|\s*$/mg, '').split('\n'), function (row) {
+        var html_row = ['tr'];
+        row = _split_on_unescaped(row, '|');
+        for (i = 0; i < row.length; i++) {
+            html_row.push(['td', html_attrs[i] || {}].concat(this.processInline(row[i].trim())));
+        }
+        table[2].push(html_row);
+    }, this);
+
+    return [table];
+}
+
+Markdown.dialects.Maruku.inline[ "{:" ] = function inline_meta( text, matches, out ) {
+  if ( !out.length ) {
+    return [ 2, "{:" ];
+  }
+
+  // get the preceeding element
+  var before = out[ out.length - 1 ];
+
+  if ( typeof before === "string" ) {
+    return [ 2, "{:" ];
+  }
+
+  // match a meta hash
+  var m = text.match( /^\{:\s*((?:\\\}|[^\}])*)\s*\}/ );
+
+  // no match, false alarm
+  if ( !m ) {
+    return [ 2, "{:" ];
+  }
+
+  // attach the attributes to the preceeding element
+  var meta = this.dialect.processMetaHash( m[ 1 ] ),
+      attr = extract_attr( before );
+
+  if ( !attr ) {
+    attr = {};
+    before.splice( 1, 0, attr );
+  }
+
+  for ( var k in meta ) {
+    attr[ k ] = meta[ k ];
+  }
+
+  // cut out the string and replace it with nothing
+  return [ m[ 0 ].length, "" ];
+};
+
+Markdown.dialects.Maruku.inline.__escape__ = /^\\[\\`\*_{}\[\]()#\+.!\-|:]/;
+
+Markdown.buildBlockOrder ( Markdown.dialects.Maruku.block );
+Markdown.buildInlinePatterns( Markdown.dialects.Maruku.inline );
+
+var isArray = Array.isArray || function(obj) {
+  return Object.prototype.toString.call(obj) == "[object Array]";
+};
+
+var forEach;
+// Don't mess with Array.prototype. Its not friendly
+if ( Array.prototype.forEach ) {
+  forEach = function( arr, cb, thisp ) {
+    return arr.forEach( cb, thisp );
+  };
+}
+else {
+  forEach = function(arr, cb, thisp) {
+    for (var i = 0; i < arr.length; i++) {
+      cb.call(thisp || arr, arr[i], i, arr);
+    }
+  }
+}
+
+var isEmpty = function( obj ) {
+  for ( var key in obj ) {
+    if ( hasOwnProperty.call( obj, key ) ) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+function extract_attr( jsonml ) {
+  return isArray(jsonml)
+      && jsonml.length > 1
+      && typeof jsonml[ 1 ] === "object"
+      && !( isArray(jsonml[ 1 ]) )
+      ? jsonml[ 1 ]
+      : undefined;
+}
+
+
+
+/**
+ *  renderJsonML( jsonml[, options] ) -> String
+ *  - jsonml (Array): JsonML array to render to XML
+ *  - options (Object): options
+ *
+ *  Converts the given JsonML into well-formed XML.
+ *
+ *  The options currently understood are:
+ *
+ *  - root (Boolean): wether or not the root node should be included in the
+ *    output, or just its children. The default `false` is to not include the
+ *    root itself.
+ */
+expose.renderJsonML = function( jsonml, options ) {
+  options = options || {};
+  // include the root element in the rendered output?
+  options.root = options.root || false;
+
+  var content = [];
+
+  if ( options.root ) {
+    content.push( render_tree( jsonml ) );
+  }
+  else {
+    jsonml.shift(); // get rid of the tag
+    if ( jsonml.length && typeof jsonml[ 0 ] === "object" && !( jsonml[ 0 ] instanceof Array ) ) {
+      jsonml.shift(); // get rid of the attributes
+    }
+
+    while ( jsonml.length ) {
+      content.push( render_tree( jsonml.shift() ) );
+    }
+  }
+
+  return content.join( "\n\n" );
+};
+
+function escapeHTML( text ) {
+  return text.replace( /&/g, "&amp;" )
+             .replace( /</g, "&lt;" )
+             .replace( />/g, "&gt;" )
+             .replace( /"/g, "&quot;" )
+             .replace( /'/g, "&#39;" );
+}
+
+function render_tree( jsonml ) {
+  // basic case
+  if ( typeof jsonml === "string" ) {
+    return escapeHTML( jsonml );
+  }
+
+  var tag = jsonml.shift(),
+      attributes = {},
+      content = [];
+
+  if ( jsonml.length && typeof jsonml[ 0 ] === "object" && !( jsonml[ 0 ] instanceof Array ) ) {
+    attributes = jsonml.shift();
+  }
+
+  while ( jsonml.length ) {
+    content.push( render_tree( jsonml.shift() ) );
+  }
+
+  var tag_attrs = "";
+  for ( var a in attributes ) {
+    tag_attrs += " " + a + '="' + escapeHTML( attributes[ a ] ) + '"';
+  }
+
+  // be careful about adding whitespace here for inline elements
+  if ( tag == "img" || tag == "br" || tag == "hr" ) {
+    return "<"+ tag + tag_attrs + "/>";
+  }
+  else {
+    return "<"+ tag + tag_attrs + ">" + content.join( "" ) + "</" + tag + ">";
+  }
+}
+
+function convert_tree_to_html( tree, references, options ) {
+  var i;
+  options = options || {};
+
+  // shallow clone
+  var jsonml = tree.slice( 0 );
+
+  if ( typeof options.preprocessTreeNode === "function" ) {
+      jsonml = options.preprocessTreeNode(jsonml, references);
+  }
+
+  // Clone attributes if they exist
+  var attrs = extract_attr( jsonml );
+  if ( attrs ) {
+    jsonml[ 1 ] = {};
+    for ( i in attrs ) {
+      jsonml[ 1 ][ i ] = attrs[ i ];
+    }
+    attrs = jsonml[ 1 ];
+  }
+
+  // basic case
+  if ( typeof jsonml === "string" ) {
+    return jsonml;
+  }
+
+  // convert this node
+  switch ( jsonml[ 0 ] ) {
+    case "header":
+      jsonml[ 0 ] = "h" + jsonml[ 1 ].level;
+      delete jsonml[ 1 ].level;
+      break;
+    case "bulletlist":
+      jsonml[ 0 ] = "ul";
+      break;
+    case "numberlist":
+      jsonml[ 0 ] = "ol";
+      break;
+    case "listitem":
+      jsonml[ 0 ] = "li";
+      break;
+    case "para":
+      jsonml[ 0 ] = "p";
+      break;
+    case "markdown":
+      jsonml[ 0 ] = "html";
+      if ( attrs ) delete attrs.references;
+      break;
+    case "code_block":
+      jsonml[ 0 ] = "pre";
+      i = attrs ? 2 : 1;
+      var code = [ "code" ];
+      code.push.apply( code, jsonml.splice( i, jsonml.length - i ) );
+      jsonml[ i ] = code;
+      break;
+    case "inlinecode":
+      jsonml[ 0 ] = "code";
+      break;
+    case "img":
+      jsonml[ 1 ].src = jsonml[ 1 ].href;
+      delete jsonml[ 1 ].href;
+      break;
+    case "linebreak":
+      jsonml[ 0 ] = "br";
+    break;
+    case "link":
+      jsonml[ 0 ] = "a";
+      break;
+    case "link_ref":
+      jsonml[ 0 ] = "a";
+
+      // grab this ref and clean up the attribute node
+      var ref = references[ attrs.ref ];
+
+      // if the reference exists, make the link
+      if ( ref ) {
+        delete attrs.ref;
+
+        // add in the href and title, if present
+        attrs.href = ref.href;
+        if ( ref.title ) {
+          attrs.title = ref.title;
+        }
+
+        // get rid of the unneeded original text
+        delete attrs.original;
+      }
+      // the reference doesn't exist, so revert to plain text
+      else {
+        return attrs.original;
+      }
+      break;
+    case "img_ref":
+      jsonml[ 0 ] = "img";
+
+      // grab this ref and clean up the attribute node
+      var ref = references[ attrs.ref ];
+
+      // if the reference exists, make the link
+      if ( ref ) {
+        delete attrs.ref;
+
+        // add in the href and title, if present
+        attrs.src = ref.href;
+        if ( ref.title ) {
+          attrs.title = ref.title;
+        }
+
+        // get rid of the unneeded original text
+        delete attrs.original;
+      }
+      // the reference doesn't exist, so revert to plain text
+      else {
+        return attrs.original;
+      }
+      break;
+  }
+
+  // convert all the children
+  i = 1;
+
+  // deal with the attribute node, if it exists
+  if ( attrs ) {
+    // if there are keys, skip over it
+    for ( var key in jsonml[ 1 ] ) {
+        i = 2;
+        break;
+    }
+    // if there aren't, remove it
+    if ( i === 1 ) {
+      jsonml.splice( i, 1 );
+    }
+  }
+
+  for ( ; i < jsonml.length; ++i ) {
+    jsonml[ i ] = convert_tree_to_html( jsonml[ i ], references, options );
+  }
+
+  return jsonml;
+}
+
+
+// merges adjacent text nodes into a single node
+function merge_text_nodes( jsonml ) {
+  // skip the tag name and attribute hash
+  var i = extract_attr( jsonml ) ? 2 : 1;
+
+  while ( i < jsonml.length ) {
+    // if it's a string check the next item too
+    if ( typeof jsonml[ i ] === "string" ) {
+      if ( i + 1 < jsonml.length && typeof jsonml[ i + 1 ] === "string" ) {
+        // merge the second string into the first and remove it
+        jsonml[ i ] += jsonml.splice( i + 1, 1 )[ 0 ];
+      }
+      else {
+        ++i;
+      }
+    }
+    // if it's not a string recurse
+    else {
+      merge_text_nodes( jsonml[ i ] );
+      ++i;
+    }
+  }
+}
+
+} )( (function() {
+  if ( typeof exports === "undefined" ) {
+    window.markdown = {};
+    return window.markdown;
+  }
+  else {
+    return exports;
+  }
+} )() );
+</script> 
+  <script>/*global define:false */
+/**
+ * Copyright 2012-2017 Craig Campbell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Mousetrap is a simple keyboard shortcut library for Javascript with
+ * no external dependencies
+ *
+ * @version 1.6.1
+ * @url craig.is/killing/mice
+ */
+(function(window, document, undefined) {
+
+    // Check if mousetrap is used inside browser, if not, return
+    if (!window) {
+        return;
+    }
+
+    /**
+     * mapping of special keycodes to their corresponding keys
+     *
+     * everything in this dictionary cannot use keypress events
+     * so it has to be here to map to the correct keycodes for
+     * keyup/keydown events
+     *
+     * @type {Object}
+     */
+    var _MAP = {
+        8: 'backspace',
+        9: 'tab',
+        13: 'enter',
+        16: 'shift',
+        17: 'ctrl',
+        18: 'alt',
+        20: 'capslock',
+        27: 'esc',
+        32: 'space',
+        33: 'pageup',
+        34: 'pagedown',
+        35: 'end',
+        36: 'home',
+        37: 'left',
+        38: 'up',
+        39: 'right',
+        40: 'down',
+        45: 'ins',
+        46: 'del',
+        91: 'meta',
+        93: 'meta',
+        224: 'meta'
+    };
+
+    /**
+     * mapping for special characters so they can support
+     *
+     * this dictionary is only used incase you want to bind a
+     * keyup or keydown event to one of these keys
+     *
+     * @type {Object}
+     */
+    var _KEYCODE_MAP = {
+        106: '*',
+        107: '+',
+        109: '-',
+        110: '.',
+        111 : '/',
+        186: ';',
+        187: '=',
+        188: ',',
+        189: '-',
+        190: '.',
+        191: '/',
+        192: '`',
+        219: '[',
+        220: '\\',
+        221: ']',
+        222: '\''
+    };
+
+    /**
+     * this is a mapping of keys that require shift on a US keypad
+     * back to the non shift equivelents
+     *
+     * this is so you can use keyup events with these keys
+     *
+     * note that this will only work reliably on US keyboards
+     *
+     * @type {Object}
+     */
+    var _SHIFT_MAP = {
+        '~': '`',
+        '!': '1',
+        '@': '2',
+        '#': '3',
+        '$': '4',
+        '%': '5',
+        '^': '6',
+        '&': '7',
+        '*': '8',
+        '(': '9',
+        ')': '0',
+        '_': '-',
+        '+': '=',
+        ':': ';',
+        '\"': '\'',
+        '<': ',',
+        '>': '.',
+        '?': '/',
+        '|': '\\'
+    };
+
+    /**
+     * this is a list of special strings you can use to map
+     * to modifier keys when you specify your keyboard shortcuts
+     *
+     * @type {Object}
+     */
+    var _SPECIAL_ALIASES = {
+        'option': 'alt',
+        'command': 'meta',
+        'return': 'enter',
+        'escape': 'esc',
+        'plus': '+',
+        'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'
+    };
+
+    /**
+     * variable to store the flipped version of _MAP from above
+     * needed to check if we should use keypress or not when no action
+     * is specified
+     *
+     * @type {Object|undefined}
+     */
+    var _REVERSE_MAP;
+
+    /**
+     * loop through the f keys, f1 to f19 and add them to the map
+     * programatically
+     */
+    for (var i = 1; i < 20; ++i) {
+        _MAP[111 + i] = 'f' + i;
+    }
+
+    /**
+     * loop through to map numbers on the numeric keypad
+     */
+    for (i = 0; i <= 9; ++i) {
+
+        // This needs to use a string cause otherwise since 0 is falsey
+        // mousetrap will never fire for numpad 0 pressed as part of a keydown
+        // event.
+        //
+        // @see https://github.com/ccampbell/mousetrap/pull/258
+        _MAP[i + 96] = i.toString();
+    }
+
+    /**
+     * cross browser add event method
+     *
+     * @param {Element|HTMLDocument} object
+     * @param {string} type
+     * @param {Function} callback
+     * @returns void
+     */
+    function _addEvent(object, type, callback) {
+        if (object.addEventListener) {
+            object.addEventListener(type, callback, false);
+            return;
+        }
+
+        object.attachEvent('on' + type, callback);
+    }
+
+    /**
+     * takes the event and returns the key character
+     *
+     * @param {Event} e
+     * @return {string}
+     */
+    function _characterFromEvent(e) {
+
+        // for keypress events we should return the character as is
+        if (e.type == 'keypress') {
+            var character = String.fromCharCode(e.which);
+
+            // if the shift key is not pressed then it is safe to assume
+            // that we want the character to be lowercase.  this means if
+            // you accidentally have caps lock on then your key bindings
+            // will continue to work
+            //
+            // the only side effect that might not be desired is if you
+            // bind something like 'A' cause you want to trigger an
+            // event when capital A is pressed caps lock will no longer
+            // trigger the event.  shift+a will though.
+            if (!e.shiftKey) {
+                character = character.toLowerCase();
+            }
+
+            return character;
+        }
+
+        // for non keypress events the special maps are needed
+        if (_MAP[e.which]) {
+            return _MAP[e.which];
+        }
+
+        if (_KEYCODE_MAP[e.which]) {
+            return _KEYCODE_MAP[e.which];
+        }
+
+        // if it is not in the special map
+
+        // with keydown and keyup events the character seems to always
+        // come in as an uppercase character whether you are pressing shift
+        // or not.  we should make sure it is always lowercase for comparisons
+        return String.fromCharCode(e.which).toLowerCase();
+    }
+
+    /**
+     * checks if two arrays are equal
+     *
+     * @param {Array} modifiers1
+     * @param {Array} modifiers2
+     * @returns {boolean}
+     */
+    function _modifiersMatch(modifiers1, modifiers2) {
+        return modifiers1.sort().join(',') === modifiers2.sort().join(',');
+    }
+
+    /**
+     * takes a key event and figures out what the modifiers are
+     *
+     * @param {Event} e
+     * @returns {Array}
+     */
+    function _eventModifiers(e) {
+        var modifiers = [];
+
+        if (e.shiftKey) {
+            modifiers.push('shift');
+        }
+
+        if (e.altKey) {
+            modifiers.push('alt');
+        }
+
+        if (e.ctrlKey) {
+            modifiers.push('ctrl');
+        }
+
+        if (e.metaKey) {
+            modifiers.push('meta');
+        }
+
+        return modifiers;
+    }
+
+    /**
+     * prevents default for this event
+     *
+     * @param {Event} e
+     * @returns void
+     */
+    function _preventDefault(e) {
+        if (e.preventDefault) {
+            e.preventDefault();
+            return;
+        }
+
+        e.returnValue = false;
+    }
+
+    /**
+     * stops propogation for this event
+     *
+     * @param {Event} e
+     * @returns void
+     */
+    function _stopPropagation(e) {
+        if (e.stopPropagation) {
+            e.stopPropagation();
+            return;
+        }
+
+        e.cancelBubble = true;
+    }
+
+    /**
+     * determines if the keycode specified is a modifier key or not
+     *
+     * @param {string} key
+     * @returns {boolean}
+     */
+    function _isModifier(key) {
+        return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';
+    }
+
+    /**
+     * reverses the map lookup so that we can look for specific keys
+     * to see what can and can't use keypress
+     *
+     * @return {Object}
+     */
+    function _getReverseMap() {
+        if (!_REVERSE_MAP) {
+            _REVERSE_MAP = {};
+            for (var key in _MAP) {
+
+                // pull out the numeric keypad from here cause keypress should
+                // be able to detect the keys from the character
+                if (key > 95 && key < 112) {
+                    continue;
+                }
+
+                if (_MAP.hasOwnProperty(key)) {
+                    _REVERSE_MAP[_MAP[key]] = key;
+                }
+            }
+        }
+        return _REVERSE_MAP;
+    }
+
+    /**
+     * picks the best action based on the key combination
+     *
+     * @param {string} key - character for key
+     * @param {Array} modifiers
+     * @param {string=} action passed in
+     */
+    function _pickBestAction(key, modifiers, action) {
+
+        // if no action was picked in we should try to pick the one
+        // that we think would work best for this key
+        if (!action) {
+            action = _getReverseMap()[key] ? 'keydown' : 'keypress';
+        }
+
+        // modifier keys don't work as expected with keypress,
+        // switch to keydown
+        if (action == 'keypress' && modifiers.length) {
+            action = 'keydown';
+        }
+
+        return action;
+    }
+
+    /**
+     * Converts from a string key combination to an array
+     *
+     * @param  {string} combination like "command+shift+l"
+     * @return {Array}
+     */
+    function _keysFromString(combination) {
+        if (combination === '+') {
+            return ['+'];
+        }
+
+        combination = combination.replace(/\+{2}/g, '+plus');
+        return combination.split('+');
+    }
+
+    /**
+     * Gets info for a specific key combination
+     *
+     * @param  {string} combination key combination ("command+s" or "a" or "*")
+     * @param  {string=} action
+     * @returns {Object}
+     */
+    function _getKeyInfo(combination, action) {
+        var keys;
+        var key;
+        var i;
+        var modifiers = [];
+
+        // take the keys from this pattern and figure out what the actual
+        // pattern is all about
+        keys = _keysFromString(combination);
+
+        for (i = 0; i < keys.length; ++i) {
+            key = keys[i];
+
+            // normalize key names
+            if (_SPECIAL_ALIASES[key]) {
+                key = _SPECIAL_ALIASES[key];
+            }
+
+            // if this is not a keypress event then we should
+            // be smart about using shift keys
+            // this will only work for US keyboards however
+            if (action && action != 'keypress' && _SHIFT_MAP[key]) {
+                key = _SHIFT_MAP[key];
+                modifiers.push('shift');
+            }
+
+            // if this key is a modifier then add it to the list of modifiers
+            if (_isModifier(key)) {
+                modifiers.push(key);
+            }
+        }
+
+        // depending on what the key combination is
+        // we will try to pick the best event for it
+        action = _pickBestAction(key, modifiers, action);
+
+        return {
+            key: key,
+            modifiers: modifiers,
+            action: action
+        };
+    }
+
+    function _belongsTo(element, ancestor) {
+        if (element === null || element === document) {
+            return false;
+        }
+
+        if (element === ancestor) {
+            return true;
+        }
+
+        return _belongsTo(element.parentNode, ancestor);
+    }
+
+    function Mousetrap(targetElement) {
+        var self = this;
+
+        targetElement = targetElement || document;
+
+        if (!(self instanceof Mousetrap)) {
+            return new Mousetrap(targetElement);
+        }
+
+        /**
+         * element to attach key events to
+         *
+         * @type {Element}
+         */
+        self.target = targetElement;
+
+        /**
+         * a list of all the callbacks setup via Mousetrap.bind()
+         *
+         * @type {Object}
+         */
+        self._callbacks = {};
+
+        /**
+         * direct map of string combinations to callbacks used for trigger()
+         *
+         * @type {Object}
+         */
+        self._directMap = {};
+
+        /**
+         * keeps track of what level each sequence is at since multiple
+         * sequences can start out with the same sequence
+         *
+         * @type {Object}
+         */
+        var _sequenceLevels = {};
+
+        /**
+         * variable to store the setTimeout call
+         *
+         * @type {null|number}
+         */
+        var _resetTimer;
+
+        /**
+         * temporary state where we will ignore the next keyup
+         *
+         * @type {boolean|string}
+         */
+        var _ignoreNextKeyup = false;
+
+        /**
+         * temporary state where we will ignore the next keypress
+         *
+         * @type {boolean}
+         */
+        var _ignoreNextKeypress = false;
+
+        /**
+         * are we currently inside of a sequence?
+         * type of action ("keyup" or "keydown" or "keypress") or false
+         *
+         * @type {boolean|string}
+         */
+        var _nextExpectedAction = false;
+
+        /**
+         * resets all sequence counters except for the ones passed in
+         *
+         * @param {Object} doNotReset
+         * @returns void
+         */
+        function _resetSequences(doNotReset) {
+            doNotReset = doNotReset || {};
+
+            var activeSequences = false,
+                key;
+
+            for (key in _sequenceLevels) {
+                if (doNotReset[key]) {
+                    activeSequences = true;
+                    continue;
+                }
+                _sequenceLevels[key] = 0;
+            }
+
+            if (!activeSequences) {
+                _nextExpectedAction = false;
+            }
+        }
+
+        /**
+         * finds all callbacks that match based on the keycode, modifiers,
+         * and action
+         *
+         * @param {string} character
+         * @param {Array} modifiers
+         * @param {Event|Object} e
+         * @param {string=} sequenceName - name of the sequence we are looking for
+         * @param {string=} combination
+         * @param {number=} level
+         * @returns {Array}
+         */
+        function _getMatches(character, modifiers, e, sequenceName, combination, level) {
+            var i;
+            var callback;
+            var matches = [];
+            var action = e.type;
+
+            // if there are no events related to this keycode
+            if (!self._callbacks[character]) {
+                return [];
+            }
+
+            // if a modifier key is coming up on its own we should allow it
+            if (action == 'keyup' && _isModifier(character)) {
+                modifiers = [character];
+            }
+
+            // loop through all callbacks for the key that was pressed
+            // and see if any of them match
+            for (i = 0; i < self._callbacks[character].length; ++i) {
+                callback = self._callbacks[character][i];
+
+                // if a sequence name is not specified, but this is a sequence at
+                // the wrong level then move onto the next match
+                if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {
+                    continue;
+                }
+
+                // if the action we are looking for doesn't match the action we got
+                // then we should keep going
+                if (action != callback.action) {
+                    continue;
+                }
+
+                // if this is a keypress event and the meta key and control key
+                // are not pressed that means that we need to only look at the
+                // character, otherwise check the modifiers as well
+                //
+                // chrome will not fire a keypress if meta or control is down
+                // safari will fire a keypress if meta or meta+shift is down
+                // firefox will fire a keypress if meta or control is down
+                if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {
+
+                    // when you bind a combination or sequence a second time it
+                    // should overwrite the first one.  if a sequenceName or
+                    // combination is specified in this call it does just that
+                    //
+                    // @todo make deleting its own method?
+                    var deleteCombo = !sequenceName && callback.combo == combination;
+                    var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;
+                    if (deleteCombo || deleteSequence) {
+                        self._callbacks[character].splice(i, 1);
+                    }
+
+                    matches.push(callback);
+                }
+            }
+
+            return matches;
+        }
+
+        /**
+         * actually calls the callback function
+         *
+         * if your callback function returns false this will use the jquery
+         * convention - prevent default and stop propogation on the event
+         *
+         * @param {Function} callback
+         * @param {Event} e
+         * @returns void
+         */
+        function _fireCallback(callback, e, combo, sequence) {
+
+            // if this event should not happen stop here
+            if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {
+                return;
+            }
+
+            if (callback(e, combo) === false) {
+                _preventDefault(e);
+                _stopPropagation(e);
+            }
+        }
+
+        /**
+         * handles a character key event
+         *
+         * @param {string} character
+         * @param {Array} modifiers
+         * @param {Event} e
+         * @returns void
+         */
+        self._handleKey = function(character, modifiers, e) {
+            var callbacks = _getMatches(character, modifiers, e);
+            var i;
+            var doNotReset = {};
+            var maxLevel = 0;
+            var processedSequenceCallback = false;
+
+            // Calculate the maxLevel for sequences so we can only execute the longest callback sequence
+            for (i = 0; i < callbacks.length; ++i) {
+                if (callbacks[i].seq) {
+                    maxLevel = Math.max(maxLevel, callbacks[i].level);
+                }
+            }
+
+            // loop through matching callbacks for this key event
+            for (i = 0; i < callbacks.length; ++i) {
+
+                // fire for all sequence callbacks
+                // this is because if for example you have multiple sequences
+                // bound such as "g i" and "g t" they both need to fire the
+                // callback for matching g cause otherwise you can only ever
+                // match the first one
+                if (callbacks[i].seq) {
+
+                    // only fire callbacks for the maxLevel to prevent
+                    // subsequences from also firing
+                    //
+                    // for example 'a option b' should not cause 'option b' to fire
+                    // even though 'option b' is part of the other sequence
+                    //
+                    // any sequences that do not match here will be discarded
+                    // below by the _resetSequences call
+                    if (callbacks[i].level != maxLevel) {
+                        continue;
+                    }
+
+                    processedSequenceCallback = true;
+
+                    // keep a list of which sequences were matches for later
+                    doNotReset[callbacks[i].seq] = 1;
+                    _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);
+                    continue;
+                }
+
+                // if there were no sequence matches but we are still here
+                // that means this is a regular match so we should fire that
+                if (!processedSequenceCallback) {
+                    _fireCallback(callbacks[i].callback, e, callbacks[i].combo);
+                }
+            }
+
+            // if the key you pressed matches the type of sequence without
+            // being a modifier (ie "keyup" or "keypress") then we should
+            // reset all sequences that were not matched by this event
+            //
+            // this is so, for example, if you have the sequence "h a t" and you
+            // type "h e a r t" it does not match.  in this case the "e" will
+            // cause the sequence to reset
+            //
+            // modifier keys are ignored because you can have a sequence
+            // that contains modifiers such as "enter ctrl+space" and in most
+            // cases the modifier key will be pressed before the next key
+            //
+            // also if you have a sequence such as "ctrl+b a" then pressing the
+            // "b" key will trigger a "keypress" and a "keydown"
+            //
+            // the "keydown" is expected when there is a modifier, but the
+            // "keypress" ends up matching the _nextExpectedAction since it occurs
+            // after and that causes the sequence to reset
+            //
+            // we ignore keypresses in a sequence that directly follow a keydown
+            // for the same character
+            var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;
+            if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {
+                _resetSequences(doNotReset);
+            }
+
+            _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';
+        };
+
+        /**
+         * handles a keydown event
+         *
+         * @param {Event} e
+         * @returns void
+         */
+        function _handleKeyEvent(e) {
+
+            // normalize e.which for key events
+            // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion
+            if (typeof e.which !== 'number') {
+                e.which = e.keyCode;
+            }
+
+            var character = _characterFromEvent(e);
+
+            // no character found then stop
+            if (!character) {
+                return;
+            }
+
+            // need to use === for the character check because the character can be 0
+            if (e.type == 'keyup' && _ignoreNextKeyup === character) {
+                _ignoreNextKeyup = false;
+                return;
+            }
+
+            self.handleKey(character, _eventModifiers(e), e);
+        }
+
+        /**
+         * called to set a 1 second timeout on the specified sequence
+         *
+         * this is so after each key press in the sequence you have 1 second
+         * to press the next key before you have to start over
+         *
+         * @returns void
+         */
+        function _resetSequenceTimer() {
+            clearTimeout(_resetTimer);
+            _resetTimer = setTimeout(_resetSequences, 1000);
+        }
+
+        /**
+         * binds a key sequence to an event
+         *
+         * @param {string} combo - combo specified in bind call
+         * @param {Array} keys
+         * @param {Function} callback
+         * @param {string=} action
+         * @returns void
+         */
+        function _bindSequence(combo, keys, callback, action) {
+
+            // start off by adding a sequence level record for this combination
+            // and setting the level to 0
+            _sequenceLevels[combo] = 0;
+
+            /**
+             * callback to increase the sequence level for this sequence and reset
+             * all other sequences that were active
+             *
+             * @param {string} nextAction
+             * @returns {Function}
+             */
+            function _increaseSequence(nextAction) {
+                return function() {
+                    _nextExpectedAction = nextAction;
+                    ++_sequenceLevels[combo];
+                    _resetSequenceTimer();
+                };
+            }
+
+            /**
+             * wraps the specified callback inside of another function in order
+             * to reset all sequence counters as soon as this sequence is done
+             *
+             * @param {Event} e
+             * @returns void
+             */
+            function _callbackAndReset(e) {
+                _fireCallback(callback, e, combo);
+
+                // we should ignore the next key up if the action is key down
+                // or keypress.  this is so if you finish a sequence and
+                // release the key the final key will not trigger a keyup
+                if (action !== 'keyup') {
+                    _ignoreNextKeyup = _characterFromEvent(e);
+                }
+
+                // weird race condition if a sequence ends with the key
+                // another sequence begins with
+                setTimeout(_resetSequences, 10);
+            }
+
+            // loop through keys one at a time and bind the appropriate callback
+            // function.  for any key leading up to the final one it should
+            // increase the sequence. after the final, it should reset all sequences
+            //
+            // if an action is specified in the original bind call then that will
+            // be used throughout.  otherwise we will pass the action that the
+            // next key in the sequence should match.  this allows a sequence
+            // to mix and match keypress and keydown events depending on which
+            // ones are better suited to the key provided
+            for (var i = 0; i < keys.length; ++i) {
+                var isFinal = i + 1 === keys.length;
+                var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);
+                _bindSingle(keys[i], wrappedCallback, action, combo, i);
+            }
+        }
+
+        /**
+         * binds a single keyboard combination
+         *
+         * @param {string} combination
+         * @param {Function} callback
+         * @param {string=} action
+         * @param {string=} sequenceName - name of sequence if part of sequence
+         * @param {number=} level - what part of the sequence the command is
+         * @returns void
+         */
+        function _bindSingle(combination, callback, action, sequenceName, level) {
+
+            // store a direct mapped reference for use with Mousetrap.trigger
+            self._directMap[combination + ':' + action] = callback;
+
+            // make sure multiple spaces in a row become a single space
+            combination = combination.replace(/\s+/g, ' ');
+
+            var sequence = combination.split(' ');
+            var info;
+
+            // if this pattern is a sequence of keys then run through this method
+            // to reprocess each pattern one key at a time
+            if (sequence.length > 1) {
+                _bindSequence(combination, sequence, callback, action);
+                return;
+            }
+
+            info = _getKeyInfo(combination, action);
+
+            // make sure to initialize array if this is the first time
+            // a callback is added for this key
+            self._callbacks[info.key] = self._callbacks[info.key] || [];
+
+            // remove an existing match if there is one
+            _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);
+
+            // add this call back to the array
+            // if it is a sequence put it at the beginning
+            // if not put it at the end
+            //
+            // this is important because the way these are processed expects
+            // the sequence ones to come first
+            self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({
+                callback: callback,
+                modifiers: info.modifiers,
+                action: info.action,
+                seq: sequenceName,
+                level: level,
+                combo: combination
+            });
+        }
+
+        /**
+         * binds multiple combinations to the same callback
+         *
+         * @param {Array} combinations
+         * @param {Function} callback
+         * @param {string|undefined} action
+         * @returns void
+         */
+        self._bindMultiple = function(combinations, callback, action) {
+            for (var i = 0; i < combinations.length; ++i) {
+                _bindSingle(combinations[i], callback, action);
+            }
+        };
+
+        // start!
+        _addEvent(targetElement, 'keypress', _handleKeyEvent);
+        _addEvent(targetElement, 'keydown', _handleKeyEvent);
+        _addEvent(targetElement, 'keyup', _handleKeyEvent);
+    }
+
+    /**
+     * binds an event to mousetrap
+     *
+     * can be a single key, a combination of keys separated with +,
+     * an array of keys, or a sequence of keys separated by spaces
+     *
+     * be sure to list the modifier keys first to make sure that the
+     * correct key ends up getting bound (the last key in the pattern)
+     *
+     * @param {string|Array} keys
+     * @param {Function} callback
+     * @param {string=} action - 'keypress', 'keydown', or 'keyup'
+     * @returns void
+     */
+    Mousetrap.prototype.bind = function(keys, callback, action) {
+        var self = this;
+        keys = keys instanceof Array ? keys : [keys];
+        self._bindMultiple.call(self, keys, callback, action);
+        return self;
+    };
+
+    /**
+     * unbinds an event to mousetrap
+     *
+     * the unbinding sets the callback function of the specified key combo
+     * to an empty function and deletes the corresponding key in the
+     * _directMap dict.
+     *
+     * TODO: actually remove this from the _callbacks dictionary instead
+     * of binding an empty function
+     *
+     * the keycombo+action has to be exactly the same as
+     * it was defined in the bind method
+     *
+     * @param {string|Array} keys
+     * @param {string} action
+     * @returns void
+     */
+    Mousetrap.prototype.unbind = function(keys, action) {
+        var self = this;
+        return self.bind.call(self, keys, function() {}, action);
+    };
+
+    /**
+     * triggers an event that has already been bound
+     *
+     * @param {string} keys
+     * @param {string=} action
+     * @returns void
+     */
+    Mousetrap.prototype.trigger = function(keys, action) {
+        var self = this;
+        if (self._directMap[keys + ':' + action]) {
+            self._directMap[keys + ':' + action]({}, keys);
+        }
+        return self;
+    };
+
+    /**
+     * resets the library back to its initial state.  this is useful
+     * if you want to clear out the current keyboard shortcuts and bind
+     * new ones - for example if you switch to another page
+     *
+     * @returns void
+     */
+    Mousetrap.prototype.reset = function() {
+        var self = this;
+        self._callbacks = {};
+        self._directMap = {};
+        return self;
+    };
+
+    /**
+     * should we stop this event before firing off callbacks
+     *
+     * @param {Event} e
+     * @param {Element} element
+     * @return {boolean}
+     */
+    Mousetrap.prototype.stopCallback = function(e, element) {
+        var self = this;
+
+        // if the element has the class "mousetrap" then no need to stop
+        if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {
+            return false;
+        }
+
+        if (_belongsTo(element, self.target)) {
+            return false;
+        }
+
+        // stop for input, select, and textarea
+        return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;
+    };
+
+    /**
+     * exposes _handleKey publicly so it can be overwritten by extensions
+     */
+    Mousetrap.prototype.handleKey = function() {
+        var self = this;
+        return self._handleKey.apply(self, arguments);
+    };
+
+    /**
+     * allow custom key mappings
+     */
+    Mousetrap.addKeycodes = function(object) {
+        for (var key in object) {
+            if (object.hasOwnProperty(key)) {
+                _MAP[key] = object[key];
+            }
+        }
+        _REVERSE_MAP = null;
+    };
+
+    /**
+     * Init the global mousetrap functions
+     *
+     * This method is needed to allow the global mousetrap functions to work
+     * now that mousetrap is a constructor function.
+     */
+    Mousetrap.init = function() {
+        var documentMousetrap = Mousetrap(document);
+        for (var method in documentMousetrap) {
+            if (method.charAt(0) !== '_') {
+                Mousetrap[method] = (function(method) {
+                    return function() {
+                        return documentMousetrap[method].apply(documentMousetrap, arguments);
+                    };
+                } (method));
+            }
+        }
+    };
+
+    Mousetrap.init();
+
+    // expose mousetrap to the global object
+    window.Mousetrap = Mousetrap;
+
+    // expose as a common js module
+    if (typeof module !== 'undefined' && module.exports) {
+        module.exports = Mousetrap;
+    }
+
+    // expose mousetrap as an AMD module
+    if (typeof define === 'function' && define.amd) {
+        define(function() {
+            return Mousetrap;
+        });
+    }
+}) (typeof window !== 'undefined' ? window : null, typeof  window !== 'undefined' ? document : null);
+</script> 
+  <script>/*
+ Highcharts JS v6.0.4 (2017-12-15)
+
+ (c) 2009-2016 Torstein Honsi
+
+ License: www.highcharts.com/license
+*/
+(function(S,M){"object"===typeof module&&module.exports?module.exports=S.document?M(S):M:S.Highcharts=M(S)})("undefined"!==typeof window?window:this,function(S){var M=function(){var a="undefined"===typeof S?window:S,E=a.document,D=a.navigator&&a.navigator.userAgent||"",H=E&&E.createElementNS&&!!E.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,p=/(edge|msie|trident)/i.test(D)&&!a.opera,f=/Firefox/.test(D),l=f&&4>parseInt(D.split("Firefox/")[1],10);return a.Highcharts?a.Highcharts.error(16,
+!0):{product:"Highcharts",version:"6.0.4",deg2rad:2*Math.PI/360,doc:E,hasBidiBug:l,hasTouch:E&&void 0!==E.documentElement.ontouchstart,isMS:p,isWebKit:/AppleWebKit/.test(D),isFirefox:f,isTouchDevice:/(Mobile|Android|Windows Phone)/.test(D),SVG_NS:"http://www.w3.org/2000/svg",chartCount:0,seriesTypes:{},symbolSizes:{},svg:H,win:a,marginNames:["plotTop","marginRight","marginBottom","plotLeft"],noop:function(){},charts:[]}}();(function(a){a.timers=[];var E=a.charts,D=a.doc,H=a.win;a.error=function(p,
+f){p=a.isNumber(p)?"Highcharts error #"+p+": www.highcharts.com/errors/"+p:p;if(f)throw Error(p);H.console&&console.log(p)};a.Fx=function(a,f,l){this.options=f;this.elem=a;this.prop=l};a.Fx.prototype={dSetter:function(){var a=this.paths[0],f=this.paths[1],l=[],r=this.now,n=a.length,w;if(1===r)l=this.toD;else if(n===f.length&&1>r)for(;n--;)w=parseFloat(a[n]),l[n]=isNaN(w)?f[n]:r*parseFloat(f[n]-w)+w;else l=f;this.elem.attr("d",l,null,!0)},update:function(){var a=this.elem,f=this.prop,l=this.now,r=
+this.options.step;if(this[f+"Setter"])this[f+"Setter"]();else a.attr?a.element&&a.attr(f,l,null,!0):a.style[f]=l+this.unit;r&&r.call(a,l,this)},run:function(p,f,l){var r=this,n=r.options,w=function(a){return w.stopped?!1:r.step(a)},u=H.requestAnimationFrame||function(a){setTimeout(a,13)},e=function(){for(var h=0;h<a.timers.length;h++)a.timers[h]()||a.timers.splice(h--,1);a.timers.length&&u(e)};p===f?(delete n.curAnim[this.prop],n.complete&&0===a.keys(n.curAnim).length&&n.complete.call(this.elem)):
+(this.startTime=+new Date,this.start=p,this.end=f,this.unit=l,this.now=this.start,this.pos=0,w.elem=this.elem,w.prop=this.prop,w()&&1===a.timers.push(w)&&u(e))},step:function(p){var f=+new Date,l,r=this.options,n=this.elem,w=r.complete,u=r.duration,e=r.curAnim;n.attr&&!n.element?p=!1:p||f>=u+this.startTime?(this.now=this.end,this.pos=1,this.update(),l=e[this.prop]=!0,a.objectEach(e,function(a){!0!==a&&(l=!1)}),l&&w&&w.call(n),p=!1):(this.pos=r.easing((f-this.startTime)/u),this.now=this.start+(this.end-
+this.start)*this.pos,this.update(),p=!0);return p},initPath:function(p,f,l){function r(a){var b,c;for(k=a.length;k--;)b="M"===a[k]||"L"===a[k],c=/[a-zA-Z]/.test(a[k+3]),b&&c&&a.splice(k+1,0,a[k+1],a[k+2],a[k+1],a[k+2])}function n(a,b){for(;a.length<c;){a[0]=b[c-a.length];var e=a.slice(0,d);[].splice.apply(a,[0,0].concat(e));z&&(e=a.slice(a.length-d),[].splice.apply(a,[a.length,0].concat(e)),k--)}a[0]="M"}function w(a,k){for(var e=(c-a.length)/d;0<e&&e--;)b=a.slice().splice(a.length/B-d,d*B),b[0]=
+k[c-d-e*d],m&&(b[d-6]=b[d-2],b[d-5]=b[d-1]),[].splice.apply(a,[a.length/B,0].concat(b)),z&&e--}f=f||"";var u,e=p.startX,h=p.endX,m=-1<f.indexOf("C"),d=m?7:3,c,b,k;f=f.split(" ");l=l.slice();var z=p.isArea,B=z?2:1,I;m&&(r(f),r(l));if(e&&h){for(k=0;k<e.length;k++)if(e[k]===h[0]){u=k;break}else if(e[0]===h[h.length-e.length+k]){u=k;I=!0;break}void 0===u&&(f=[])}f.length&&a.isNumber(u)&&(c=l.length+u*B*d,I?(n(f,l),w(l,f)):(n(l,f),w(f,l)));return[f,l]}};a.Fx.prototype.fillSetter=a.Fx.prototype.strokeSetter=
+function(){this.elem.attr(this.prop,a.color(this.start).tweenTo(a.color(this.end),this.pos),null,!0)};a.extend=function(a,f){var l;a||(a={});for(l in f)a[l]=f[l];return a};a.merge=function(){var p,f=arguments,l,r={},n=function(l,p){"object"!==typeof l&&(l={});a.objectEach(p,function(e,h){!a.isObject(e,!0)||a.isClass(e)||a.isDOMElement(e)?l[h]=p[h]:l[h]=n(l[h]||{},e)});return l};!0===f[0]&&(r=f[1],f=Array.prototype.slice.call(f,2));l=f.length;for(p=0;p<l;p++)r=n(r,f[p]);return r};a.pInt=function(a,
+f){return parseInt(a,f||10)};a.isString=function(a){return"string"===typeof a};a.isArray=function(a){a=Object.prototype.toString.call(a);return"[object Array]"===a||"[object Array Iterator]"===a};a.isObject=function(p,f){return!!p&&"object"===typeof p&&(!f||!a.isArray(p))};a.isDOMElement=function(p){return a.isObject(p)&&"number"===typeof p.nodeType};a.isClass=function(p){var f=p&&p.constructor;return!(!a.isObject(p,!0)||a.isDOMElement(p)||!f||!f.name||"Object"===f.name)};a.isNumber=function(a){return"number"===
+typeof a&&!isNaN(a)&&Infinity>a&&-Infinity<a};a.erase=function(a,f){for(var l=a.length;l--;)if(a[l]===f){a.splice(l,1);break}};a.defined=function(a){return void 0!==a&&null!==a};a.attr=function(p,f,l){var r;a.isString(f)?a.defined(l)?p.setAttribute(f,l):p&&p.getAttribute&&(r=p.getAttribute(f)):a.defined(f)&&a.isObject(f)&&a.objectEach(f,function(a,l){p.setAttribute(l,a)});return r};a.splat=function(p){return a.isArray(p)?p:[p]};a.syncTimeout=function(a,f,l){if(f)return setTimeout(a,f,l);a.call(0,
+l)};a.pick=function(){var a=arguments,f,l,r=a.length;for(f=0;f<r;f++)if(l=a[f],void 0!==l&&null!==l)return l};a.css=function(p,f){a.isMS&&!a.svg&&f&&void 0!==f.opacity&&(f.filter="alpha(opacity\x3d"+100*f.opacity+")");a.extend(p.style,f)};a.createElement=function(p,f,l,r,n){p=D.createElement(p);var w=a.css;f&&a.extend(p,f);n&&w(p,{padding:0,border:"none",margin:0});l&&w(p,l);r&&r.appendChild(p);return p};a.extendClass=function(p,f){var l=function(){};l.prototype=new p;a.extend(l.prototype,f);return l};
+a.pad=function(a,f,l){return Array((f||2)+1-String(a).length).join(l||0)+a};a.relativeLength=function(a,f,l){return/%$/.test(a)?f*parseFloat(a)/100+(l||0):parseFloat(a)};a.wrap=function(a,f,l){var p=a[f];a[f]=function(){var a=Array.prototype.slice.call(arguments),f=arguments,u=this;u.proceed=function(){p.apply(u,arguments.length?arguments:f)};a.unshift(p);a=l.apply(this,a);u.proceed=null;return a}};a.getTZOffset=function(p){var f=a.Date;return 6E4*(f.hcGetTimezoneOffset&&f.hcGetTimezoneOffset(p)||
+f.hcTimezoneOffset||0)};a.dateFormat=function(p,f,l){if(!a.defined(f)||isNaN(f))return a.defaultOptions.lang.invalidDate||"";p=a.pick(p,"%Y-%m-%d %H:%M:%S");var r=a.Date,n=new r(f-a.getTZOffset(f)),w=n[r.hcGetHours](),u=n[r.hcGetDay](),e=n[r.hcGetDate](),h=n[r.hcGetMonth](),m=n[r.hcGetFullYear](),d=a.defaultOptions.lang,c=d.weekdays,b=d.shortWeekdays,k=a.pad,r=a.extend({a:b?b[u]:c[u].substr(0,3),A:c[u],d:k(e),e:k(e,2," "),w:u,b:d.shortMonths[h],B:d.months[h],m:k(h+1),y:m.toString().substr(2,2),Y:m,
+H:k(w),k:w,I:k(w%12||12),l:w%12||12,M:k(n[r.hcGetMinutes]()),p:12>w?"AM":"PM",P:12>w?"am":"pm",S:k(n.getSeconds()),L:k(Math.round(f%1E3),3)},a.dateFormats);a.objectEach(r,function(a,b){for(;-1!==p.indexOf("%"+b);)p=p.replace("%"+b,"function"===typeof a?a(f):a)});return l?p.substr(0,1).toUpperCase()+p.substr(1):p};a.formatSingle=function(p,f){var l=/\.([0-9])/,r=a.defaultOptions.lang;/f$/.test(p)?(l=(l=p.match(l))?l[1]:-1,null!==f&&(f=a.numberFormat(f,l,r.decimalPoint,-1<p.indexOf(",")?r.thousandsSep:
+""))):f=a.dateFormat(p,f);return f};a.format=function(p,f){for(var l="{",r=!1,n,w,u,e,h=[],m;p;){l=p.indexOf(l);if(-1===l)break;n=p.slice(0,l);if(r){n=n.split(":");w=n.shift().split(".");e=w.length;m=f;for(u=0;u<e;u++)m&&(m=m[w[u]]);n.length&&(m=a.formatSingle(n.join(":"),m));h.push(m)}else h.push(n);p=p.slice(l+1);l=(r=!r)?"}":"{"}h.push(p);return h.join("")};a.getMagnitude=function(a){return Math.pow(10,Math.floor(Math.log(a)/Math.LN10))};a.normalizeTickInterval=function(p,f,l,r,n){var w,u=p;l=
+a.pick(l,1);w=p/l;f||(f=n?[1,1.2,1.5,2,2.5,3,4,5,6,8,10]:[1,2,2.5,5,10],!1===r&&(1===l?f=a.grep(f,function(a){return 0===a%1}):.1>=l&&(f=[1/l])));for(r=0;r<f.length&&!(u=f[r],n&&u*l>=p||!n&&w<=(f[r]+(f[r+1]||f[r]))/2);r++);return u=a.correctFloat(u*l,-Math.round(Math.log(.001)/Math.LN10))};a.stableSort=function(a,f){var l=a.length,p,n;for(n=0;n<l;n++)a[n].safeI=n;a.sort(function(a,n){p=f(a,n);return 0===p?a.safeI-n.safeI:p});for(n=0;n<l;n++)delete a[n].safeI};a.arrayMin=function(a){for(var f=a.length,
+l=a[0];f--;)a[f]<l&&(l=a[f]);return l};a.arrayMax=function(a){for(var f=a.length,l=a[0];f--;)a[f]>l&&(l=a[f]);return l};a.destroyObjectProperties=function(p,f){a.objectEach(p,function(a,r){a&&a!==f&&a.destroy&&a.destroy();delete p[r]})};a.discardElement=function(p){var f=a.garbageBin;f||(f=a.createElement("div"));p&&f.appendChild(p);f.innerHTML=""};a.correctFloat=function(a,f){return parseFloat(a.toPrecision(f||14))};a.setAnimation=function(p,f){f.renderer.globalAnimation=a.pick(p,f.options.chart.animation,
+!0)};a.animObject=function(p){return a.isObject(p)?a.merge(p):{duration:p?500:0}};a.timeUnits={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5};a.numberFormat=function(p,f,l,r){p=+p||0;f=+f;var n=a.defaultOptions.lang,w=(p.toString().split(".")[1]||"").split("e")[0].length,u,e,h=p.toString().split("e");-1===f?f=Math.min(w,20):a.isNumber(f)?f&&h[1]&&0>h[1]&&(u=f+ +h[1],0<=u?(h[0]=(+h[0]).toExponential(u).split("e")[0],f=u):(h[0]=h[0].split(".")[0]||0,
+p=20>f?(h[0]*Math.pow(10,h[1])).toFixed(f):0,h[1]=0)):f=2;e=(Math.abs(h[1]?h[0]:p)+Math.pow(10,-Math.max(f,w)-1)).toFixed(f);w=String(a.pInt(e));u=3<w.length?w.length%3:0;l=a.pick(l,n.decimalPoint);r=a.pick(r,n.thousandsSep);p=(0>p?"-":"")+(u?w.substr(0,u)+r:"");p+=w.substr(u).replace(/(\d{3})(?=\d)/g,"$1"+r);f&&(p+=l+e.slice(-f));h[1]&&0!==+p&&(p+="e"+h[1]);return p};Math.easeInOutSine=function(a){return-.5*(Math.cos(Math.PI*a)-1)};a.getStyle=function(p,f,l){if("width"===f)return Math.min(p.offsetWidth,
+p.scrollWidth)-a.getStyle(p,"padding-left")-a.getStyle(p,"padding-right");if("height"===f)return Math.min(p.offsetHeight,p.scrollHeight)-a.getStyle(p,"padding-top")-a.getStyle(p,"padding-bottom");H.getComputedStyle||a.error(27,!0);if(p=H.getComputedStyle(p,void 0))p=p.getPropertyValue(f),a.pick(l,"opacity"!==f)&&(p=a.pInt(p));return p};a.inArray=function(p,f){return(a.indexOfPolyfill||Array.prototype.indexOf).call(f,p)};a.grep=function(p,f){return(a.filterPolyfill||Array.prototype.filter).call(p,
+f)};a.find=Array.prototype.find?function(a,f){return a.find(f)}:function(a,f){var l,r=a.length;for(l=0;l<r;l++)if(f(a[l],l))return a[l]};a.map=function(a,f){for(var l=[],r=0,n=a.length;r<n;r++)l[r]=f.call(a[r],a[r],r,a);return l};a.keys=function(p){return(a.keysPolyfill||Object.keys).call(void 0,p)};a.reduce=function(p,f,l){return(a.reducePolyfill||Array.prototype.reduce).call(p,f,l)};a.offset=function(a){var f=D.documentElement;a=a.parentElement?a.getBoundingClientRect():{top:0,left:0};return{top:a.top+
+(H.pageYOffset||f.scrollTop)-(f.clientTop||0),left:a.left+(H.pageXOffset||f.scrollLeft)-(f.clientLeft||0)}};a.stop=function(p,f){for(var l=a.timers.length;l--;)a.timers[l].elem!==p||f&&f!==a.timers[l].prop||(a.timers[l].stopped=!0)};a.each=function(p,f,l){return(a.forEachPolyfill||Array.prototype.forEach).call(p,f,l)};a.objectEach=function(a,f,l){for(var r in a)a.hasOwnProperty(r)&&f.call(l,a[r],r,a)};a.addEvent=function(p,f,l){var r,n,w=p.addEventListener||a.addEventListenerPolyfill;p.hcEvents&&
+!Object.prototype.hasOwnProperty.call(p,"hcEvents")&&(n={},a.objectEach(p.hcEvents,function(a,e){n[e]=a.slice(0)}),p.hcEvents=n);r=p.hcEvents=p.hcEvents||{};w&&w.call(p,f,l,!1);r[f]||(r[f]=[]);r[f].push(l);return function(){a.removeEvent(p,f,l)}};a.removeEvent=function(p,f,l){function r(e,m){var d=p.removeEventListener||a.removeEventListenerPolyfill;d&&d.call(p,e,m,!1)}function n(){var e,m;p.nodeName&&(f?(e={},e[f]=!0):e=u,a.objectEach(e,function(a,c){if(u[c])for(m=u[c].length;m--;)r(c,u[c][m])}))}
+var w,u=p.hcEvents,e;u&&(f?(w=u[f]||[],l?(e=a.inArray(l,w),-1<e&&(w.splice(e,1),u[f]=w),r(f,l)):(n(),u[f]=[])):(n(),p.hcEvents={}))};a.fireEvent=function(p,f,l,r){var n;n=p.hcEvents;var w,u;l=l||{};if(D.createEvent&&(p.dispatchEvent||p.fireEvent))n=D.createEvent("Events"),n.initEvent(f,!0,!0),a.extend(n,l),p.dispatchEvent?p.dispatchEvent(n):p.fireEvent(f,n);else if(n)for(n=n[f]||[],w=n.length,l.target||a.extend(l,{preventDefault:function(){l.defaultPrevented=!0},target:p,type:f}),f=0;f<w;f++)(u=n[f])&&
+!1===u.call(p,l)&&l.preventDefault();r&&!l.defaultPrevented&&r(l)};a.animate=function(p,f,l){var r,n="",w,u,e;a.isObject(l)||(e=arguments,l={duration:e[2],easing:e[3],complete:e[4]});a.isNumber(l.duration)||(l.duration=400);l.easing="function"===typeof l.easing?l.easing:Math[l.easing]||Math.easeInOutSine;l.curAnim=a.merge(f);a.objectEach(f,function(e,m){a.stop(p,m);u=new a.Fx(p,l,m);w=null;"d"===m?(u.paths=u.initPath(p,p.d,f.d),u.toD=f.d,r=0,w=1):p.attr?r=p.attr(m):(r=parseFloat(a.getStyle(p,m))||
+0,"opacity"!==m&&(n="px"));w||(w=e);w&&w.match&&w.match("px")&&(w=w.replace(/px/g,""));u.run(r,w,n)})};a.seriesType=function(p,f,l,r,n){var w=a.getOptions(),u=a.seriesTypes;w.plotOptions[p]=a.merge(w.plotOptions[f],l);u[p]=a.extendClass(u[f]||function(){},r);u[p].prototype.type=p;n&&(u[p].prototype.pointClass=a.extendClass(a.Point,n));return u[p]};a.uniqueKey=function(){var a=Math.random().toString(36).substring(2,9),f=0;return function(){return"highcharts-"+a+"-"+f++}}();H.jQuery&&(H.jQuery.fn.highcharts=
+function(){var p=[].slice.call(arguments);if(this[0])return p[0]?(new (a[a.isString(p[0])?p.shift():"Chart"])(this[0],p[0],p[1]),this):E[a.attr(this[0],"data-highcharts-chart")]})})(M);(function(a){var E=a.each,D=a.isNumber,H=a.map,p=a.merge,f=a.pInt;a.Color=function(l){if(!(this instanceof a.Color))return new a.Color(l);this.init(l)};a.Color.prototype={parsers:[{regex:/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,parse:function(a){return[f(a[1]),f(a[2]),
+f(a[3]),parseFloat(a[4],10)]}},{regex:/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,parse:function(a){return[f(a[1]),f(a[2]),f(a[3]),1]}}],names:{none:"rgba(255,255,255,0)",white:"#ffffff",black:"#000000"},init:function(l){var f,n,w,u;if((this.input=l=this.names[l&&l.toLowerCase?l.toLowerCase():""]||l)&&l.stops)this.stops=H(l.stops,function(e){return new a.Color(e[1])});else if(l&&l.charAt&&"#"===l.charAt()&&(f=l.length,l=parseInt(l.substr(1),16),7===f?n=[(l&16711680)>>16,(l&65280)>>
+8,l&255,1]:4===f&&(n=[(l&3840)>>4|(l&3840)>>8,(l&240)>>4|l&240,(l&15)<<4|l&15,1])),!n)for(w=this.parsers.length;w--&&!n;)u=this.parsers[w],(f=u.regex.exec(l))&&(n=u.parse(f));this.rgba=n||[]},get:function(a){var f=this.input,n=this.rgba,l;this.stops?(l=p(f),l.stops=[].concat(l.stops),E(this.stops,function(n,e){l.stops[e]=[l.stops[e][0],n.get(a)]})):l=n&&D(n[0])?"rgb"===a||!a&&1===n[3]?"rgb("+n[0]+","+n[1]+","+n[2]+")":"a"===a?n[3]:"rgba("+n.join(",")+")":f;return l},brighten:function(a){var l,n=this.rgba;
+if(this.stops)E(this.stops,function(n){n.brighten(a)});else if(D(a)&&0!==a)for(l=0;3>l;l++)n[l]+=f(255*a),0>n[l]&&(n[l]=0),255<n[l]&&(n[l]=255);return this},setOpacity:function(a){this.rgba[3]=a;return this},tweenTo:function(a,f){var n=this.rgba,l=a.rgba;l.length&&n&&n.length?(a=1!==l[3]||1!==n[3],f=(a?"rgba(":"rgb(")+Math.round(l[0]+(n[0]-l[0])*(1-f))+","+Math.round(l[1]+(n[1]-l[1])*(1-f))+","+Math.round(l[2]+(n[2]-l[2])*(1-f))+(a?","+(l[3]+(n[3]-l[3])*(1-f)):"")+")"):f=a.input||"none";return f}};
+a.color=function(l){return new a.Color(l)}})(M);(function(a){var E,D,H=a.addEvent,p=a.animate,f=a.attr,l=a.charts,r=a.color,n=a.css,w=a.createElement,u=a.defined,e=a.deg2rad,h=a.destroyObjectProperties,m=a.doc,d=a.each,c=a.extend,b=a.erase,k=a.grep,z=a.hasTouch,B=a.inArray,I=a.isArray,x=a.isFirefox,K=a.isMS,t=a.isObject,C=a.isString,N=a.isWebKit,q=a.merge,A=a.noop,F=a.objectEach,G=a.pick,g=a.pInt,v=a.removeEvent,Q=a.stop,L=a.svg,P=a.SVG_NS,J=a.symbolSizes,R=a.win;E=a.SVGElement=function(){return this};
+c(E.prototype,{opacity:1,SVG_NS:P,textProps:"direction fontSize fontWeight fontFamily fontStyle color lineHeight width textAlign textDecoration textOverflow textOutline".split(" "),init:function(a,g){this.element="span"===g?w(g):m.createElementNS(this.SVG_NS,g);this.renderer=a},animate:function(y,g,b){g=a.animObject(G(g,this.renderer.globalAnimation,!0));0!==g.duration?(b&&(g.complete=b),p(this,y,g)):(this.attr(y,null,b),g.step&&g.step.call(this));return this},colorGradient:function(y,g,b){var v=
+this.renderer,c,O,k,e,z,h,m,L,A,J,t=[],x;y.radialGradient?O="radialGradient":y.linearGradient&&(O="linearGradient");O&&(k=y[O],z=v.gradients,m=y.stops,J=b.radialReference,I(k)&&(y[O]=k={x1:k[0],y1:k[1],x2:k[2],y2:k[3],gradientUnits:"userSpaceOnUse"}),"radialGradient"===O&&J&&!u(k.gradientUnits)&&(e=k,k=q(k,v.getRadialAttr(J,e),{gradientUnits:"userSpaceOnUse"})),F(k,function(a,y){"id"!==y&&t.push(y,a)}),F(m,function(a){t.push(a)}),t=t.join(","),z[t]?J=z[t].attr("id"):(k.id=J=a.uniqueKey(),z[t]=h=v.createElement(O).attr(k).add(v.defs),
+h.radAttr=e,h.stops=[],d(m,function(y){0===y[1].indexOf("rgba")?(c=a.color(y[1]),L=c.get("rgb"),A=c.get("a")):(L=y[1],A=1);y=v.createElement("stop").attr({offset:y[0],"stop-color":L,"stop-opacity":A}).add(h);h.stops.push(y)})),x="url("+v.url+"#"+J+")",b.setAttribute(g,x),b.gradient=t,y.toString=function(){return x})},applyTextOutline:function(y){var g=this.element,v,c,k,q,e;-1!==y.indexOf("contrast")&&(y=y.replace(/contrast/g,this.renderer.getContrast(g.style.fill)));y=y.split(" ");c=y[y.length-1];
+if((k=y[0])&&"none"!==k&&a.svg){this.fakeTS=!0;y=[].slice.call(g.getElementsByTagName("tspan"));this.ySetter=this.xSetter;k=k.replace(/(^[\d\.]+)(.*?)$/g,function(a,y,g){return 2*y+g});for(e=y.length;e--;)v=y[e],"highcharts-text-outline"===v.getAttribute("class")&&b(y,g.removeChild(v));q=g.firstChild;d(y,function(a,y){0===y&&(a.setAttribute("x",g.getAttribute("x")),y=g.getAttribute("y"),a.setAttribute("y",y||0),null===y&&g.setAttribute("y",0));a=a.cloneNode(1);f(a,{"class":"highcharts-text-outline",
+fill:c,stroke:c,"stroke-width":k,"stroke-linejoin":"round"});g.insertBefore(a,q)})}},attr:function(a,g,b,v){var y,c=this.element,k,d=this,O,q;"string"===typeof a&&void 0!==g&&(y=a,a={},a[y]=g);"string"===typeof a?d=(this[a+"Getter"]||this._defaultGetter).call(this,a,c):(F(a,function(y,g){O=!1;v||Q(this,g);this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)$/.test(g)&&(k||(this.symbolAttr(a),k=!0),O=!0);!this.rotation||"x"!==g&&"y"!==g||(this.doTransform=!0);O||(q=this[g+"Setter"]||
+this._defaultSetter,q.call(this,y,g,c),this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(g)&&this.updateShadows(g,y,q))},this),this.afterSetters());b&&b();return d},afterSetters:function(){this.doTransform&&(this.updateTransform(),this.doTransform=!1)},updateShadows:function(a,g,b){for(var y=this.shadows,v=y.length;v--;)b.call(y[v],"height"===a?Math.max(g-(y[v].cutHeight||0),0):"d"===a?this.d:g,a,y[v])},addClass:function(a,g){var y=this.attr("class")||"";-1===y.indexOf(a)&&
+(g||(a=(y+(y?" ":"")+a).replace("  "," ")),this.attr("class",a));return this},hasClass:function(a){return-1!==B(a,(this.attr("class")||"").split(" "))},removeClass:function(a){return this.attr("class",(this.attr("class")||"").replace(a,""))},symbolAttr:function(a){var y=this;d("x y r start end width height innerR anchorX anchorY".split(" "),function(g){y[g]=G(a[g],y[g])});y.attr({d:y.renderer.symbols[y.symbolName](y.x,y.y,y.width,y.height,y)})},clip:function(a){return this.attr("clip-path",a?"url("+
+this.renderer.url+"#"+a.id+")":"none")},crisp:function(a,g){var y;g=g||a.strokeWidth||0;y=Math.round(g)%2/2;a.x=Math.floor(a.x||this.x||0)+y;a.y=Math.floor(a.y||this.y||0)+y;a.width=Math.floor((a.width||this.width||0)-2*y);a.height=Math.floor((a.height||this.height||0)-2*y);u(a.strokeWidth)&&(a.strokeWidth=g);return a},css:function(a){var y=this.styles,b={},v=this.element,k,d="",q,e=!y,z=["textOutline","textOverflow","width"];a&&a.color&&(a.fill=a.color);y&&F(a,function(a,g){a!==y[g]&&(b[g]=a,e=!0)});
+e&&(y&&(a=c(y,b)),k=this.textWidth=a&&a.width&&"auto"!==a.width&&"text"===v.nodeName.toLowerCase()&&g(a.width),this.styles=a,k&&!L&&this.renderer.forExport&&delete a.width,K&&!L?n(this.element,a):(q=function(a,y){return"-"+y.toLowerCase()},F(a,function(a,y){-1===B(y,z)&&(d+=y.replace(/([A-Z])/g,q)+":"+a+";")}),d&&f(v,"style",d)),this.added&&("text"===this.element.nodeName&&this.renderer.buildText(this),a&&a.textOutline&&this.applyTextOutline(a.textOutline)));return this},strokeWidth:function(){return this["stroke-width"]||
+0},on:function(a,g){var y=this,b=y.element;z&&"click"===a?(b.ontouchstart=function(a){y.touchEventFired=Date.now();a.preventDefault();g.call(b,a)},b.onclick=function(a){(-1===R.navigator.userAgent.indexOf("Android")||1100<Date.now()-(y.touchEventFired||0))&&g.call(b,a)}):b["on"+a]=g;return this},setRadialReference:function(a){var y=this.renderer.gradients[this.element.gradient];this.element.radialReference=a;y&&y.radAttr&&y.animate(this.renderer.getRadialAttr(a,y.radAttr));return this},translate:function(a,
+g){return this.attr({translateX:a,translateY:g})},invert:function(a){this.inverted=a;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,g=this.translateY||0,b=this.scaleX,v=this.scaleY,c=this.inverted,k=this.rotation,d=this.matrix,q=this.element;c&&(a+=this.width,g+=this.height);a=["translate("+a+","+g+")"];u(d)&&a.push("matrix("+d.join(",")+")");c?a.push("rotate(90) scale(-1,1)"):k&&a.push("rotate("+k+" "+G(this.rotationOriginX,q.getAttribute("x"),0)+" "+G(this.rotationOriginY,
+q.getAttribute("y")||0)+")");(u(b)||u(v))&&a.push("scale("+G(b,1)+" "+G(v,1)+")");a.length&&q.setAttribute("transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,g,v){var y,c,k,d,q={};c=this.renderer;k=c.alignedObjects;var e,O;if(a){if(this.alignOptions=a,this.alignByTranslate=g,!v||C(v))this.alignTo=y=v||"renderer",b(k,this),k.push(this),v=null}else a=this.alignOptions,g=this.alignByTranslate,y=this.alignTo;v=G(v,c[y],c);y=a.align;
+c=a.verticalAlign;k=(v.x||0)+(a.x||0);d=(v.y||0)+(a.y||0);"right"===y?e=1:"center"===y&&(e=2);e&&(k+=(v.width-(a.width||0))/e);q[g?"translateX":"x"]=Math.round(k);"bottom"===c?O=1:"middle"===c&&(O=2);O&&(d+=(v.height-(a.height||0))/O);q[g?"translateY":"y"]=Math.round(d);this[this.placed?"animate":"attr"](q);this.placed=!0;this.alignAttr=q;return this},getBBox:function(a,g){var y,b=this.renderer,v,k=this.element,q=this.styles,O,z=this.textStr,h,m=b.cache,L=b.cacheKeys,A;g=G(g,this.rotation);v=g*e;
+O=q&&q.fontSize;u(z)&&(A=z.toString(),-1===A.indexOf("\x3c")&&(A=A.replace(/[0-9]/g,"0")),A+=["",g||0,O,q&&q.width,q&&q.textOverflow].join());A&&!a&&(y=m[A]);if(!y){if(k.namespaceURI===this.SVG_NS||b.forExport){try{(h=this.fakeTS&&function(a){d(k.querySelectorAll(".highcharts-text-outline"),function(y){y.style.display=a})})&&h("none"),y=k.getBBox?c({},k.getBBox()):{width:k.offsetWidth,height:k.offsetHeight},h&&h("")}catch(W){}if(!y||0>y.width)y={width:0,height:0}}else y=this.htmlGetBBox();b.isSVG&&
+(a=y.width,b=y.height,q&&"11px"===q.fontSize&&17===Math.round(b)&&(y.height=b=14),g&&(y.width=Math.abs(b*Math.sin(v))+Math.abs(a*Math.cos(v)),y.height=Math.abs(b*Math.cos(v))+Math.abs(a*Math.sin(v))));if(A&&0<y.height){for(;250<L.length;)delete m[L.shift()];m[A]||L.push(A);m[A]=y}}return y},show:function(a){return this.attr({visibility:a?"inherit":"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var y=this;y.animate({opacity:0},{duration:a||150,complete:function(){y.attr({y:-9999})}})},
+add:function(a){var y=this.renderer,g=this.element,b;a&&(this.parentGroup=a);this.parentInverted=a&&a.inverted;void 0!==this.textStr&&y.buildText(this);this.added=!0;if(!a||a.handleZ||this.zIndex)b=this.zIndexSetter();b||(a?a.element:y.box).appendChild(g);if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var y=a.parentNode;y&&y.removeChild(a)},destroy:function(){var a=this,g=a.element||{},v=a.renderer.isSVG&&"SPAN"===g.nodeName&&a.parentGroup,c=g.ownerSVGElement;g.onclick=g.onmouseout=
+g.onmouseover=g.onmousemove=g.point=null;Q(a);a.clipPath&&c&&(d(c.querySelectorAll("[clip-path],[CLIP-PATH]"),function(g){g.getAttribute("clip-path").match(RegExp('[("]#'+a.clipPath.element.id+'[)"]'))&&g.removeAttribute("clip-path")}),a.clipPath=a.clipPath.destroy());if(a.stops){for(c=0;c<a.stops.length;c++)a.stops[c]=a.stops[c].destroy();a.stops=null}a.safeRemoveChild(g);for(a.destroyShadows();v&&v.div&&0===v.div.childNodes.length;)g=v.parentGroup,a.safeRemoveChild(v.div),delete v.div,v=g;a.alignTo&&
+b(a.renderer.alignedObjects,a);F(a,function(g,y){delete a[y]});return null},shadow:function(a,g,b){var y=[],v,c,k=this.element,d,q,e,z;if(!a)this.destroyShadows();else if(!this.shadows){q=G(a.width,3);e=(a.opacity||.15)/q;z=this.parentInverted?"(-1,-1)":"("+G(a.offsetX,1)+", "+G(a.offsetY,1)+")";for(v=1;v<=q;v++)c=k.cloneNode(0),d=2*q+1-2*v,f(c,{isShadow:"true",stroke:a.color||"#000000","stroke-opacity":e*v,"stroke-width":d,transform:"translate"+z,fill:"none"}),b&&(f(c,"height",Math.max(f(c,"height")-
+d,0)),c.cutHeight=d),g?g.element.appendChild(c):k.parentNode&&k.parentNode.insertBefore(c,k),y.push(c);this.shadows=y}return this},destroyShadows:function(){d(this.shadows||[],function(a){this.safeRemoveChild(a)},this);this.shadows=void 0},xGetter:function(a){"circle"===this.element.nodeName&&("x"===a?a="cx":"y"===a&&(a="cy"));return this._defaultGetter(a)},_defaultGetter:function(a){a=G(this[a+"Value"],this[a],this.element?this.element.getAttribute(a):null,0);/^[\-0-9\.]+$/.test(a)&&(a=parseFloat(a));
+return a},dSetter:function(a,g,b){a&&a.join&&(a=a.join(" "));/(NaN| {2}|^$)/.test(a)&&(a="M 0 0");this[g]!==a&&(b.setAttribute(g,a),this[g]=a)},dashstyleSetter:function(a){var b,v=this["stroke-width"];"inherit"===v&&(v=1);if(a=a&&a.toLowerCase()){a=a.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");for(b=a.length;b--;)a[b]=
+g(a[b])*v;a=a.join(",").replace(/NaN/g,"none");this.element.setAttribute("stroke-dasharray",a)}},alignSetter:function(a){this.alignValue=a;this.element.setAttribute("text-anchor",{left:"start",center:"middle",right:"end"}[a])},opacitySetter:function(a,g,b){this[g]=a;b.setAttribute(g,a)},titleSetter:function(a){var g=this.element.getElementsByTagName("title")[0];g||(g=m.createElementNS(this.SVG_NS,"title"),this.element.appendChild(g));g.firstChild&&g.removeChild(g.firstChild);g.appendChild(m.createTextNode(String(G(a),
+"").replace(/<[^>]*>/g,"")))},textSetter:function(a){a!==this.textStr&&(delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this))},fillSetter:function(a,g,b){"string"===typeof a?b.setAttribute(g,a):a&&this.colorGradient(a,g,b)},visibilitySetter:function(a,g,b){"inherit"===a?b.removeAttribute(g):this[g]!==a&&b.setAttribute(g,a);this[g]=a},zIndexSetter:function(a,b){var v=this.renderer,y=this.parentGroup,c=(y||v).element||v.box,k,d=this.element,q,e,v=c===v.box;k=this.added;var z;u(a)&&
+(d.zIndex=a,a=+a,this[b]===a&&(k=!1),this[b]=a);if(k){(a=this.zIndex)&&y&&(y.handleZ=!0);b=c.childNodes;for(z=b.length-1;0<=z&&!q;z--)if(y=b[z],k=y.zIndex,e=!u(k),y!==d)if(0>a&&e&&!v&&!z)c.insertBefore(d,b[z]),q=!0;else if(g(k)<=a||e&&(!u(a)||0<=a))c.insertBefore(d,b[z+1]||null),q=!0;q||(c.insertBefore(d,b[v?3:0]||null),q=!0)}return q},_defaultSetter:function(a,g,b){b.setAttribute(g,a)}});E.prototype.yGetter=E.prototype.xGetter;E.prototype.translateXSetter=E.prototype.translateYSetter=E.prototype.rotationSetter=
+E.prototype.verticalAlignSetter=E.prototype.rotationOriginXSetter=E.prototype.rotationOriginYSetter=E.prototype.scaleXSetter=E.prototype.scaleYSetter=E.prototype.matrixSetter=function(a,g){this[g]=a;this.doTransform=!0};E.prototype["stroke-widthSetter"]=E.prototype.strokeSetter=function(a,g,b){this[g]=a;this.stroke&&this["stroke-width"]?(E.prototype.fillSetter.call(this,this.stroke,"stroke",b),b.setAttribute("stroke-width",this["stroke-width"]),this.hasStroke=!0):"stroke-width"===g&&0===a&&this.hasStroke&&
+(b.removeAttribute("stroke"),this.hasStroke=!1)};D=a.SVGRenderer=function(){this.init.apply(this,arguments)};c(D.prototype,{Element:E,SVG_NS:P,init:function(a,g,b,v,c,k){var y;v=this.createElement("svg").attr({version:"1.1","class":"highcharts-root"}).css(this.getStyle(v));y=v.element;a.appendChild(y);f(a,"dir","ltr");-1===a.innerHTML.indexOf("xmlns")&&f(y,"xmlns",this.SVG_NS);this.isSVG=!0;this.box=y;this.boxWrapper=v;this.alignedObjects=[];this.url=(x||N)&&m.getElementsByTagName("base").length?
+R.location.href.replace(/#.*?$/,"").replace(/<[^>]*>/g,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(m.createTextNode("Created with Highcharts 6.0.4"));this.defs=this.createElement("defs").add();this.allowHTML=k;this.forExport=c;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(g,b,!1);var d;x&&a.getBoundingClientRect&&(g=function(){n(a,{left:0,top:0});d=a.getBoundingClientRect();n(a,{left:Math.ceil(d.left)-
+d.left+"px",top:Math.ceil(d.top)-d.top+"px"})},g(),this.unSubPixelFix=H(R,"resize",g))},getStyle:function(a){return this.style=c({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',fontSize:"12px"},a)},setStyle:function(a){this.boxWrapper.css(this.getStyle(a))},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();h(this.gradients||{});this.gradients=null;a&&(this.defs=a.destroy());
+this.unSubPixelFix&&this.unSubPixelFix();return this.alignedObjects=null},createElement:function(a){var g=new this.Element;g.init(this,a);return g},draw:A,getRadialAttr:function(a,g){return{cx:a[0]-a[2]/2+g.cx*a[2],cy:a[1]-a[2]/2+g.cy*a[2],r:g.r*a[2]}},getSpanWidth:function(a,g){var b=a.getBBox(!0).width;!L&&this.forExport&&(b=this.measureSpanWidth(g.firstChild.data,a.styles));return b},applyEllipsis:function(a,g,b,v){var c=a.rotation,y=b,k,d=0,q=b.length,e=function(a){g.removeChild(g.firstChild);
+a&&g.appendChild(m.createTextNode(a))},z;a.rotation=0;y=this.getSpanWidth(a,g);if(z=y>v){for(;d<=q;)k=Math.ceil((d+q)/2),y=b.substring(0,k)+"\u2026",e(y),y=this.getSpanWidth(a,g),d===q?d=q+1:y>v?q=k-1:d=k;0===q&&e("")}a.rotation=c;return z},escapes:{"\x26":"\x26amp;","\x3c":"\x26lt;","\x3e":"\x26gt;","'":"\x26#39;",'"':"\x26quot;"},buildText:function(a){var b=a.element,v=this,c=v.forExport,y=G(a.textStr,"").toString(),q=-1!==y.indexOf("\x3c"),e=b.childNodes,z,h,A,J,t=f(b,"x"),x=a.styles,B=a.textWidth,
+l=x&&x.lineHeight,C=x&&x.textOutline,u=x&&"ellipsis"===x.textOverflow,Q=x&&"nowrap"===x.whiteSpace,w=x&&x.fontSize,R,I,r=e.length,x=B&&!a.added&&this.box,p=function(a){var c;c=/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:w||v.style.fontSize||12;return l?g(l):v.fontMetrics(c,a.getAttribute("style")?a:b).h},K=function(a){F(v.escapes,function(g,b){a=a.replace(new RegExp(g,"g"),b)});return a};R=[y,u,Q,l,C,w,B].join();if(R!==a.textCache){for(a.textCache=R;r--;)b.removeChild(e[r]);q||C||u||B||
+-1!==y.indexOf(" ")?(z=/<.*class="([^"]+)".*>/,h=/<.*style="([^"]+)".*>/,A=/<.*href="([^"]+)".*>/,x&&x.appendChild(b),y=q?y.replace(/<(b|strong)>/g,'\x3cspan style\x3d"font-weight:bold"\x3e').replace(/<(i|em)>/g,'\x3cspan style\x3d"font-style:italic"\x3e').replace(/<a/g,"\x3cspan").replace(/<\/(b|strong|i|em|a)>/g,"\x3c/span\x3e").split(/<br.*?>/g):[y],y=k(y,function(a){return""!==a}),d(y,function(g,y){var k,q=0;g=g.replace(/^\s+|\s+$/g,"").replace(/<span/g,"|||\x3cspan").replace(/<\/span>/g,"\x3c/span\x3e|||");
+k=g.split("|||");d(k,function(g){if(""!==g||1===k.length){var d={},e=m.createElementNS(v.SVG_NS,"tspan"),x,F;z.test(g)&&(x=g.match(z)[1],f(e,"class",x));h.test(g)&&(F=g.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),f(e,"style",F));A.test(g)&&!c&&(f(e,"onclick",'location.href\x3d"'+g.match(A)[1]+'"'),f(e,"class","highcharts-anchor"),n(e,{cursor:"pointer"}));g=K(g.replace(/<[a-zA-Z\/](.|\n)*?>/g,"")||" ");if(" "!==g){e.appendChild(m.createTextNode(g));q?d.dx=0:y&&null!==t&&(d.x=t);f(e,d);b.appendChild(e);
+!q&&I&&(!L&&c&&n(e,{display:"block"}),f(e,"dy",p(e)));if(B){d=g.replace(/([^\^])-/g,"$1- ").split(" ");x=1<k.length||y||1<d.length&&!Q;var O=[],l,C=p(e),G=a.rotation;for(u&&(J=v.applyEllipsis(a,e,g,B));!u&&x&&(d.length||O.length);)a.rotation=0,l=v.getSpanWidth(a,e),g=l>B,void 0===J&&(J=g),g&&1!==d.length?(e.removeChild(e.firstChild),O.unshift(d.pop())):(d=O,O=[],d.length&&!Q&&(e=m.createElementNS(P,"tspan"),f(e,{dy:C,x:t}),F&&f(e,"style",F),b.appendChild(e)),l>B&&(B=l)),d.length&&e.appendChild(m.createTextNode(d.join(" ").replace(/- /g,
+"-")));a.rotation=G}q++}}});I=I||b.childNodes.length}),J&&a.attr("title",a.textStr),x&&x.removeChild(b),C&&a.applyTextOutline&&a.applyTextOutline(C)):b.appendChild(m.createTextNode(K(y)))}},getContrast:function(a){a=r(a).rgba;return 510<a[0]+a[1]+a[2]?"#000000":"#FFFFFF"},button:function(a,g,b,v,d,k,e,z,h){var y=this.label(a,g,b,h,null,null,null,null,"button"),m=0;y.attr(q({padding:8,r:2},d));var A,L,J,t;d=q({fill:"#f7f7f7",stroke:"#cccccc","stroke-width":1,style:{color:"#333333",cursor:"pointer",
+fontWeight:"normal"}},d);A=d.style;delete d.style;k=q(d,{fill:"#e6e6e6"},k);L=k.style;delete k.style;e=q(d,{fill:"#e6ebf5",style:{color:"#000000",fontWeight:"bold"}},e);J=e.style;delete e.style;z=q(d,{style:{color:"#cccccc"}},z);t=z.style;delete z.style;H(y.element,K?"mouseover":"mouseenter",function(){3!==m&&y.setState(1)});H(y.element,K?"mouseout":"mouseleave",function(){3!==m&&y.setState(m)});y.setState=function(a){1!==a&&(y.state=m=a);y.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass("highcharts-button-"+
+["normal","hover","pressed","disabled"][a||0]);y.attr([d,k,e,z][a||0]).css([A,L,J,t][a||0])};y.attr(d).css(c({cursor:"default"},A));return y.on("click",function(a){3!==m&&v.call(y,a)})},crispLine:function(a,g){a[1]===a[4]&&(a[1]=a[4]=Math.round(a[1])-g%2/2);a[2]===a[5]&&(a[2]=a[5]=Math.round(a[2])+g%2/2);return a},path:function(a){var g={fill:"none"};I(a)?g.d=a:t(a)&&c(g,a);return this.createElement("path").attr(g)},circle:function(a,g,b){a=t(a)?a:{x:a,y:g,r:b};g=this.createElement("circle");g.xSetter=
+g.ySetter=function(a,g,b){b.setAttribute("c"+g,a)};return g.attr(a)},arc:function(a,g,b,v,c,d){t(a)?(v=a,g=v.y,b=v.r,a=v.x):v={innerR:v,start:c,end:d};a=this.symbol("arc",a,g,b,b,v);a.r=b;return a},rect:function(a,g,b,v,c,d){c=t(a)?a.r:c;var k=this.createElement("rect");a=t(a)?a:void 0===a?{}:{x:a,y:g,width:Math.max(b,0),height:Math.max(v,0)};void 0!==d&&(a.strokeWidth=d,a=k.crisp(a));a.fill="none";c&&(a.r=c);k.rSetter=function(a,g,b){f(b,{rx:a,ry:a})};return k.attr(a)},setSize:function(a,g,b){var v=
+this.alignedObjects,c=v.length;this.width=a;this.height=g;for(this.boxWrapper.animate({width:a,height:g},{step:function(){this.attr({viewBox:"0 0 "+this.attr("width")+" "+this.attr("height")})},duration:G(b,!0)?void 0:0});c--;)v[c].align()},g:function(a){var g=this.createElement("g");return a?g.attr({"class":"highcharts-"+a}):g},image:function(a,g,b,v,d){var k={preserveAspectRatio:"none"};1<arguments.length&&c(k,{x:g,y:b,width:v,height:d});k=this.createElement("image").attr(k);k.element.setAttributeNS?
+k.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):k.element.setAttribute("hc-svg-href",a);return k},symbol:function(a,g,b,v,k,q){var e=this,y,z=/^url\((.*?)\)$/,h=z.test(a),A=!h&&(this.symbols[a]?a:"circle"),L=A&&this.symbols[A],t=u(g)&&L&&L.call(this.symbols,Math.round(g),Math.round(b),v,k,q),x,F;L?(y=this.path(t),y.attr("fill","none"),c(y,{symbolName:A,x:g,y:b,width:v,height:k}),q&&c(y,q)):h&&(x=a.match(z)[1],y=this.image(x),y.imgwidth=G(J[x]&&J[x].width,q&&q.width),y.imgheight=
+G(J[x]&&J[x].height,q&&q.height),F=function(){y.attr({width:y.width,height:y.height})},d(["width","height"],function(a){y[a+"Setter"]=function(a,g){var b={},v=this["img"+g],c="width"===g?"translateX":"translateY";this[g]=a;u(v)&&(this.element&&this.element.setAttribute(g,v),this.alignByTranslate||(b[c]=((this[g]||0)-v)/2,this.attr(b)))}}),u(g)&&y.attr({x:g,y:b}),y.isImg=!0,u(y.imgwidth)&&u(y.imgheight)?F():(y.attr({width:0,height:0}),w("img",{onload:function(){var a=l[e.chartIndex];0===this.width&&
+(n(this,{position:"absolute",top:"-999em"}),m.body.appendChild(this));J[x]={width:this.width,height:this.height};y.imgwidth=this.width;y.imgheight=this.height;y.element&&F();this.parentNode&&this.parentNode.removeChild(this);e.imgCount--;if(!e.imgCount&&a&&a.onload)a.onload()},src:x}),this.imgCount++));return y},symbols:{circle:function(a,g,b,v){return this.arc(a+b/2,g+v/2,b/2,v/2,{start:0,end:2*Math.PI,open:!1})},square:function(a,g,b,v){return["M",a,g,"L",a+b,g,a+b,g+v,a,g+v,"Z"]},triangle:function(a,
+g,b,v){return["M",a+b/2,g,"L",a+b,g+v,a,g+v,"Z"]},"triangle-down":function(a,g,b,v){return["M",a,g,"L",a+b,g,a+b/2,g+v,"Z"]},diamond:function(a,g,b,v){return["M",a+b/2,g,"L",a+b,g+v/2,a+b/2,g+v,a,g+v/2,"Z"]},arc:function(a,g,b,v,c){var k=c.start,d=c.r||b,q=c.r||v||b,e=c.end-.001;b=c.innerR;v=G(c.open,.001>Math.abs(c.end-c.start-2*Math.PI));var y=Math.cos(k),z=Math.sin(k),h=Math.cos(e),e=Math.sin(e);c=.001>c.end-k-Math.PI?0:1;d=["M",a+d*y,g+q*z,"A",d,q,0,c,1,a+d*h,g+q*e];u(b)&&d.push(v?"M":"L",a+b*
+h,g+b*e,"A",b,b,0,c,0,a+b*y,g+b*z);d.push(v?"":"Z");return d},callout:function(a,g,b,v,c){var d=Math.min(c&&c.r||0,b,v),k=d+6,q=c&&c.anchorX;c=c&&c.anchorY;var e;e=["M",a+d,g,"L",a+b-d,g,"C",a+b,g,a+b,g,a+b,g+d,"L",a+b,g+v-d,"C",a+b,g+v,a+b,g+v,a+b-d,g+v,"L",a+d,g+v,"C",a,g+v,a,g+v,a,g+v-d,"L",a,g+d,"C",a,g,a,g,a+d,g];q&&q>b?c>g+k&&c<g+v-k?e.splice(13,3,"L",a+b,c-6,a+b+6,c,a+b,c+6,a+b,g+v-d):e.splice(13,3,"L",a+b,v/2,q,c,a+b,v/2,a+b,g+v-d):q&&0>q?c>g+k&&c<g+v-k?e.splice(33,3,"L",a,c+6,a-6,c,a,c-6,
+a,g+d):e.splice(33,3,"L",a,v/2,q,c,a,v/2,a,g+d):c&&c>v&&q>a+k&&q<a+b-k?e.splice(23,3,"L",q+6,g+v,q,g+v+6,q-6,g+v,a+d,g+v):c&&0>c&&q>a+k&&q<a+b-k&&e.splice(3,3,"L",q-6,g,q,g-6,q+6,g,b-d,g);return e}},clipRect:function(g,b,v,c){var d=a.uniqueKey(),k=this.createElement("clipPath").attr({id:d}).add(this.defs);g=this.rect(g,b,v,c,0).add(k);g.id=d;g.clipPath=k;g.count=0;return g},text:function(a,g,b,v){var c={};if(v&&(this.allowHTML||!this.forExport))return this.html(a,g,b);c.x=Math.round(g||0);b&&(c.y=
+Math.round(b));if(a||0===a)c.text=a;a=this.createElement("text").attr(c);v||(a.xSetter=function(a,g,b){var v=b.getElementsByTagName("tspan"),c,d=b.getAttribute(g),k;for(k=0;k<v.length;k++)c=v[k],c.getAttribute(g)===d&&c.setAttribute(g,a);b.setAttribute(g,a)});return a},fontMetrics:function(a,b){a=a||b&&b.style&&b.style.fontSize||this.style&&this.style.fontSize;a=/px/.test(a)?g(a):/em/.test(a)?parseFloat(a)*(b?this.fontMetrics(null,b.parentNode).f:16):12;b=24>a?a+3:Math.round(1.2*a);return{h:b,b:Math.round(.8*
+b),f:a}},rotCorr:function(a,g,b){var v=a;g&&b&&(v=Math.max(v*Math.cos(g*e),4));return{x:-a/3*Math.sin(g*e),y:v}},label:function(g,b,k,e,z,h,m,A,L){var y=this,J=y.g("button"!==L&&"label"),t=J.text=y.text("",0,0,m).attr({zIndex:1}),x,F,n=0,B=3,l=0,C,f,Q,G,w,R={},I,P,r=/^url\((.*?)\)$/.test(e),p=r,K,O,N,T;L&&J.addClass("highcharts-"+L);p=r;K=function(){return(I||0)%2/2};O=function(){var a=t.element.style,g={};F=(void 0===C||void 0===f||w)&&u(t.textStr)&&t.getBBox();J.width=(C||F.width||0)+2*B+l;J.height=
+(f||F.height||0)+2*B;P=B+y.fontMetrics(a&&a.fontSize,t).b;p&&(x||(J.box=x=y.symbols[e]||r?y.symbol(e):y.rect(),x.addClass(("button"===L?"":"highcharts-label-box")+(L?" highcharts-"+L+"-box":"")),x.add(J),a=K(),g.x=a,g.y=(A?-P:0)+a),g.width=Math.round(J.width),g.height=Math.round(J.height),x.attr(c(g,R)),R={})};N=function(){var a=l+B,g;g=A?0:P;u(C)&&F&&("center"===w||"right"===w)&&(a+={center:.5,right:1}[w]*(C-F.width));if(a!==t.x||g!==t.y)t.attr("x",a),void 0!==g&&t.attr("y",g);t.x=a;t.y=g};T=function(a,
+g){x?x.attr(a,g):R[a]=g};J.onAdd=function(){t.add(J);J.attr({text:g||0===g?g:"",x:b,y:k});x&&u(z)&&J.attr({anchorX:z,anchorY:h})};J.widthSetter=function(g){C=a.isNumber(g)?g:null};J.heightSetter=function(a){f=a};J["text-alignSetter"]=function(a){w=a};J.paddingSetter=function(a){u(a)&&a!==B&&(B=J.padding=a,N())};J.paddingLeftSetter=function(a){u(a)&&a!==l&&(l=a,N())};J.alignSetter=function(a){a={left:0,center:.5,right:1}[a];a!==n&&(n=a,F&&J.attr({x:Q}))};J.textSetter=function(a){void 0!==a&&t.textSetter(a);
+O();N()};J["stroke-widthSetter"]=function(a,g){a&&(p=!0);I=this["stroke-width"]=a;T(g,a)};J.strokeSetter=J.fillSetter=J.rSetter=function(a,g){"r"!==g&&("fill"===g&&a&&(p=!0),J[g]=a);T(g,a)};J.anchorXSetter=function(a,g){z=J.anchorX=a;T(g,Math.round(a)-K()-Q)};J.anchorYSetter=function(a,g){h=J.anchorY=a;T(g,a-G)};J.xSetter=function(a){J.x=a;n&&(a-=n*((C||F.width)+2*B));Q=Math.round(a);J.attr("translateX",Q)};J.ySetter=function(a){G=J.y=Math.round(a);J.attr("translateY",G)};var U=J.css;return c(J,{css:function(a){if(a){var g=
+{};a=q(a);d(J.textProps,function(b){void 0!==a[b]&&(g[b]=a[b],delete a[b])});t.css(g)}return U.call(J,a)},getBBox:function(){return{width:F.width+2*B,height:F.height+2*B,x:F.x-B,y:F.y-B}},shadow:function(a){a&&(O(),x&&x.shadow(a));return J},destroy:function(){v(J.element,"mouseenter");v(J.element,"mouseleave");t&&(t=t.destroy());x&&(x=x.destroy());E.prototype.destroy.call(J);J=y=O=N=T=null}})}});a.Renderer=D})(M);(function(a){var E=a.attr,D=a.createElement,H=a.css,p=a.defined,f=a.each,l=a.extend,
+r=a.isFirefox,n=a.isMS,w=a.isWebKit,u=a.pick,e=a.pInt,h=a.SVGRenderer,m=a.win,d=a.wrap;l(a.SVGElement.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&"SPAN"===b.tagName&&a.width)delete a.width,this.textWidth=b,this.updateTransform();a&&"ellipsis"===a.textOverflow&&(a.whiteSpace="nowrap",a.overflow="hidden");this.styles=l(this.styles,a);H(this.element,a);return this},htmlGetBBox:function(){var a=this.element;return{x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}},
+htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,d=this.translateX||0,z=this.translateY||0,h=this.x||0,m=this.y||0,x=this.textAlign||"left",n={left:0,center:.5,right:1}[x],t=this.styles;H(b,{marginLeft:d,marginTop:z});this.shadows&&f(this.shadows,function(a){H(a,{marginLeft:d+1,marginTop:z+1})});this.inverted&&f(b.childNodes,function(c){a.invertChild(c,b)});if("SPAN"===b.tagName){var l=this.rotation,u=e(this.textWidth),q=t&&t.whiteSpace,A=[l,x,b.innerHTML,this.textWidth,
+this.textAlign].join();A!==this.cTT&&(t=a.fontMetrics(b.style.fontSize).b,p(l)&&this.setSpanRotation(l,n,t),H(b,{width:"",whiteSpace:q||"nowrap"}),b.offsetWidth>u&&/[ \-]/.test(b.textContent||b.innerText)&&H(b,{width:u+"px",display:"block",whiteSpace:q||"normal"}),this.getSpanCorrection(b.offsetWidth,t,n,l,x));H(b,{left:h+(this.xCorr||0)+"px",top:m+(this.yCorr||0)+"px"});w&&(t=b.offsetHeight);this.cTT=A}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,d){var c={},k=this.renderer.getTransformKey();
+c[k]=c.transform="rotate("+a+"deg)";c[k+(r?"Origin":"-origin")]=c.transformOrigin=100*b+"% "+d+"px";H(this.element,c)},getSpanCorrection:function(a,b,d){this.xCorr=-a*d;this.yCorr=-b}});l(h.prototype,{getTransformKey:function(){return n&&!/Edge/.test(m.navigator.userAgent)?"-ms-transform":w?"-webkit-transform":r?"MozTransform":m.opera?"-o-transform":""},html:function(a,b,k){var c=this.createElement("span"),e=c.element,h=c.renderer,m=h.isSVG,w=function(a,b){f(["opacity","visibility"],function(c){d(a,
+c+"Setter",function(a,c,d,k){a.call(this,c,d,k);b[d]=c})})};c.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;this.textStr=a;e.innerHTML=u(a,"");c.htmlUpdateTransform()};m&&w(c,c.element.style);c.xSetter=c.ySetter=c.alignSetter=c.rotationSetter=function(a,b){"align"===b&&(b="textAlign");c[b]=a;c.htmlUpdateTransform()};c.attr({text:a,x:Math.round(b),y:Math.round(k)}).css({fontFamily:this.style.fontFamily,fontSize:this.style.fontSize,position:"absolute"});e.style.whiteSpace="nowrap";c.css=
+c.htmlCss;m&&(c.add=function(a){var b,d=h.box.parentNode,k=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)k.push(a),a=a.parentGroup;f(k.reverse(),function(a){function e(g,b){a[b]=g;n?q[h.getTransformKey()]="translate("+(a.x||a.translateX)+"px,"+(a.y||a.translateY)+"px)":"translateX"===b?q.left=g+"px":q.top=g+"px";a.doTransform=!0}var q,g=E(a.element,"class");g&&(g={className:g});b=a.div=a.div||D("div",g,{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px",display:a.display,
+opacity:a.opacity,pointerEvents:a.styles&&a.styles.pointerEvents},b||d);q=b.style;l(a,{classSetter:function(a){return function(g){this.element.setAttribute("class",g);a.className=g}}(b),on:function(){k[0].div&&c.on.apply({element:k[0].div},arguments);return a},translateXSetter:e,translateYSetter:e});w(a,q)})}}else b=d;b.appendChild(e);c.added=!0;c.alignOnAdd&&c.htmlUpdateTransform();return c});return c}})})(M);(function(a){function E(){var n=a.defaultOptions.global,l=r.moment;if(n.timezone){if(l)return function(a){return-l.tz(a,
+n.timezone).utcOffset()};a.error(25)}return n.useUTC&&n.getTimezoneOffset}function D(){var n=a.defaultOptions.global,f,u=n.useUTC,e=u?"getUTC":"get",h=u?"setUTC":"set",m="Minutes Hours Day Date Month FullYear".split(" "),d=m.concat(["Milliseconds","Seconds"]);a.Date=f=n.Date||r.Date;f.hcTimezoneOffset=u&&n.timezoneOffset;f.hcGetTimezoneOffset=E();f.hcHasTimeZone=!(!f.hcTimezoneOffset&&!f.hcGetTimezoneOffset);f.hcMakeTime=function(a,b,d,e,h,m){var c;u?(c=f.UTC.apply(0,arguments),c+=p(c)):c=(new f(a,
+b,l(d,1),l(e,0),l(h,0),l(m,0))).getTime();return c};for(n=0;n<m.length;n++)f["hcGet"+m[n]]=e+m[n];for(n=0;n<d.length;n++)f["hcSet"+d[n]]=h+d[n]}var H=a.color,p=a.getTZOffset,f=a.merge,l=a.pick,r=a.win;a.defaultOptions={colors:"#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1".split(" "),symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:"January February March April May June July August September October November December".split(" "),
+shortMonths:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),weekdays:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),decimalPoint:".",numericSymbols:"kMGTPE".split(""),resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:" "},global:{useUTC:!0},chart:{borderRadius:0,defaultSeriesType:"line",ignoreHiddenSeries:!0,spacing:[10,10,15,10],resetZoomButton:{theme:{zIndex:6},position:{align:"right",x:-10,y:10}},width:null,height:null,borderColor:"#335cad",
+backgroundColor:"#ffffff",plotBorderColor:"#cccccc"},title:{text:"Chart title",align:"center",margin:15,widthAdjust:-44},subtitle:{text:"",align:"center",widthAdjust:-44},plotOptions:{},labels:{style:{position:"absolute",color:"#333333"}},legend:{enabled:!0,align:"center",layout:"horizontal",labelFormatter:function(){return this.name},borderColor:"#999999",borderRadius:0,navigation:{activeColor:"#003399",inactiveColor:"#cccccc"},itemStyle:{color:"#333333",fontSize:"12px",fontWeight:"bold",textOverflow:"ellipsis"},
+itemHoverStyle:{color:"#000000"},itemHiddenStyle:{color:"#cccccc"},shadow:!1,itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},squareSymbol:!0,symbolPadding:5,verticalAlign:"bottom",x:0,y:0,title:{style:{fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold",position:"relative",top:"45%"},style:{position:"absolute",backgroundColor:"#ffffff",opacity:.5,textAlign:"center"}},tooltip:{enabled:!0,animation:a.svg,borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %b %e, %H:%M:%S.%L",
+second:"%A, %b %e, %H:%M:%S",minute:"%A, %b %e, %H:%M",hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",month:"%B %Y",year:"%Y"},footerFormat:"",padding:8,snap:a.isTouchDevice?25:10,backgroundColor:H("#f7f7f7").setOpacity(.85).get(),borderWidth:1,headerFormat:'\x3cspan style\x3d"font-size: 10px"\x3e{point.key}\x3c/span\x3e\x3cbr/\x3e',pointFormat:'\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e {series.name}: \x3cb\x3e{point.y}\x3c/b\x3e\x3cbr/\x3e',shadow:!0,
+style:{color:"#333333",cursor:"default",fontSize:"12px",pointerEvents:"none",whiteSpace:"nowrap"}},credits:{enabled:!0,href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#999999",fontSize:"9px"},text:"Highcharts.com"}};a.setOptions=function(n){a.defaultOptions=f(!0,a.defaultOptions,n);D();return a.defaultOptions};a.getOptions=function(){return a.defaultOptions};a.defaultPlotOptions=a.defaultOptions.plotOptions;D()})(M);(function(a){var E=
+a.correctFloat,D=a.defined,H=a.destroyObjectProperties,p=a.isNumber,f=a.merge,l=a.pick,r=a.deg2rad;a.Tick=function(a,l,f,e){this.axis=a;this.pos=l;this.type=f||"";this.isNewLabel=this.isNew=!0;f||e||this.addLabel()};a.Tick.prototype={addLabel:function(){var a=this.axis,w=a.options,u=a.chart,e=a.categories,h=a.names,m=this.pos,d=w.labels,c=a.tickPositions,b=m===c[0],k=m===c[c.length-1],h=e?l(e[m],h[m],m):m,e=this.label,c=c.info,z;a.isDatetimeAxis&&c&&(z=w.dateTimeLabelFormats[c.higherRanks[m]||c.unitName]);
+this.isFirst=b;this.isLast=k;w=a.labelFormatter.call({axis:a,chart:u,isFirst:b,isLast:k,dateTimeLabelFormat:z,value:a.isLog?E(a.lin2log(h)):h,pos:m});D(e)?e&&e.attr({text:w}):(this.labelLength=(this.label=e=D(w)&&d.enabled?u.renderer.text(w,0,0,d.useHTML).css(f(d.style)).add(a.labelGroup):null)&&e.getBBox().width,this.rotation=0)},getLabelSize:function(){return this.label?this.label.getBBox()[this.axis.horiz?"height":"width"]:0},handleOverflow:function(a){var f=this.axis,n=f.options.labels,e=a.x,
+h=f.chart.chartWidth,m=f.chart.spacing,d=l(f.labelLeft,Math.min(f.pos,m[3])),m=l(f.labelRight,Math.max(f.isRadial?0:f.pos+f.len,h-m[1])),c=this.label,b=this.rotation,k={left:0,center:.5,right:1}[f.labelAlign||c.attr("align")],z=c.getBBox().width,B=f.getSlotWidth(),I=B,x=1,p,t={};if(b||!1===n.overflow)0>b&&e-k*z<d?p=Math.round(e/Math.cos(b*r)-d):0<b&&e+k*z>m&&(p=Math.round((h-e)/Math.cos(b*r)));else if(h=e+(1-k)*z,e-k*z<d?I=a.x+I*(1-k)-d:h>m&&(I=m-a.x+I*k,x=-1),I=Math.min(B,I),I<B&&"center"===f.labelAlign&&
+(a.x+=x*(B-I-k*(B-Math.min(z,I)))),z>I||f.autoRotation&&(c.styles||{}).width)p=I;p&&(t.width=p,(n.style||{}).textOverflow||(t.textOverflow="ellipsis"),c.css(t))},getPosition:function(a,f,l,e){var h=this.axis,m=h.chart,d=e&&m.oldChartHeight||m.chartHeight;return{x:a?h.translate(f+l,null,null,e)+h.transB:h.left+h.offset+(h.opposite?(e&&m.oldChartWidth||m.chartWidth)-h.right-h.left:0),y:a?d-h.bottom+h.offset-(h.opposite?h.height:0):d-h.translate(f+l,null,null,e)-h.transB}},getLabelPosition:function(a,
+f,l,e,h,m,d,c){var b=this.axis,k=b.transA,z=b.reversed,B=b.staggerLines,n=b.tickRotCorr||{x:0,y:0},x=h.y,u=e||b.reserveSpaceDefault?0:-b.labelOffset*("center"===b.labelAlign?.5:1);D(x)||(x=0===b.side?l.rotation?-8:-l.getBBox().height:2===b.side?n.y+8:Math.cos(l.rotation*r)*(n.y-l.getBBox(!1,0).height/2));a=a+h.x+u+n.x-(m&&e?m*k*(z?-1:1):0);f=f+x-(m&&!e?m*k*(z?1:-1):0);B&&(l=d/(c||1)%B,b.opposite&&(l=B-l-1),f+=b.labelOffset/B*l);return{x:a,y:Math.round(f)}},getMarkPath:function(a,f,l,e,h,m){return m.crispLine(["M",
+a,f,"L",a+(h?0:-l),f+(h?l:0)],e)},renderGridLine:function(a,f,l){var e=this.axis,h=e.options,m=this.gridLine,d={},c=this.pos,b=this.type,k=e.tickmarkOffset,z=e.chart.renderer,B=b?b+"Grid":"grid",n=h[B+"LineWidth"],x=h[B+"LineColor"],h=h[B+"LineDashStyle"];m||(d.stroke=x,d["stroke-width"]=n,h&&(d.dashstyle=h),b||(d.zIndex=1),a&&(d.opacity=0),this.gridLine=m=z.path().attr(d).addClass("highcharts-"+(b?b+"-":"")+"grid-line").add(e.gridGroup));if(!a&&m&&(a=e.getPlotLinePath(c+k,m.strokeWidth()*l,a,!0)))m[this.isNew?
+"attr":"animate"]({d:a,opacity:f})},renderMark:function(a,f,u){var e=this.axis,h=e.options,m=e.chart.renderer,d=this.type,c=d?d+"Tick":"tick",b=e.tickSize(c),k=this.mark,z=!k,B=a.x;a=a.y;var n=l(h[c+"Width"],!d&&e.isXAxis?1:0),h=h[c+"Color"];b&&(e.opposite&&(b[0]=-b[0]),z&&(this.mark=k=m.path().addClass("highcharts-"+(d?d+"-":"")+"tick").add(e.axisGroup),k.attr({stroke:h,"stroke-width":n})),k[z?"attr":"animate"]({d:this.getMarkPath(B,a,b[0],k.strokeWidth()*u,e.horiz,m),opacity:f}))},renderLabel:function(a,
+f,u,e){var h=this.axis,m=h.horiz,d=h.options,c=this.label,b=d.labels,k=b.step,h=h.tickmarkOffset,z=!0,B=a.x;a=a.y;c&&p(B)&&(c.xy=a=this.getLabelPosition(B,a,c,m,b,h,e,k),this.isFirst&&!this.isLast&&!l(d.showFirstLabel,1)||this.isLast&&!this.isFirst&&!l(d.showLastLabel,1)?z=!1:!m||b.step||b.rotation||f||0===u||this.handleOverflow(a),k&&e%k&&(z=!1),z&&p(a.y)?(a.opacity=u,c[this.isNewLabel?"attr":"animate"](a),this.isNewLabel=!1):(c.attr("y",-9999),this.isNewLabel=!0))},render:function(a,f,u){var e=
+this.axis,h=e.horiz,m=this.getPosition(h,this.pos,e.tickmarkOffset,f),d=m.x,c=m.y,e=h&&d===e.pos+e.len||!h&&c===e.pos?-1:1;u=l(u,1);this.isActive=!0;this.renderGridLine(f,u,e);this.renderMark(m,u,e);this.renderLabel(m,f,u,a);this.isNew=!1},destroy:function(){H(this,this.axis)}}})(M);var V=function(a){var E=a.addEvent,D=a.animObject,H=a.arrayMax,p=a.arrayMin,f=a.color,l=a.correctFloat,r=a.defaultOptions,n=a.defined,w=a.deg2rad,u=a.destroyObjectProperties,e=a.each,h=a.extend,m=a.fireEvent,d=a.format,
+c=a.getMagnitude,b=a.grep,k=a.inArray,z=a.isArray,B=a.isNumber,I=a.isString,x=a.merge,K=a.normalizeTickInterval,t=a.objectEach,C=a.pick,N=a.removeEvent,q=a.splat,A=a.syncTimeout,F=a.Tick,G=function(){this.init.apply(this,arguments)};a.extend(G.prototype,{defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,labels:{enabled:!0,style:{color:"#666666",cursor:"default",fontSize:"11px"},
+x:0},maxPadding:.01,minorTickLength:2,minorTickPosition:"outside",minPadding:.01,startOfWeek:1,startOnTick:!1,tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",title:{align:"middle",style:{color:"#666666"}},type:"linear",minorGridLineColor:"#f2f2f2",minorGridLineWidth:1,minorTickColor:"#999999",lineColor:"#ccd6eb",lineWidth:1,gridLineColor:"#e6e6e6",tickColor:"#ccd6eb"},defaultYAxisOptions:{endOnTick:!0,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8},maxPadding:.05,
+minPadding:.05,startOnTick:!0,title:{rotation:270,text:"Values"},stackLabels:{allowOverlap:!1,enabled:!1,formatter:function(){return a.numberFormat(this.total,-1)},style:{fontSize:"11px",fontWeight:"bold",color:"#000000",textOutline:"1px contrast"}},gridLineWidth:1,lineWidth:0},defaultLeftAxisOptions:{labels:{x:-15},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15},title:{rotation:90}},defaultBottomAxisOptions:{labels:{autoRotation:[-45],x:0},title:{rotation:0}},defaultTopAxisOptions:{labels:{autoRotation:[-45],
+x:0},title:{rotation:0}},init:function(a,b){var g=b.isX,v=this;v.chart=a;v.horiz=a.inverted&&!v.isZAxis?!g:g;v.isXAxis=g;v.coll=v.coll||(g?"xAxis":"yAxis");v.opposite=b.opposite;v.side=b.side||(v.horiz?v.opposite?0:2:v.opposite?1:3);v.setOptions(b);var c=this.options,d=c.type;v.labelFormatter=c.labels.formatter||v.defaultLabelFormatter;v.userOptions=b;v.minPixelPadding=0;v.reversed=c.reversed;v.visible=!1!==c.visible;v.zoomEnabled=!1!==c.zoomEnabled;v.hasNames="category"===d||!0===c.categories;v.categories=
+c.categories||v.hasNames;v.names=v.names||[];v.plotLinesAndBandsGroups={};v.isLog="logarithmic"===d;v.isDatetimeAxis="datetime"===d;v.positiveValuesOnly=v.isLog&&!v.allowNegativeLog;v.isLinked=n(c.linkedTo);v.ticks={};v.labelEdge=[];v.minorTicks={};v.plotLinesAndBands=[];v.alternateBands={};v.len=0;v.minRange=v.userMinRange=c.minRange||c.maxZoom;v.range=c.range;v.offset=c.offset||0;v.stacks={};v.oldStacks={};v.stacksTouched=0;v.max=null;v.min=null;v.crosshair=C(c.crosshair,q(a.options.tooltip.crosshairs)[g?
+0:1],!1);b=v.options.events;-1===k(v,a.axes)&&(g?a.axes.splice(a.xAxis.length,0,v):a.axes.push(v),a[v.coll].push(v));v.series=v.series||[];a.inverted&&!v.isZAxis&&g&&void 0===v.reversed&&(v.reversed=!0);t(b,function(a,g){E(v,g,a)});v.lin2log=c.linearToLogConverter||v.lin2log;v.isLog&&(v.val2lin=v.log2lin,v.lin2val=v.lin2log)},setOptions:function(a){this.options=x(this.defaultOptions,"yAxis"===this.coll&&this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,
+this.defaultLeftAxisOptions][this.side],x(r[this.coll],a))},defaultLabelFormatter:function(){var g=this.axis,b=this.value,c=g.categories,k=this.dateTimeLabelFormat,e=r.lang,q=e.numericSymbols,e=e.numericSymbolMagnitude||1E3,h=q&&q.length,m,z=g.options.labels.format,g=g.isLog?Math.abs(b):g.tickInterval;if(z)m=d(z,this);else if(c)m=b;else if(k)m=a.dateFormat(k,b);else if(h&&1E3<=g)for(;h--&&void 0===m;)c=Math.pow(e,h+1),g>=c&&0===10*b%c&&null!==q[h]&&0!==b&&(m=a.numberFormat(b/c,-1)+q[h]);void 0===
+m&&(m=1E4<=Math.abs(b)?a.numberFormat(b,-1):a.numberFormat(b,-1,void 0,""));return m},getSeriesExtremes:function(){var a=this,v=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=a.threshold=null;a.softThreshold=!a.isXAxis;a.buildStacks&&a.buildStacks();e(a.series,function(g){if(g.visible||!v.options.chart.ignoreHiddenSeries){var c=g.options,d=c.threshold,k;a.hasVisibleSeries=!0;a.positiveValuesOnly&&0>=d&&(d=null);if(a.isXAxis)c=g.xData,c.length&&(g=p(c),k=H(c),B(g)||g instanceof Date||(c=b(c,B),
+g=p(c)),a.dataMin=Math.min(C(a.dataMin,c[0],g),g),a.dataMax=Math.max(C(a.dataMax,c[0],k),k));else if(g.getExtremes(),k=g.dataMax,g=g.dataMin,n(g)&&n(k)&&(a.dataMin=Math.min(C(a.dataMin,g),g),a.dataMax=Math.max(C(a.dataMax,k),k)),n(d)&&(a.threshold=d),!c.softThreshold||a.positiveValuesOnly)a.softThreshold=!1}})},translate:function(a,b,c,d,k,e){var g=this.linkedParent||this,v=1,q=0,h=d?g.oldTransA:g.transA;d=d?g.oldMin:g.min;var m=g.minPixelPadding;k=(g.isOrdinal||g.isBroken||g.isLog&&k)&&g.lin2val;
+h||(h=g.transA);c&&(v*=-1,q=g.len);g.reversed&&(v*=-1,q-=v*(g.sector||g.len));b?(a=(a*v+q-m)/h+d,k&&(a=g.lin2val(a))):(k&&(a=g.val2lin(a)),a=B(d)?v*(a-d)*h+q+v*m+(B(e)?h*e:0):void 0);return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,k){var g=this.chart,v=this.left,q=this.top,e,h,m=c&&g.oldChartHeight||g.chartHeight,z=c&&g.oldChartWidth||
+g.chartWidth,A;e=this.transB;var t=function(a,g,b){if(a<g||a>b)d?a=Math.min(Math.max(g,a),b):A=!0;return a};k=C(k,this.translate(a,null,null,c));a=c=Math.round(k+e);e=h=Math.round(m-k-e);B(k)?this.horiz?(e=q,h=m-this.bottom,a=c=t(a,v,v+this.width)):(a=v,c=z-this.right,e=h=t(e,q,q+this.height)):(A=!0,d=!1);return A&&!d?null:g.renderer.crispLine(["M",a,e,"L",c,h],b||1)},getLinearTickPositions:function(a,b,c){var g,v=l(Math.floor(b/a)*a);c=l(Math.ceil(c/a)*a);var d=[],k;l(v+a)===v&&(k=20);if(this.single)return[b];
+for(b=v;b<=c;){d.push(b);b=l(b+a,k);if(b===g)break;g=b}return d},getMinorTickInterval:function(){var a=this.options;return!0===a.minorTicks?C(a.minorTickInterval,"auto"):!1===a.minorTicks?null:a.minorTickInterval},getMinorTickPositions:function(){var a=this,b=a.options,c=a.tickPositions,d=a.minorTickInterval,k=[],q=a.pointRangePadding||0,h=a.min-q,q=a.max+q,m=q-h;if(m&&m/d<a.len/3)if(a.isLog)e(this.paddedTicks,function(g,b,v){b&&k.push.apply(k,a.getLogTickPositions(d,v[b-1],v[b],!0))});else if(a.isDatetimeAxis&&
+"auto"===this.getMinorTickInterval())k=k.concat(a.getTimeTicks(a.normalizeTimeTickInterval(d),h,q,b.startOfWeek));else for(b=h+(c[0]-h)%d;b<=q&&b!==k[0];b+=d)k.push(b);0!==k.length&&a.trimTicks(k);return k},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,k,q,h,m,z,A,t;this.isXAxis&&void 0===this.minRange&&!this.isLog&&(n(a.min)||n(a.max)?this.minRange=null:(e(this.series,function(a){z=a.xData;for(h=A=a.xIncrement?1:z.length-1;0<h;h--)if(m=z[h]-z[h-1],void 0===q||m<q)q=m}),
+this.minRange=Math.min(5*q,this.dataMax-this.dataMin)));c-b<this.minRange&&(k=this.dataMax-this.dataMin>=this.minRange,t=this.minRange,d=(t-c+b)/2,d=[b-d,C(a.min,b-d)],k&&(d[2]=this.isLog?this.log2lin(this.dataMin):this.dataMin),b=H(d),c=[b+t,C(a.max,b+t)],k&&(c[2]=this.isLog?this.log2lin(this.dataMax):this.dataMax),c=p(c),c-b<t&&(d[0]=c-t,d[1]=C(a.min,c-t),b=H(d)));this.min=b;this.max=c},getClosest:function(){var a;this.categories?a=1:e(this.series,function(g){var b=g.closestPointRange,v=g.visible||
+!g.chart.options.chart.ignoreHiddenSeries;!g.noSharedTooltip&&n(b)&&v&&(a=n(a)?Math.min(a,b):b)});return a},nameToX:function(a){var g=z(this.categories),b=g?this.categories:this.names,c=a.options.x,d;a.series.requireSorting=!1;n(c)||(c=!1===this.options.uniqueNames?a.series.autoIncrement():k(a.name,b));-1===c?g||(d=b.length):d=c;void 0!==d&&(this.names[d]=a.name);return d},updateNames:function(){var a=this;0<this.names.length&&(this.names.length=0,this.minRange=this.userMinRange,e(this.series||[],
+function(g){g.xIncrement=null;if(!g.points||g.isDirtyData)g.processData(),g.generatePoints();e(g.points,function(b,v){var c;b.options&&(c=a.nameToX(b),void 0!==c&&c!==b.x&&(b.x=c,g.xData[v]=c))})}))},setAxisTranslation:function(a){var g=this,b=g.max-g.min,c=g.axisPointRange||0,d,k=0,q=0,h=g.linkedParent,m=!!g.categories,z=g.transA,A=g.isXAxis;if(A||m||c)d=g.getClosest(),h?(k=h.minPointOffset,q=h.pointRangePadding):e(g.series,function(a){var b=m?1:A?C(a.options.pointRange,d,0):g.axisPointRange||0;
+a=a.options.pointPlacement;c=Math.max(c,b);g.single||(k=Math.max(k,I(a)?0:b/2),q=Math.max(q,"on"===a?0:b))}),h=g.ordinalSlope&&d?g.ordinalSlope/d:1,g.minPointOffset=k*=h,g.pointRangePadding=q*=h,g.pointRange=Math.min(c,b),A&&(g.closestPointRange=d);a&&(g.oldTransA=z);g.translationSlope=g.transA=z=g.options.staticScale||g.len/(b+q||1);g.transB=g.horiz?g.left:g.bottom;g.minPixelPadding=z*k},minFromRange:function(){return this.max-this.range},setTickInterval:function(g){var b=this,d=b.chart,k=b.options,
+q=b.isLog,h=b.log2lin,z=b.isDatetimeAxis,A=b.isXAxis,t=b.isLinked,x=k.maxPadding,f=k.minPadding,F=k.tickInterval,u=k.tickPixelInterval,G=b.categories,p=b.threshold,I=b.softThreshold,r,w,N,D;z||G||t||this.getTickAmount();N=C(b.userMin,k.min);D=C(b.userMax,k.max);t?(b.linkedParent=d[b.coll][k.linkedTo],d=b.linkedParent.getExtremes(),b.min=C(d.min,d.dataMin),b.max=C(d.max,d.dataMax),k.type!==b.linkedParent.options.type&&a.error(11,1)):(!I&&n(p)&&(b.dataMin>=p?(r=p,f=0):b.dataMax<=p&&(w=p,x=0)),b.min=
+C(N,r,b.dataMin),b.max=C(D,w,b.dataMax));q&&(b.positiveValuesOnly&&!g&&0>=Math.min(b.min,C(b.dataMin,b.min))&&a.error(10,1),b.min=l(h(b.min),15),b.max=l(h(b.max),15));b.range&&n(b.max)&&(b.userMin=b.min=N=Math.max(b.dataMin,b.minFromRange()),b.userMax=D=b.max,b.range=null);m(b,"foundExtremes");b.beforePadding&&b.beforePadding();b.adjustForMinRange();!(G||b.axisPointRange||b.usePercentage||t)&&n(b.min)&&n(b.max)&&(h=b.max-b.min)&&(!n(N)&&f&&(b.min-=h*f),!n(D)&&x&&(b.max+=h*x));B(k.softMin)&&!B(b.userMin)&&
+(b.min=Math.min(b.min,k.softMin));B(k.softMax)&&!B(b.userMax)&&(b.max=Math.max(b.max,k.softMax));B(k.floor)&&(b.min=Math.max(b.min,k.floor));B(k.ceiling)&&(b.max=Math.min(b.max,k.ceiling));I&&n(b.dataMin)&&(p=p||0,!n(N)&&b.min<p&&b.dataMin>=p?b.min=p:!n(D)&&b.max>p&&b.dataMax<=p&&(b.max=p));b.tickInterval=b.min===b.max||void 0===b.min||void 0===b.max?1:t&&!F&&u===b.linkedParent.options.tickPixelInterval?F=b.linkedParent.tickInterval:C(F,this.tickAmount?(b.max-b.min)/Math.max(this.tickAmount-1,1):
+void 0,G?1:(b.max-b.min)*u/Math.max(b.len,u));A&&!g&&e(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();b.postProcessTickInterval&&(b.tickInterval=b.postProcessTickInterval(b.tickInterval));b.pointRange&&!F&&(b.tickInterval=Math.max(b.pointRange,b.tickInterval));g=C(k.minTickInterval,b.isDatetimeAxis&&b.closestPointRange);!F&&b.tickInterval<g&&(b.tickInterval=g);z||q||F||(b.tickInterval=K(b.tickInterval,
+null,c(b.tickInterval),C(k.allowDecimals,!(.5<b.tickInterval&&5>b.tickInterval&&1E3<b.max&&9999>b.max)),!!this.tickAmount));this.tickAmount||(b.tickInterval=b.unsquish());this.setTickPositions()},setTickPositions:function(){var a=this.options,b,c=a.tickPositions;b=this.getMinorTickInterval();var d=a.tickPositioner,k=a.startOnTick,q=a.endOnTick;this.tickmarkOffset=this.categories&&"between"===a.tickmarkPlacement&&1===this.tickInterval?.5:0;this.minorTickInterval="auto"===b&&this.tickInterval?this.tickInterval/
+5:b;this.single=this.min===this.max&&n(this.min)&&!this.tickAmount&&(parseInt(this.min,10)===this.min||!1!==a.allowDecimals);this.tickPositions=b=c&&c.slice();!b&&(b=this.isDatetimeAxis?this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval,a.units),this.min,this.max,a.startOfWeek,this.ordinalPositions,this.closestPointRange,!0):this.isLog?this.getLogTickPositions(this.tickInterval,this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max),b.length>this.len&&(b=
+[b[0],b.pop()],b[0]===b[1]&&(b.length=1)),this.tickPositions=b,d&&(d=d.apply(this,[this.min,this.max])))&&(this.tickPositions=b=d);this.paddedTicks=b.slice(0);this.trimTicks(b,k,q);this.isLinked||(this.single&&2>b.length&&(this.min-=.5,this.max+=.5),c||d||this.adjustTickAmount())},trimTicks:function(a,b,c){var g=a[0],d=a[a.length-1],k=this.minPointOffset||0;if(!this.isLinked){if(b&&-Infinity!==g)this.min=g;else for(;this.min-k>a[0];)a.shift();if(c)this.max=d;else for(;this.max+k<a[a.length-1];)a.pop();
+0===a.length&&n(g)&&!this.options.tickPositions&&a.push((d+g)/2)}},alignToOthers:function(){var a={},b,c=this.options;!1===this.chart.options.chart.alignTicks||!1===c.alignTicks||this.isLog||e(this.chart[this.coll],function(g){var c=g.options,c=[g.horiz?c.left:c.top,c.width,c.height,c.pane].join();g.series.length&&(a[c]?b=!0:a[c]=1)});return b},getTickAmount:function(){var a=this.options,b=a.tickAmount,c=a.tickPixelInterval;!n(a.tickInterval)&&this.len<c&&!this.isRadial&&!this.isLog&&a.startOnTick&&
+a.endOnTick&&(b=2);!b&&this.alignToOthers()&&(b=Math.ceil(this.len/c)+1);4>b&&(this.finalTickAmt=b,b=5);this.tickAmount=b},adjustTickAmount:function(){var a=this.tickInterval,b=this.tickPositions,c=this.tickAmount,d=this.finalTickAmt,k=b&&b.length,q=C(this.threshold,this.softThreshold?0:null);if(this.hasData()){if(k<c){for(;b.length<c;)b.length%2||this.min===q?b.push(l(b[b.length-1]+a)):b.unshift(l(b[0]-a));this.transA*=(k-1)/(c-1);this.min=b[0];this.max=b[b.length-1]}else k>c&&(this.tickInterval*=
+2,this.setTickPositions());if(n(d)){for(a=c=b.length;a--;)(3===d&&1===a%2||2>=d&&0<a&&a<c-1)&&b.splice(a,1);this.finalTickAmt=void 0}}},setScale:function(){var a,b;this.oldMin=this.min;this.oldMax=this.max;this.oldAxisLength=this.len;this.setAxisSize();b=this.len!==this.oldAxisLength;e(this.series,function(b){if(b.isDirtyData||b.isDirty||b.xAxis.isDirty)a=!0});b||a||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax||this.alignToOthers()?(this.resetStacks&&
+this.resetStacks(),this.forceRedraw=!1,this.getSeriesExtremes(),this.setTickInterval(),this.oldUserMin=this.userMin,this.oldUserMax=this.userMax,this.isDirty||(this.isDirty=b||this.min!==this.oldMin||this.max!==this.oldMax)):this.cleanStacks&&this.cleanStacks()},setExtremes:function(a,b,c,d,k){var g=this,q=g.chart;c=C(c,!0);e(g.series,function(a){delete a.kdTree});k=h(k,{min:a,max:b});m(g,"setExtremes",k,function(){g.userMin=a;g.userMax=b;g.eventArgs=k;c&&q.redraw(d)})},zoom:function(a,b){var g=this.dataMin,
+c=this.dataMax,d=this.options,k=Math.min(g,C(d.min,g)),d=Math.max(c,C(d.max,c));if(a!==this.min||b!==this.max)this.allowZoomOutside||(n(g)&&(a<k&&(a=k),a>d&&(a=d)),n(c)&&(b<k&&(b=k),b>d&&(b=d))),this.displayBtn=void 0!==a||void 0!==b,this.setExtremes(a,b,!1,void 0,{trigger:"zoom"});return!0},setAxisSize:function(){var b=this.chart,c=this.options,d=c.offsets||[0,0,0,0],k=this.horiz,q=this.width=Math.round(a.relativeLength(C(c.width,b.plotWidth-d[3]+d[1]),b.plotWidth)),e=this.height=Math.round(a.relativeLength(C(c.height,
+b.plotHeight-d[0]+d[2]),b.plotHeight)),h=this.top=Math.round(a.relativeLength(C(c.top,b.plotTop+d[0]),b.plotHeight,b.plotTop)),c=this.left=Math.round(a.relativeLength(C(c.left,b.plotLeft+d[3]),b.plotWidth,b.plotLeft));this.bottom=b.chartHeight-e-h;this.right=b.chartWidth-q-c;this.len=Math.max(k?q:e,0);this.pos=k?c:h},getExtremes:function(){var a=this.isLog,b=this.lin2log;return{min:a?l(b(this.min)):this.min,max:a?l(b(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,
+userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,g=this.lin2log,c=b?g(this.min):this.min,b=b?g(this.max):this.max;null===a?a=c:c>a?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},autoLabelAlign:function(a){a=(C(a,0)-90*this.side+720)%360;return 15<a&&165>a?"right":195<a&&345>a?"left":"center"},tickSize:function(a){var b=this.options,g=b[a+"Length"],c=C(b[a+"Width"],"tick"===a&&this.isXAxis?1:0);if(c&&g)return"inside"===b[a+"Position"]&&(g=-g),[g,c]},labelMetrics:function(){var a=
+this.tickPositions&&this.tickPositions[0]||0;return this.chart.renderer.fontMetrics(this.options.labels.style&&this.options.labels.style.fontSize,this.ticks[a]&&this.ticks[a].label)},unsquish:function(){var a=this.options.labels,b=this.horiz,c=this.tickInterval,d=c,k=this.len/(((this.categories?1:0)+this.max-this.min)/c),q,h=a.rotation,m=this.labelMetrics(),z,A=Number.MAX_VALUE,t,x=function(a){a/=k||1;a=1<a?Math.ceil(a):1;return a*c};b?(t=!a.staggerLines&&!a.step&&(n(h)?[h]:k<C(a.autoRotationLimit,
+80)&&a.autoRotation))&&e(t,function(a){var b;if(a===h||a&&-90<=a&&90>=a)z=x(Math.abs(m.h/Math.sin(w*a))),b=z+Math.abs(a/360),b<A&&(A=b,q=a,d=z)}):a.step||(d=x(m.h));this.autoRotation=t;this.labelRotation=C(q,h);return d},getSlotWidth:function(){var a=this.chart,b=this.horiz,c=this.options.labels,d=Math.max(this.tickPositions.length-(this.categories?0:1),1),k=a.margin[3];return b&&2>(c.step||0)&&!c.rotation&&(this.staggerLines||1)*this.len/d||!b&&(c.style&&parseInt(c.style.width,10)||k&&k-a.spacing[3]||
+.33*a.chartWidth)},renderUnsquish:function(){var a=this.chart,b=a.renderer,c=this.tickPositions,d=this.ticks,k=this.options.labels,q=this.horiz,h=this.getSlotWidth(),m=Math.max(1,Math.round(h-2*(k.padding||5))),z={},A=this.labelMetrics(),t=k.style&&k.style.textOverflow,f,F=0,l,B;I(k.rotation)||(z.rotation=k.rotation||0);e(c,function(a){(a=d[a])&&a.labelLength>F&&(F=a.labelLength)});this.maxLabelLength=F;if(this.autoRotation)F>m&&F>A.h?z.rotation=this.labelRotation:this.labelRotation=0;else if(h&&
+(f={width:m+"px"},!t))for(f.textOverflow="clip",l=c.length;!q&&l--;)if(B=c[l],m=d[B].label)m.styles&&"ellipsis"===m.styles.textOverflow?m.css({textOverflow:"clip"}):d[B].labelLength>h&&m.css({width:h+"px"}),m.getBBox().height>this.len/c.length-(A.h-A.f)&&(m.specCss={textOverflow:"ellipsis"});z.rotation&&(f={width:(F>.5*a.chartHeight?.33*a.chartHeight:a.chartHeight)+"px"},t||(f.textOverflow="ellipsis"));if(this.labelAlign=k.align||this.autoLabelAlign(this.labelRotation))z.align=this.labelAlign;e(c,
+function(a){var b=(a=d[a])&&a.label;b&&(b.attr(z),f&&b.css(x(f,b.specCss)),delete b.specCss,a.rotation=z.rotation)});this.tickRotCorr=b.rotCorr(A.b,this.labelRotation||0,0!==this.side)},hasData:function(){return this.hasVisibleSeries||n(this.min)&&n(this.max)&&this.tickPositions&&0<this.tickPositions.length},addTitle:function(a){var b=this.chart.renderer,g=this.horiz,c=this.opposite,d=this.options.title,k;this.axisTitle||((k=d.textAlign)||(k=(g?{low:"left",middle:"center",high:"right"}:{low:c?"right":
+"left",middle:"center",high:c?"left":"right"})[d.align]),this.axisTitle=b.text(d.text,0,0,d.useHTML).attr({zIndex:7,rotation:d.rotation||0,align:k}).addClass("highcharts-axis-title").css(d.style).add(this.axisGroup),this.axisTitle.isNew=!0);d.style.width||this.isRadial||this.axisTitle.css({width:this.len});this.axisTitle[a?"show":"hide"](!0)},generateTick:function(a){var b=this.ticks;b[a]?b[a].addLabel():b[a]=new F(this,a)},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,k=a.tickPositions,
+q=a.ticks,h=a.horiz,m=a.side,z=b.inverted&&!a.isZAxis?[1,0,3,2][m]:m,A,x,f=0,F,l=0,B=d.title,u=d.labels,G=0,p=b.axisOffset,b=b.clipOffset,I=[-1,1,1,-1][m],r=d.className,w=a.axisParent,K=this.tickSize("tick");A=a.hasData();a.showAxis=x=A||C(d.showEmpty,!0);a.staggerLines=a.horiz&&u.staggerLines;a.axisGroup||(a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).addClass("highcharts-"+this.coll.toLowerCase()+"-grid "+(r||"")).add(w),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).addClass("highcharts-"+
+this.coll.toLowerCase()+" "+(r||"")).add(w),a.labelGroup=c.g("axis-labels").attr({zIndex:u.zIndex||7}).addClass("highcharts-"+a.coll.toLowerCase()+"-labels "+(r||"")).add(w));A||a.isLinked?(e(k,function(b,c){a.generateTick(b,c)}),a.renderUnsquish(),a.reserveSpaceDefault=0===m||2===m||{1:"left",3:"right"}[m]===a.labelAlign,C(u.reserveSpace,"center"===a.labelAlign?!0:null,a.reserveSpaceDefault)&&e(k,function(a){G=Math.max(q[a].getLabelSize(),G)}),a.staggerLines&&(G*=a.staggerLines),a.labelOffset=G*
+(a.opposite?-1:1)):t(q,function(a,b){a.destroy();delete q[b]});B&&B.text&&!1!==B.enabled&&(a.addTitle(x),x&&!1!==B.reserveSpace&&(a.titleOffset=f=a.axisTitle.getBBox()[h?"height":"width"],F=B.offset,l=n(F)?0:C(B.margin,h?5:10)));a.renderLine();a.offset=I*C(d.offset,p[m]);a.tickRotCorr=a.tickRotCorr||{x:0,y:0};c=0===m?-a.labelMetrics().h:2===m?a.tickRotCorr.y:0;l=Math.abs(G)+l;G&&(l=l-c+I*(h?C(u.y,a.tickRotCorr.y+8*I):u.x));a.axisTitleMargin=C(F,l);p[m]=Math.max(p[m],a.axisTitleMargin+f+I*a.offset,
+l,A&&k.length&&K?K[0]+I*a.offset:0);d=d.offset?0:2*Math.floor(a.axisLine.strokeWidth()/2);b[z]=Math.max(b[z],d)},getLinePath:function(a){var b=this.chart,c=this.opposite,g=this.offset,d=this.horiz,k=this.left+(c?this.width:0)+g,g=b.chartHeight-this.bottom-(c?this.height:0)+g;c&&(a*=-1);return b.renderer.crispLine(["M",d?this.left:k,d?g:this.top,"L",d?b.chartWidth-this.right:k,d?g:b.chartHeight-this.bottom],a)},renderLine:function(){this.axisLine||(this.axisLine=this.chart.renderer.path().addClass("highcharts-axis-line").add(this.axisGroup),
+this.axisLine.attr({stroke:this.options.lineColor,"stroke-width":this.options.lineWidth,zIndex:7}))},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,k=this.options.title,q=a?b:c,e=this.opposite,h=this.offset,m=k.x||0,z=k.y||0,A=this.axisTitle,t=this.chart.renderer.fontMetrics(k.style&&k.style.fontSize,A),A=Math.max(A.getBBox(null,0).height-t.h-1,0),d={low:q+(a?0:d),middle:q+d/2,high:q+(a?d:0)}[k.align],b=(a?c+this.height:b)+(a?1:-1)*(e?-1:1)*this.axisTitleMargin+[-A,
+A,t.f,-A][this.side];return{x:a?d+m:b+(e?this.width:0)+h+m,y:a?b+z-(e?this.height:0)+h:d+z}},renderMinorTick:function(a){var b=this.chart.hasRendered&&B(this.oldMin),c=this.minorTicks;c[a]||(c[a]=new F(this,a,"minor"));b&&c[a].isNew&&c[a].render(null,!0);c[a].render(null,!1,1)},renderTick:function(a,b){var c=this.isLinked,g=this.ticks,d=this.chart.hasRendered&&B(this.oldMin);if(!c||a>=this.min&&a<=this.max)g[a]||(g[a]=new F(this,a)),d&&g[a].isNew&&g[a].render(b,!0,.1),g[a].render(b)},render:function(){var b=
+this,c=b.chart,d=b.options,k=b.isLog,q=b.lin2log,h=b.isLinked,m=b.tickPositions,z=b.axisTitle,x=b.ticks,f=b.minorTicks,l=b.alternateBands,C=d.stackLabels,n=d.alternateGridColor,u=b.tickmarkOffset,G=b.axisLine,p=b.showAxis,I=D(c.renderer.globalAnimation),r,w;b.labelEdge.length=0;b.overlap=!1;e([x,f,l],function(a){t(a,function(a){a.isActive=!1})});if(b.hasData()||h)b.minorTickInterval&&!b.categories&&e(b.getMinorTickPositions(),function(a){b.renderMinorTick(a)}),m.length&&(e(m,function(a,c){b.renderTick(a,
+c)}),u&&(0===b.min||b.single)&&(x[-1]||(x[-1]=new F(b,-1,null,!0)),x[-1].render(-1))),n&&e(m,function(d,g){w=void 0!==m[g+1]?m[g+1]+u:b.max-u;0===g%2&&d<b.max&&w<=b.max+(c.polar?-u:u)&&(l[d]||(l[d]=new a.PlotLineOrBand(b)),r=d+u,l[d].options={from:k?q(r):r,to:k?q(w):w,color:n},l[d].render(),l[d].isActive=!0)}),b._addedPlotLB||(e((d.plotLines||[]).concat(d.plotBands||[]),function(a){b.addPlotBandOrLine(a)}),b._addedPlotLB=!0);e([x,f,l],function(a){var b,d=[],g=I.duration;t(a,function(a,b){a.isActive||
+(a.render(b,!1,0),a.isActive=!1,d.push(b))});A(function(){for(b=d.length;b--;)a[d[b]]&&!a[d[b]].isActive&&(a[d[b]].destroy(),delete a[d[b]])},a!==l&&c.hasRendered&&g?g:0)});G&&(G[G.isPlaced?"animate":"attr"]({d:this.getLinePath(G.strokeWidth())}),G.isPlaced=!0,G[p?"show":"hide"](!0));z&&p&&(d=b.getTitlePosition(),B(d.y)?(z[z.isNew?"attr":"animate"](d),z.isNew=!1):(z.attr("y",-9999),z.isNew=!0));C&&C.enabled&&b.renderStackTotals();b.isDirty=!1},redraw:function(){this.visible&&(this.render(),e(this.plotLinesAndBands,
+function(a){a.render()}));e(this.series,function(a){a.isDirty=!0})},keepProps:"extKey hcEvents names series userMax userMin".split(" "),destroy:function(a){var b=this,c=b.stacks,d=b.plotLinesAndBands,g;a||N(b);t(c,function(a,b){u(a);c[b]=null});e([b.ticks,b.minorTicks,b.alternateBands],function(a){u(a)});if(d)for(a=d.length;a--;)d[a].destroy();e("stackTotalGroup axisLine axisTitle axisGroup gridGroup labelGroup cross".split(" "),function(a){b[a]&&(b[a]=b[a].destroy())});for(g in b.plotLinesAndBandsGroups)b.plotLinesAndBandsGroups[g]=
+b.plotLinesAndBandsGroups[g].destroy();t(b,function(a,c){-1===k(c,b.keepProps)&&delete b[c]})},drawCrosshair:function(a,b){var c,d=this.crosshair,g=C(d.snap,!0),k,q=this.cross;a||(a=this.cross&&this.cross.e);this.crosshair&&!1!==(n(b)||!g)?(g?n(b)&&(k=this.isXAxis?b.plotX:this.len-b.plotY):k=a&&(this.horiz?a.chartX-this.pos:this.len-a.chartY+this.pos),n(k)&&(c=this.getPlotLinePath(b&&(this.isXAxis?b.x:C(b.stackY,b.y)),null,null,null,k)||null),n(c)?(b=this.categories&&!this.isRadial,q||(this.cross=
+q=this.chart.renderer.path().addClass("highcharts-crosshair highcharts-crosshair-"+(b?"category ":"thin ")+d.className).attr({zIndex:C(d.zIndex,2)}).add(),q.attr({stroke:d.color||(b?f("#ccd6eb").setOpacity(.25).get():"#cccccc"),"stroke-width":C(d.width,1)}).css({"pointer-events":"none"}),d.dashStyle&&q.attr({dashstyle:d.dashStyle})),q.show().attr({d:c}),b&&!d.width&&q.attr({"stroke-width":this.transA}),this.cross.e=a):this.hideCrosshair()):this.hideCrosshair()},hideCrosshair:function(){this.cross&&
+this.cross.hide()}});return a.Axis=G}(M);(function(a){var E=a.Axis,D=a.Date,H=a.dateFormat,p=a.defaultOptions,f=a.defined,l=a.each,r=a.extend,n=a.getMagnitude,w=a.getTZOffset,u=a.normalizeTickInterval,e=a.pick,h=a.timeUnits;E.prototype.getTimeTicks=function(a,d,c,b){var k=[],m={},B=p.global.useUTC,n,x=new D(d-Math.max(w(d),w(c))),u=D.hcMakeTime,t=a.unitRange,C=a.count,N,q;if(f(d)){x[D.hcSetMilliseconds](t>=h.second?0:C*Math.floor(x.getMilliseconds()/C));if(t>=h.second)x[D.hcSetSeconds](t>=h.minute?
+0:C*Math.floor(x.getSeconds()/C));if(t>=h.minute)x[D.hcSetMinutes](t>=h.hour?0:C*Math.floor(x[D.hcGetMinutes]()/C));if(t>=h.hour)x[D.hcSetHours](t>=h.day?0:C*Math.floor(x[D.hcGetHours]()/C));if(t>=h.day)x[D.hcSetDate](t>=h.month?1:C*Math.floor(x[D.hcGetDate]()/C));t>=h.month&&(x[D.hcSetMonth](t>=h.year?0:C*Math.floor(x[D.hcGetMonth]()/C)),n=x[D.hcGetFullYear]());if(t>=h.year)x[D.hcSetFullYear](n-n%C);if(t===h.week)x[D.hcSetDate](x[D.hcGetDate]()-x[D.hcGetDay]()+e(b,1));n=x[D.hcGetFullYear]();b=x[D.hcGetMonth]();
+var A=x[D.hcGetDate](),F=x[D.hcGetHours]();d=x.getTime();D.hcHasTimeZone&&(q=(!B||!!D.hcGetTimezoneOffset)&&(c-d>4*h.month||w(d)!==w(c)),N=w(x),x=new D(d+N));B=x.getTime();for(d=1;B<c;)k.push(B),B=t===h.year?u(n+d*C,0):t===h.month?u(n,b+d*C):!q||t!==h.day&&t!==h.week?q&&t===h.hour?u(n,b,A,F+d*C,0,0,N)-N:B+t*C:u(n,b,A+d*C*(t===h.day?1:7)),d++;k.push(B);t<=h.hour&&1E4>k.length&&l(k,function(a){0===a%18E5&&"000000000"===H("%H%M%S%L",a)&&(m[a]="day")})}k.info=r(a,{higherRanks:m,totalRange:t*C});return k};
+E.prototype.normalizeTimeTickInterval=function(a,d){var c=d||[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]];d=c[c.length-1];var b=h[d[0]],k=d[1],e;for(e=0;e<c.length&&!(d=c[e],b=h[d[0]],k=d[1],c[e+1]&&a<=(b*k[k.length-1]+h[c[e+1][0]])/2);e++);b===h.year&&a<5*b&&(k=[1,2,5]);a=u(a/b,k,"year"===d[0]?Math.max(n(a/b),1):1);return{unitRange:b,count:a,unitName:d[0]}}})(M);
+(function(a){var E=a.Axis,D=a.getMagnitude,H=a.map,p=a.normalizeTickInterval,f=a.pick;E.prototype.getLogTickPositions=function(a,r,n,w){var l=this.options,e=this.len,h=this.lin2log,m=this.log2lin,d=[];w||(this._minorAutoInterval=null);if(.5<=a)a=Math.round(a),d=this.getLinearTickPositions(a,r,n);else if(.08<=a)for(var e=Math.floor(r),c,b,k,z,B,l=.3<a?[1,2,4]:.15<a?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];e<n+1&&!B;e++)for(b=l.length,c=0;c<b&&!B;c++)k=m(h(e)*l[c]),k>r&&(!w||z<=n)&&void 0!==z&&d.push(z),z>n&&
+(B=!0),z=k;else r=h(r),n=h(n),a=w?this.getMinorTickInterval():l.tickInterval,a=f("auto"===a?null:a,this._minorAutoInterval,l.tickPixelInterval/(w?5:1)*(n-r)/((w?e/this.tickPositions.length:e)||1)),a=p(a,null,D(a)),d=H(this.getLinearTickPositions(a,r,n),m),w||(this._minorAutoInterval=a/5);w||(this.tickInterval=a);return d};E.prototype.log2lin=function(a){return Math.log(a)/Math.LN10};E.prototype.lin2log=function(a){return Math.pow(10,a)}})(M);(function(a,E){var D=a.arrayMax,H=a.arrayMin,p=a.defined,
+f=a.destroyObjectProperties,l=a.each,r=a.erase,n=a.merge,w=a.pick;a.PlotLineOrBand=function(a,e){this.axis=a;e&&(this.options=e,this.id=e.id)};a.PlotLineOrBand.prototype={render:function(){var f=this,e=f.axis,h=e.horiz,m=f.options,d=m.label,c=f.label,b=m.to,k=m.from,z=m.value,l=p(k)&&p(b),r=p(z),x=f.svgElem,K=!x,t=[],C=m.color,N=w(m.zIndex,0),q=m.events,t={"class":"highcharts-plot-"+(l?"band ":"line ")+(m.className||"")},A={},F=e.chart.renderer,G=l?"bands":"lines",g=e.log2lin;e.isLog&&(k=g(k),b=g(b),
+z=g(z));r?(t={stroke:C,"stroke-width":m.width},m.dashStyle&&(t.dashstyle=m.dashStyle)):l&&(C&&(t.fill=C),m.borderWidth&&(t.stroke=m.borderColor,t["stroke-width"]=m.borderWidth));A.zIndex=N;G+="-"+N;(C=e.plotLinesAndBandsGroups[G])||(e.plotLinesAndBandsGroups[G]=C=F.g("plot-"+G).attr(A).add());K&&(f.svgElem=x=F.path().attr(t).add(C));if(r)t=e.getPlotLinePath(z,x.strokeWidth());else if(l)t=e.getPlotBandPath(k,b,m);else return;K&&t&&t.length?(x.attr({d:t}),q&&a.objectEach(q,function(a,b){x.on(b,function(a){q[b].apply(f,
+[a])})})):x&&(t?(x.show(),x.animate({d:t})):(x.hide(),c&&(f.label=c=c.destroy())));d&&p(d.text)&&t&&t.length&&0<e.width&&0<e.height&&!t.flat?(d=n({align:h&&l&&"center",x:h?!l&&4:10,verticalAlign:!h&&l&&"middle",y:h?l?16:10:l?6:-4,rotation:h&&!l&&90},d),this.renderLabel(d,t,l,N)):c&&c.hide();return f},renderLabel:function(a,e,h,m){var d=this.label,c=this.axis.chart.renderer;d||(d={align:a.textAlign||a.align,rotation:a.rotation,"class":"highcharts-plot-"+(h?"band":"line")+"-label "+(a.className||"")},
+d.zIndex=m,this.label=d=c.text(a.text,0,0,a.useHTML).attr(d).add(),d.css(a.style));m=e.xBounds||[e[1],e[4],h?e[6]:e[1]];e=e.yBounds||[e[2],e[5],h?e[7]:e[2]];h=H(m);c=H(e);d.align(a,!1,{x:h,y:c,width:D(m)-h,height:D(e)-c});d.show()},destroy:function(){r(this.axis.plotLinesAndBands,this);delete this.axis;f(this)}};a.extend(E.prototype,{getPlotBandPath:function(a,e){var h=this.getPlotLinePath(e,null,null,!0),m=this.getPlotLinePath(a,null,null,!0),d=[],c=this.horiz,b=1,k;a=a<this.min&&e<this.min||a>this.max&&
+e>this.max;if(m&&h)for(a&&(k=m.toString()===h.toString(),b=0),a=0;a<m.length;a+=6)c&&h[a+1]===m[a+1]?(h[a+1]+=b,h[a+4]+=b):c||h[a+2]!==m[a+2]||(h[a+2]+=b,h[a+5]+=b),d.push("M",m[a+1],m[a+2],"L",m[a+4],m[a+5],h[a+4],h[a+5],h[a+1],h[a+2],"z"),d.flat=k;return d},addPlotBand:function(a){return this.addPlotBandOrLine(a,"plotBands")},addPlotLine:function(a){return this.addPlotBandOrLine(a,"plotLines")},addPlotBandOrLine:function(f,e){var h=(new a.PlotLineOrBand(this,f)).render(),m=this.userOptions;h&&(e&&
+(m[e]=m[e]||[],m[e].push(f)),this.plotLinesAndBands.push(h));return h},removePlotBandOrLine:function(a){for(var e=this.plotLinesAndBands,h=this.options,m=this.userOptions,d=e.length;d--;)e[d].id===a&&e[d].destroy();l([h.plotLines||[],m.plotLines||[],h.plotBands||[],m.plotBands||[]],function(c){for(d=c.length;d--;)c[d].id===a&&r(c,c[d])})},removePlotBand:function(a){this.removePlotBandOrLine(a)},removePlotLine:function(a){this.removePlotBandOrLine(a)}})})(M,V);(function(a){var E=a.dateFormat,D=a.each,
+H=a.extend,p=a.format,f=a.isNumber,l=a.map,r=a.merge,n=a.pick,w=a.splat,u=a.syncTimeout,e=a.timeUnits;a.Tooltip=function(){this.init.apply(this,arguments)};a.Tooltip.prototype={init:function(a,e){this.chart=a;this.options=e;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.split=e.split&&!a.inverted;this.shared=e.shared||this.split},cleanSplit:function(a){D(this.chart.series,function(e){var d=e&&e.tt;d&&(!d.isActive||a?e.tt=d.destroy():d.isActive=!1)})},getLabel:function(){var a=this.chart.renderer,
+e=this.options;this.label||(this.split?this.label=a.g("tooltip"):(this.label=a.label("",0,0,e.shape||"callout",null,null,e.useHTML,null,"tooltip").attr({padding:e.padding,r:e.borderRadius}),this.label.attr({fill:e.backgroundColor,"stroke-width":e.borderWidth}).css(e.style).shadow(e.shadow)),this.label.attr({zIndex:8}).add());return this.label},update:function(a){this.destroy();r(!0,this.chart.options.tooltip.userOptions,a);this.init(this.chart,r(!0,this.options,a))},destroy:function(){this.label&&
+(this.label=this.label.destroy());this.split&&this.tt&&(this.cleanSplit(this.chart,!0),this.tt=this.tt.destroy());clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,e,d,c){var b=this,k=b.now,h=!1!==b.options.animation&&!b.isHidden&&(1<Math.abs(a-k.x)||1<Math.abs(e-k.y)),m=b.followPointer||1<b.len;H(k,{x:h?(2*k.x+a)/3:a,y:h?(k.y+e)/2:e,anchorX:m?void 0:h?(2*k.anchorX+d)/3:d,anchorY:m?void 0:h?(k.anchorY+c)/2:c});b.getLabel().attr(k);h&&(clearTimeout(this.tooltipTimeout),
+this.tooltipTimeout=setTimeout(function(){b&&b.move(a,e,d,c)},32))},hide:function(a){var e=this;clearTimeout(this.hideTimer);a=n(a,this.options.hideDelay,500);this.isHidden||(this.hideTimer=u(function(){e.getLabel()[a?"fadeOut":"hide"]();e.isHidden=!0},a))},getAnchor:function(a,e){var d,c=this.chart,b=c.inverted,k=c.plotTop,h=c.plotLeft,m=0,f=0,x,n;a=w(a);d=a[0].tooltipPos;this.followPointer&&e&&(void 0===e.chartX&&(e=c.pointer.normalize(e)),d=[e.chartX-c.plotLeft,e.chartY-k]);d||(D(a,function(a){x=
+a.series.yAxis;n=a.series.xAxis;m+=a.plotX+(!b&&n?n.left-h:0);f+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!b&&x?x.top-k:0)}),m/=a.length,f/=a.length,d=[b?c.plotWidth-f:m,this.shared&&!b&&1<a.length&&e?e.chartY-k:b?c.plotHeight-m:f]);return l(d,Math.round)},getPosition:function(a,e,d){var c=this.chart,b=this.distance,k={},h=c.inverted&&d.h||0,m,f=["y",c.chartHeight,e,d.plotY+c.plotTop,c.plotTop,c.plotTop+c.plotHeight],x=["x",c.chartWidth,a,d.plotX+c.plotLeft,c.plotLeft,c.plotLeft+c.plotWidth],
+l=!this.followPointer&&n(d.ttBelow,!c.inverted===!!d.negative),t=function(a,c,d,g,e,q){var m=d<g-b,z=g+b+d<c,A=g-b-d;g+=b;if(l&&z)k[a]=g;else if(!l&&m)k[a]=A;else if(m)k[a]=Math.min(q-d,0>A-h?A:A-h);else if(z)k[a]=Math.max(e,g+h+d>c?g:g+h);else return!1},C=function(a,c,d,g){var e;g<b||g>c-b?e=!1:k[a]=g<d/2?1:g>c-d/2?c-d-2:g-d/2;return e},p=function(a){var b=f;f=x;x=b;m=a},q=function(){!1!==t.apply(0,f)?!1!==C.apply(0,x)||m||(p(!0),q()):m?k.x=k.y=0:(p(!0),q())};(c.inverted||1<this.len)&&p();q();return k},
+defaultFormatter:function(a){var e=this.points||w(this),d;d=[a.tooltipFooterHeaderFormatter(e[0])];d=d.concat(a.bodyFormatter(e));d.push(a.tooltipFooterHeaderFormatter(e[0],!0));return d},refresh:function(a,e){var d,c=this.options,b,k=a,h,m={},f=[];d=c.formatter||this.defaultFormatter;var m=this.shared,x;c.enabled&&(clearTimeout(this.hideTimer),this.followPointer=w(k)[0].series.tooltipOptions.followPointer,h=this.getAnchor(k,e),e=h[0],b=h[1],!m||k.series&&k.series.noSharedTooltip?m=k.getLabelConfig():
+(D(k,function(a){a.setState("hover");f.push(a.getLabelConfig())}),m={x:k[0].category,y:k[0].y},m.points=f,k=k[0]),this.len=f.length,m=d.call(m,this),x=k.series,this.distance=n(x.tooltipOptions.distance,16),!1===m?this.hide():(d=this.getLabel(),this.isHidden&&d.attr({opacity:1}).show(),this.split?this.renderSplit(m,w(a)):(c.style.width||d.css({width:this.chart.spacingBox.width}),d.attr({text:m&&m.join?m.join(""):m}),d.removeClass(/highcharts-color-[\d]+/g).addClass("highcharts-color-"+n(k.colorIndex,
+x.colorIndex)),d.attr({stroke:c.borderColor||k.color||x.color||"#666666"}),this.updatePosition({plotX:e,plotY:b,negative:k.negative,ttBelow:k.ttBelow,h:h[2]||0})),this.isHidden=!1))},renderSplit:function(e,m){var d=this,c=[],b=this.chart,k=b.renderer,h=!0,f=this.options,l=0,x=this.getLabel();a.isString(e)&&(e=[!1,e]);D(e.slice(0,m.length+1),function(a,e){if(!1!==a){e=m[e-1]||{isHeader:!0,plotX:m[0].plotX};var z=e.series||d,t=z.tt,q=e.series||{},A="highcharts-color-"+n(e.colorIndex,q.colorIndex,"none");
+t||(z.tt=t=k.label(null,null,null,"callout",null,null,f.useHTML).addClass("highcharts-tooltip-box "+A).attr({padding:f.padding,r:f.borderRadius,fill:f.backgroundColor,stroke:f.borderColor||e.color||q.color||"#333333","stroke-width":f.borderWidth}).add(x));t.isActive=!0;t.attr({text:a});t.css(f.style).shadow(f.shadow);a=t.getBBox();q=a.width+t.strokeWidth();e.isHeader?(l=a.height,q=Math.max(0,Math.min(e.plotX+b.plotLeft-q/2,b.chartWidth-q))):q=e.plotX+b.plotLeft-n(f.distance,16)-q;0>q&&(h=!1);a=(e.series&&
+e.series.yAxis&&e.series.yAxis.pos)+(e.plotY||0);a-=b.plotTop;c.push({target:e.isHeader?b.plotHeight+l:a,rank:e.isHeader?1:0,size:z.tt.getBBox().height+1,point:e,x:q,tt:t})}});this.cleanSplit();a.distribute(c,b.plotHeight+l);D(c,function(a){var c=a.point,d=c.series;a.tt.attr({visibility:void 0===a.pos?"hidden":"inherit",x:h||c.isHeader?a.x:c.plotX+b.plotLeft+n(f.distance,16),y:a.pos+b.plotTop,anchorX:c.isHeader?c.plotX+b.plotLeft:c.plotX+d.xAxis.pos,anchorY:c.isHeader?a.pos+b.plotTop-15:c.plotY+d.yAxis.pos})})},
+updatePosition:function(a){var e=this.chart,d=this.getLabel(),d=(this.options.positioner||this.getPosition).call(this,d.width,d.height,a);this.move(Math.round(d.x),Math.round(d.y||0),a.plotX+e.plotLeft,a.plotY+e.plotTop)},getDateFormat:function(a,m,d,c){var b=E("%m-%d %H:%M:%S.%L",m),k,h,f={millisecond:15,second:12,minute:9,hour:6,day:3},l="millisecond";for(h in e){if(a===e.week&&+E("%w",m)===d&&"00:00:00.000"===b.substr(6)){h="week";break}if(e[h]>a){h=l;break}if(f[h]&&b.substr(f[h])!=="01-01 00:00:00.000".substr(f[h]))break;
+"week"!==h&&(l=h)}h&&(k=c[h]);return k},getXDateFormat:function(a,e,d){e=e.dateTimeLabelFormats;var c=d&&d.closestPointRange;return(c?this.getDateFormat(c,a.x,d.options.startOfWeek,e):e.day)||e.year},tooltipFooterHeaderFormatter:function(a,e){e=e?"footer":"header";var d=a.series,c=d.tooltipOptions,b=c.xDateFormat,k=d.xAxis,h=k&&"datetime"===k.options.type&&f(a.key),m=c[e+"Format"];h&&!b&&(b=this.getXDateFormat(a,c,k));h&&b&&D(a.point&&a.point.tooltipDateKeys||["key"],function(a){m=m.replace("{point."+
+a+"}","{point."+a+":"+b+"}")});return p(m,{point:a,series:d})},bodyFormatter:function(a){return l(a,function(a){var d=a.series.tooltipOptions;return(d[(a.point.formatPrefix||"point")+"Formatter"]||a.point.tooltipFormatter).call(a.point,d[(a.point.formatPrefix||"point")+"Format"])})}}})(M);(function(a){var E=a.addEvent,D=a.attr,H=a.charts,p=a.color,f=a.css,l=a.defined,r=a.each,n=a.extend,w=a.find,u=a.fireEvent,e=a.isObject,h=a.offset,m=a.pick,d=a.splat,c=a.Tooltip;a.Pointer=function(a,c){this.init(a,
+c)};a.Pointer.prototype={init:function(a,d){this.options=d;this.chart=a;this.runChartClick=d.chart.events&&!!d.chart.events.click;this.pinchDown=[];this.lastValidTouch={};c&&(a.tooltip=new c(a,d.tooltip),this.followTouchMove=m(d.tooltip.followTouchMove,!0));this.setDOMEvents()},zoomOption:function(a){var b=this.chart,c=b.options.chart,d=c.zoomType||"",b=b.inverted;/touch/.test(a.type)&&(d=m(c.pinchType,d));this.zoomX=a=/x/.test(d);this.zoomY=d=/y/.test(d);this.zoomHor=a&&!b||d&&b;this.zoomVert=d&&
+!b||a&&b;this.hasZoom=a||d},normalize:function(a,c){var b;b=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;c||(this.chartPosition=c=h(this.chart.container));return n(a,{chartX:Math.round(b.pageX-c.left),chartY:Math.round(b.pageY-c.top)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};r(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},findNearestKDPoint:function(a,c,d){var b;r(a,function(a){var k=
+!(a.noSharedTooltip&&c)&&0>a.options.findNearestPointBy.indexOf("y");a=a.searchPoint(d,k);if((k=e(a,!0))&&!(k=!e(b,!0)))var k=b.distX-a.distX,h=b.dist-a.dist,m=(a.series.group&&a.series.group.zIndex)-(b.series.group&&b.series.group.zIndex),k=0<(0!==k&&c?k:0!==h?h:0!==m?m:b.series.index>a.series.index?-1:1);k&&(b=a)});return b},getPointFromEvent:function(a){a=a.target;for(var b;a&&!b;)b=a.point,a=a.parentNode;return b},getChartCoordinatesFromPoint:function(a,c){var b=a.series,d=b.xAxis,b=b.yAxis,k=
+m(a.clientX,a.plotX);if(d&&b)return c?{chartX:d.len+d.pos-k,chartY:b.len+b.pos-a.plotY}:{chartX:k+d.pos,chartY:a.plotY+b.pos}},getHoverData:function(b,c,d,h,f,l,n){var k,z=[],x=n&&n.isBoosting;h=!(!h||!b);n=c&&!c.stickyTracking?[c]:a.grep(d,function(a){return a.visible&&!(!f&&a.directTouch)&&m(a.options.enableMouseTracking,!0)&&a.stickyTracking});c=(k=h?b:this.findNearestKDPoint(n,f,l))&&k.series;k&&(f&&!c.noSharedTooltip?(n=a.grep(d,function(a){return a.visible&&!(!f&&a.directTouch)&&m(a.options.enableMouseTracking,
+!0)&&!a.noSharedTooltip}),r(n,function(a){var b=w(a.points,function(a){return a.x===k.x&&!a.isNull});e(b)&&(x&&(b=a.getPoint(b)),z.push(b))})):z.push(k));return{hoverPoint:k,hoverSeries:c,hoverPoints:z}},runPointActions:function(b,c){var d=this.chart,k=d.tooltip&&d.tooltip.options.enabled?d.tooltip:void 0,e=k?k.shared:!1,h=c||d.hoverPoint,f=h&&h.series||d.hoverSeries,f=this.getHoverData(h,f,d.series,!!c||f&&f.directTouch&&this.isDirectTouch,e,b,{isBoosting:d.isBoosting}),l,h=f.hoverPoint;l=f.hoverPoints;
+c=(f=f.hoverSeries)&&f.tooltipOptions.followPointer;e=e&&f&&!f.noSharedTooltip;if(h&&(h!==d.hoverPoint||k&&k.isHidden)){r(d.hoverPoints||[],function(b){-1===a.inArray(b,l)&&b.setState()});r(l||[],function(a){a.setState("hover")});if(d.hoverSeries!==f)f.onMouseOver();d.hoverPoint&&d.hoverPoint.firePointEvent("mouseOut");if(!h.series)return;h.firePointEvent("mouseOver");d.hoverPoints=l;d.hoverPoint=h;k&&k.refresh(e?l:h,b)}else c&&k&&!k.isHidden&&(h=k.getAnchor([{}],b),k.updatePosition({plotX:h[0],plotY:h[1]}));
+this.unDocMouseMove||(this.unDocMouseMove=E(d.container.ownerDocument,"mousemove",function(b){var c=H[a.hoverChartIndex];if(c)c.pointer.onDocumentMouseMove(b)}));r(d.axes,function(c){var d=m(c.crosshair.snap,!0),k=d?a.find(l,function(a){return a.series[c.coll]===c}):void 0;k||!d?c.drawCrosshair(b,k):c.hideCrosshair()})},reset:function(a,c){var b=this.chart,k=b.hoverSeries,e=b.hoverPoint,h=b.hoverPoints,m=b.tooltip,f=m&&m.shared?h:e;a&&f&&r(d(f),function(b){b.series.isCartesian&&void 0===b.plotX&&
+(a=!1)});if(a)m&&f&&(m.refresh(f),e&&(e.setState(e.state,!0),r(b.axes,function(a){a.crosshair&&a.drawCrosshair(null,e)})));else{if(e)e.onMouseOut();h&&r(h,function(a){a.setState()});if(k)k.onMouseOut();m&&m.hide(c);this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove());r(b.axes,function(a){a.hideCrosshair()});this.hoverX=b.hoverPoints=b.hoverPoint=null}},scaleGroups:function(a,c){var b=this.chart,d;r(b.series,function(k){d=a||k.getPlotBox();k.xAxis&&k.xAxis.zoomEnabled&&k.group&&(k.group.attr(d),
+k.markerGroup&&(k.markerGroup.attr(d),k.markerGroup.clip(c?b.clipRect:null)),k.dataLabelsGroup&&k.dataLabelsGroup.attr(d))});b.clipRect.attr(c||b.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,h=this.zoomHor,m=this.zoomVert,f=b.plotLeft,l=b.plotTop,n=b.plotWidth,q=b.plotHeight,A,F=this.selectionMarker,G=this.mouseDownX,
+g=this.mouseDownY,v=c.panKey&&a[c.panKey+"Key"];F&&F.touch||(d<f?d=f:d>f+n&&(d=f+n),e<l?e=l:e>l+q&&(e=l+q),this.hasDragged=Math.sqrt(Math.pow(G-d,2)+Math.pow(g-e,2)),10<this.hasDragged&&(A=b.isInsidePlot(G-f,g-l),b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&A&&!v&&!F&&(this.selectionMarker=F=b.renderer.rect(f,l,h?1:n,m?1:q,0).attr({fill:c.selectionMarkerFill||p("#335cad").setOpacity(.25).get(),"class":"highcharts-selection-marker",zIndex:7}).add()),F&&h&&(d-=G,F.attr({width:Math.abs(d),x:(0<d?
+0:d)+G})),F&&m&&(d=e-g,F.attr({height:Math.abs(d),y:(0<d?0:d)+g})),A&&!F&&c.panning&&b.pan(a,c.panning)))},drop:function(a){var b=this,c=this.chart,d=this.hasPinched;if(this.selectionMarker){var e={originalEvent:a,xAxis:[],yAxis:[]},h=this.selectionMarker,m=h.attr?h.attr("x"):h.x,t=h.attr?h.attr("y"):h.y,p=h.attr?h.attr("width"):h.width,w=h.attr?h.attr("height"):h.height,q;if(this.hasDragged||d)r(c.axes,function(c){if(c.zoomEnabled&&l(c.min)&&(d||b[{xAxis:"zoomX",yAxis:"zoomY"}[c.coll]])){var k=c.horiz,
+h="touchend"===a.type?c.minPixelPadding:0,g=c.toValue((k?m:t)+h),k=c.toValue((k?m+p:t+w)-h);e[c.coll].push({axis:c,min:Math.min(g,k),max:Math.max(g,k)});q=!0}}),q&&u(c,"selection",e,function(a){c.zoom(n(a,d?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();d&&this.scaleGroups()}c&&(f(c.container,{cursor:c._cursor}),c.cancelClick=10<this.hasDragged,c.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[])},onContainerMouseDown:function(a){2!==a.button&&(a=this.normalize(a),
+this.zoomOption(a),a.preventDefault&&a.preventDefault(),this.dragStart(a))},onDocumentMouseUp:function(b){H[a.hoverChartIndex]&&H[a.hoverChartIndex].pointer.drop(b)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition;a=this.normalize(a,c);!c||this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)||this.reset()},onContainerMouseLeave:function(b){var c=H[a.hoverChartIndex];c&&(b.relatedTarget||b.toElement)&&(c.pointer.reset(),c.pointer.chartPosition=
+null)},onContainerMouseMove:function(b){var c=this.chart;l(a.hoverChartIndex)&&H[a.hoverChartIndex]&&H[a.hoverChartIndex].mouseIsDown||(a.hoverChartIndex=c.index);b=this.normalize(b);b.returnValue=!1;"mousedown"===c.mouseIsDown&&this.drag(b);!this.inClass(b.target,"highcharts-tracker")&&!c.isInsidePlot(b.chartX-c.plotLeft,b.chartY-c.plotTop)||c.openMenu||this.runPointActions(b)},inClass:function(a,c){for(var b;a;){if(b=D(a,"class")){if(-1!==b.indexOf(c))return!0;if(-1!==b.indexOf("highcharts-container"))return!1}a=
+a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries;a=a.relatedTarget||a.toElement;this.isDirectTouch=!1;if(!(!b||!a||b.stickyTracking||this.inClass(a,"highcharts-tooltip")||this.inClass(a,"highcharts-series-"+b.index)&&this.inClass(a,"highcharts-tracker")))b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop;a=this.normalize(a);b.cancelClick||(c&&this.inClass(a.target,"highcharts-tracker")?(u(c.series,"click",n(a,{point:c})),
+b.hoverPoint&&c.firePointEvent("click",a)):(n(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&u(b,"click",a)))},setDOMEvents:function(){var b=this,c=b.chart.container,d=c.ownerDocument;c.onmousedown=function(a){b.onContainerMouseDown(a)};c.onmousemove=function(a){b.onContainerMouseMove(a)};c.onclick=function(a){b.onContainerClick(a)};this.unbindContainerMouseLeave=E(c,"mouseleave",b.onContainerMouseLeave);a.unbindDocumentMouseUp||(a.unbindDocumentMouseUp=E(d,"mouseup",b.onDocumentMouseUp));
+a.hasTouch&&(c.ontouchstart=function(a){b.onContainerTouchStart(a)},c.ontouchmove=function(a){b.onContainerTouchMove(a)},a.unbindDocumentTouchEnd||(a.unbindDocumentTouchEnd=E(d,"touchend",b.onDocumentTouchEnd)))},destroy:function(){var b=this;b.unDocMouseMove&&b.unDocMouseMove();this.unbindContainerMouseLeave();a.chartCount||(a.unbindDocumentMouseUp&&(a.unbindDocumentMouseUp=a.unbindDocumentMouseUp()),a.unbindDocumentTouchEnd&&(a.unbindDocumentTouchEnd=a.unbindDocumentTouchEnd()));clearInterval(b.tooltipTimeout);
+a.objectEach(b,function(a,c){b[c]=null})}}})(M);(function(a){var E=a.charts,D=a.each,H=a.extend,p=a.map,f=a.noop,l=a.pick;H(a.Pointer.prototype,{pinchTranslate:function(a,f,l,p,e,h){this.zoomHor&&this.pinchTranslateDirection(!0,a,f,l,p,e,h);this.zoomVert&&this.pinchTranslateDirection(!1,a,f,l,p,e,h)},pinchTranslateDirection:function(a,f,l,p,e,h,m,d){var c=this.chart,b=a?"x":"y",k=a?"X":"Y",z="chart"+k,n=a?"width":"height",r=c["plot"+(a?"Left":"Top")],x,w,t=d||1,C=c.inverted,u=c.bounds[a?"h":"v"],
+q=1===f.length,A=f[0][z],F=l[0][z],G=!q&&f[1][z],g=!q&&l[1][z],v;l=function(){!q&&20<Math.abs(A-G)&&(t=d||Math.abs(F-g)/Math.abs(A-G));w=(r-F)/t+A;x=c["plot"+(a?"Width":"Height")]/t};l();f=w;f<u.min?(f=u.min,v=!0):f+x>u.max&&(f=u.max-x,v=!0);v?(F-=.8*(F-m[b][0]),q||(g-=.8*(g-m[b][1])),l()):m[b]=[F,g];C||(h[b]=w-r,h[n]=x);h=C?1/t:t;e[n]=x;e[b]=f;p[C?a?"scaleY":"scaleX":"scale"+k]=t;p["translate"+k]=h*r+(F-h*A)},pinch:function(a){var n=this,r=n.chart,u=n.pinchDown,e=a.touches,h=e.length,m=n.lastValidTouch,
+d=n.hasZoom,c=n.selectionMarker,b={},k=1===h&&(n.inClass(a.target,"highcharts-tracker")&&r.runTrackerClick||n.runChartClick),z={};1<h&&(n.initiated=!0);d&&n.initiated&&!k&&a.preventDefault();p(e,function(a){return n.normalize(a)});"touchstart"===a.type?(D(e,function(a,b){u[b]={chartX:a.chartX,chartY:a.chartY}}),m.x=[u[0].chartX,u[1]&&u[1].chartX],m.y=[u[0].chartY,u[1]&&u[1].chartY],D(r.axes,function(a){if(a.zoomEnabled){var b=r.bounds[a.horiz?"h":"v"],c=a.minPixelPadding,d=a.toPixels(l(a.options.min,
+a.dataMin)),e=a.toPixels(l(a.options.max,a.dataMax)),k=Math.max(d,e);b.min=Math.min(a.pos,Math.min(d,e)-c);b.max=Math.max(a.pos+a.len,k+c)}}),n.res=!0):n.followTouchMove&&1===h?this.runPointActions(n.normalize(a)):u.length&&(c||(n.selectionMarker=c=H({destroy:f,touch:!0},r.plotBox)),n.pinchTranslate(u,e,b,c,z,m),n.hasPinched=d,n.scaleGroups(b,z),n.res&&(n.res=!1,this.reset(!1,0)))},touch:function(f,n){var p=this.chart,r,e;if(p.index!==a.hoverChartIndex)this.onContainerMouseLeave({relatedTarget:!0});
+a.hoverChartIndex=p.index;1===f.touches.length?(f=this.normalize(f),(e=p.isInsidePlot(f.chartX-p.plotLeft,f.chartY-p.plotTop))&&!p.openMenu?(n&&this.runPointActions(f),"touchmove"===f.type&&(n=this.pinchDown,r=n[0]?4<=Math.sqrt(Math.pow(n[0].chartX-f.chartX,2)+Math.pow(n[0].chartY-f.chartY,2)):!1),l(r,!0)&&this.pinch(f)):n&&this.reset()):2===f.touches.length&&this.pinch(f)},onContainerTouchStart:function(a){this.zoomOption(a);this.touch(a,!0)},onContainerTouchMove:function(a){this.touch(a)},onDocumentTouchEnd:function(f){E[a.hoverChartIndex]&&
+E[a.hoverChartIndex].pointer.drop(f)}})})(M);(function(a){var E=a.addEvent,D=a.charts,H=a.css,p=a.doc,f=a.extend,l=a.noop,r=a.Pointer,n=a.removeEvent,w=a.win,u=a.wrap;if(!a.hasTouch&&(w.PointerEvent||w.MSPointerEvent)){var e={},h=!!w.PointerEvent,m=function(){var c=[];c.item=function(a){return this[a]};a.objectEach(e,function(a){c.push({pageX:a.pageX,pageY:a.pageY,target:a.target})});return c},d=function(c,b,d,e){"touch"!==c.pointerType&&c.pointerType!==c.MSPOINTER_TYPE_TOUCH||!D[a.hoverChartIndex]||
+(e(c),e=D[a.hoverChartIndex].pointer,e[b]({type:d,target:c.currentTarget,preventDefault:l,touches:m()}))};f(r.prototype,{onContainerPointerDown:function(a){d(a,"onContainerTouchStart","touchstart",function(a){e[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){d(a,"onContainerTouchMove","touchmove",function(a){e[a.pointerId]={pageX:a.pageX,pageY:a.pageY};e[a.pointerId].target||(e[a.pointerId].target=a.currentTarget)})},onDocumentPointerUp:function(a){d(a,
+"onDocumentTouchEnd","touchend",function(a){delete e[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,h?"pointerdown":"MSPointerDown",this.onContainerPointerDown);a(this.chart.container,h?"pointermove":"MSPointerMove",this.onContainerPointerMove);a(p,h?"pointerup":"MSPointerUp",this.onDocumentPointerUp)}});u(r.prototype,"init",function(a,b,d){a.call(this,b,d);this.hasZoom&&H(b.container,{"-ms-touch-action":"none","touch-action":"none"})});u(r.prototype,"setDOMEvents",function(a){a.apply(this);
+(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(E)});u(r.prototype,"destroy",function(a){this.batchMSEvents(n);a.call(this)})}})(M);(function(a){var E=a.addEvent,D=a.css,H=a.discardElement,p=a.defined,f=a.each,l=a.isFirefox,r=a.marginNames,n=a.merge,w=a.pick,u=a.setAnimation,e=a.stableSort,h=a.win,m=a.wrap;a.Legend=function(a,c){this.init(a,c)};a.Legend.prototype={init:function(a,c){this.chart=a;this.setOptions(c);c.enabled&&(this.render(),E(this.chart,"endResize",function(){this.legend.positionCheckboxes()}))},
+setOptions:function(a){var c=w(a.padding,8);this.options=a;this.itemStyle=a.itemStyle;this.itemHiddenStyle=n(this.itemStyle,a.itemHiddenStyle);this.itemMarginTop=a.itemMarginTop||0;this.padding=c;this.initialItemY=c-5;this.itemHeight=this.maxItemWidth=0;this.symbolWidth=w(a.symbolWidth,16);this.pages=[]},update:function(a,c){var b=this.chart;this.setOptions(n(!0,this.options,a));this.destroy();b.isDirtyLegend=b.isDirtyBox=!0;w(c,!0)&&b.redraw()},colorizeItem:function(a,c){a.legendGroup[c?"removeClass":
+"addClass"]("highcharts-legend-item-hidden");var b=this.options,d=a.legendItem,e=a.legendLine,h=a.legendSymbol,f=this.itemHiddenStyle.color,b=c?b.itemStyle.color:f,m=c?a.color||f:f,l=a.options&&a.options.marker,t={fill:m};d&&d.css({fill:b,color:b});e&&e.attr({stroke:m});h&&(l&&h.isMarker&&(t=a.pointAttribs(),c||(t.stroke=t.fill=f)),h.attr(t))},positionItem:function(a){var c=this.options,b=c.symbolPadding,c=!c.rtl,d=a._legendItemPos,e=d[0],d=d[1],h=a.checkbox;(a=a.legendGroup)&&a.element&&a.translate(c?
+e:this.legendWidth-e-2*b-4,d);h&&(h.x=e,h.y=d)},destroyItem:function(a){var c=a.checkbox;f(["legendItem","legendLine","legendSymbol","legendGroup"],function(b){a[b]&&(a[b]=a[b].destroy())});c&&H(a.checkbox)},destroy:function(){function a(a){this[a]&&(this[a]=this[a].destroy())}f(this.getAllItems(),function(c){f(["legendItem","legendGroup"],a,c)});f("clipRect up down pager nav box title group".split(" "),a,this);this.display=null},positionCheckboxes:function(){var a=this.group&&this.group.alignAttr,
+c,b=this.clipHeight||this.legendHeight,e=this.titleHeight;a&&(c=a.translateY,f(this.allItems,function(d){var k=d.checkbox,h;k&&(h=c+e+k.y+(this.scrollOffset||0)+3,D(k,{left:a.translateX+d.checkboxOffset+k.x-20+"px",top:h+"px",display:h>c-6&&h<c+b-6?"":"none"}))},this))},renderTitle:function(){var a=this.options,c=this.padding,b=a.title,e=0;b.text&&(this.title||(this.title=this.chart.renderer.label(b.text,c-3,c-4,null,null,null,a.useHTML,null,"legend-title").attr({zIndex:1}).css(b.style).add(this.group)),
+a=this.title.getBBox(),e=a.height,this.offsetWidth=a.width,this.contentGroup.attr({translateY:e}));this.titleHeight=e},setText:function(d){var c=this.options;d.legendItem.attr({text:c.labelFormat?a.format(c.labelFormat,d):c.labelFormatter.call(d)})},renderItem:function(a){var c=this.chart,b=c.renderer,d=this.options,e="horizontal"===d.layout,h=this.symbolWidth,f=d.symbolPadding,m=this.itemStyle,l=this.itemHiddenStyle,t=this.padding,p=e?w(d.itemDistance,20):0,r=!d.rtl,q=d.width,A=d.itemMarginBottom||
+0,F=this.itemMarginTop,G=a.legendItem,g=!a.series,v=!g&&a.series.drawLegendSymbol?a.series:a,u=v.options,L=this.createCheckboxForItem&&u&&u.showCheckbox,u=h+f+p+(L?20:0),P=d.useHTML,J=a.options.className;G||(a.legendGroup=b.g("legend-item").addClass("highcharts-"+v.type+"-series highcharts-color-"+a.colorIndex+(J?" "+J:"")+(g?" highcharts-series-"+a.index:"")).attr({zIndex:1}).add(this.scrollGroup),a.legendItem=G=b.text("",r?h+f:-f,this.baseline||0,P).css(n(a.visible?m:l)).attr({align:r?"left":"right",
+zIndex:2}).add(a.legendGroup),this.baseline||(h=m.fontSize,this.fontMetrics=b.fontMetrics(h,G),this.baseline=this.fontMetrics.f+3+F,G.attr("y",this.baseline)),this.symbolHeight=d.symbolHeight||this.fontMetrics.f,v.drawLegendSymbol(this,a),this.setItemEvents&&this.setItemEvents(a,G,P),L&&this.createCheckboxForItem(a));this.colorizeItem(a,a.visible);m.width||G.css({width:(d.itemWidth||d.width||c.spacingBox.width)-u});this.setText(a);b=G.getBBox();m=a.checkboxOffset=d.itemWidth||a.legendItemWidth||b.width+
+u;this.itemHeight=b=Math.round(a.legendItemHeight||b.height||this.symbolHeight);e&&this.itemX-t+m>(q||c.spacingBox.width-2*t-d.x)&&(this.itemX=t,this.itemY+=F+this.lastLineHeight+A,this.lastLineHeight=0);this.maxItemWidth=Math.max(this.maxItemWidth,m);this.lastItemY=F+this.itemY+A;this.lastLineHeight=Math.max(b,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=m:(this.itemY+=F+b+A,this.lastLineHeight=b);this.offsetWidth=q||Math.max((e?this.itemX-t-(a.checkbox?0:p):m)+t,this.offsetWidth)},
+getAllItems:function(){var a=[];f(this.chart.series,function(c){var b=c&&c.options;c&&w(b.showInLegend,p(b.linkedTo)?!1:void 0,!0)&&(a=a.concat(c.legendItems||("point"===b.legendType?c.data:c)))});return a},getAlignment:function(){var a=this.options;return a.floating?"":a.align.charAt(0)+a.verticalAlign.charAt(0)+a.layout.charAt(0)},adjustMargins:function(a,c){var b=this.chart,d=this.options,e=this.getAlignment();e&&f([/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/],function(k,h){k.test(e)&&
+!p(a[h])&&(b[r[h]]=Math.max(b[r[h]],b.legend[(h+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][h]*d[h%2?"x":"y"]+w(d.margin,12)+c[h]+(0===h?b.titleOffset+b.options.title.margin:0)))})},render:function(){var a=this,c=a.chart,b=c.renderer,k=a.group,h,m,l,x,p=a.box,t=a.options,C=a.padding;a.itemX=C;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;k||(a.group=k=b.g("legend").attr({zIndex:7}).add(),a.contentGroup=b.g().attr({zIndex:1}).add(k),a.scrollGroup=b.g().add(a.contentGroup));a.renderTitle();
+h=a.getAllItems();e(h,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});t.reversed&&h.reverse();a.allItems=h;a.display=m=!!h.length;a.lastLineHeight=0;f(h,function(b){a.renderItem(b)});l=(t.width||a.offsetWidth)+C;x=a.lastItemY+a.lastLineHeight+a.titleHeight;x=a.handleOverflow(x);x+=C;p||(a.box=p=b.rect().addClass("highcharts-legend-box").attr({r:t.borderRadius}).add(k),p.isNew=!0);p.attr({stroke:t.borderColor,"stroke-width":t.borderWidth||0,fill:t.backgroundColor||
+"none"}).shadow(t.shadow);0<l&&0<x&&(p[p.isNew?"attr":"animate"](p.crisp.call({},{x:0,y:0,width:l,height:x},p.strokeWidth())),p.isNew=!1);p[m?"show":"hide"]();a.legendWidth=l;a.legendHeight=x;f(h,function(b){a.positionItem(b)});m&&(b=c.spacingBox,/(lth|ct|rth)/.test(a.getAlignment())&&(b=n(b,{y:b.y+c.titleOffset+c.options.title.margin})),k.align(n(t,{width:l,height:x}),!0,b));c.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var c=this,b=this.chart,d=b.renderer,e=this.options,h=
+e.y,m=this.padding,b=b.spacingBox.height+("top"===e.verticalAlign?-h:h)-m,h=e.maxHeight,l,n=this.clipRect,t=e.navigation,p=w(t.animation,!0),r=t.arrowSize||12,q=this.nav,A=this.pages,F,G=this.allItems,g=function(a){"number"===typeof a?n.attr({height:a}):n&&(c.clipRect=n.destroy(),c.contentGroup.clip());c.contentGroup.div&&(c.contentGroup.div.style.clip=a?"rect("+m+"px,9999px,"+(m+a)+"px,0)":"auto")};"horizontal"!==e.layout||"middle"===e.verticalAlign||e.floating||(b/=2);h&&(b=Math.min(b,h));A.length=
+0;a>b&&!1!==t.enabled?(this.clipHeight=l=Math.max(b-20-this.titleHeight-m,0),this.currentPage=w(this.currentPage,1),this.fullHeight=a,f(G,function(a,b){var c=a._legendItemPos[1],d=Math.round(a.legendItem.getBBox().height),g=A.length;if(!g||c-A[g-1]>l&&(F||c)!==A[g-1])A.push(F||c),g++;a.pageIx=g-1;F&&(G[b-1].pageIx=g-1);b===G.length-1&&c+d-A[g-1]>l&&(A.push(c),a.pageIx=g);c!==F&&(F=c)}),n||(n=c.clipRect=d.clipRect(0,m,9999,0),c.contentGroup.clip(n)),g(l),q||(this.nav=q=d.g().attr({zIndex:1}).add(this.group),
+this.up=d.symbol("triangle",0,0,r,r).on("click",function(){c.scroll(-1,p)}).add(q),this.pager=d.text("",15,10).addClass("highcharts-legend-navigation").css(t.style).add(q),this.down=d.symbol("triangle-down",0,0,r,r).on("click",function(){c.scroll(1,p)}).add(q)),c.scroll(0),a=b):q&&(g(),this.nav=q.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0);return a},scroll:function(a,c){var b=this.pages,d=b.length;a=this.currentPage+a;var e=this.clipHeight,h=this.options.navigation,f=this.pager,
+m=this.padding;a>d&&(a=d);0<a&&(void 0!==c&&u(c,this.chart),this.nav.attr({translateX:m,translateY:e+this.padding+7+this.titleHeight,visibility:"visible"}),this.up.attr({"class":1===a?"highcharts-legend-nav-inactive":"highcharts-legend-nav-active"}),f.attr({text:a+"/"+d}),this.down.attr({x:18+this.pager.getBBox().width,"class":a===d?"highcharts-legend-nav-inactive":"highcharts-legend-nav-active"}),this.up.attr({fill:1===a?h.inactiveColor:h.activeColor}).css({cursor:1===a?"default":"pointer"}),this.down.attr({fill:a===
+d?h.inactiveColor:h.activeColor}).css({cursor:a===d?"default":"pointer"}),this.scrollOffset=-b[a-1]+this.initialItemY,this.scrollGroup.animate({translateY:this.scrollOffset}),this.currentPage=a,this.positionCheckboxes())}};a.LegendSymbolMixin={drawRectangle:function(a,c){var b=a.symbolHeight,d=a.options.squareSymbol;c.legendSymbol=this.chart.renderer.rect(d?(a.symbolWidth-b)/2:0,a.baseline-b+1,d?b:a.symbolWidth,b,w(a.options.symbolRadius,b/2)).addClass("highcharts-point").attr({zIndex:3}).add(c.legendGroup)},
+drawLineMarker:function(a){var c=this.options,b=c.marker,d=a.symbolWidth,e=a.symbolHeight,h=e/2,f=this.chart.renderer,m=this.legendGroup;a=a.baseline-Math.round(.3*a.fontMetrics.b);var l;l={"stroke-width":c.lineWidth||0};c.dashStyle&&(l.dashstyle=c.dashStyle);this.legendLine=f.path(["M",0,a,"L",d,a]).addClass("highcharts-graph").attr(l).add(m);b&&!1!==b.enabled&&(c=Math.min(w(b.radius,h),h),0===this.symbol.indexOf("url")&&(b=n(b,{width:e,height:e}),c=0),this.legendSymbol=b=f.symbol(this.symbol,d/
+2-c,a-c,2*c,2*c,b).addClass("highcharts-point").add(m),b.isMarker=!0)}};(/Trident\/7\.0/.test(h.navigator.userAgent)||l)&&m(a.Legend.prototype,"positionItem",function(a,c){var b=this,d=function(){c._legendItemPos&&a.call(b,c)};d();setTimeout(d)})})(M);(function(a){var E=a.addEvent,D=a.animate,H=a.animObject,p=a.attr,f=a.doc,l=a.Axis,r=a.createElement,n=a.defaultOptions,w=a.discardElement,u=a.charts,e=a.css,h=a.defined,m=a.each,d=a.extend,c=a.find,b=a.fireEvent,k=a.grep,z=a.isNumber,B=a.isObject,I=
+a.isString,x=a.Legend,K=a.marginNames,t=a.merge,C=a.objectEach,N=a.Pointer,q=a.pick,A=a.pInt,F=a.removeEvent,G=a.seriesTypes,g=a.splat,v=a.svg,Q=a.syncTimeout,L=a.win,P=a.Chart=function(){this.getArgs.apply(this,arguments)};a.chart=function(a,b,c){return new P(a,b,c)};d(P.prototype,{callbacks:[],getArgs:function(){var a=[].slice.call(arguments);if(I(a[0])||a[0].nodeName)this.renderTo=a.shift();this.init(a[0],a[1])},init:function(b,c){var d,g,e=b.series,k=b.plotOptions||{};b.series=null;d=t(n,b);for(g in d.plotOptions)d.plotOptions[g].tooltip=
+k[g]&&t(k[g].tooltip)||void 0;d.tooltip.userOptions=b.chart&&b.chart.forExport&&b.tooltip.userOptions||b.tooltip;d.series=b.series=e;this.userOptions=b;b=d.chart;g=b.events;this.margin=[];this.spacing=[];this.bounds={h:{},v:{}};this.labelCollectors=[];this.callback=c;this.isResizing=0;this.options=d;this.axes=[];this.series=[];this.hasCartesianSeries=b.showAxes;var q=this;q.index=u.length;u.push(q);a.chartCount++;g&&C(g,function(a,b){E(q,b,a)});q.xAxis=[];q.yAxis=[];q.pointCount=q.colorCounter=q.symbolCounter=
+0;q.firstRender()},initSeries:function(b){var c=this.options.chart;(c=G[b.type||c.type||c.defaultSeriesType])||a.error(17,!0);c=new c;c.init(this,b);return c},orderSeries:function(a){var b=this.series;for(a=a||0;a<b.length;a++)b[a]&&(b[a].index=a,b[a].name=b[a].name||"Series "+(b[a].index+1))},isInsidePlot:function(a,b,c){var d=c?b:a;a=c?a:b;return 0<=d&&d<=this.plotWidth&&0<=a&&a<=this.plotHeight},redraw:function(c){var g=this.axes,e=this.series,k=this.pointer,q=this.legend,h=this.isDirtyLegend,
+f,l,v=this.hasCartesianSeries,A=this.isDirtyBox,F,t=this.renderer,x=t.isHidden(),n=[];this.setResponsive&&this.setResponsive(!1);a.setAnimation(c,this);x&&this.temporaryDisplay();this.layOutTitles();for(c=e.length;c--;)if(F=e[c],F.options.stacking&&(f=!0,F.isDirty)){l=!0;break}if(l)for(c=e.length;c--;)F=e[c],F.options.stacking&&(F.isDirty=!0);m(e,function(a){a.isDirty&&"point"===a.options.legendType&&(a.updateTotals&&a.updateTotals(),h=!0);a.isDirtyData&&b(a,"updatedData")});h&&q.options.enabled&&
+(q.render(),this.isDirtyLegend=!1);f&&this.getStacks();v&&m(g,function(a){a.updateNames();a.setScale()});this.getMargins();v&&(m(g,function(a){a.isDirty&&(A=!0)}),m(g,function(a){var c=a.min+","+a.max;a.extKey!==c&&(a.extKey=c,n.push(function(){b(a,"afterSetExtremes",d(a.eventArgs,a.getExtremes()));delete a.eventArgs}));(A||f)&&a.redraw()}));A&&this.drawChartBox();b(this,"predraw");m(e,function(a){(A||a.isDirty)&&a.visible&&a.redraw();a.isDirtyData=!1});k&&k.reset(!0);t.draw();b(this,"redraw");b(this,
+"render");x&&this.temporaryDisplay(!0);m(n,function(a){a.call()})},get:function(a){function b(b){return b.id===a||b.options&&b.options.id===a}var d,g=this.series,e;d=c(this.axes,b)||c(this.series,b);for(e=0;!d&&e<g.length;e++)d=c(g[e].points||[],b);return d},getAxes:function(){var a=this,b=this.options,c=b.xAxis=g(b.xAxis||{}),b=b.yAxis=g(b.yAxis||{});m(c,function(a,b){a.index=b;a.isX=!0});m(b,function(a,b){a.index=b});c=c.concat(b);m(c,function(b){new l(a,b)})},getSelectedPoints:function(){var a=
+[];m(this.series,function(b){a=a.concat(k(b.data||[],function(a){return a.selected}))});return a},getSelectedSeries:function(){return k(this.series,function(a){return a.selected})},setTitle:function(a,b,c){var d=this,g=d.options,e;e=g.title=t({style:{color:"#333333",fontSize:g.isStock?"16px":"18px"}},g.title,a);g=g.subtitle=t({style:{color:"#666666"}},g.subtitle,b);m([["title",a,e],["subtitle",b,g]],function(a,b){var c=a[0],g=d[c],e=a[1];a=a[2];g&&e&&(d[c]=g=g.destroy());a&&!g&&(d[c]=d.renderer.text(a.text,
+0,0,a.useHTML).attr({align:a.align,"class":"highcharts-"+c,zIndex:a.zIndex||4}).add(),d[c].update=function(a){d.setTitle(!b&&a,b&&a)},d[c].css(a.style))});d.layOutTitles(c)},layOutTitles:function(a){var b=0,c,g=this.renderer,e=this.spacingBox;m(["title","subtitle"],function(a){var c=this[a],k=this.options[a];a="title"===a?-3:k.verticalAlign?0:b+2;var q;c&&(q=k.style.fontSize,q=g.fontMetrics(q,c).b,c.css({width:(k.width||e.width+k.widthAdjust)+"px"}).align(d({y:a+q},k),!1,"spacingBox"),k.floating||
+k.verticalAlign||(b=Math.ceil(b+c.getBBox(k.useHTML).height)))},this);c=this.titleOffset!==b;this.titleOffset=b;!this.isDirtyBox&&c&&(this.isDirtyBox=c,this.hasRendered&&q(a,!0)&&this.isDirtyBox&&this.redraw())},getChartSize:function(){var b=this.options.chart,c=b.width,b=b.height,d=this.renderTo;h(c)||(this.containerWidth=a.getStyle(d,"width"));h(b)||(this.containerHeight=a.getStyle(d,"height"));this.chartWidth=Math.max(0,c||this.containerWidth||600);this.chartHeight=Math.max(0,a.relativeLength(b,
+this.chartWidth)||(1<this.containerHeight?this.containerHeight:400))},temporaryDisplay:function(b){var c=this.renderTo;if(b)for(;c&&c.style;)c.hcOrigStyle&&(a.css(c,c.hcOrigStyle),delete c.hcOrigStyle),c.hcOrigDetached&&(f.body.removeChild(c),c.hcOrigDetached=!1),c=c.parentNode;else for(;c&&c.style;){f.body.contains(c)||c.parentNode||(c.hcOrigDetached=!0,f.body.appendChild(c));if("none"===a.getStyle(c,"display",!1)||c.hcOricDetached)c.hcOrigStyle={display:c.style.display,height:c.style.height,overflow:c.style.overflow},
+b={display:"block",overflow:"hidden"},c!==this.renderTo&&(b.height=0),a.css(c,b),c.offsetWidth||c.style.setProperty("display","block","important");c=c.parentNode;if(c===f.body)break}},setClassName:function(a){this.container.className="highcharts-container "+(a||"")},getContainer:function(){var b,c=this.options,g=c.chart,e,k;b=this.renderTo;var q=a.uniqueKey(),h;b||(this.renderTo=b=g.renderTo);I(b)&&(this.renderTo=b=f.getElementById(b));b||a.error(13,!0);e=A(p(b,"data-highcharts-chart"));z(e)&&u[e]&&
+u[e].hasRendered&&u[e].destroy();p(b,"data-highcharts-chart",this.index);b.innerHTML="";g.skipClone||b.offsetWidth||this.temporaryDisplay();this.getChartSize();e=this.chartWidth;k=this.chartHeight;h=d({position:"relative",overflow:"hidden",width:e+"px",height:k+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"},g.style);this.container=b=r("div",{id:q},h,b);this._cursor=b.style.cursor;this.renderer=new (a[g.renderer]||a.Renderer)(b,e,k,null,g.forExport,
+c.exporting&&c.exporting.allowHTML);this.setClassName(g.className);this.renderer.setStyle(g.style);this.renderer.chartIndex=this.index},getMargins:function(a){var b=this.spacing,c=this.margin,d=this.titleOffset;this.resetMargins();d&&!h(c[0])&&(this.plotTop=Math.max(this.plotTop,d+this.options.title.margin+b[0]));this.legend&&this.legend.display&&this.legend.adjustMargins(c,b);this.extraMargin&&(this[this.extraMargin.type]=(this[this.extraMargin.type]||0)+this.extraMargin.value);this.adjustPlotArea&&
+this.adjustPlotArea();a||this.getAxisMargins()},getAxisMargins:function(){var a=this,b=a.axisOffset=[0,0,0,0],c=a.margin;a.hasCartesianSeries&&m(a.axes,function(a){a.visible&&a.getOffset()});m(K,function(d,g){h(c[g])||(a[d]+=b[g])});a.setChartSize()},reflow:function(b){var c=this,d=c.options.chart,g=c.renderTo,e=h(d.width)&&h(d.height),k=d.width||a.getStyle(g,"width"),d=d.height||a.getStyle(g,"height"),g=b?b.target:L;if(!e&&!c.isPrinting&&k&&d&&(g===L||g===f)){if(k!==c.containerWidth||d!==c.containerHeight)clearTimeout(c.reflowTimeout),
+c.reflowTimeout=Q(function(){c.container&&c.setSize(void 0,void 0,!1)},b?100:0);c.containerWidth=k;c.containerHeight=d}},initReflow:function(){var a=this,b;b=E(L,"resize",function(b){a.reflow(b)});E(a,"destroy",b)},setSize:function(c,d,g){var k=this,q=k.renderer;k.isResizing+=1;a.setAnimation(g,k);k.oldChartHeight=k.chartHeight;k.oldChartWidth=k.chartWidth;void 0!==c&&(k.options.chart.width=c);void 0!==d&&(k.options.chart.height=d);k.getChartSize();c=q.globalAnimation;(c?D:e)(k.container,{width:k.chartWidth+
+"px",height:k.chartHeight+"px"},c);k.setChartSize(!0);q.setSize(k.chartWidth,k.chartHeight,g);m(k.axes,function(a){a.isDirty=!0;a.setScale()});k.isDirtyLegend=!0;k.isDirtyBox=!0;k.layOutTitles();k.getMargins();k.redraw(g);k.oldChartHeight=null;b(k,"resize");Q(function(){k&&b(k,"endResize",null,function(){--k.isResizing})},H(c).duration)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,g=this.chartHeight,e=this.options.chart,k=this.spacing,q=this.clipOffset,h,f,l,v;this.plotLeft=
+h=Math.round(this.plotLeft);this.plotTop=f=Math.round(this.plotTop);this.plotWidth=l=Math.max(0,Math.round(d-h-this.marginRight));this.plotHeight=v=Math.max(0,Math.round(g-f-this.marginBottom));this.plotSizeX=b?v:l;this.plotSizeY=b?l:v;this.plotBorderWidth=e.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:k[3],y:k[0],width:d-k[3]-k[1],height:g-k[0]-k[2]};this.plotBox=c.plotBox={x:h,y:f,width:l,height:v};d=2*Math.floor(this.plotBorderWidth/2);b=Math.ceil(Math.max(d,q[3])/2);c=Math.ceil(Math.max(d,
+q[0])/2);this.clipBox={x:b,y:c,width:Math.floor(this.plotSizeX-Math.max(d,q[1])/2-b),height:Math.max(0,Math.floor(this.plotSizeY-Math.max(d,q[2])/2-c))};a||m(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this,b=a.options.chart;m(["margin","spacing"],function(c){var d=b[c],g=B(d)?d:[d,d,d,d];m(["Top","Right","Bottom","Left"],function(d,e){a[c][e]=q(b[c+d],g[e])})});m(K,function(b,c){a[b]=q(a.margin[c],a.spacing[c])});a.axisOffset=[0,0,0,0];a.clipOffset=
+[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,g=this.chartBackground,e=this.plotBackground,k=this.plotBorder,q,h=this.plotBGImage,f=a.backgroundColor,m=a.plotBackgroundColor,l=a.plotBackgroundImage,v,A=this.plotLeft,F=this.plotTop,t=this.plotWidth,x=this.plotHeight,n=this.plotBox,p=this.clipRect,z=this.clipBox,G="animate";g||(this.chartBackground=g=b.rect().addClass("highcharts-background").add(),G="attr");q=a.borderWidth||0;v=q+(a.shadow?
+8:0);f={fill:f||"none"};if(q||g["stroke-width"])f.stroke=a.borderColor,f["stroke-width"]=q;g.attr(f).shadow(a.shadow);g[G]({x:v/2,y:v/2,width:c-v-q%2,height:d-v-q%2,r:a.borderRadius});G="animate";e||(G="attr",this.plotBackground=e=b.rect().addClass("highcharts-plot-background").add());e[G](n);e.attr({fill:m||"none"}).shadow(a.plotShadow);l&&(h?h.animate(n):this.plotBGImage=b.image(l,A,F,t,x).add());p?p.animate({width:z.width,height:z.height}):this.clipRect=b.clipRect(z);G="animate";k||(G="attr",this.plotBorder=
+k=b.rect().addClass("highcharts-plot-border").attr({zIndex:1}).add());k.attr({stroke:a.plotBorderColor,"stroke-width":a.plotBorderWidth||0,fill:"none"});k[G](k.crisp({x:A,y:F,width:t,height:x},-k.strokeWidth()));this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,g,e;m(["inverted","angular","polar"],function(k){c=G[b.type||b.defaultSeriesType];e=b[k]||c&&c.prototype[k];for(g=d&&d.length;!e&&g--;)(c=G[d[g].type])&&c.prototype[k]&&(e=!0);a[k]=e})},linkSeries:function(){var a=
+this,b=a.series;m(b,function(a){a.linkedSeries.length=0});m(b,function(b){var c=b.options.linkedTo;I(c)&&(c=":previous"===c?a.series[b.index-1]:a.get(c))&&c.linkedParent!==b&&(c.linkedSeries.push(b),b.linkedParent=c,b.visible=q(b.options.visible,c.options.visible,b.visible))})},renderSeries:function(){m(this.series,function(a){a.translate();a.render()})},renderLabels:function(){var a=this,b=a.options.labels;b.items&&m(b.items,function(c){var g=d(b.style,c.style),e=A(g.left)+a.plotLeft,k=A(g.top)+
+a.plotTop+12;delete g.left;delete g.top;a.renderer.text(c.html,e,k).attr({zIndex:2}).css(g).add()})},render:function(){var a=this.axes,b=this.renderer,c=this.options,d,g,e;this.setTitle();this.legend=new x(this,c.legend);this.getStacks&&this.getStacks();this.getMargins(!0);this.setChartSize();c=this.plotWidth;d=this.plotHeight=Math.max(this.plotHeight-21,0);m(a,function(a){a.setScale()});this.getAxisMargins();g=1.1<c/this.plotWidth;e=1.05<d/this.plotHeight;if(g||e)m(a,function(a){(a.horiz&&g||!a.horiz&&
+e)&&a.setTickInterval(!0)}),this.getMargins();this.drawChartBox();this.hasCartesianSeries&&m(a,function(a){a.visible&&a.render()});this.seriesGroup||(this.seriesGroup=b.g("series-group").attr({zIndex:3}).add());this.renderSeries();this.renderLabels();this.addCredits();this.setResponsive&&this.setResponsive();this.hasRendered=!0},addCredits:function(a){var b=this;a=t(!0,this.options.credits,a);a.enabled&&!this.credits&&(this.credits=this.renderer.text(a.text+(this.mapCredits||""),0,0).addClass("highcharts-credits").on("click",
+function(){a.href&&(L.location.href=a.href)}).attr({align:a.position.align,zIndex:8}).css(a.style).add().align(a.position),this.credits.update=function(a){b.credits=b.credits.destroy();b.addCredits(a)})},destroy:function(){var c=this,d=c.axes,g=c.series,e=c.container,k,q=e&&e.parentNode;b(c,"destroy");c.renderer.forExport?a.erase(u,c):u[c.index]=void 0;a.chartCount--;c.renderTo.removeAttribute("data-highcharts-chart");F(c);for(k=d.length;k--;)d[k]=d[k].destroy();this.scroller&&this.scroller.destroy&&
+this.scroller.destroy();for(k=g.length;k--;)g[k]=g[k].destroy();m("title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer".split(" "),function(a){var b=c[a];b&&b.destroy&&(c[a]=b.destroy())});e&&(e.innerHTML="",F(e),q&&w(e));C(c,function(a,b){delete c[b]})},isReadyToRender:function(){var a=this;return v||L!=L.top||"complete"===f.readyState?!0:(f.attachEvent("onreadystatechange",function(){f.detachEvent("onreadystatechange",
+a.firstRender);"complete"===f.readyState&&a.firstRender()}),!1)},firstRender:function(){var a=this,c=a.options;if(a.isReadyToRender()){a.getContainer();b(a,"init");a.resetMargins();a.setChartSize();a.propFromSeries();a.getAxes();m(c.series||[],function(b){a.initSeries(b)});a.linkSeries();b(a,"beforeRender");N&&(a.pointer=new N(a,c));a.render();if(!a.renderer.imgCount&&a.onload)a.onload();a.temporaryDisplay(!0)}},onload:function(){m([this.callback].concat(this.callbacks),function(a){a&&void 0!==this.index&&
+a.apply(this,[this])},this);b(this,"load");b(this,"render");h(this.index)&&!1!==this.options.chart.reflow&&this.initReflow();this.onload=null}})})(M);(function(a){var E,D=a.each,H=a.extend,p=a.erase,f=a.fireEvent,l=a.format,r=a.isArray,n=a.isNumber,w=a.pick,u=a.removeEvent;a.Point=E=function(){};a.Point.prototype={init:function(a,h,f){this.series=a;this.color=a.color;this.applyOptions(h,f);a.options.colorByPoint?(h=a.options.colors||a.chart.options.colors,this.color=this.color||h[a.colorCounter],
+h=h.length,f=a.colorCounter,a.colorCounter++,a.colorCounter===h&&(a.colorCounter=0)):f=a.colorIndex;this.colorIndex=w(this.colorIndex,f);a.chart.pointCount++;return this},applyOptions:function(a,h){var e=this.series,d=e.options.pointValKey||e.pointValKey;a=E.prototype.optionsToObject.call(this,a);H(this,a);this.options=this.options?H(this.options,a):a;a.group&&delete this.group;d&&(this.y=this[d]);this.isNull=w(this.isValid&&!this.isValid(),null===this.x||!n(this.y,!0));this.selected&&(this.state=
+"select");"name"in this&&void 0===h&&e.xAxis&&e.xAxis.hasNames&&(this.x=e.xAxis.nameToX(this));void 0===this.x&&e&&(this.x=void 0===h?e.autoIncrement(this):h);return this},optionsToObject:function(a){var e={},f=this.series,d=f.options.keys,c=d||f.pointArrayMap||["y"],b=c.length,k=0,l=0;if(n(a)||null===a)e[c[0]]=a;else if(r(a))for(!d&&a.length>b&&(f=typeof a[0],"string"===f?e.name=a[0]:"number"===f&&(e.x=a[0]),k++);l<b;)d&&void 0===a[k]||(e[c[l]]=a[k]),k++,l++;else"object"===typeof a&&(e=a,a.dataLabels&&
+(f._hasPointLabels=!0),a.marker&&(f._hasPointMarkers=!0));return e},getClassName:function(){return"highcharts-point"+(this.selected?" highcharts-point-select":"")+(this.negative?" highcharts-negative":"")+(this.isNull?" highcharts-null-point":"")+(void 0!==this.colorIndex?" highcharts-color-"+this.colorIndex:"")+(this.options.className?" "+this.options.className:"")+(this.zone&&this.zone.className?" "+this.zone.className.replace("highcharts-negative",""):"")},getZone:function(){var a=this.series,
+h=a.zones,a=a.zoneAxis||"y",f=0,d;for(d=h[f];this[a]>=d.value;)d=h[++f];d&&d.color&&!this.options.color&&(this.color=d.color);return d},destroy:function(){var a=this.series.chart,h=a.hoverPoints,f;a.pointCount--;h&&(this.setState(),p(h,this),h.length||(a.hoverPoints=null));if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)u(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(f in this)this[f]=null},destroyElements:function(){for(var a=["graphic","dataLabel",
+"dataLabelUpper","connector","shadowGroup"],h,f=6;f--;)h=a[f],this[h]&&(this[h]=this[h].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var e=this.series,f=e.tooltipOptions,d=w(f.valueDecimals,""),c=f.valuePrefix||"",b=f.valueSuffix||"";D(e.pointArrayMap||["y"],function(e){e="{point."+
+e;if(c||b)a=a.replace(e+"}",c+e+"}"+b);a=a.replace(e+"}",e+":,."+d+"f}")});return l(a,{point:this,series:this.series})},firePointEvent:function(a,h,m){var d=this,c=this.series.options;(c.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();"click"===a&&c.allowPointSelect&&(m=function(a){d.select&&d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});f(this,a,h,m)},visible:!0}})(M);(function(a){var E=a.addEvent,D=a.animObject,H=a.arrayMax,p=a.arrayMin,f=a.correctFloat,
+l=a.Date,r=a.defaultOptions,n=a.defaultPlotOptions,w=a.defined,u=a.each,e=a.erase,h=a.extend,m=a.fireEvent,d=a.grep,c=a.isArray,b=a.isNumber,k=a.isString,z=a.merge,B=a.objectEach,I=a.pick,x=a.removeEvent,K=a.splat,t=a.SVGElement,C=a.syncTimeout,N=a.win;a.Series=a.seriesType("line",null,{lineWidth:2,allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},marker:{lineWidth:0,lineColor:"#ffffff",radius:4,states:{hover:{animation:{duration:50},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:"#cccccc",
+lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{align:"center",formatter:function(){return null===this.y?"":a.numberFormat(this.y,-1)},style:{fontSize:"11px",fontWeight:"bold",color:"contrast",textOutline:"1px contrast"},verticalAlign:"bottom",x:0,y:0,padding:5},cropThreshold:300,pointRange:0,softThreshold:!0,states:{hover:{animation:{duration:50},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3,findNearestPointBy:"x"},
+{isCartesian:!0,pointClass:a.Point,sorted:!0,requireSorting:!0,directTouch:!1,axisTypes:["xAxis","yAxis"],colorCounter:0,parallelArrays:["x","y"],coll:"series",init:function(a,b){var c=this,d,g=a.series,e;c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries=[];c.bindAxes();h(c,{name:b.name,state:"",visible:!1!==b.visible,selected:!0===b.selected});d=b.events;B(d,function(a,b){E(c,b,a)});if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor();
+c.getSymbol();u(c.parallelArrays,function(a){c[a+"Data"]=[]});c.setData(b.data,!1);c.isCartesian&&(a.hasCartesianSeries=!0);g.length&&(e=g[g.length-1]);c._i=I(e&&e._i,-1)+1;a.orderSeries(this.insert(g))},insert:function(a){var c=this.options.index,d;if(b(c)){for(d=a.length;d--;)if(c>=I(a[d].options.index,a[d]._i)){a.splice(d+1,0,this);break}-1===d&&a.unshift(this);d+=1}else a.push(this);return I(d,a.length-1)},bindAxes:function(){var b=this,c=b.options,d=b.chart,e;u(b.axisTypes||[],function(g){u(d[g],
+function(a){e=a.options;if(c[g]===e.index||void 0!==c[g]&&c[g]===e.id||void 0===c[g]&&0===e.index)b.insert(a.series),b[g]=a,a.isDirty=!0});b[g]||b.optionalAxis===g||a.error(18,!0)})},updateParallelArrays:function(a,c){var d=a.series,e=arguments,g=b(c)?function(b){var g="y"===b&&d.toYData?d.toYData(a):a[b];d[b+"Data"][c]=g}:function(a){Array.prototype[c].apply(d[a+"Data"],Array.prototype.slice.call(e,2))};u(d.parallelArrays,g)},autoIncrement:function(){var b=this.options,c=this.xIncrement,d,e=b.pointIntervalUnit,
+g=0,c=I(c,b.pointStart,0);this.pointInterval=d=I(this.pointInterval,b.pointInterval,1);e&&(b=new l(c),"day"===e?b=+b[l.hcSetDate](b[l.hcGetDate]()+d):"month"===e?b=+b[l.hcSetMonth](b[l.hcGetMonth]()+d):"year"===e&&(b=+b[l.hcSetFullYear](b[l.hcGetFullYear]()+d)),l.hcHasTimeZone&&(g=a.getTZOffset(b)-a.getTZOffset(c)),d=b-c+g);this.xIncrement=c+d;return c},setOptions:function(a){var b=this.chart,c=b.options,d=c.plotOptions,g=(b.userOptions||{}).plotOptions||{},e=d[this.type];this.userOptions=a;b=z(e,
+d.series,a);this.tooltipOptions=z(r.tooltip,r.plotOptions.series&&r.plotOptions.series.tooltip,r.plotOptions[this.type].tooltip,c.tooltip.userOptions,d.series&&d.series.tooltip,d[this.type].tooltip,a.tooltip);this.stickyTracking=I(a.stickyTracking,g[this.type]&&g[this.type].stickyTracking,g.series&&g.series.stickyTracking,this.tooltipOptions.shared&&!this.noSharedTooltip?!0:b.stickyTracking);null===e.marker&&delete b.marker;this.zoneAxis=b.zoneAxis;a=this.zones=(b.zones||[]).slice();!b.negativeColor&&
+!b.negativeFillColor||b.zones||a.push({value:b[this.zoneAxis+"Threshold"]||b.threshold||0,className:"highcharts-negative",color:b.negativeColor,fillColor:b.negativeFillColor});a.length&&w(a[a.length-1].value)&&a.push({color:this.color,fillColor:this.fillColor});return b},getCyclic:function(a,b,c){var d,g=this.chart,e=this.userOptions,k=a+"Index",h=a+"Counter",q=c?c.length:I(g.options.chart[a+"Count"],g[a+"Count"]);b||(d=I(e[k],e["_"+k]),w(d)||(g.series.length||(g[h]=0),e["_"+k]=d=g[h]%q,g[h]+=1),
+c&&(b=c[d]));void 0!==d&&(this[k]=d);this[a]=b},getColor:function(){this.options.colorByPoint?this.options.color=null:this.getCyclic("color",this.options.color||n[this.type].color,this.chart.options.colors)},getSymbol:function(){this.getCyclic("symbol",this.options.marker.symbol,this.chart.options.symbols)},drawLegendSymbol:a.LegendSymbolMixin.drawLineMarker,setData:function(d,e,h,f){var g=this,q=g.points,m=q&&q.length||0,l,A=g.options,t=g.chart,x=null,n=g.xAxis,p=A.turboThreshold,z=this.xData,F=
+this.yData,C=(l=g.pointArrayMap)&&l.length;d=d||[];l=d.length;e=I(e,!0);if(!1!==f&&l&&m===l&&!g.cropped&&!g.hasGroupedData&&g.visible)u(d,function(a,b){q[b].update&&a!==A.data[b]&&q[b].update(a,!1,null,!1)});else{g.xIncrement=null;g.colorCounter=0;u(this.parallelArrays,function(a){g[a+"Data"].length=0});if(p&&l>p){for(h=0;null===x&&h<l;)x=d[h],h++;if(b(x))for(h=0;h<l;h++)z[h]=this.autoIncrement(),F[h]=d[h];else if(c(x))if(C)for(h=0;h<l;h++)x=d[h],z[h]=x[0],F[h]=x.slice(1,C+1);else for(h=0;h<l;h++)x=
+d[h],z[h]=x[0],F[h]=x[1];else a.error(12)}else for(h=0;h<l;h++)void 0!==d[h]&&(x={series:g},g.pointClass.prototype.applyOptions.apply(x,[d[h]]),g.updateParallelArrays(x,h));F&&k(F[0])&&a.error(14,!0);g.data=[];g.options.data=g.userOptions.data=d;for(h=m;h--;)q[h]&&q[h].destroy&&q[h].destroy();n&&(n.minRange=n.userMinRange);g.isDirty=t.isDirtyBox=!0;g.isDirtyData=!!q;h=!1}"point"===A.legendType&&(this.processData(),this.generatePoints());e&&t.redraw(h)},processData:function(b){var c=this.xData,d=this.yData,
+e=c.length,g;g=0;var k,h,q=this.xAxis,f,m=this.options;f=m.cropThreshold;var l=this.getExtremesFromAll||m.getExtremesFromAll,t=this.isCartesian,m=q&&q.val2lin,x=q&&q.isLog,n=this.requireSorting,p,z;if(t&&!this.isDirty&&!q.isDirty&&!this.yAxis.isDirty&&!b)return!1;q&&(b=q.getExtremes(),p=b.min,z=b.max);if(t&&this.sorted&&!l&&(!f||e>f||this.forceCrop))if(c[e-1]<p||c[0]>z)c=[],d=[];else if(c[0]<p||c[e-1]>z)g=this.cropData(this.xData,this.yData,p,z),c=g.xData,d=g.yData,g=g.start,k=!0;for(f=c.length||
+1;--f;)e=x?m(c[f])-m(c[f-1]):c[f]-c[f-1],0<e&&(void 0===h||e<h)?h=e:0>e&&n&&(a.error(15),n=!1);this.cropped=k;this.cropStart=g;this.processedXData=c;this.processedYData=d;this.closestPointRange=h},cropData:function(a,b,c,d){var g=a.length,e=0,k=g,h=I(this.cropShoulder,1),f;for(f=0;f<g;f++)if(a[f]>=c){e=Math.max(0,f-h);break}for(c=f;c<g;c++)if(a[c]>d){k=c+h;break}return{xData:a.slice(e,k),yData:b.slice(e,k),start:e,end:k}},generatePoints:function(){var a=this.options,b=a.data,c=this.data,d,g=this.processedXData,
+e=this.processedYData,k=this.pointClass,h=g.length,f=this.cropStart||0,m,l=this.hasGroupedData,a=a.keys,t,x=[],n;c||l||(c=[],c.length=b.length,c=this.data=c);a&&l&&(this.options.keys=!1);for(n=0;n<h;n++)m=f+n,l?(t=(new k).init(this,[g[n]].concat(K(e[n]))),t.dataGroup=this.groupMap[n]):(t=c[m])||void 0===b[m]||(c[m]=t=(new k).init(this,b[m],g[n])),t&&(t.index=m,x[n]=t);this.options.keys=a;if(c&&(h!==(d=c.length)||l))for(n=0;n<d;n++)n!==f||l||(n+=h),c[n]&&(c[n].destroyElements(),c[n].plotX=void 0);
+this.data=c;this.points=x},getExtremes:function(a){var d=this.yAxis,e=this.processedXData,k,g=[],h=0;k=this.xAxis.getExtremes();var f=k.min,q=k.max,m,l,t,n;a=a||this.stackedYData||this.processedYData||[];k=a.length;for(n=0;n<k;n++)if(l=e[n],t=a[n],m=(b(t,!0)||c(t))&&(!d.positiveValuesOnly||t.length||0<t),l=this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||(e[n+1]||l)>=f&&(e[n-1]||l)<=q,m&&l)if(m=t.length)for(;m--;)"number"===typeof t[m]&&(g[h++]=t[m]);else g[h++]=t;this.dataMin=
+p(g);this.dataMax=H(g)},translate:function(){this.processedXData||this.processData();this.generatePoints();var a=this.options,c=a.stacking,d=this.xAxis,e=d.categories,g=this.yAxis,k=this.points,h=k.length,m=!!this.modifyValue,l=a.pointPlacement,t="between"===l||b(l),n=a.threshold,x=a.startFromThreshold?n:0,p,z,C,r,u=Number.MAX_VALUE;"between"===l&&(l=.5);b(l)&&(l*=I(a.pointRange||d.pointRange));for(a=0;a<h;a++){var B=k[a],N=B.x,K=B.y;z=B.low;var D=c&&g.stacks[(this.negStacks&&K<(x?0:n)?"-":"")+this.stackKey],
+E;g.positiveValuesOnly&&null!==K&&0>=K&&(B.isNull=!0);B.plotX=p=f(Math.min(Math.max(-1E5,d.translate(N,0,0,0,1,l,"flags"===this.type)),1E5));c&&this.visible&&!B.isNull&&D&&D[N]&&(r=this.getStackIndicator(r,N,this.index),E=D[N],K=E.points[r.key],z=K[0],K=K[1],z===x&&r.key===D[N].base&&(z=I(n,g.min)),g.positiveValuesOnly&&0>=z&&(z=null),B.total=B.stackTotal=E.total,B.percentage=E.total&&B.y/E.total*100,B.stackY=K,E.setOffset(this.pointXOffset||0,this.barW||0));B.yBottom=w(z)?g.translate(z,0,1,0,1):
+null;m&&(K=this.modifyValue(K,B));B.plotY=z="number"===typeof K&&Infinity!==K?Math.min(Math.max(-1E5,g.translate(K,0,1,0,1)),1E5):void 0;B.isInside=void 0!==z&&0<=z&&z<=g.len&&0<=p&&p<=d.len;B.clientX=t?f(d.translate(N,0,0,0,1,l)):p;B.negative=B.y<(n||0);B.category=e&&void 0!==e[B.x]?e[B.x]:B.x;B.isNull||(void 0!==C&&(u=Math.min(u,Math.abs(p-C))),C=p);B.zone=this.zones.length&&B.getZone()}this.closestPointRangePx=u},getValidPoints:function(a,b){var c=this.chart;return d(a||this.points||[],function(a){return b&&
+!c.isInsidePlot(a.plotX,a.plotY,c.inverted)?!1:!a.isNull})},setClip:function(a){var b=this.chart,c=this.options,d=b.renderer,g=b.inverted,e=this.clipBox,k=e||b.clipBox,h=this.sharedClipKey||["_sharedClip",a&&a.duration,a&&a.easing,k.height,c.xAxis,c.yAxis].join(),f=b[h],q=b[h+"m"];f||(a&&(k.width=0,g&&(k.x=b.plotSizeX),b[h+"m"]=q=d.clipRect(g?b.plotSizeX+99:-99,g?-b.plotLeft:-b.plotTop,99,g?b.chartWidth:b.chartHeight)),b[h]=f=d.clipRect(k),f.count={length:0});a&&!f.count[this.index]&&(f.count[this.index]=
+!0,f.count.length+=1);!1!==c.clip&&(this.group.clip(a||e?f:b.clipRect),this.markerGroup.clip(q),this.sharedClipKey=h);a||(f.count[this.index]&&(delete f.count[this.index],--f.count.length),0===f.count.length&&h&&b[h]&&(e||(b[h]=b[h].destroy()),b[h+"m"]&&(b[h+"m"]=b[h+"m"].destroy())))},animate:function(a){var b=this.chart,c=D(this.options.animation),d;a?this.setClip(c):(d=this.sharedClipKey,(a=b[d])&&a.animate({width:b.plotSizeX,x:0},c),b[d+"m"]&&b[d+"m"].animate({width:b.plotSizeX+99,x:0},c),this.animate=
+null)},afterAnimate:function(){this.setClip();m(this,"afterAnimate");this.finishedAnimating=!0},drawPoints:function(){var a=this.points,b=this.chart,c,d,g,e,k=this.options.marker,h,f,l,m=this[this.specialGroup]||this.markerGroup,t,n=I(k.enabled,this.xAxis.isRadial?!0:null,this.closestPointRangePx>=2*k.radius);if(!1!==k.enabled||this._hasPointMarkers)for(c=0;c<a.length;c++)d=a[c],e=d.graphic,h=d.marker||{},f=!!d.marker,g=n&&void 0===h.enabled||h.enabled,l=d.isInside,g&&!d.isNull?(g=I(h.symbol,this.symbol),
+d.hasImage=0===g.indexOf("url"),t=this.markerAttribs(d,d.selected&&"select"),e?e[l?"show":"hide"](!0).animate(t):l&&(0<t.width||d.hasImage)&&(d.graphic=e=b.renderer.symbol(g,t.x,t.y,t.width,t.height,f?h:k).add(m)),e&&e.attr(this.pointAttribs(d,d.selected&&"select")),e&&e.addClass(d.getClassName(),!0)):e&&(d.graphic=e.destroy())},markerAttribs:function(a,b){var c=this.options.marker,d=a.marker||{},g=I(d.radius,c.radius);b&&(c=c.states[b],b=d.states&&d.states[b],g=I(b&&b.radius,c&&c.radius,g+(c&&c.radiusPlus||
+0)));a.hasImage&&(g=0);a={x:Math.floor(a.plotX)-g,y:a.plotY-g};g&&(a.width=a.height=2*g);return a},pointAttribs:function(a,b){var c=this.options.marker,d=a&&a.options,g=d&&d.marker||{},e=this.color,k=d&&d.color,h=a&&a.color,d=I(g.lineWidth,c.lineWidth);a=a&&a.zone&&a.zone.color;e=k||a||h||e;a=g.fillColor||c.fillColor||e;e=g.lineColor||c.lineColor||e;b&&(c=c.states[b],b=g.states&&g.states[b]||{},d=I(b.lineWidth,c.lineWidth,d+I(b.lineWidthPlus,c.lineWidthPlus,0)),a=b.fillColor||c.fillColor||a,e=b.lineColor||
+c.lineColor||e);return{stroke:e,"stroke-width":d,fill:a}},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\/533/.test(N.navigator.userAgent),d,g,k=a.data||[],h,f;m(a,"destroy");x(a);u(a.axisTypes||[],function(b){(f=a[b])&&f.series&&(e(f.series,a),f.isDirty=f.forceRedraw=!0)});a.legendItem&&a.chart.legend.destroyItem(a);for(g=k.length;g--;)(h=k[g])&&h.destroy&&h.destroy();a.points=null;clearTimeout(a.animationTimeout);B(a,function(a,b){a instanceof t&&!a.survive&&(d=c&&"group"===b?"hide":"destroy",
+a[d]())});b.hoverSeries===a&&(b.hoverSeries=null);e(b.series,a);b.orderSeries();B(a,function(b,c){delete a[c]})},getGraphPath:function(a,b,c){var d=this,g=d.options,e=g.step,k,h=[],f=[],l;a=a||d.points;(k=a.reversed)&&a.reverse();(e={right:1,center:2}[e]||e&&3)&&k&&(e=4-e);!g.connectNulls||b||c||(a=this.getValidPoints(a));u(a,function(k,m){var q=k.plotX,t=k.plotY,n=a[m-1];(k.leftCliff||n&&n.rightCliff)&&!c&&(l=!0);k.isNull&&!w(b)&&0<m?l=!g.connectNulls:k.isNull&&!b?l=!0:(0===m||l?m=["M",k.plotX,k.plotY]:
+d.getPointSpline?m=d.getPointSpline(a,k,m):e?(m=1===e?["L",n.plotX,t]:2===e?["L",(n.plotX+q)/2,n.plotY,"L",(n.plotX+q)/2,t]:["L",q,n.plotY],m.push("L",q,t)):m=["L",q,t],f.push(k.x),e&&f.push(k.x),h.push.apply(h,m),l=!1)});h.xMap=f;return d.graphPath=h},drawGraph:function(){var a=this,b=this.options,c=(this.gappedPath||this.getGraphPath).call(this),d=[["graph","highcharts-graph",b.lineColor||this.color,b.dashStyle]];u(this.zones,function(c,e){d.push(["zone-graph-"+e,"highcharts-graph highcharts-zone-graph-"+
+e+" "+(c.className||""),c.color||a.color,c.dashStyle||b.dashStyle])});u(d,function(d,e){var g=d[0],k=a[g];k?(k.endX=a.preventGraphAnimation?null:c.xMap,k.animate({d:c})):c.length&&(a[g]=a.chart.renderer.path(c).addClass(d[1]).attr({zIndex:1}).add(a.group),k={stroke:d[2],"stroke-width":b.lineWidth,fill:a.fillGraph&&a.color||"none"},d[3]?k.dashstyle=d[3]:"square"!==b.linecap&&(k["stroke-linecap"]=k["stroke-linejoin"]="round"),k=a[g].attr(k).shadow(2>e&&b.shadow));k&&(k.startX=c.xMap,k.isArea=c.isArea)})},
+applyZones:function(){var a=this,b=this.chart,c=b.renderer,d=this.zones,e,k,h=this.clips||[],f,m=this.graph,l=this.area,t=Math.max(b.chartWidth,b.chartHeight),n=this[(this.zoneAxis||"y")+"Axis"],x,p,z=b.inverted,C,r,w,B,K=!1;d.length&&(m||l)&&n&&void 0!==n.min&&(p=n.reversed,C=n.horiz,m&&m.hide(),l&&l.hide(),x=n.getExtremes(),u(d,function(d,g){e=p?C?b.plotWidth:0:C?0:n.toPixels(x.min);e=Math.min(Math.max(I(k,e),0),t);k=Math.min(Math.max(Math.round(n.toPixels(I(d.value,x.max),!0)),0),t);K&&(e=k=n.toPixels(x.max));
+r=Math.abs(e-k);w=Math.min(e,k);B=Math.max(e,k);n.isXAxis?(f={x:z?B:w,y:0,width:r,height:t},C||(f.x=b.plotHeight-f.x)):(f={x:0,y:z?B:w,width:t,height:r},C&&(f.y=b.plotWidth-f.y));z&&c.isVML&&(f=n.isXAxis?{x:0,y:p?w:B,height:f.width,width:b.chartWidth}:{x:f.y-b.plotLeft-b.spacingBox.x,y:0,width:f.height,height:b.chartHeight});h[g]?h[g].animate(f):(h[g]=c.clipRect(f),m&&a["zone-graph-"+g].clip(h[g]),l&&a["zone-area-"+g].clip(h[g]));K=d.value>x.max}),this.clips=h)},invertGroups:function(a){function b(){u(["group",
+"markerGroup"],function(b){c[b]&&(d.renderer.isVML&&c[b].attr({width:c.yAxis.len,height:c.xAxis.len}),c[b].width=c.yAxis.len,c[b].height=c.xAxis.len,c[b].invert(a))})}var c=this,d=c.chart,e;c.xAxis&&(e=E(d,"resize",b),E(c,"destroy",e),b(a),c.invertGroups=b)},plotGroup:function(a,b,c,d,e){var g=this[a],k=!g;k&&(this[a]=g=this.chart.renderer.g().attr({zIndex:d||.1}).add(e));g.addClass("highcharts-"+b+" highcharts-series-"+this.index+" highcharts-"+this.type+"-series "+(w(this.colorIndex)?"highcharts-color-"+
+this.colorIndex+" ":"")+(this.options.className||"")+(g.hasClass("highcharts-tracker")?" highcharts-tracker":""),!0);g.attr({visibility:c})[k?"attr":"animate"](this.getPlotBox());return g},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis;a.inverted&&(b=c,c=this.xAxis);return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=!!a.animate&&b.renderer.isSVG&&D(d.animation).duration,k=a.visible?"inherit":
+"hidden",h=d.zIndex,f=a.hasRendered,m=b.seriesGroup,l=b.inverted;c=a.plotGroup("group","series",k,h,m);a.markerGroup=a.plotGroup("markerGroup","markers",k,h,m);e&&a.animate(!0);c.inverted=a.isCartesian?l:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&!1!==a.options.enableMouseTracking&&a.drawTracker();a.invertGroups(l);!1===d.clip||a.sharedClipKey||f||c.clip(b.clipRect);e&&a.animate();f||(a.animationTimeout=C(function(){a.afterAnimate()},
+e));a.isDirty=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirty||this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:I(d&&d.left,a.plotLeft),translateY:I(e&&e.top,a.plotTop)}));this.translate();this.render();b&&delete this.kdTree},kdAxisArray:["clientX","plotY"],searchPoint:function(a,b){var c=this.xAxis,d=this.yAxis,e=this.chart.inverted;return this.searchKDTree({clientX:e?c.len-a.chartY+
+c.pos:a.chartX-c.pos,plotY:e?d.len-a.chartX+d.pos:a.chartY-d.pos},b)},buildKDTree:function(){function a(c,d,e){var g,k;if(k=c&&c.length)return g=b.kdAxisArray[d%e],c.sort(function(a,b){return a[g]-b[g]}),k=Math.floor(k/2),{point:c[k],left:a(c.slice(0,k),d+1,e),right:a(c.slice(k+1),d+1,e)}}this.buildingKdTree=!0;var b=this,c=-1<b.options.findNearestPointBy.indexOf("y")?2:1;delete b.kdTree;C(function(){b.kdTree=a(b.getValidPoints(null,!b.directTouch),c,c);b.buildingKdTree=!1},b.options.kdNow?0:1)},
+searchKDTree:function(a,b){function c(a,b,g,f){var m=b.point,l=d.kdAxisArray[g%f],q,t,n=m;t=w(a[e])&&w(m[e])?Math.pow(a[e]-m[e],2):null;q=w(a[k])&&w(m[k])?Math.pow(a[k]-m[k],2):null;q=(t||0)+(q||0);m.dist=w(q)?Math.sqrt(q):Number.MAX_VALUE;m.distX=w(t)?Math.sqrt(t):Number.MAX_VALUE;l=a[l]-m[l];q=0>l?"left":"right";t=0>l?"right":"left";b[q]&&(q=c(a,b[q],g+1,f),n=q[h]<n[h]?q:m);b[t]&&Math.sqrt(l*l)<n[h]&&(a=c(a,b[t],g+1,f),n=a[h]<n[h]?a:n);return n}var d=this,e=this.kdAxisArray[0],k=this.kdAxisArray[1],
+h=b?"distX":"dist";b=-1<d.options.findNearestPointBy.indexOf("y")?2:1;this.kdTree||this.buildingKdTree||this.buildKDTree();if(this.kdTree)return c(a,this.kdTree,b,b)}})})(M);(function(a){var E=a.Axis,D=a.Chart,H=a.correctFloat,p=a.defined,f=a.destroyObjectProperties,l=a.each,r=a.format,n=a.objectEach,w=a.pick,u=a.Series;a.StackItem=function(a,h,f,d,c){var b=a.chart.inverted;this.axis=a;this.isNegative=f;this.options=h;this.x=d;this.total=null;this.points={};this.stack=c;this.rightCliff=this.leftCliff=
+0;this.alignOptions={align:h.align||(b?f?"left":"right":"center"),verticalAlign:h.verticalAlign||(b?"middle":f?"bottom":"top"),y:w(h.y,b?4:f?14:-6),x:w(h.x,b?f?-6:6:0)};this.textAlign=h.textAlign||(b?f?"right":"left":"center")};a.StackItem.prototype={destroy:function(){f(this,this.axis)},render:function(a){var e=this.options,f=e.format,f=f?r(f,this):e.formatter.call(this);this.label?this.label.attr({text:f,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(f,null,null,e.useHTML).css(e.style).attr({align:this.textAlign,
+rotation:e.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,h){var e=this.axis,d=e.chart,c=e.translate(e.usePercentage?100:this.total,0,0,0,1),e=e.translate(0),e=Math.abs(c-e);a=d.xAxis[0].translate(this.x)+a;c=this.getStackBox(d,this,a,c,h,e);if(h=this.label)h.align(this.alignOptions,null,c),c=h.alignAttr,h[!1===this.options.crop||d.isInsidePlot(c.x,c.y)?"show":"hide"](!0)},getStackBox:function(a,h,f,d,c,b){var e=h.axis.reversed,l=a.inverted;a=a.plotHeight;h=h.isNegative&&!e||!h.isNegative&&
+e;return{x:l?h?d:d-b:f,y:l?a-f-c:h?a-d-b:a-d,width:l?b:c,height:l?c:b}}};D.prototype.getStacks=function(){var a=this;l(a.yAxis,function(a){a.stacks&&a.hasVisibleSeries&&(a.oldStacks=a.stacks)});l(a.series,function(e){!e.options.stacking||!0!==e.visible&&!1!==a.options.chart.ignoreHiddenSeries||(e.stackKey=e.type+w(e.options.stack,""))})};E.prototype.buildStacks=function(){var a=this.series,h=w(this.options.reversedStacks,!0),f=a.length,d;if(!this.isXAxis){this.usePercentage=!1;for(d=f;d--;)a[h?d:
+f-d-1].setStackedPoints();for(d=0;d<f;d++)a[d].modifyStacks()}};E.prototype.renderStackTotals=function(){var a=this.chart,h=a.renderer,f=this.stacks,d=this.stackTotalGroup;d||(this.stackTotalGroup=d=h.g("stack-labels").attr({visibility:"visible",zIndex:6}).add());d.translate(a.plotLeft,a.plotTop);n(f,function(a){n(a,function(a){a.render(d)})})};E.prototype.resetStacks=function(){var a=this,h=a.stacks;a.isXAxis||n(h,function(e){n(e,function(d,c){d.touched<a.stacksTouched?(d.destroy(),delete e[c]):
+(d.total=null,d.cumulative=null)})})};E.prototype.cleanStacks=function(){var a;this.isXAxis||(this.oldStacks&&(a=this.stacks=this.oldStacks),n(a,function(a){n(a,function(a){a.cumulative=a.total})}))};u.prototype.setStackedPoints=function(){if(this.options.stacking&&(!0===this.visible||!1===this.chart.options.chart.ignoreHiddenSeries)){var e=this.processedXData,h=this.processedYData,f=[],d=h.length,c=this.options,b=c.threshold,k=w(c.startFromThreshold&&b,0),l=c.stack,c=c.stacking,n=this.stackKey,r=
+"-"+n,x=this.negStacks,u=this.yAxis,t=u.stacks,C=u.oldStacks,N,q,A,F,G,g,v;u.stacksTouched+=1;for(G=0;G<d;G++)g=e[G],v=h[G],N=this.getStackIndicator(N,g,this.index),F=N.key,A=(q=x&&v<(k?0:b))?r:n,t[A]||(t[A]={}),t[A][g]||(C[A]&&C[A][g]?(t[A][g]=C[A][g],t[A][g].total=null):t[A][g]=new a.StackItem(u,u.options.stackLabels,q,g,l)),A=t[A][g],null!==v?(A.points[F]=A.points[this.index]=[w(A.cumulative,k)],p(A.cumulative)||(A.base=F),A.touched=u.stacksTouched,0<N.index&&!1===this.singleStacks&&(A.points[F][0]=
+A.points[this.index+","+g+",0"][0])):A.points[F]=A.points[this.index]=null,"percent"===c?(q=q?n:r,x&&t[q]&&t[q][g]?(q=t[q][g],A.total=q.total=Math.max(q.total,A.total)+Math.abs(v)||0):A.total=H(A.total+(Math.abs(v)||0))):A.total=H(A.total+(v||0)),A.cumulative=w(A.cumulative,k)+(v||0),null!==v&&(A.points[F].push(A.cumulative),f[G]=A.cumulative);"percent"===c&&(u.usePercentage=!0);this.stackedYData=f;u.oldStacks={}}};u.prototype.modifyStacks=function(){var a=this,h=a.stackKey,f=a.yAxis.stacks,d=a.processedXData,
+c,b=a.options.stacking;a[b+"Stacker"]&&l([h,"-"+h],function(e){for(var k=d.length,h,l;k--;)if(h=d[k],c=a.getStackIndicator(c,h,a.index,e),l=(h=f[e]&&f[e][h])&&h.points[c.key])a[b+"Stacker"](l,h,k)})};u.prototype.percentStacker=function(a,h,f){h=h.total?100/h.total:0;a[0]=H(a[0]*h);a[1]=H(a[1]*h);this.stackedYData[f]=a[1]};u.prototype.getStackIndicator=function(a,h,f,d){!p(a)||a.x!==h||d&&a.key!==d?a={x:h,index:0,key:d}:a.index++;a.key=[f,h,a.index].join();return a}})(M);(function(a){var E=a.addEvent,
+D=a.animate,H=a.Axis,p=a.createElement,f=a.css,l=a.defined,r=a.each,n=a.erase,w=a.extend,u=a.fireEvent,e=a.inArray,h=a.isNumber,m=a.isObject,d=a.isArray,c=a.merge,b=a.objectEach,k=a.pick,z=a.Point,B=a.Series,I=a.seriesTypes,x=a.setAnimation,K=a.splat;w(a.Chart.prototype,{addSeries:function(a,b,c){var d,e=this;a&&(b=k(b,!0),u(e,"addSeries",{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,d,e){var h=b?"xAxis":"yAxis",f=this.options;
+a=c(a,{index:this[h].length,isX:b});b=new H(this,a);f[h]=K(f[h]||{});f[h].push(a);k(d,!0)&&this.redraw(e);return b},showLoading:function(a){var b=this,c=b.options,d=b.loadingDiv,e=c.loading,k=function(){d&&f(d,{left:b.plotLeft+"px",top:b.plotTop+"px",width:b.plotWidth+"px",height:b.plotHeight+"px"})};d||(b.loadingDiv=d=p("div",{className:"highcharts-loading highcharts-loading-hidden"},null,b.container),b.loadingSpan=p("span",{className:"highcharts-loading-inner"},null,d),E(b,"redraw",k));d.className=
+"highcharts-loading";b.loadingSpan.innerHTML=a||c.lang.loading;f(d,w(e.style,{zIndex:10}));f(b.loadingSpan,e.labelStyle);b.loadingShown||(f(d,{opacity:0,display:""}),D(d,{opacity:e.style.opacity||.5},{duration:e.showDuration||0}));b.loadingShown=!0;k()},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&(b.className="highcharts-loading highcharts-loading-hidden",D(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){f(b,{display:"none"})}}));this.loadingShown=!1},propsRequireDirtyBox:"backgroundColor borderColor borderWidth margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow".split(" "),
+propsRequireUpdateSeries:"chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions tooltip".split(" "),update:function(a,d,f){var m=this,n={credits:"addCredits",title:"setTitle",subtitle:"setSubtitle"},t=a.chart,x,g,p=[];if(t){c(!0,m.options.chart,t);"className"in t&&m.setClassName(t.className);if("inverted"in t||"polar"in t)m.propFromSeries(),x=!0;"alignTicks"in t&&(x=!0);b(t,function(a,b){-1!==e("chart."+b,m.propsRequireUpdateSeries)&&(g=!0);-1!==e(b,m.propsRequireDirtyBox)&&
+(m.isDirtyBox=!0)});"style"in t&&m.renderer.setStyle(t.style)}a.colors&&(this.options.colors=a.colors);a.plotOptions&&c(!0,this.options.plotOptions,a.plotOptions);b(a,function(a,b){if(m[b]&&"function"===typeof m[b].update)m[b].update(a,!1);else if("function"===typeof m[n[b]])m[n[b]](a);"chart"!==b&&-1!==e(b,m.propsRequireUpdateSeries)&&(g=!0)});r("xAxis yAxis zAxis series colorAxis pane".split(" "),function(b){a[b]&&(r(K(a[b]),function(a,c){(c=l(a.id)&&m.get(a.id)||m[b][c])&&c.coll===b&&(c.update(a,
+!1),f&&(c.touched=!0));if(!c&&f)if("series"===b)m.addSeries(a,!1).touched=!0;else if("xAxis"===b||"yAxis"===b)m.addAxis(a,"xAxis"===b,!1).touched=!0}),f&&r(m[b],function(a){a.touched?delete a.touched:p.push(a)}))});r(p,function(a){a.remove(!1)});x&&r(m.axes,function(a){a.update({},!1)});g&&r(m.series,function(a){a.update({},!1)});a.loading&&c(!0,m.options.loading,a.loading);x=t&&t.width;t=t&&t.height;h(x)&&x!==m.chartWidth||h(t)&&t!==m.chartHeight?m.setSize(x,t):k(d,!0)&&m.redraw()},setSubtitle:function(a){this.setTitle(void 0,
+a)}});w(z.prototype,{update:function(a,b,c,d){function e(){h.applyOptions(a);null===h.y&&g&&(h.graphic=g.destroy());m(a,!0)&&(g&&g.element&&a&&a.marker&&void 0!==a.marker.symbol&&(h.graphic=g.destroy()),a&&a.dataLabels&&h.dataLabel&&(h.dataLabel=h.dataLabel.destroy()),h.connector&&(h.connector=h.connector.destroy()));l=h.index;f.updateParallelArrays(h,l);t.data[l]=m(t.data[l],!0)||m(a,!0)?h.options:a;f.isDirty=f.isDirtyData=!0;!f.fixedBox&&f.hasCartesianSeries&&(n.isDirtyBox=!0);"point"===t.legendType&&
+(n.isDirtyLegend=!0);b&&n.redraw(c)}var h=this,f=h.series,g=h.graphic,l,n=f.chart,t=f.options;b=k(b,!0);!1===d?e():h.firePointEvent("update",{options:a},e)},remove:function(a,b){this.series.removePoint(e(this,this.series.data),a,b)}});w(B.prototype,{addPoint:function(a,b,c,d){var e=this.options,h=this.data,f=this.chart,g=this.xAxis,g=g&&g.hasNames&&g.names,l=e.data,m,n,t=this.xData,q,x;b=k(b,!0);m={series:this};this.pointClass.prototype.applyOptions.apply(m,[a]);x=m.x;q=t.length;if(this.requireSorting&&
+x<t[q-1])for(n=!0;q&&t[q-1]>x;)q--;this.updateParallelArrays(m,"splice",q,0,0);this.updateParallelArrays(m,q);g&&m.name&&(g[x]=m.name);l.splice(q,0,a);n&&(this.data.splice(q,0,null),this.processData());"point"===e.legendType&&this.generatePoints();c&&(h[0]&&h[0].remove?h[0].remove(!1):(h.shift(),this.updateParallelArrays(m,"shift"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&f.redraw(d)},removePoint:function(a,b,c){var d=this,e=d.data,h=e[a],f=d.points,g=d.chart,l=function(){f&&f.length===e.length&&
+f.splice(a,1);e.splice(a,1);d.options.data.splice(a,1);d.updateParallelArrays(h||{series:d},"splice",a,1);h&&h.destroy();d.isDirty=!0;d.isDirtyData=!0;b&&g.redraw()};x(c,g);b=k(b,!0);h?h.firePointEvent("remove",null,l):l()},remove:function(a,b,c){function d(){e.destroy();h.isDirtyLegend=h.isDirtyBox=!0;h.linkSeries();k(a,!0)&&h.redraw(b)}var e=this,h=e.chart;!1!==c?u(e,"remove",null,d):d()},update:function(a,b){var d=this,e=d.chart,h=d.userOptions,f=d.oldType||d.type,l=a.type||h.type||e.options.chart.type,
+g=I[f].prototype,m,n=["group","markerGroup","dataLabelsGroup"],t=["navigatorSeries","baseSeries"],x=d.finishedAnimating&&{animation:!1};if(Object.keys&&"data"===Object.keys(a).toString())return this.setData(a.data,b);t=n.concat(t);r(t,function(a){t[a]=d[a];delete d[a]});a=c(h,x,{index:d.index,pointStart:d.xData[0]},{data:d.options.data},a);d.remove(!1,null,!1);for(m in g)d[m]=void 0;w(d,I[l||f].prototype);r(t,function(a){d[a]=t[a]});d.init(e,a);a.zIndex!==h.zIndex&&r(n,function(b){d[b]&&d[b].attr({zIndex:a.zIndex})});
+d.oldType=f;e.linkSeries();k(b,!0)&&e.redraw(!1)}});w(H.prototype,{update:function(a,b){var d=this.chart;a=d.options[this.coll][this.options.index]=c(this.userOptions,a);this.destroy(!0);this.init(d,w(a,{events:void 0}));d.isDirtyBox=!0;k(b,!0)&&d.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,e=this.series,h=e.length;h--;)e[h]&&e[h].remove(!1);n(b.axes,this);n(b[c],this);d(b.options[c])?b.options[c].splice(this.options.index,1):delete b.options[c];r(b[c],function(a,b){a.options.index=
+b});this.destroy();b.isDirtyBox=!0;k(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}})})(M);(function(a){var E=a.color,D=a.each,H=a.map,p=a.pick,f=a.Series,l=a.seriesType;l("area","line",{softThreshold:!1,threshold:0},{singleStacks:!1,getStackPoints:function(f){var l=[],r=[],u=this.xAxis,e=this.yAxis,h=e.stacks[this.stackKey],m={},d=this.index,c=e.series,b=c.length,k,z=p(e.options.reversedStacks,!0)?1:-1,B;f=f||this.points;
+if(this.options.stacking){for(B=0;B<f.length;B++)f[B].leftNull=f[B].rightNull=null,m[f[B].x]=f[B];a.objectEach(h,function(a,b){null!==a.total&&r.push(b)});r.sort(function(a,b){return a-b});k=H(c,function(){return this.visible});D(r,function(a,c){var f=0,n,x;if(m[a]&&!m[a].isNull)l.push(m[a]),D([-1,1],function(e){var f=1===e?"rightNull":"leftNull",l=0,t=h[r[c+e]];if(t)for(B=d;0<=B&&B<b;)n=t.points[B],n||(B===d?m[a][f]=!0:k[B]&&(x=h[a].points[B])&&(l-=x[1]-x[0])),B+=z;m[a][1===e?"rightCliff":"leftCliff"]=
+l});else{for(B=d;0<=B&&B<b;){if(n=h[a].points[B]){f=n[1];break}B+=z}f=e.translate(f,0,1,0,1);l.push({isNull:!0,plotX:u.translate(a,0,0,0,1),x:a,plotY:f,yBottom:f})}})}return l},getGraphPath:function(a){var l=f.prototype.getGraphPath,r=this.options,u=r.stacking,e=this.yAxis,h,m,d=[],c=[],b=this.index,k,z=e.stacks[this.stackKey],B=r.threshold,I=e.getThreshold(r.threshold),x,r=r.connectNulls||"percent"===u,K=function(h,f,l){var m=a[h];h=u&&z[m.x].points[b];var n=m[l+"Null"]||0;l=m[l+"Cliff"]||0;var x,
+t,m=!0;l||n?(x=(n?h[0]:h[1])+l,t=h[0]+l,m=!!n):!u&&a[f]&&a[f].isNull&&(x=t=B);void 0!==x&&(c.push({plotX:k,plotY:null===x?I:e.getThreshold(x),isNull:m,isCliff:!0}),d.push({plotX:k,plotY:null===t?I:e.getThreshold(t),doCurve:!1}))};a=a||this.points;u&&(a=this.getStackPoints(a));for(h=0;h<a.length;h++)if(m=a[h].isNull,k=p(a[h].rectPlotX,a[h].plotX),x=p(a[h].yBottom,I),!m||r)r||K(h,h-1,"left"),m&&!u&&r||(c.push(a[h]),d.push({x:h,plotX:k,plotY:x})),r||K(h,h+1,"right");h=l.call(this,c,!0,!0);d.reversed=
+!0;m=l.call(this,d,!0,!0);m.length&&(m[0]="L");m=h.concat(m);l=l.call(this,c,!1,r);m.xMap=h.xMap;this.areaPath=m;return l},drawGraph:function(){this.areaPath=[];f.prototype.drawGraph.apply(this);var a=this,l=this.areaPath,w=this.options,u=[["area","highcharts-area",this.color,w.fillColor]];D(this.zones,function(e,h){u.push(["zone-area-"+h,"highcharts-area highcharts-zone-area-"+h+" "+e.className,e.color||a.color,e.fillColor||w.fillColor])});D(u,function(e){var h=e[0],f=a[h];f?(f.endX=a.preventGraphAnimation?
+null:l.xMap,f.animate({d:l})):(f=a[h]=a.chart.renderer.path(l).addClass(e[1]).attr({fill:p(e[3],E(e[2]).setOpacity(p(w.fillOpacity,.75)).get()),zIndex:0}).add(a.group),f.isArea=!0);f.startX=l.xMap;f.shiftUnit=w.step?2:1})},drawLegendSymbol:a.LegendSymbolMixin.drawRectangle})})(M);(function(a){var E=a.pick;a=a.seriesType;a("spline","line",{},{getPointSpline:function(a,H,p){var f=H.plotX,l=H.plotY,r=a[p-1];p=a[p+1];var n,w,u,e;if(r&&!r.isNull&&!1!==r.doCurve&&!H.isCliff&&p&&!p.isNull&&!1!==p.doCurve&&
+!H.isCliff){a=r.plotY;u=p.plotX;p=p.plotY;var h=0;n=(1.5*f+r.plotX)/2.5;w=(1.5*l+a)/2.5;u=(1.5*f+u)/2.5;e=(1.5*l+p)/2.5;u!==n&&(h=(e-w)*(u-f)/(u-n)+l-e);w+=h;e+=h;w>a&&w>l?(w=Math.max(a,l),e=2*l-w):w<a&&w<l&&(w=Math.min(a,l),e=2*l-w);e>p&&e>l?(e=Math.max(p,l),w=2*l-e):e<p&&e<l&&(e=Math.min(p,l),w=2*l-e);H.rightContX=u;H.rightContY=e}H=["C",E(r.rightContX,r.plotX),E(r.rightContY,r.plotY),E(n,f),E(w,l),f,l];r.rightContX=r.rightContY=null;return H}})})(M);(function(a){var E=a.seriesTypes.area.prototype,
+D=a.seriesType;D("areaspline","spline",a.defaultPlotOptions.area,{getStackPoints:E.getStackPoints,getGraphPath:E.getGraphPath,drawGraph:E.drawGraph,drawLegendSymbol:a.LegendSymbolMixin.drawRectangle})})(M);(function(a){var E=a.animObject,D=a.color,H=a.each,p=a.extend,f=a.isNumber,l=a.merge,r=a.pick,n=a.Series,w=a.seriesType,u=a.svg;w("column","line",{borderRadius:0,crisp:!0,groupPadding:.2,marker:null,pointPadding:.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{halo:!1,brightness:.1},
+select:{color:"#cccccc",borderColor:"#000000"}},dataLabels:{align:null,verticalAlign:null,y:null},softThreshold:!1,startFromThreshold:!0,stickyTracking:!1,tooltip:{distance:6},threshold:0,borderColor:"#ffffff"},{cropShoulder:0,directTouch:!0,trackerGroups:["group","dataLabelsGroup"],negStacks:!0,init:function(){n.prototype.init.apply(this,arguments);var a=this,h=a.chart;h.hasRendered&&H(h.series,function(e){e.type===a.type&&(e.isDirty=!0)})},getColumnMetrics:function(){var a=this,h=a.options,f=a.xAxis,
+d=a.yAxis,c=f.reversed,b,k={},l=0;!1===h.grouping?l=1:H(a.chart.series,function(c){var e=c.options,h=c.yAxis,f;c.type!==a.type||!c.visible&&a.chart.options.chart.ignoreHiddenSeries||d.len!==h.len||d.pos!==h.pos||(e.stacking?(b=c.stackKey,void 0===k[b]&&(k[b]=l++),f=k[b]):!1!==e.grouping&&(f=l++),c.columnIndex=f)});var n=Math.min(Math.abs(f.transA)*(f.ordinalSlope||h.pointRange||f.closestPointRange||f.tickInterval||1),f.len),p=n*h.groupPadding,x=(n-2*p)/(l||1),h=Math.min(h.maxPointWidth||f.len,r(h.pointWidth,
+x*(1-2*h.pointPadding)));a.columnMetrics={width:h,offset:(x-h)/2+(p+((a.columnIndex||0)+(c?1:0))*x-n/2)*(c?-1:1)};return a.columnMetrics},crispCol:function(a,h,f,d){var c=this.chart,b=this.borderWidth,e=-(b%2?.5:0),b=b%2?.5:1;c.inverted&&c.renderer.isVML&&(b+=1);this.options.crisp&&(f=Math.round(a+f)+e,a=Math.round(a)+e,f-=a);d=Math.round(h+d)+b;e=.5>=Math.abs(h)&&.5<d;h=Math.round(h)+b;d-=h;e&&d&&(--h,d+=1);return{x:a,y:h,width:f,height:d}},translate:function(){var a=this,h=a.chart,f=a.options,d=
+a.dense=2>a.closestPointRange*a.xAxis.transA,d=a.borderWidth=r(f.borderWidth,d?0:1),c=a.yAxis,b=f.threshold,k=a.translatedThreshold=c.getThreshold(b),l=r(f.minPointLength,5),p=a.getColumnMetrics(),u=p.width,x=a.barW=Math.max(u,1+2*d),w=a.pointXOffset=p.offset;h.inverted&&(k-=.5);f.pointPadding&&(x=Math.ceil(x));n.prototype.translate.apply(a);H(a.points,function(d){var e=r(d.yBottom,k),f=999+Math.abs(e),f=Math.min(Math.max(-f,d.plotY),c.len+f),m=d.plotX+w,n=x,t=Math.min(f,e),p,g=Math.max(f,e)-t;l&&
+Math.abs(g)<l&&(g=l,p=!c.reversed&&!d.negative||c.reversed&&d.negative,d.y===b&&a.dataMax<=b&&c.min<b&&(p=!p),t=Math.abs(t-k)>l?e-l:k-(p?l:0));d.barX=m;d.pointWidth=u;d.tooltipPos=h.inverted?[c.len+c.pos-h.plotLeft-f,a.xAxis.len-m-n/2,g]:[m+n/2,f+c.pos-h.plotTop,g];d.shapeType="rect";d.shapeArgs=a.crispCol.apply(a,d.isNull?[m,k,n,0]:[m,t,n,g])})},getSymbol:a.noop,drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,drawGraph:function(){this.group[this.dense?"addClass":"removeClass"]("highcharts-dense-data")},
+pointAttribs:function(a,f){var e=this.options,d,c=this.pointAttrToOptions||{};d=c.stroke||"borderColor";var b=c["stroke-width"]||"borderWidth",k=a&&a.color||this.color,h=a&&a[d]||e[d]||this.color||k,n=a&&a[b]||e[b]||this[b]||0,c=e.dashStyle;a&&this.zones.length&&(k=a.getZone(),k=a.options.color||k&&k.color||this.color);f&&(a=l(e.states[f],a.options.states&&a.options.states[f]||{}),f=a.brightness,k=a.color||void 0!==f&&D(k).brighten(a.brightness).get()||k,h=a[d]||h,n=a[b]||n,c=a.dashStyle||c);d={fill:k,
+stroke:h,"stroke-width":n};c&&(d.dashstyle=c);return d},drawPoints:function(){var a=this,h=this.chart,m=a.options,d=h.renderer,c=m.animationLimit||250,b;H(a.points,function(e){var k=e.graphic;if(f(e.plotY)&&null!==e.y){b=e.shapeArgs;if(k)k[h.pointCount<c?"animate":"attr"](l(b));else e.graphic=k=d[e.shapeType](b).add(e.group||a.group);m.borderRadius&&k.attr({r:m.borderRadius});k.attr(a.pointAttribs(e,e.selected&&"select")).shadow(m.shadow,null,m.stacking&&!m.borderRadius);k.addClass(e.getClassName(),
+!0)}else k&&(e.graphic=k.destroy())})},animate:function(a){var e=this,f=this.yAxis,d=e.options,c=this.chart.inverted,b={},k=c?"translateX":"translateY",l;u&&(a?(b.scaleY=.001,a=Math.min(f.pos+f.len,Math.max(f.pos,f.toPixels(d.threshold))),c?b.translateX=a-f.len:b.translateY=a,e.group.attr(b)):(l=e.group.attr(k),e.group.animate({scaleY:1},p(E(e.options.animation),{step:function(a,c){b[k]=l+c.pos*(f.pos-l);e.group.attr(b)}})),e.animate=null))},remove:function(){var a=this,f=a.chart;f.hasRendered&&H(f.series,
+function(e){e.type===a.type&&(e.isDirty=!0)});n.prototype.remove.apply(a,arguments)}})})(M);(function(a){a=a.seriesType;a("bar","column",null,{inverted:!0})})(M);(function(a){var E=a.Series;a=a.seriesType;a("scatter","line",{lineWidth:0,findNearestPointBy:"xy",marker:{enabled:!0},tooltip:{headerFormat:'\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e \x3cspan style\x3d"font-size: 0.85em"\x3e {series.name}\x3c/span\x3e\x3cbr/\x3e',pointFormat:"x: \x3cb\x3e{point.x}\x3c/b\x3e\x3cbr/\x3ey: \x3cb\x3e{point.y}\x3c/b\x3e\x3cbr/\x3e"}},
+{sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","markerGroup","dataLabelsGroup"],takeOrdinalPosition:!1,drawGraph:function(){this.options.lineWidth&&E.prototype.drawGraph.call(this)}})})(M);(function(a){var E=a.deg2rad,D=a.isNumber,H=a.pick,p=a.relativeLength;a.CenteredSeriesMixin={getCenter:function(){var a=this.options,l=this.chart,r=2*(a.slicedOffset||0),n=l.plotWidth-2*r,l=l.plotHeight-2*r,w=a.center,w=[H(w[0],"50%"),H(w[1],"50%"),a.size||"100%",a.innerSize||0],u=Math.min(n,
+l),e,h;for(e=0;4>e;++e)h=w[e],a=2>e||2===e&&/%$/.test(h),w[e]=p(h,[n,l,u,w[2]][e])+(a?r:0);w[3]>w[2]&&(w[3]=w[2]);return w},getStartAndEndRadians:function(a,l){a=D(a)?a:0;l=D(l)&&l>a&&360>l-a?l:a+360;return{start:E*(a+-90),end:E*(l+-90)}}}})(M);(function(a){var E=a.addEvent,D=a.CenteredSeriesMixin,H=a.defined,p=a.each,f=a.extend,l=D.getStartAndEndRadians,r=a.inArray,n=a.noop,w=a.pick,u=a.Point,e=a.Series,h=a.seriesType,m=a.setAnimation;h("pie","line",{center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,
+enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},x:0},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:"#ffffff",borderWidth:1,states:{hover:{brightness:.1,shadow:!1}}},{isCartesian:!1,requireSorting:!1,directTouch:!0,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttribs:a.seriesTypes.column.prototype.pointAttribs,animate:function(a){var c=
+this,b=c.points,d=c.startAngleRad;a||(p(b,function(a){var b=a.graphic,e=a.shapeArgs;b&&(b.attr({r:a.startR||c.center[3]/2,start:d,end:d}),b.animate({r:e.r,start:e.start,end:e.end},c.options.animation))}),c.animate=null)},updateTotals:function(){var a,c=0,b=this.points,e=b.length,f,h=this.options.ignoreHiddenPoint;for(a=0;a<e;a++)f=b[a],c+=h&&!f.visible?0:f.isNull?0:f.y;this.total=c;for(a=0;a<e;a++)f=b[a],f.percentage=0<c&&(f.visible||!h)?f.y/c*100:0,f.total=c},generatePoints:function(){e.prototype.generatePoints.call(this);
+this.updateTotals()},translate:function(a){this.generatePoints();var c=0,b=this.options,d=b.slicedOffset,e=d+(b.borderWidth||0),f,h,m,n=l(b.startAngle,b.endAngle),t=this.startAngleRad=n.start,n=(this.endAngleRad=n.end)-t,p=this.points,u,q=b.dataLabels.distance,b=b.ignoreHiddenPoint,r,F=p.length,G;a||(this.center=a=this.getCenter());this.getX=function(b,c,d){m=Math.asin(Math.min((b-a[1])/(a[2]/2+d.labelDistance),1));return a[0]+(c?-1:1)*Math.cos(m)*(a[2]/2+d.labelDistance)};for(r=0;r<F;r++){G=p[r];
+G.labelDistance=w(G.options.dataLabels&&G.options.dataLabels.distance,q);this.maxLabelDistance=Math.max(this.maxLabelDistance||0,G.labelDistance);f=t+c*n;if(!b||G.visible)c+=G.percentage/100;h=t+c*n;G.shapeType="arc";G.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:Math.round(1E3*f)/1E3,end:Math.round(1E3*h)/1E3};m=(h+f)/2;m>1.5*Math.PI?m-=2*Math.PI:m<-Math.PI/2&&(m+=2*Math.PI);G.slicedTranslation={translateX:Math.round(Math.cos(m)*d),translateY:Math.round(Math.sin(m)*d)};h=Math.cos(m)*a[2]/
+2;u=Math.sin(m)*a[2]/2;G.tooltipPos=[a[0]+.7*h,a[1]+.7*u];G.half=m<-Math.PI/2||m>Math.PI/2?1:0;G.angle=m;f=Math.min(e,G.labelDistance/5);G.labelPos=[a[0]+h+Math.cos(m)*G.labelDistance,a[1]+u+Math.sin(m)*G.labelDistance,a[0]+h+Math.cos(m)*f,a[1]+u+Math.sin(m)*f,a[0]+h,a[1]+u,0>G.labelDistance?"center":G.half?"right":"left",m]}},drawGraph:null,drawPoints:function(){var a=this,c=a.chart.renderer,b,e,h,l,m=a.options.shadow;m&&!a.shadowGroup&&(a.shadowGroup=c.g("shadow").add(a.group));p(a.points,function(d){e=
+d.graphic;if(d.isNull)e&&(d.graphic=e.destroy());else{l=d.shapeArgs;b=d.getTranslate();var k=d.shadowGroup;m&&!k&&(k=d.shadowGroup=c.g("shadow").add(a.shadowGroup));k&&k.attr(b);h=a.pointAttribs(d,d.selected&&"select");e?e.setRadialReference(a.center).attr(h).animate(f(l,b)):(d.graphic=e=c[d.shapeType](l).setRadialReference(a.center).attr(b).add(a.group),d.visible||e.attr({visibility:"hidden"}),e.attr(h).attr({"stroke-linejoin":"round"}).shadow(m,k));e.addClass(d.getClassName())}})},searchPoint:n,
+sortByAngle:function(a,c){a.sort(function(a,d){return void 0!==a.angle&&(d.angle-a.angle)*c})},drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,getCenter:D.getCenter,getSymbol:n},{init:function(){u.prototype.init.apply(this,arguments);var a=this,c;a.name=w(a.name,"Slice");c=function(b){a.slice("select"===b.type)};E(a,"select",c);E(a,"unselect",c);return a},isValid:function(){return a.isNumber(this.y,!0)&&0<=this.y},setVisible:function(a,c){var b=this,d=b.series,e=d.chart,f=d.options.ignoreHiddenPoint;
+c=w(c,f);a!==b.visible&&(b.visible=b.options.visible=a=void 0===a?!b.visible:a,d.options.data[r(b,d.data)]=b.options,p(["graphic","dataLabel","connector","shadowGroup"],function(c){if(b[c])b[c][a?"show":"hide"](!0)}),b.legendItem&&e.legend.colorizeItem(b,a),a||"hover"!==b.state||b.setState(""),f&&(d.isDirty=!0),c&&e.redraw())},slice:function(a,c,b){var d=this.series;m(b,d.chart);w(c,!0);this.sliced=this.options.sliced=H(a)?a:!this.sliced;d.options.data[r(this,d.data)]=this.options;this.graphic.animate(this.getTranslate());
+this.shadowGroup&&this.shadowGroup.animate(this.getTranslate())},getTranslate:function(){return this.sliced?this.slicedTranslation:{translateX:0,translateY:0}},haloPath:function(a){var c=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(c.x,c.y,c.r+a,c.r+a,{innerR:this.shapeArgs.r-1,start:c.start,end:c.end})}})})(M);(function(a){var E=a.addEvent,D=a.arrayMax,H=a.defined,p=a.each,f=a.extend,l=a.format,r=a.map,n=a.merge,w=a.noop,u=a.pick,e=a.relativeLength,h=
+a.Series,m=a.seriesTypes,d=a.stableSort;a.distribute=function(a,b){function c(a,b){return a.target-b.target}var e,f=!0,h=a,l=[],m;m=0;for(e=a.length;e--;)m+=a[e].size;if(m>b){d(a,function(a,b){return(b.rank||0)-(a.rank||0)});for(m=e=0;m<=b;)m+=a[e].size,e++;l=a.splice(e-1,a.length)}d(a,c);for(a=r(a,function(a){return{size:a.size,targets:[a.target],align:u(a.align,.5)}});f;){for(e=a.length;e--;)f=a[e],m=(Math.min.apply(0,f.targets)+Math.max.apply(0,f.targets))/2,f.pos=Math.min(Math.max(0,m-f.size*
+f.align),b-f.size);e=a.length;for(f=!1;e--;)0<e&&a[e-1].pos+a[e-1].size>a[e].pos&&(a[e-1].size+=a[e].size,a[e-1].targets=a[e-1].targets.concat(a[e].targets),a[e-1].align=.5,a[e-1].pos+a[e-1].size>b&&(a[e-1].pos=b-a[e-1].size),a.splice(e,1),f=!0)}e=0;p(a,function(a){var b=0;p(a.targets,function(){h[e].pos=a.pos+b;b+=h[e].size;e++})});h.push.apply(h,l);d(h,c)};h.prototype.drawDataLabels=function(){function c(a,b){var c=b.filter;return c?(b=c.operator,a=a[c.property],c=c.value,"\x3e"===b&&a>c||"\x3c"===
+b&&a<c||"\x3e\x3d"===b&&a>=c||"\x3c\x3d"===b&&a<=c||"\x3d\x3d"===b&&a==c||"\x3d\x3d\x3d"===b&&a===c?!0:!1):!0}var b=this,d=b.options,e=d.dataLabels,f=b.points,h,m,r=b.hasRendered||0,t,w,D=u(e.defer,!!d.animation),q=b.chart.renderer;if(e.enabled||b._hasPointLabels)b.dlProcessOptions&&b.dlProcessOptions(e),w=b.plotGroup("dataLabelsGroup","data-labels",D&&!r?"hidden":"visible",e.zIndex||6),D&&(w.attr({opacity:+r}),r||E(b,"afterAnimate",function(){b.visible&&w.show(!0);w[d.animation?"animate":"attr"]({opacity:1},
+{duration:200})})),m=e,p(f,function(f){var k,p=f.dataLabel,g,x,r=f.connector,z=!p,C;h=f.dlOptions||f.options&&f.options.dataLabels;(k=u(h&&h.enabled,m.enabled)&&!f.isNull)&&(k=!0===c(f,h||e));k&&(e=n(m,h),g=f.getLabelConfig(),C=e[f.formatPrefix+"Format"]||e.format,t=H(C)?l(C,g):(e[f.formatPrefix+"Formatter"]||e.formatter).call(g,e),C=e.style,g=e.rotation,C.color=u(e.color,C.color,b.color,"#000000"),"contrast"===C.color&&(f.contrastColor=q.getContrast(f.color||b.color),C.color=e.inside||0>u(f.labelDistance,
+e.distance)||d.stacking?f.contrastColor:"#000000"),d.cursor&&(C.cursor=d.cursor),x={fill:e.backgroundColor,stroke:e.borderColor,"stroke-width":e.borderWidth,r:e.borderRadius||0,rotation:g,padding:e.padding,zIndex:1},a.objectEach(x,function(a,b){void 0===a&&delete x[b]}));!p||k&&H(t)?k&&H(t)&&(p?x.text=t:(p=f.dataLabel=g?q.text(t,0,-9999).addClass("highcharts-data-label"):q.label(t,0,-9999,e.shape,null,null,e.useHTML,null,"data-label"),p.addClass(" highcharts-data-label-color-"+f.colorIndex+" "+(e.className||
+"")+(e.useHTML?"highcharts-tracker":""))),p.attr(x),p.css(C).shadow(e.shadow),p.added||p.add(w),b.alignDataLabel(f,p,e,null,z)):(f.dataLabel=p=p.destroy(),r&&(f.connector=r.destroy()))})};h.prototype.alignDataLabel=function(a,b,d,e,h){var c=this.chart,k=c.inverted,l=u(a.dlBox&&a.dlBox.centerX,a.plotX,-9999),m=u(a.plotY,-9999),n=b.getBBox(),p,q=d.rotation,r=d.align,w=this.visible&&(a.series.forceDL||c.isInsidePlot(l,Math.round(m),k)||e&&c.isInsidePlot(l,k?e.x+1:e.y+e.height-1,k)),z="justify"===u(d.overflow,
+"justify");if(w&&(p=d.style.fontSize,p=c.renderer.fontMetrics(p,b).b,e=f({x:k?this.yAxis.len-m:l,y:Math.round(k?this.xAxis.len-l:m),width:0,height:0},e),f(d,{width:n.width,height:n.height}),q?(z=!1,l=c.renderer.rotCorr(p,q),l={x:e.x+d.x+e.width/2+l.x,y:e.y+d.y+{top:0,middle:.5,bottom:1}[d.verticalAlign]*e.height},b[h?"attr":"animate"](l).attr({align:r}),m=(q+720)%360,m=180<m&&360>m,"left"===r?l.y-=m?n.height:0:"center"===r?(l.x-=n.width/2,l.y-=n.height/2):"right"===r&&(l.x-=n.width,l.y-=m?0:n.height)):
+(b.align(d,null,e),l=b.alignAttr),z?a.isLabelJustified=this.justifyDataLabel(b,d,l,n,e,h):u(d.crop,!0)&&(w=c.isInsidePlot(l.x,l.y)&&c.isInsidePlot(l.x+n.width,l.y+n.height)),d.shape&&!q))b[h?"attr":"animate"]({anchorX:k?c.plotWidth-a.plotY:a.plotX,anchorY:k?c.plotHeight-a.plotX:a.plotY});w||(b.attr({y:-9999}),b.placed=!1)};h.prototype.justifyDataLabel=function(a,b,d,e,f,h){var c=this.chart,k=b.align,l=b.verticalAlign,m,n,p=a.box?0:a.padding||0;m=d.x+p;0>m&&("right"===k?b.align="left":b.x=-m,n=!0);
+m=d.x+e.width-p;m>c.plotWidth&&("left"===k?b.align="right":b.x=c.plotWidth-m,n=!0);m=d.y+p;0>m&&("bottom"===l?b.verticalAlign="top":b.y=-m,n=!0);m=d.y+e.height-p;m>c.plotHeight&&("top"===l?b.verticalAlign="bottom":b.y=c.plotHeight-m,n=!0);n&&(a.placed=!h,a.align(b,null,f));return n};m.pie&&(m.pie.prototype.drawDataLabels=function(){var c=this,b=c.data,d,e=c.chart,f=c.options.dataLabels,l=u(f.connectorPadding,10),m=u(f.connectorWidth,1),n=e.plotWidth,t=e.plotHeight,r,w=c.center,q=w[2]/2,A=w[1],F,G,
+g,v,E=[[],[]],L,P,J,M,y=[0,0,0,0];c.visible&&(f.enabled||c._hasPointLabels)&&(p(b,function(a){a.dataLabel&&a.visible&&a.dataLabel.shortened&&(a.dataLabel.attr({width:"auto"}).css({width:"auto",textOverflow:"clip"}),a.dataLabel.shortened=!1)}),h.prototype.drawDataLabels.apply(c),p(b,function(a){a.dataLabel&&a.visible&&(E[a.half].push(a),a.dataLabel._pos=null)}),p(E,function(b,h){var k,m,x=b.length,r=[],z;if(x)for(c.sortByAngle(b,h-.5),0<c.maxLabelDistance&&(k=Math.max(0,A-q-c.maxLabelDistance),m=Math.min(A+
+q+c.maxLabelDistance,e.plotHeight),p(b,function(a){0<a.labelDistance&&a.dataLabel&&(a.top=Math.max(0,A-q-a.labelDistance),a.bottom=Math.min(A+q+a.labelDistance,e.plotHeight),z=a.dataLabel.getBBox().height||21,a.positionsIndex=r.push({target:a.labelPos[1]-a.top+z/2,size:z,rank:a.y})-1)}),a.distribute(r,m+z-k)),M=0;M<x;M++)d=b[M],m=d.positionsIndex,g=d.labelPos,F=d.dataLabel,J=!1===d.visible?"hidden":"inherit",P=k=g[1],r&&H(r[m])&&(void 0===r[m].pos?J="hidden":(v=r[m].size,P=d.top+r[m].pos)),delete d.positionIndex,
+L=f.justify?w[0]+(h?-1:1)*(q+d.labelDistance):c.getX(P<d.top+2||P>d.bottom-2?k:P,h,d),F._attr={visibility:J,align:g[6]},F._pos={x:L+f.x+({left:l,right:-l}[g[6]]||0),y:P+f.y-10},g.x=L,g.y=P,u(f.crop,!0)&&(G=F.getBBox().width,k=null,L-G<l?(k=Math.round(G-L+l),y[3]=Math.max(k,y[3])):L+G>n-l&&(k=Math.round(L+G-n+l),y[1]=Math.max(k,y[1])),0>P-v/2?y[0]=Math.max(Math.round(-P+v/2),y[0]):P+v/2>t&&(y[2]=Math.max(Math.round(P+v/2-t),y[2])),F.sideOverflow=k)}),0===D(y)||this.verifyDataLabelOverflow(y))&&(this.placeDataLabels(),
+m&&p(this.points,function(a){var b;r=a.connector;if((F=a.dataLabel)&&F._pos&&a.visible&&0<a.labelDistance){J=F._attr.visibility;if(b=!r)a.connector=r=e.renderer.path().addClass("highcharts-data-label-connector  highcharts-color-"+a.colorIndex).add(c.dataLabelsGroup),r.attr({"stroke-width":m,stroke:f.connectorColor||a.color||"#666666"});r[b?"attr":"animate"]({d:c.connectorPath(a.labelPos)});r.attr("visibility",J)}else r&&(a.connector=r.destroy())}))},m.pie.prototype.connectorPath=function(a){var b=
+a.x,c=a.y;return u(this.options.dataLabels.softConnector,!0)?["M",b+("left"===a[6]?5:-5),c,"C",b,c,2*a[2]-a[4],2*a[3]-a[5],a[2],a[3],"L",a[4],a[5]]:["M",b+("left"===a[6]?5:-5),c,"L",a[2],a[3],"L",a[4],a[5]]},m.pie.prototype.placeDataLabels=function(){p(this.points,function(a){var b=a.dataLabel;b&&a.visible&&((a=b._pos)?(b.sideOverflow&&(b._attr.width=b.getBBox().width-b.sideOverflow,b.css({width:b._attr.width+"px",textOverflow:"ellipsis"}),b.shortened=!0),b.attr(b._attr),b[b.moved?"animate":"attr"](a),
+b.moved=!0):b&&b.attr({y:-9999}))},this)},m.pie.prototype.alignDataLabel=w,m.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,f=c.minSize||80,h,l=null!==c.size;l||(null!==d[0]?h=Math.max(b[2]-Math.max(a[1],a[3]),f):(h=Math.max(b[2]-a[1]-a[3],f),b[0]+=(a[3]-a[1])/2),null!==d[1]?h=Math.max(Math.min(h,b[2]-Math.max(a[0],a[2])),f):(h=Math.max(Math.min(h,b[2]-a[0]-a[2]),f),b[1]+=(a[0]-a[2])/2),h<b[2]?(b[2]=h,b[3]=Math.min(e(c.innerSize||0,h),h),this.translate(b),
+this.drawDataLabels&&this.drawDataLabels()):l=!0);return l});m.column&&(m.column.prototype.alignDataLabel=function(a,b,d,e,f){var c=this.chart.inverted,k=a.series,l=a.dlBox||a.shapeArgs,m=u(a.below,a.plotY>u(this.translatedThreshold,k.yAxis.len)),p=u(d.inside,!!this.options.stacking);l&&(e=n(l),0>e.y&&(e.height+=e.y,e.y=0),l=e.y+e.height-k.yAxis.len,0<l&&(e.height-=l),c&&(e={x:k.yAxis.len-e.y-e.height,y:k.xAxis.len-e.x-e.width,width:e.height,height:e.width}),p||(c?(e.x+=m?0:e.width,e.width=0):(e.y+=
+m?e.height:0,e.height=0)));d.align=u(d.align,!c||p?"center":m?"right":"left");d.verticalAlign=u(d.verticalAlign,c||p?"middle":m?"top":"bottom");h.prototype.alignDataLabel.call(this,a,b,d,e,f);a.isLabelJustified&&a.contrastColor&&a.dataLabel.css({color:a.contrastColor})})})(M);(function(a){var E=a.Chart,D=a.each,H=a.objectEach,p=a.pick;a=a.addEvent;a(E.prototype,"render",function(){var a=[];D(this.labelCollectors||[],function(f){a=a.concat(f())});D(this.yAxis||[],function(f){f.options.stackLabels&&
+!f.options.stackLabels.allowOverlap&&H(f.stacks,function(f){H(f,function(f){a.push(f.label)})})});D(this.series||[],function(f){var l=f.options.dataLabels,n=f.dataLabelCollections||["dataLabel"];(l.enabled||f._hasPointLabels)&&!l.allowOverlap&&f.visible&&D(n,function(l){D(f.points,function(f){f[l]&&(f[l].labelrank=p(f.labelrank,f.shapeArgs&&f.shapeArgs.height),a.push(f[l]))})})});this.hideOverlappingLabels(a)});E.prototype.hideOverlappingLabels=function(a){var f=a.length,p,n,w,u,e,h,m,d,c,b=function(a,
+b,c,d,e,f,h,l){return!(e>a+c||e+h<a||f>b+d||f+l<b)};for(n=0;n<f;n++)if(p=a[n])p.oldOpacity=p.opacity,p.newOpacity=1,p.width||(w=p.getBBox(),p.width=w.width,p.height=w.height);a.sort(function(a,b){return(b.labelrank||0)-(a.labelrank||0)});for(n=0;n<f;n++)for(w=a[n],p=n+1;p<f;++p)if(u=a[p],w&&u&&w!==u&&w.placed&&u.placed&&0!==w.newOpacity&&0!==u.newOpacity&&(e=w.alignAttr,h=u.alignAttr,m=w.parentGroup,d=u.parentGroup,c=2*(w.box?0:w.padding||0),e=b(e.x+m.translateX,e.y+m.translateY,w.width-c,w.height-
+c,h.x+d.translateX,h.y+d.translateY,u.width-c,u.height-c)))(w.labelrank<u.labelrank?w:u).newOpacity=0;D(a,function(a){var b,c;a&&(c=a.newOpacity,a.oldOpacity!==c&&a.placed&&(c?a.show(!0):b=function(){a.hide()},a.alignAttr.opacity=c,a[a.isOld?"animate":"attr"](a.alignAttr,null,b)),a.isOld=!0)})}})(M);(function(a){var E=a.addEvent,D=a.Chart,H=a.createElement,p=a.css,f=a.defaultOptions,l=a.defaultPlotOptions,r=a.each,n=a.extend,w=a.fireEvent,u=a.hasTouch,e=a.inArray,h=a.isObject,m=a.Legend,d=a.merge,
+c=a.pick,b=a.Point,k=a.Series,z=a.seriesTypes,B=a.svg,I;I=a.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart.pointer,c=function(a){var c=b.getPointFromEvent(a);void 0!==c&&(b.isDirectTouch=!0,c.onMouseOver(a))};r(a.points,function(a){a.graphic&&(a.graphic.element.point=a);a.dataLabel&&(a.dataLabel.div?a.dataLabel.div.point=a:a.dataLabel.element.point=a)});a._hasTracking||(r(a.trackerGroups,function(d){if(a[d]){a[d].addClass("highcharts-tracker").on("mouseover",c).on("mouseout",function(a){b.onTrackerMouseOut(a)});
+if(u)a[d].on("touchstart",c);a.options.cursor&&a[d].css(p).css({cursor:a.options.cursor})}}),a._hasTracking=!0)},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,h=f.pointer,k=f.renderer,l=f.options.tooltip.snap,g=a.tracker,m,n=function(){if(f.hoverSeries!==a)a.onMouseOver()},p="rgba(192,192,192,"+(B?.0001:.002)+")";if(e&&!c)for(m=e+1;m--;)"M"===d[m]&&d.splice(m+1,0,d[m+1]-l,d[m+2],"L"),(m&&"M"===d[m]||m===e)&&d.splice(m,
+0,"L",d[m-2]+l,d[m-1]);g?g.attr({d:d}):a.graph&&(a.tracker=k.path(d).attr({"stroke-linejoin":"round",visibility:a.visible?"visible":"hidden",stroke:p,fill:c?p:"none","stroke-width":a.graph.strokeWidth()+(c?0:2*l),zIndex:2}).add(a.group),r([a.tracker,a.markerGroup],function(a){a.addClass("highcharts-tracker").on("mouseover",n).on("mouseout",function(a){h.onTrackerMouseOut(a)});b.cursor&&a.css({cursor:b.cursor});if(u)a.on("touchstart",n)}))}};z.column&&(z.column.prototype.drawTracker=I.drawTrackerPoint);
+z.pie&&(z.pie.prototype.drawTracker=I.drawTrackerPoint);z.scatter&&(z.scatter.prototype.drawTracker=I.drawTrackerPoint);n(m.prototype,{setItemEvents:function(a,c,e){var f=this,h=f.chart.renderer.boxWrapper,k="highcharts-legend-"+(a instanceof b?"point":"series")+"-active";(e?c:a.legendGroup).on("mouseover",function(){a.setState("hover");h.addClass(k);c.css(f.options.itemHoverStyle)}).on("mouseout",function(){c.css(d(a.visible?f.itemStyle:f.itemHiddenStyle));h.removeClass(k);a.setState()}).on("click",
+function(b){var c=function(){a.setVisible&&a.setVisible()};h.removeClass(k);b={browserEvent:b};a.firePointEvent?a.firePointEvent("legendItemClick",b,c):w(a,"legendItemClick",b,c)})},createCheckboxForItem:function(a){a.checkbox=H("input",{type:"checkbox",checked:a.selected,defaultChecked:a.selected},this.options.itemCheckboxStyle,this.chart.container);E(a.checkbox,"click",function(b){w(a.series||a,"checkboxClick",{checked:b.target.checked,item:a},function(){a.select()})})}});f.legend.itemStyle.cursor=
+"pointer";n(D.prototype,{showResetZoom:function(){var a=this,b=f.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,h="chart"===c.relativeTo?null:"plotBox";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).addClass("highcharts-reset-zoom").add().align(c.position,!1,h)},zoomOut:function(){var a=this;w(a,"selection",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,d=this.pointer,
+e=!1,f;!a||a.resetSelection?(r(this.axes,function(a){b=a.zoom()}),d.initiated=!1):r(a.xAxis.concat(a.yAxis),function(a){var c=a.axis;d[c.isXAxis?"zoomX":"zoomY"]&&(b=c.zoom(a.min,a.max),c.displayBtn&&(e=!0))});f=this.resetZoomButton;e&&!f?this.showResetZoom():!e&&h(f)&&(this.resetZoomButton=f.destroy());b&&this.redraw(c(this.options.chart.animation,a&&a.animation,100>this.pointCount))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&r(d,function(a){a.setState()});r("xy"===b?[1,0]:[1],function(b){b=
+c[b?"xAxis":"yAxis"][0];var d=b.horiz,f=a[d?"chartX":"chartY"],d=d?"mouseDownX":"mouseDownY",h=c[d],g=(b.pointRange||0)/2,k=b.getExtremes(),l=b.toValue(h-f,!0)+g,m=b.toValue(h+b.len-f,!0)-g,n=m<l,h=n?m:l,l=n?l:m,m=Math.min(k.dataMin,g?k.min:b.toValue(b.toPixels(k.min)-b.minPixelPadding)),g=Math.max(k.dataMax,g?k.max:b.toValue(b.toPixels(k.max)+b.minPixelPadding)),n=m-h;0<n&&(l+=n,h=m);n=l-g;0<n&&(l=g,h-=n);b.series.length&&h!==k.min&&l!==k.max&&(b.setExtremes(h,l,!1,!1,{trigger:"pan"}),e=!0);c[d]=
+f});e&&c.redraw(!1);p(c.container,{cursor:"move"})}});n(b.prototype,{select:function(a,b){var d=this,f=d.series,h=f.chart;a=c(a,!d.selected);d.firePointEvent(a?"select":"unselect",{accumulate:b},function(){d.selected=d.options.selected=a;f.options.data[e(d,f.data)]=d.options;d.setState(a&&"select");b||r(h.getSelectedPoints(),function(a){a.selected&&a!==d&&(a.selected=a.options.selected=!1,f.options.data[e(a,f.data)]=a.options,a.setState(""),a.firePointEvent("unselect"))})})},onMouseOver:function(a){var b=
+this.series.chart,c=b.pointer;a=a?c.normalize(a):c.getChartCoordinatesFromPoint(this,b.inverted);c.runPointActions(a,this)},onMouseOut:function(){var a=this.series.chart;this.firePointEvent("mouseOut");r(a.hoverPoints||[],function(a){a.setState()});a.hoverPoints=a.hoverPoint=null},importEvents:function(){if(!this.hasImportedEvents){var b=this,c=d(b.series.options.point,b.options).events;b.events=c;a.objectEach(c,function(a,c){E(b,c,a)});this.hasImportedEvents=!0}},setState:function(a,b){var d=Math.floor(this.plotX),
+e=this.plotY,f=this.series,h=f.options.states[a]||{},k=l[f.type].marker&&f.options.marker,m=k&&!1===k.enabled,p=k&&k.states&&k.states[a]||{},g=!1===p.enabled,r=f.stateMarkerGraphic,u=this.marker||{},w=f.chart,x=f.halo,z,B=k&&f.markerAttribs;a=a||"";if(!(a===this.state&&!b||this.selected&&"select"!==a||!1===h.enabled||a&&(g||m&&!1===p.enabled)||a&&u.states&&u.states[a]&&!1===u.states[a].enabled)){B&&(z=f.markerAttribs(this,a));if(this.graphic)this.state&&this.graphic.removeClass("highcharts-point-"+
+this.state),a&&this.graphic.addClass("highcharts-point-"+a),this.graphic.animate(f.pointAttribs(this,a),c(w.options.chart.animation,h.animation)),z&&this.graphic.animate(z,c(w.options.chart.animation,p.animation,k.animation)),r&&r.hide();else{if(a&&p){k=u.symbol||f.symbol;r&&r.currentSymbol!==k&&(r=r.destroy());if(r)r[b?"animate":"attr"]({x:z.x,y:z.y});else k&&(f.stateMarkerGraphic=r=w.renderer.symbol(k,z.x,z.y,z.width,z.height).add(f.markerGroup),r.currentSymbol=k);r&&r.attr(f.pointAttribs(this,
+a))}r&&(r[a&&w.isInsidePlot(d,e,w.inverted)?"show":"hide"](),r.element.point=this)}(d=h.halo)&&d.size?(x||(f.halo=x=w.renderer.path().add((this.graphic||r).parentGroup)),x[b?"animate":"attr"]({d:this.haloPath(d.size)}),x.attr({"class":"highcharts-halo highcharts-color-"+c(this.colorIndex,f.colorIndex)}),x.point=this,x.attr(n({fill:this.color||f.color,"fill-opacity":d.opacity,zIndex:-1},d.attributes))):x&&x.point&&x.point.haloPath&&x.animate({d:x.point.haloPath(0)});this.state=a}},haloPath:function(a){return this.series.chart.renderer.symbols.circle(Math.floor(this.plotX)-
+a,this.plotY-a,2*a,2*a)}});n(k.prototype,{onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&w(this,"mouseOver");this.setState("hover");a.hoverSeries=this},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;b.hoverSeries=null;if(d)d.onMouseOut();this&&a.events.mouseOut&&w(this,"mouseOut");!c||this.stickyTracking||c.shared&&!this.noSharedTooltip||c.hide();this.setState()},setState:function(a){var b=this,
+d=b.options,e=b.graph,f=d.states,h=d.lineWidth,d=0;a=a||"";if(b.state!==a&&(r([b.group,b.markerGroup,b.dataLabelsGroup],function(c){c&&(b.state&&c.removeClass("highcharts-series-"+b.state),a&&c.addClass("highcharts-series-"+a))}),b.state=a,!f[a]||!1!==f[a].enabled)&&(a&&(h=f[a].lineWidth||h+(f[a].lineWidthPlus||0)),e&&!e.dashstyle))for(h={"stroke-width":h},e.animate(h,c(b.chart.options.chart.animation,f[a]&&f[a].animation));b["zone-graph-"+d];)b["zone-graph-"+d].attr(h),d+=1},setVisible:function(a,
+b){var c=this,d=c.chart,e=c.legendItem,f,h=d.options.chart.ignoreHiddenSeries,k=c.visible;f=(c.visible=a=c.options.visible=c.userOptions.visible=void 0===a?!k:a)?"show":"hide";r(["group","dataLabelsGroup","markerGroup","tracker","tt"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c||(d.hoverPoint&&d.hoverPoint.series)===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&r(d.series,function(a){a.options.stacking&&a.visible&&(a.isDirty=!0)});r(c.linkedSeries,function(b){b.setVisible(a,
+!1)});h&&(d.isDirtyBox=!0);!1!==b&&d.redraw();w(c,f)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=void 0===a?!this.selected:a;this.checkbox&&(this.checkbox.checked=a);w(this,a?"select":"unselect")},drawTracker:I.drawTrackerGraph})})(M);(function(a){var E=a.Chart,D=a.each,H=a.inArray,p=a.isArray,f=a.isObject,l=a.pick,r=a.splat;E.prototype.setResponsive=function(f){var l=this.options.responsive,n=[],e=this.currentResponsive;l&&l.rules&&
+D(l.rules,function(e){void 0===e._id&&(e._id=a.uniqueKey());this.matchResponsiveRule(e,n,f)},this);var h=a.merge.apply(0,a.map(n,function(e){return a.find(l.rules,function(a){return a._id===e}).chartOptions})),n=n.toString()||void 0;n!==(e&&e.ruleIds)&&(e&&this.update(e.undoOptions,f),n?(this.currentResponsive={ruleIds:n,mergedOptions:h,undoOptions:this.currentOptions(h)},this.update(h,f)):this.currentResponsive=void 0)};E.prototype.matchResponsiveRule=function(a,f){var n=a.condition;(n.callback||
+function(){return this.chartWidth<=l(n.maxWidth,Number.MAX_VALUE)&&this.chartHeight<=l(n.maxHeight,Number.MAX_VALUE)&&this.chartWidth>=l(n.minWidth,0)&&this.chartHeight>=l(n.minHeight,0)}).call(this)&&f.push(a._id)};E.prototype.currentOptions=function(l){function n(e,h,l,d){var c;a.objectEach(e,function(a,e){if(!d&&-1<H(e,["series","xAxis","yAxis"]))for(a=r(a),l[e]=[],c=0;c<a.length;c++)h[e][c]&&(l[e][c]={},n(a[c],h[e][c],l[e][c],d+1));else f(a)?(l[e]=p(a)?[]:{},n(a,h[e]||{},l[e],d+1)):l[e]=h[e]||
+null})}var u={};n(l,this.options,u,0);return u}})(M);return M});
+</script> 
+  <script>/*
+ Highcharts JS v6.0.4 (2017-12-15)
+ Exporting module
+
+ (c) 2010-2017 Torstein Honsi
+
+ License: www.highcharts.com/license
+*/
+(function(k){"object"===typeof module&&module.exports?module.exports=k:k(Highcharts)})(function(k){(function(f){var k=f.defaultOptions,z=f.doc,B=f.Chart,w=f.addEvent,I=f.removeEvent,F=f.fireEvent,p=f.createElement,C=f.discardElement,u=f.css,n=f.merge,D=f.pick,h=f.each,G=f.objectEach,r=f.extend,J=f.isTouchDevice,E=f.win,H=E.navigator.userAgent,K=f.Renderer.prototype.symbols;/Edge\/|Trident\/|MSIE /.test(H);/firefox/i.test(H);r(k.lang,{printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",
+downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"});k.navigation={buttonOptions:{theme:{},symbolSize:14,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,verticalAlign:"top",width:24}};n(!0,k.navigation,{menuStyle:{border:"1px solid #999999",background:"#ffffff",padding:"5px 0"},menuItemStyle:{padding:"0.5em 1em",background:"none",color:"#333333",fontSize:J?"14px":"11px",transition:"background 250ms, color 250ms"},menuItemHoverStyle:{background:"#335cad",
+color:"#ffffff"},buttonOptions:{symbolFill:"#666666",symbolStroke:"#666666",symbolStrokeWidth:3,theme:{fill:"#ffffff",stroke:"none",padding:5}}});k.exporting={type:"image/png",url:"https://export.highcharts.com/",printMaxWidth:780,scale:2,buttons:{contextButton:{className:"highcharts-contextbutton",menuClassName:"highcharts-contextmenu",symbol:"menu",_titleKey:"contextButtonTitle",menuItems:"printChart separator downloadPNG downloadJPEG downloadPDF downloadSVG".split(" ")}},menuItemDefinitions:{printChart:{textKey:"printChart",
+onclick:function(){this.print()}},separator:{separator:!0},downloadPNG:{textKey:"downloadPNG",onclick:function(){this.exportChart()}},downloadJPEG:{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},downloadPDF:{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},downloadSVG:{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}}};f.post=function(a,b,e){var c=p("form",n({method:"post",action:a,enctype:"multipart/form-data"},
+e),{display:"none"},z.body);G(b,function(a,b){p("input",{type:"hidden",name:b,value:a},null,c)});c.submit();C(c)};r(B.prototype,{sanitizeSVG:function(a,b){if(b&&b.exporting&&b.exporting.allowHTML){var e=a.match(/<\/svg>(.*?$)/);e&&e[1]&&(e='\x3cforeignObject x\x3d"0" y\x3d"0" width\x3d"'+b.chart.width+'" height\x3d"'+b.chart.height+'"\x3e\x3cbody xmlns\x3d"http://www.w3.org/1999/xhtml"\x3e'+e[1]+"\x3c/body\x3e\x3c/foreignObject\x3e",a=a.replace("\x3c/svg\x3e",e+"\x3c/svg\x3e"))}a=a.replace(/zIndex="[^"]+"/g,
+"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\(("|&quot;)(\S+)("|&quot;)\)/g,"url($2)").replace(/url\([^#]+#/g,"url(#").replace(/<svg /,'\x3csvg xmlns:xlink\x3d"http://www.w3.org/1999/xlink" ').replace(/ (NS[0-9]+\:)?href=/g," xlink:href\x3d").replace(/\n/," ").replace(/<\/svg>.*?$/,"\x3c/svg\x3e").replace(/(fill|stroke)="rgba\(([ 0-9]+,[ 0-9]+,[ 0-9]+),([ 0-9\.]+)\)"/g,'$1\x3d"rgb($2)" $1-opacity\x3d"$3"').replace(/&nbsp;/g,
+"\u00a0").replace(/&shy;/g,"\u00ad");this.ieSanitizeSVG&&(a=this.ieSanitizeSVG(a));return a},getChartHTML:function(){return this.container.innerHTML},getSVG:function(a){var b,e,c,v,m,g=n(this.options,a);e=p("div",null,{position:"absolute",top:"-9999em",width:this.chartWidth+"px",height:this.chartHeight+"px"},z.body);c=this.renderTo.style.width;m=this.renderTo.style.height;c=g.exporting.sourceWidth||g.chart.width||/px$/.test(c)&&parseInt(c,10)||600;m=g.exporting.sourceHeight||g.chart.height||/px$/.test(m)&&
+parseInt(m,10)||400;r(g.chart,{animation:!1,renderTo:e,forExport:!0,renderer:"SVGRenderer",width:c,height:m});g.exporting.enabled=!1;delete g.data;g.series=[];h(this.series,function(a){v=n(a.userOptions,{animation:!1,enableMouseTracking:!1,showCheckbox:!1,visible:a.visible});v.isInternal||g.series.push(v)});h(this.axes,function(a){a.userOptions.internalKey||(a.userOptions.internalKey=f.uniqueKey())});b=new f.Chart(g,this.callback);a&&h(["xAxis","yAxis","series"],function(c){var d={};a[c]&&(d[c]=a[c],
+b.update(d))});h(this.axes,function(a){var c=f.find(b.axes,function(b){return b.options.internalKey===a.userOptions.internalKey}),d=a.getExtremes(),e=d.userMin,d=d.userMax;!c||void 0===e&&void 0===d||c.setExtremes(e,d,!0,!1)});c=b.getChartHTML();c=this.sanitizeSVG(c,g);g=null;b.destroy();C(e);return c},getSVGForExport:function(a,b){var e=this.options.exporting;return this.getSVG(n({chart:{borderRadius:0}},e.chartOptions,b,{exporting:{sourceWidth:a&&a.sourceWidth||e.sourceWidth,sourceHeight:a&&a.sourceHeight||
+e.sourceHeight}}))},exportChart:function(a,b){b=this.getSVGForExport(a,b);a=n(this.options.exporting,a);f.post(a.url,{filename:a.filename||"chart",type:a.type,width:a.width||0,scale:a.scale,svg:b},a.formAttributes)},print:function(){var a=this,b=a.container,e=[],c=b.parentNode,f=z.body,m=f.childNodes,g=a.options.exporting.printMaxWidth,d,t;if(!a.isPrinting){a.isPrinting=!0;a.pointer.reset(null,0);F(a,"beforePrint");if(t=g&&a.chartWidth>g)d=[a.options.chart.width,void 0,!1],a.setSize(g,void 0,!1);
+h(m,function(a,b){1===a.nodeType&&(e[b]=a.style.display,a.style.display="none")});f.appendChild(b);E.focus();E.print();setTimeout(function(){c.appendChild(b);h(m,function(a,b){1===a.nodeType&&(a.style.display=e[b])});a.isPrinting=!1;t&&a.setSize.apply(a,d);F(a,"afterPrint")},1E3)}},contextMenu:function(a,b,e,c,v,m,g){var d=this,t=d.options.navigation,k=d.chartWidth,q=d.chartHeight,n="cache-"+a,l=d[n],x=Math.max(v,m),y,A;l||(d[n]=l=p("div",{className:a},{position:"absolute",zIndex:1E3,padding:x+"px"},
+d.container),y=p("div",{className:"highcharts-menu"},null,l),u(y,r({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},t.menuStyle)),A=function(){u(l,{display:"none"});g&&g.setState(0);d.openMenu=!1},d.exportEvents.push(w(l,"mouseleave",function(){l.hideTimer=setTimeout(A,500)}),w(l,"mouseenter",function(){clearTimeout(l.hideTimer)}),w(z,"mouseup",function(b){d.pointer.inClass(b.target,a)||A()})),h(b,function(a){"string"===typeof a&&(a=d.options.exporting.menuItemDefinitions[a]);
+if(f.isObject(a,!0)){var b;a.separator?b=p("hr",null,null,y):(b=p("div",{className:"highcharts-menu-item",onclick:function(b){b&&b.stopPropagation();A();a.onclick&&a.onclick.apply(d,arguments)},innerHTML:a.text||d.options.lang[a.textKey]},null,y),b.onmouseover=function(){u(this,t.menuItemHoverStyle)},b.onmouseout=function(){u(this,t.menuItemStyle)},u(b,r({cursor:"pointer"},t.menuItemStyle)));d.exportDivElements.push(b)}}),d.exportDivElements.push(y,l),d.exportMenuWidth=l.offsetWidth,d.exportMenuHeight=
+l.offsetHeight);b={display:"block"};e+d.exportMenuWidth>k?b.right=k-e-v-x+"px":b.left=e-x+"px";c+m+d.exportMenuHeight>q&&"top"!==g.alignOptions.verticalAlign?b.bottom=q-c-x+"px":b.top=c+m-x+"px";u(l,b);d.openMenu=!0},addButton:function(a){var b=this,e=b.renderer,c=n(b.options.navigation.buttonOptions,a),f=c.onclick,m=c.menuItems,g,d,k=c.symbolSize||12;b.btnCount||(b.btnCount=0);b.exportDivElements||(b.exportDivElements=[],b.exportSVGElements=[]);if(!1!==c.enabled){var h=c.theme,q=h.states,p=q&&q.hover,
+q=q&&q.select,l;delete h.states;f?l=function(a){a.stopPropagation();f.call(b,a)}:m&&(l=function(){b.contextMenu(d.menuClassName,m,d.translateX,d.translateY,d.width,d.height,d);d.setState(2)});c.text&&c.symbol?h.paddingLeft=D(h.paddingLeft,25):c.text||r(h,{width:c.width,height:c.height,padding:0});d=e.button(c.text,0,0,l,h,p,q).addClass(a.className).attr({"stroke-linecap":"round",title:b.options.lang[c._titleKey],zIndex:3});d.menuClassName=a.menuClassName||"highcharts-menu-"+b.btnCount++;c.symbol&&
+(g=e.symbol(c.symbol,c.symbolX-k/2,c.symbolY-k/2,k,k).addClass("highcharts-button-symbol").attr({zIndex:1}).add(d),g.attr({stroke:c.symbolStroke,fill:c.symbolFill,"stroke-width":c.symbolStrokeWidth||1}));d.add().align(r(c,{width:d.width,x:D(c.x,b.buttonOffset)}),!0,"spacingBox");b.buttonOffset+=(d.width+c.buttonSpacing)*("right"===c.align?-1:1);b.exportSVGElements.push(d,g)}},destroyExport:function(a){var b=a?a.target:this;a=b.exportSVGElements;var e=b.exportDivElements,c=b.exportEvents,f;a&&(h(a,
+function(a,c){a&&(a.onclick=a.ontouchstart=null,f="cache-"+a.menuClassName,b[f]&&delete b[f],b.exportSVGElements[c]=a.destroy())}),a.length=0);e&&(h(e,function(a,c){clearTimeout(a.hideTimer);I(a,"mouseleave");b.exportDivElements[c]=a.onmouseout=a.onmouseover=a.ontouchstart=a.onclick=null;C(a)}),e.length=0);c&&(h(c,function(a){a()}),c.length=0)}});K.menu=function(a,b,e,c){return["M",a,b+2.5,"L",a+e,b+2.5,"M",a,b+c/2+.5,"L",a+e,b+c/2+.5,"M",a,b+c-1.5,"L",a+e,b+c-1.5]};B.prototype.renderExporting=function(){var a=
+this,b=a.options.exporting,e=b.buttons,c=a.isDirtyExporting||!a.exportSVGElements;a.buttonOffset=0;a.isDirtyExporting&&a.destroyExport();c&&!1!==b.enabled&&(a.exportEvents=[],G(e,function(b){a.addButton(b)}),a.isDirtyExporting=!1);w(a,"destroy",a.destroyExport)};B.prototype.callbacks.push(function(a){a.renderExporting();w(a,"redraw",a.renderExporting);h(["exporting","navigation"],function(b){a[b]={update:function(e,c){a.isDirtyExporting=!0;n(!0,a.options[b],e);D(c,!0)&&a.redraw()}}})})})(k)});
+</script> 
+  <script>/*
+ Highcharts JS v6.0.4 (2017-12-15)
+ Exporting module
+
+ (c) 2010-2017 Torstein Honsi
+
+ License: www.highcharts.com/license
+*/
+(function(v){"object"===typeof module&&module.exports?module.exports=v:v(Highcharts)})(function(v){(function(a){var v=a.defined,w=a.each,x=a.pick,y=a.win,B=y.document,m=a.seriesTypes,E=void 0!==B.createElement("a").download;a.setOptions({exporting:{csv:{columnHeaderFormatter:null,dateFormat:"%Y-%m-%d %H:%M:%S",decimalPoint:null,itemDelimiter:null,lineDelimiter:"\n"},showTable:!1,useMultiLevelHeaders:!0,useRowspanHeaders:!0},lang:{downloadCSV:"Download CSV",downloadXLS:"Download XLS",viewData:"View data table"}});
+a.addEvent(a.Chart.prototype,"render",function(){this.options&&this.options.exporting&&this.options.exporting.showTable&&this.viewData()});a.Chart.prototype.setUpKeyToAxis=function(){m.arearange&&(m.arearange.prototype.keyToAxis={low:"y",high:"y"})};a.Chart.prototype.getDataRows=function(e){var z=this.options.exporting&&this.options.exporting.csv||{},g,p=this.xAxis,l={},f=[],k,D=[],r=[],d,n,A,b=function(c,h,b){if(z.columnHeaderFormatter){var g=z.columnHeaderFormatter(c,h,b);if(!1!==g)return g}return c?
+c instanceof a.Axis?c.options.title&&c.options.title.text||(c.isDatetimeAxis?"DateTime":"Category"):e?{columnTitle:1<b?h:c.name,topLevelColumnTitle:c.name}:c.name+(1<b?" ("+h+")":""):"Category"},q=[];n=0;this.setUpKeyToAxis();w(this.series,function(c){var h=c.options.keys||c.pointArrayMap||["y"],g=h.length,t=!c.requireSorting&&{},u={},A={},k=a.inArray(c.xAxis,p),f;w(h,function(h){var b=(c.keyToAxis&&c.keyToAxis[h]||h)+"Axis";u[h]=c[b]&&c[b].categories||[];A[h]=c[b]&&c[b].isDatetimeAxis});if(!1!==
+c.options.includeInCSVExport&&!1!==c.visible){a.find(q,function(c){return c[0]===k})||q.push([k,n]);for(f=0;f<g;)d=b(c,h[f],h.length),r.push(d.columnTitle||d),e&&D.push(d.topLevelColumnTitle||d),f++;w(c.points,function(b,e){var d=b.x,q;t&&(t[d]&&(d+="|"+e),t[d]=!0);f=0;l[d]||(l[d]=[],l[d].xValues=[]);l[d].x=b.x;l[d].xValues[k]=b.x;c.xAxis&&"name"!==c.exportKey||(l[d].name=b.name);for(;f<g;)e=h[f],q=b[e],l[d][n+f]=x(u[e][q],A[e]?a.dateFormat(z.dateFormat,q):null,q),f++});n+=f}});for(k in l)l.hasOwnProperty(k)&&
+f.push(l[k]);var u,t;k=e?[D,r]:[r];for(n=q.length;n--;)u=q[n][0],t=q[n][1],g=p[u],f.sort(function(c,b){return c.xValues[u]-b.xValues[u]}),A=b(g),k[0].splice(t,0,A),e&&k[1]&&k[1].splice(t,0,A),w(f,function(c){var b=c.name;v(b)||(g.isDatetimeAxis?(c.x instanceof Date&&(c.x=c.x.getTime()),b=a.dateFormat(z.dateFormat,c.x)):b=g.categories?x(g.names[c.x],g.categories[c.x],c.x):c.x);c.splice(t,0,b)});return k=k.concat(f)};a.Chart.prototype.getCSV=function(e){var a="",g=this.getDataRows(),p=this.options.exporting.csv,
+l=x(p.decimalPoint,e?(1.1).toLocaleString()[1]:"."),f=x(p.itemDelimiter,","===l?";":","),k=p.lineDelimiter;w(g,function(e,z){for(var d,n=e.length;n--;)d=e[n],"string"===typeof d&&(d='"'+d+'"'),"number"===typeof d&&"."!==l&&(d=d.toString().replace(".",l)),e[n]=d;a+=e.join(f);z<g.length-1&&(a+=k)});return a};a.Chart.prototype.getTable=function(e){var a="\x3ctable\x3e",g=this.options,p=e?(1.1).toLocaleString()[1]:".",l=x(g.exporting.useMultiLevelHeaders,!0);e=this.getDataRows(l);var f=0,k=l?e.shift():
+null,m=e.shift(),r=function(a,b,e,g){var d=g||"";b="text"+(b?" "+b:"");"number"===typeof d?(d=d.toString(),","===p&&(d=d.replace(".",p)),b="number"):g||(b="empty");return"\x3c"+a+(e?" "+e:"")+' class\x3d"'+b+'"\x3e'+d+"\x3c/"+a+"\x3e"};!1!==g.exporting.tableCaption&&(a+='\x3ccaption class\x3d"highcharts-table-caption"\x3e'+x(g.exporting.tableCaption,g.title.text?g.title.text.replace(/&/g,"\x26amp;").replace(/</g,"\x26lt;").replace(/>/g,"\x26gt;").replace(/"/g,"\x26quot;").replace(/'/g,"\x26#x27;").replace(/\//g,
+"\x26#x2F;"):"Chart")+"\x3c/caption\x3e");for(var d=0,n=e.length;d<n;++d)e[d].length>f&&(f=e[d].length);a+=function(a,b,e){var d="\x3cthead\x3e",f=0;e=e||b&&b.length;var c,h,k=0;if(h=l&&a&&b){a:if(h=a.length,b.length===h){for(;h--;)if(a[h]!==b[h]){h=!1;break a}h=!0}else h=!1;h=!h}if(h){for(d+="\x3ctr\x3e";f<e;++f)h=a[f],c=a[f+1],h===c?++k:k?(d+=r("th","highcharts-table-topheading",'scope\x3d"col" colspan\x3d"'+(k+1)+'"',h),k=0):(h===b[f]?g.exporting.useRowspanHeaders?(c=2,delete b[f]):(c=1,b[f]=""):
+c=1,d+=r("th","highcharts-table-topheading",'scope\x3d"col"'+(1<c?' valign\x3d"top" rowspan\x3d"'+c+'"':""),h));d+="\x3c/tr\x3e"}if(b){d+="\x3ctr\x3e";f=0;for(e=b.length;f<e;++f)void 0!==b[f]&&(d+=r("th",null,'scope\x3d"col"',b[f]));d+="\x3c/tr\x3e"}return d+"\x3c/thead\x3e"}(k,m,Math.max(f,m.length));a+="\x3ctbody\x3e";w(e,function(d){a+="\x3ctr\x3e";for(var b=0;b<f;b++)a+=r(b?"td":"th",null,b?"":'scope\x3d"row"',d[b]);a+="\x3c/tr\x3e"});return a+="\x3c/tbody\x3e\x3c/table\x3e"};a.Chart.prototype.fileDownload=
+function(e,m,g){var p;p=this.options.exporting.filename?this.options.exporting.filename:this.title&&this.title.textStr?this.title.textStr.replace(/ /g,"-").toLowerCase():"chart";y.Blob&&y.navigator.msSaveOrOpenBlob?(e=new y.Blob(["\ufeff"+g],{type:"text/csv"}),y.navigator.msSaveOrOpenBlob(e,p+"."+m)):E?(g=B.createElement("a"),g.href=e,g.download=p+"."+m,this.container.appendChild(g),g.click(),g.remove()):a.error("The browser doesn't support downloading files")};a.Chart.prototype.downloadCSV=function(){var a=
+this.getCSV(!0);this.fileDownload("data:text/csv,\ufeff"+encodeURIComponent(a),"csv",a,"text/csv")};a.Chart.prototype.downloadXLS=function(){var a='\x3chtml xmlns:o\x3d"urn:schemas-microsoft-com:office:office" xmlns:x\x3d"urn:schemas-microsoft-com:office:excel" xmlns\x3d"http://www.w3.org/TR/REC-html40"\x3e\x3chead\x3e\x3c!--[if gte mso 9]\x3e\x3cxml\x3e\x3cx:ExcelWorkbook\x3e\x3cx:ExcelWorksheets\x3e\x3cx:ExcelWorksheet\x3e\x3cx:Name\x3eArk1\x3c/x:Name\x3e\x3cx:WorksheetOptions\x3e\x3cx:DisplayGridlines/\x3e\x3c/x:WorksheetOptions\x3e\x3c/x:ExcelWorksheet\x3e\x3c/x:ExcelWorksheets\x3e\x3c/x:ExcelWorkbook\x3e\x3c/xml\x3e\x3c![endif]--\x3e\x3cstyle\x3etd{border:none;font-family: Calibri, sans-serif;} .number{mso-number-format:"0.00";} .text{ mso-number-format:"@";}\x3c/style\x3e\x3cmeta name\x3dProgId content\x3dExcel.Sheet\x3e\x3cmeta charset\x3dUTF-8\x3e\x3c/head\x3e\x3cbody\x3e'+
+this.getTable(!0)+"\x3c/body\x3e\x3c/html\x3e";this.fileDownload("data:application/vnd.ms-excel;base64,"+y.btoa(unescape(encodeURIComponent(a))),"xls",a,"application/vnd.ms-excel")};a.Chart.prototype.viewData=function(){this.dataTableDiv||(this.dataTableDiv=B.createElement("div"),this.dataTableDiv.className="highcharts-data-table",this.renderTo.parentNode.insertBefore(this.dataTableDiv,this.renderTo.nextSibling));this.dataTableDiv.innerHTML=this.getTable()};var C=a.getOptions().exporting;C&&(a.extend(C.menuItemDefinitions,
+{downloadCSV:{textKey:"downloadCSV",onclick:function(){this.downloadCSV()}},downloadXLS:{textKey:"downloadXLS",onclick:function(){this.downloadXLS()}},viewData:{textKey:"viewData",onclick:function(){this.viewData()}}}),C.buttons.contextButton.menuItems.push("separator","downloadCSV","downloadXLS","viewData"));m.map&&(m.map.prototype.exportKey="name");m.mapbubble&&(m.mapbubble.prototype.exportKey="name");m.treemap&&(m.treemap.prototype.exportKey="name")})(v)});
+</script> 
+  <script>/*
+	Ractive.js v0.9.3
+	Build: 43c3285402258be6a70c9b54f6224af6975f7c64
+	Date: Mon Jul 24 2017 19:37:18 GMT+0000 (UTC)
+	Website: http://ractivejs.org
+	License: MIT
+*/
+(function (global, factory) {
+	typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+	typeof define === 'function' && define.amd ? define(factory) :
+	(function() {
+		var current = global.Ractive;
+		var exports = factory();
+		global.Ractive = exports;
+		exports.noConflict = function() { global.Ractive = current; return exports; };
+	})();
+}(this, (function () { 'use strict';
+
+if (!Array.prototype.find) {
+	Object.defineProperty( Array.prototype, 'find', {
+		value: function value (callback, thisArg) {
+			if (this === null || this === undefined)
+				{ throw new TypeError('Array.prototype.find called on null or undefined'); }
+
+			if (typeof callback !== 'function')
+				{ throw new TypeError((callback + " is not a function")); }
+
+			var array = Object(this);
+			var arrayLength = array.length >>> 0;
+
+			for (var index = 0; index < arrayLength; index++) {
+				if (!Object.hasOwnProperty.call(array, index)) { continue; }
+				if (!callback.call(thisArg, array[index], index, array)) { continue; }
+				return array[index];
+			}
+
+			return undefined;
+		},
+		configurable: true,
+		writable: true
+	});
+}
+
+// NOTE: Node doesn't exist in IE8. Nothing can be done.
+if (typeof window !== 'undefined' && window.Node && window.Node.prototype && !window.Node.prototype.contains) {
+	Node.prototype.contains = function (node) {
+		var this$1 = this;
+
+		if (!node)
+			{ throw new TypeError('node required'); }
+
+		do {
+			if (this$1 === node) { return true; }
+		} while (node = node && node.parentNode);
+
+		return false;
+	};
+}
+
+if (!Object.assign) {
+	Object.assign = function (target) {
+		var sources = [], len = arguments.length - 1;
+		while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];
+
+		if (target == null)
+			{ throw new TypeError('Cannot convert undefined or null to object'); }
+
+		var to = Object(target);
+		var sourcesLength = sources.length;
+
+		for (var index = 0; index < sourcesLength; index++) {
+			var nextSource = sources[index];
+			for (var nextKey in nextSource) {
+				if (!Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { continue; }
+				to[nextKey] = nextSource[nextKey];
+			}
+		}
+
+		return to;
+	};
+}
+
+if (typeof window !== 'undefined' && window.performance && !window.performance.now) {
+	window.performance = window.performance || {};
+
+	var nowOffset = Date.now();
+
+	window.performance.now = function () {
+		return Date.now() - nowOffset;
+	};
+}
+
+if (typeof window !== 'undefined' && !window.Promise) {
+	var PENDING = {};
+	var FULFILLED = {};
+	var REJECTED = {};
+
+	var Promise$1 = window.Promise = function (callback) {
+		var fulfilledHandlers = [];
+		var rejectedHandlers = [];
+		var state = PENDING;
+		var result;
+		var dispatchHandlers;
+
+		var makeResolver = function (newState) {
+			return function (value) {
+				if (state !== PENDING) { return; }
+				result = value;
+				state = newState;
+				dispatchHandlers = makeDispatcher((state === FULFILLED ? fulfilledHandlers : rejectedHandlers), result);
+				wait(dispatchHandlers);
+			};
+		};
+
+		var fulfill = makeResolver(FULFILLED);
+		var reject = makeResolver(REJECTED);
+
+		try {
+			callback(fulfill, reject);
+		} catch (err) {
+			reject(err);
+		}
+
+		return {
+			// `then()` returns a Promise - 2.2.7
+			then: function then(onFulfilled, onRejected) {
+				var promise2 = new Promise$1(function (fulfill, reject) {
+
+					var processResolutionHandler = function (handler, handlers, forward) {
+						if (typeof handler === 'function') {
+							handlers.push(function (p1result) {
+								try {
+									resolve(promise2, handler(p1result), fulfill, reject);
+								} catch (err) {
+									reject(err);
+								}
+							});
+						} else {
+							handlers.push(forward);
+						}
+					};
+
+					processResolutionHandler(onFulfilled, fulfilledHandlers, fulfill);
+					processResolutionHandler(onRejected, rejectedHandlers, reject);
+
+					if (state !== PENDING) {
+						wait(dispatchHandlers);
+					}
+
+				});
+				return promise2;
+			},
+			'catch': function catch$1(onRejected) {
+				return this.then(null, onRejected);
+			}
+		};
+	};
+
+	Promise$1.all = function (promises) {
+		return new Promise$1(function (fulfil, reject) {
+			var result = [];
+			var pending;
+			var i;
+
+			if (!promises.length) {
+				fulfil(result);
+				return;
+			}
+
+			var processPromise = function (promise, i) {
+				if (promise && typeof promise.then === 'function') {
+					promise.then(function (value) {
+						result[i] = value;
+						--pending || fulfil(result);
+					}, reject);
+				} else {
+					result[i] = promise;
+					--pending || fulfil(result);
+				}
+			};
+
+			pending = i = promises.length;
+
+			while (i--) {
+				processPromise(promises[i], i);
+			}
+		});
+	};
+
+	Promise$1.resolve = function (value) {
+		return new Promise$1(function (fulfill) {
+			fulfill(value);
+		});
+	};
+
+	Promise$1.reject = function (reason) {
+		return new Promise$1(function (fulfill, reject) {
+			reject(reason);
+		});
+	};
+
+	// TODO use MutationObservers or something to simulate setImmediate
+	var wait = function (callback) {
+		setTimeout(callback, 0);
+	};
+
+	var makeDispatcher = function (handlers, result) {
+		return function () {
+			for (var handler = (void 0); handler = handlers.shift();) {
+				handler(result);
+			}
+		};
+	};
+
+	var resolve = function (promise, x, fulfil, reject) {
+		var then;
+		if (x === promise) {
+			throw new TypeError("A promise's fulfillment handler cannot return the same promise");
+		}
+		if (x instanceof Promise$1) {
+			x.then(fulfil, reject);
+		} else if (x && (typeof x === 'object' || typeof x === 'function')) {
+			try {
+				then = x.then;
+			} catch (e) {
+				reject(e);
+				return;
+			}
+			if (typeof then === 'function') {
+				var called;
+
+				var resolvePromise = function (y) {
+					if (called) { return; }
+					called = true;
+					resolve(promise, y, fulfil, reject);
+				};
+				var rejectPromise = function (r) {
+					if (called) { return; }
+					called = true;
+					reject(r);
+				};
+
+				try {
+					then.call(x, resolvePromise, rejectPromise);
+				} catch (e) {
+					if (!called) {
+						reject(e);
+						called = true;
+						return;
+					}
+				}
+			} else {
+				fulfil(x);
+			}
+		} else {
+			fulfil(x);
+		}
+	};
+
+}
+
+if (typeof window !== 'undefined' && !(window.requestAnimationFrame && window.cancelAnimationFrame)) {
+	var lastTime = 0;
+	window.requestAnimationFrame = function (callback) {
+		var currentTime = Date.now();
+		var timeToNextCall = Math.max(0, 16 - (currentTime - lastTime));
+		var id = window.setTimeout(function () { callback(currentTime + timeToNextCall); }, timeToNextCall);
+		lastTime = currentTime + timeToNextCall;
+		return id;
+	};
+	window.cancelAnimationFrame = function (id) {
+		clearTimeout(id);
+	};
+}
+
+var defaults = {
+	// render placement:
+	el:                     void 0,
+	append:                 false,
+	delegate:               true,
+
+	// template:
+	template:               null,
+
+	// parse:
+	delimiters:             [ '{{', '}}' ],
+	tripleDelimiters:       [ '{{{', '}}}' ],
+	staticDelimiters:       [ '[[', ']]' ],
+	staticTripleDelimiters: [ '[[[', ']]]' ],
+	csp:                    true,
+	interpolate:            false,
+	preserveWhitespace:     false,
+	sanitize:               false,
+	stripComments:          true,
+	contextLines:           0,
+	parserTransforms:       [],
+
+	// data & binding:
+	data:                   {},
+	computed:               {},
+	syncComputedChildren:   false,
+	resolveInstanceMembers: true,
+	warnAboutAmbiguity:     false,
+	adapt:                  [],
+	isolated:               true,
+	twoway:                 true,
+	lazy:                   false,
+
+	// transitions:
+	noIntro:                false,
+	noOutro:                false,
+	transitionsEnabled:     true,
+	complete:               void 0,
+	nestedTransitions:      true,
+
+	// css:
+	css:                    null,
+	noCssTransform:         false
+};
+
+// These are a subset of the easing equations found at
+// https://raw.github.com/danro/easing-js - license info
+// follows:
+
+// --------------------------------------------------
+// easing.js v0.5.4
+// Generic set of easing functions with AMD support
+// https://github.com/danro/easing-js
+// This code may be freely distributed under the MIT license
+// http://danro.mit-license.org/
+// --------------------------------------------------
+// All functions adapted from Thomas Fuchs & Jeremy Kahn
+// Easing Equations (c) 2003 Robert Penner, BSD license
+// https://raw.github.com/danro/easing-js/master/LICENSE
+// --------------------------------------------------
+
+// In that library, the functions named easeIn, easeOut, and
+// easeInOut below are named easeInCubic, easeOutCubic, and
+// (you guessed it) easeInOutCubic.
+//
+// You can add additional easing functions to this list, and they
+// will be globally available.
+
+
+var easing = {
+	linear: function linear ( pos ) { return pos; },
+	easeIn: function easeIn ( pos ) { return Math.pow( pos, 3 ); },
+	easeOut: function easeOut ( pos ) { return ( Math.pow( ( pos - 1 ), 3 ) + 1 ); },
+	easeInOut: function easeInOut ( pos ) {
+		if ( ( pos /= 0.5 ) < 1 ) { return ( 0.5 * Math.pow( pos, 3 ) ); }
+		return ( 0.5 * ( Math.pow( ( pos - 2 ), 3 ) + 2 ) );
+	}
+};
+
+var toString = Object.prototype.toString;
+
+
+function isEqual ( a, b ) {
+	if ( a === null && b === null ) {
+		return true;
+	}
+
+	if ( typeof a === 'object' || typeof b === 'object' ) {
+		return false;
+	}
+
+	return a === b;
+}
+
+// http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric
+function isNumeric ( thing ) {
+	return !isNaN( parseFloat( thing ) ) && isFinite( thing );
+}
+
+function isObject ( thing ) {
+	return ( thing && toString.call( thing ) === '[object Object]' );
+}
+
+function isObjectLike ( thing ) {
+	if ( !thing ) { return false; }
+	var type = typeof thing;
+	if ( type === 'object' || type === 'function' ) { return true; }
+}
+
+/* eslint no-console:"off" */
+var win = typeof window !== 'undefined' ? window : null;
+var doc = win ? document : null;
+var isClient = !!doc;
+var hasConsole = ( typeof console !== 'undefined' && typeof console.warn === 'function' && typeof console.warn.apply === 'function' );
+
+var svg = doc ?
+	doc.implementation.hasFeature( 'http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1' ) :
+	false;
+
+var vendors = [ 'o', 'ms', 'moz', 'webkit' ];
+
+var noop = function () {};
+
+/* global console */
+/* eslint no-console:"off" */
+
+var alreadyWarned = {};
+var log;
+var printWarning;
+var welcome;
+
+if ( hasConsole ) {
+	var welcomeIntro = [
+		"%cRactive.js %c0.9.3 %cin debug mode, %cmore...",
+		'color: rgb(114, 157, 52); font-weight: normal;',
+		'color: rgb(85, 85, 85); font-weight: normal;',
+		'color: rgb(85, 85, 85); font-weight: normal;',
+		'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;'
+	];
+	var welcomeMessage = "You're running Ractive 0.9.3 in debug mode - messages will be printed to the console to help you fix problems and optimise your application.\n\nTo disable debug mode, add this line at the start of your app:\n  Ractive.DEBUG = false;\n\nTo disable debug mode when your app is minified, add this snippet:\n  Ractive.DEBUG = /unminified/.test(function(){/*unminified*/});\n\nGet help and support:\n  http://docs.ractivejs.org\n  http://stackoverflow.com/questions/tagged/ractivejs\n  http://groups.google.com/forum/#!forum/ractive-js\n  http://twitter.com/ractivejs\n\nFound a bug? Raise an issue:\n  https://github.com/ractivejs/ractive/issues\n\n";
+
+	welcome = function () {
+		if ( Ractive.WELCOME_MESSAGE === false ) {
+			welcome = noop;
+			return;
+		}
+		var message = 'WELCOME_MESSAGE' in Ractive ? Ractive.WELCOME_MESSAGE : welcomeMessage;
+		var hasGroup = !!console.groupCollapsed;
+		if ( hasGroup ) { console.groupCollapsed.apply( console, welcomeIntro ); }
+		console.log( message );
+		if ( hasGroup ) {
+			console.groupEnd( welcomeIntro );
+		}
+
+		welcome = noop;
+	};
+
+	printWarning = function ( message, args ) {
+		welcome();
+
+		// extract information about the instance this message pertains to, if applicable
+		if ( typeof args[ args.length - 1 ] === 'object' ) {
+			var options = args.pop();
+			var ractive = options ? options.ractive : null;
+
+			if ( ractive ) {
+				// if this is an instance of a component that we know the name of, add
+				// it to the message
+				var name;
+				if ( ractive.component && ( name = ractive.component.name ) ) {
+					message = "<" + name + "> " + message;
+				}
+
+				var node;
+				if ( node = ( options.node || ( ractive.fragment && ractive.fragment.rendered && ractive.find( '*' ) ) ) ) {
+					args.push( node );
+				}
+			}
+		}
+
+		console.warn.apply( console, [ '%cRactive.js: %c' + message, 'color: rgb(114, 157, 52);', 'color: rgb(85, 85, 85);' ].concat( args ) );
+	};
+
+	log = function () {
+		console.log.apply( console, arguments );
+	};
+} else {
+	printWarning = log = welcome = noop;
+}
+
+function format ( message, args ) {
+	return message.replace( /%s/g, function () { return args.shift(); } );
+}
+
+function fatal ( message ) {
+	var args = [], len = arguments.length - 1;
+	while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
+
+	message = format( message, args );
+	throw new Error( message );
+}
+
+function logIfDebug () {
+	if ( Ractive.DEBUG ) {
+		log.apply( null, arguments );
+	}
+}
+
+function warn ( message ) {
+	var args = [], len = arguments.length - 1;
+	while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
+
+	message = format( message, args );
+	printWarning( message, args );
+}
+
+function warnOnce ( message ) {
+	var args = [], len = arguments.length - 1;
+	while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
+
+	message = format( message, args );
+
+	if ( alreadyWarned[ message ] ) {
+		return;
+	}
+
+	alreadyWarned[ message ] = true;
+	printWarning( message, args );
+}
+
+function warnIfDebug () {
+	if ( Ractive.DEBUG ) {
+		warn.apply( null, arguments );
+	}
+}
+
+function warnOnceIfDebug () {
+	if ( Ractive.DEBUG ) {
+		warnOnce.apply( null, arguments );
+	}
+}
+
+// Error messages that are used (or could be) in multiple places
+var badArguments = 'Bad arguments';
+var noRegistryFunctionReturn = 'A function was specified for "%s" %s, but no %s was returned';
+var missingPlugin = function ( name, type ) { return ("Missing \"" + name + "\" " + type + " plugin. You may need to download a plugin via http://docs.ractivejs.org/latest/plugins#" + type + "s"); };
+
+function findInViewHierarchy ( registryName, ractive, name ) {
+	var instance = findInstance( registryName, ractive, name );
+	return instance ? instance[ registryName ][ name ] : null;
+}
+
+function findInstance ( registryName, ractive, name ) {
+	while ( ractive ) {
+		if ( name in ractive[ registryName ] ) {
+			return ractive;
+		}
+
+		if ( ractive.isolated ) {
+			return null;
+		}
+
+		ractive = ractive.parent;
+	}
+}
+
+function interpolate ( from, to, ractive, type ) {
+	if ( from === to ) { return null; }
+
+	if ( type ) {
+		var interpol = findInViewHierarchy( 'interpolators', ractive, type );
+		if ( interpol ) { return interpol( from, to ) || null; }
+
+		fatal( missingPlugin( type, 'interpolator' ) );
+	}
+
+	return interpolators.number( from, to ) ||
+	       interpolators.array( from, to ) ||
+	       interpolators.object( from, to ) ||
+	       null;
+}
+
+function snap ( to ) {
+	return function () { return to; };
+}
+
+var interpolators = {
+	number: function number ( from, to ) {
+		if ( !isNumeric( from ) || !isNumeric( to ) ) {
+			return null;
+		}
+
+		from = +from;
+		to = +to;
+
+		var delta = to - from;
+
+		if ( !delta ) {
+			return function () { return from; };
+		}
+
+		return function ( t ) {
+			return from + ( t * delta );
+		};
+	},
+
+	array: function array ( from, to ) {
+		var len, i;
+
+		if ( !Array.isArray( from ) || !Array.isArray( to ) ) {
+			return null;
+		}
+
+		var intermediate = [];
+		var interpolators = [];
+
+		i = len = Math.min( from.length, to.length );
+		while ( i-- ) {
+			interpolators[i] = interpolate( from[i], to[i] );
+		}
+
+		// surplus values - don't interpolate, but don't exclude them either
+		for ( i=len; i<from.length; i+=1 ) {
+			intermediate[i] = from[i];
+		}
+
+		for ( i=len; i<to.length; i+=1 ) {
+			intermediate[i] = to[i];
+		}
+
+		return function ( t ) {
+			var i = len;
+
+			while ( i-- ) {
+				intermediate[i] = interpolators[i]( t );
+			}
+
+			return intermediate;
+		};
+	},
+
+	object: function object ( from, to ) {
+		if ( !isObject( from ) || !isObject( to ) ) {
+			return null;
+		}
+
+		var properties = [];
+		var intermediate = {};
+		var interpolators = {};
+
+		for ( var prop in from ) {
+			if ( from.hasOwnProperty( prop ) ) {
+				if ( to.hasOwnProperty( prop ) ) {
+					properties.push( prop );
+					interpolators[ prop ] = interpolate( from[ prop ], to[ prop ] ) || snap( to[ prop ] );
+				}
+
+				else {
+					intermediate[ prop ] = from[ prop ];
+				}
+			}
+		}
+
+		for ( var prop$1 in to ) {
+			if ( to.hasOwnProperty( prop$1 ) && !from.hasOwnProperty( prop$1 ) ) {
+				intermediate[ prop$1 ] = to[ prop$1 ];
+			}
+		}
+
+		var len = properties.length;
+
+		return function ( t ) {
+			var i = len;
+
+			while ( i-- ) {
+				var prop = properties[i];
+
+				intermediate[ prop ] = interpolators[ prop ]( t );
+			}
+
+			return intermediate;
+		};
+	}
+};
+
+function addToArray ( array, value ) {
+	var index = array.indexOf( value );
+
+	if ( index === -1 ) {
+		array.push( value );
+	}
+}
+
+function arrayContains ( array, value ) {
+	for ( var i = 0, c = array.length; i < c; i++ ) {
+		if ( array[i] == value ) {
+			return true;
+		}
+	}
+
+	return false;
+}
+
+function arrayContentsMatch ( a, b ) {
+	var i;
+
+	if ( !Array.isArray( a ) || !Array.isArray( b ) ) {
+		return false;
+	}
+
+	if ( a.length !== b.length ) {
+		return false;
+	}
+
+	i = a.length;
+	while ( i-- ) {
+		if ( a[i] !== b[i] ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+
+function ensureArray ( x ) {
+	if ( typeof x === 'string' ) {
+		return [ x ];
+	}
+
+	if ( x === undefined ) {
+		return [];
+	}
+
+	return x;
+}
+
+function lastItem ( array ) {
+	return array[ array.length - 1 ];
+}
+
+function removeFromArray ( array, member ) {
+	if ( !array ) {
+		return;
+	}
+
+	var index = array.indexOf( member );
+
+	if ( index !== -1 ) {
+		array.splice( index, 1 );
+	}
+}
+
+function combine () {
+	var arrays = [], len = arguments.length;
+	while ( len-- ) arrays[ len ] = arguments[ len ];
+
+	var res = arrays.concat.apply( [], arrays );
+	var i = res.length;
+	while ( i-- ) {
+		var idx = res.indexOf( res[i] );
+		if ( ~idx && idx < i ) { res.splice( i, 1 ); }
+	}
+
+	return res;
+}
+
+function toArray ( arrayLike ) {
+	var array = [];
+	var i = arrayLike.length;
+	while ( i-- ) {
+		array[i] = arrayLike[i];
+	}
+
+	return array;
+}
+
+function findMap ( array, fn ) {
+	var len = array.length;
+	for ( var i = 0; i < len; i++ ) {
+		var result = fn( array[i] );
+		if ( result ) { return result; }
+	}
+}
+
+var TransitionManager = function TransitionManager ( callback, parent ) {
+	this.callback = callback;
+	this.parent = parent;
+
+	this.intros = [];
+	this.outros = [];
+
+	this.children = [];
+	this.totalChildren = this.outroChildren = 0;
+
+	this.detachQueue = [];
+	this.outrosComplete = false;
+
+	if ( parent ) {
+		parent.addChild( this );
+	}
+};
+
+TransitionManager.prototype.add = function add ( transition ) {
+	var list = transition.isIntro ? this.intros : this.outros;
+	transition.starting = true;
+	list.push( transition );
+};
+
+TransitionManager.prototype.addChild = function addChild ( child ) {
+	this.children.push( child );
+
+	this.totalChildren += 1;
+	this.outroChildren += 1;
+};
+
+TransitionManager.prototype.decrementOutros = function decrementOutros () {
+	this.outroChildren -= 1;
+	check( this );
+};
+
+TransitionManager.prototype.decrementTotal = function decrementTotal () {
+	this.totalChildren -= 1;
+	check( this );
+};
+
+TransitionManager.prototype.detachNodes = function detachNodes () {
+	this.detachQueue.forEach( detach );
+	this.children.forEach( _detachNodes );
+	this.detachQueue = [];
+};
+
+TransitionManager.prototype.ready = function ready () {
+	if ( this.detachQueue.length ) { detachImmediate( this ); }
+};
+
+TransitionManager.prototype.remove = function remove ( transition ) {
+	var list = transition.isIntro ? this.intros : this.outros;
+	removeFromArray( list, transition );
+	check( this );
+};
+
+TransitionManager.prototype.start = function start () {
+	this.children.forEach( function (c) { return c.start(); } );
+	this.intros.concat( this.outros ).forEach( function (t) { return t.start(); } );
+	this.ready = true;
+	check( this );
+};
+
+function detach ( element ) {
+	element.detach();
+}
+
+function _detachNodes ( tm ) { // _ to avoid transpiler quirk
+	tm.detachNodes();
+}
+
+function check ( tm ) {
+	if ( !tm.ready || tm.outros.length || tm.outroChildren ) { return; }
+
+	// If all outros are complete, and we haven't already done this,
+	// we notify the parent if there is one, otherwise
+	// start detaching nodes
+	if ( !tm.outrosComplete ) {
+		tm.outrosComplete = true;
+
+		if ( tm.parent && !tm.parent.outrosComplete ) {
+			tm.parent.decrementOutros( tm );
+		} else {
+			tm.detachNodes();
+		}
+	}
+
+	// Once everything is done, we can notify parent transition
+	// manager and call the callback
+	if ( !tm.intros.length && !tm.totalChildren ) {
+		if ( typeof tm.callback === 'function' ) {
+			tm.callback();
+		}
+
+		if ( tm.parent && !tm.notifiedTotal ) {
+			tm.notifiedTotal = true;
+			tm.parent.decrementTotal();
+		}
+	}
+}
+
+// check through the detach queue to see if a node is up or downstream from a
+// transition and if not, go ahead and detach it
+function detachImmediate ( manager ) {
+	var queue = manager.detachQueue;
+	var outros = collectAllOutros( manager );
+
+	var i = queue.length;
+	var j = 0;
+	var node, trans;
+	start: while ( i-- ) {
+		node = queue[i].node;
+		j = outros.length;
+		while ( j-- ) {
+			trans = outros[j].element.node;
+			// check to see if the node is, contains, or is contained by the transitioning node
+			if ( trans === node || trans.contains( node ) || node.contains( trans ) ) { continue start; }
+		}
+
+		// no match, we can drop it
+		queue[i].detach();
+		queue.splice( i, 1 );
+	}
+}
+
+function collectAllOutros ( manager, _list ) {
+	var list = _list;
+
+	// if there's no list, we're starting at the root to build one
+	if ( !list ) {
+		list = [];
+		var parent = manager;
+		while ( parent.parent ) { parent = parent.parent; }
+		return collectAllOutros( parent, list );
+	} else {
+		// grab all outros from child managers
+		var i = manager.children.length;
+		while ( i-- ) {
+			list = collectAllOutros( manager.children[i], list );
+		}
+
+		// grab any from this manager if there are any
+		if ( manager.outros.length ) { list = list.concat( manager.outros ); }
+
+		return list;
+	}
+}
+
+var batch;
+
+var runloop = {
+	start: function start ( instance ) {
+		var fulfilPromise;
+		var promise = new Promise( function (f) { return ( fulfilPromise = f ); } );
+
+		batch = {
+			previousBatch: batch,
+			transitionManager: new TransitionManager( fulfilPromise, batch && batch.transitionManager ),
+			fragments: [],
+			tasks: [],
+			immediateObservers: [],
+			deferredObservers: [],
+			instance: instance,
+			promise: promise
+		};
+
+		return promise;
+	},
+
+	end: function end () {
+		flushChanges();
+
+		if ( !batch.previousBatch ) { batch.transitionManager.start(); }
+
+		batch = batch.previousBatch;
+	},
+
+	addFragment: function addFragment ( fragment ) {
+		addToArray( batch.fragments, fragment );
+	},
+
+	// TODO: come up with a better way to handle fragments that trigger their own update
+	addFragmentToRoot: function addFragmentToRoot ( fragment ) {
+		if ( !batch ) { return; }
+
+		var b = batch;
+		while ( b.previousBatch ) {
+			b = b.previousBatch;
+		}
+
+		addToArray( b.fragments, fragment );
+	},
+
+	addObserver: function addObserver ( observer, defer ) {
+		if ( !batch ) {
+			observer.dispatch();
+		} else {
+			addToArray( defer ? batch.deferredObservers : batch.immediateObservers, observer );
+		}
+	},
+
+	registerTransition: function registerTransition ( transition ) {
+		transition._manager = batch.transitionManager;
+		batch.transitionManager.add( transition );
+	},
+
+	// synchronise node detachments with transition ends
+	detachWhenReady: function detachWhenReady ( thing ) {
+		batch.transitionManager.detachQueue.push( thing );
+	},
+
+	scheduleTask: function scheduleTask ( task, postRender ) {
+		var _batch;
+
+		if ( !batch ) {
+			task();
+		} else {
+			_batch = batch;
+			while ( postRender && _batch.previousBatch ) {
+				// this can't happen until the DOM has been fully updated
+				// otherwise in some situations (with components inside elements)
+				// transitions and decorators will initialise prematurely
+				_batch = _batch.previousBatch;
+			}
+
+			_batch.tasks.push( task );
+		}
+	},
+
+	promise: function promise () {
+		if ( !batch ) { return Promise.resolve(); }
+
+		var target = batch;
+		while ( target.previousBatch ) {
+			target = target.previousBatch;
+		}
+
+		return target.promise || Promise.resolve();
+	}
+};
+
+function dispatch ( observer ) {
+	observer.dispatch();
+}
+
+function flushChanges () {
+	var which = batch.immediateObservers;
+	batch.immediateObservers = [];
+	which.forEach( dispatch );
+
+	// Now that changes have been fully propagated, we can update the DOM
+	// and complete other tasks
+	var i = batch.fragments.length;
+	var fragment;
+
+	which = batch.fragments;
+	batch.fragments = [];
+
+	while ( i-- ) {
+		fragment = which[i];
+		fragment.update();
+	}
+
+	batch.transitionManager.ready();
+
+	which = batch.deferredObservers;
+	batch.deferredObservers = [];
+	which.forEach( dispatch );
+
+	var tasks = batch.tasks;
+	batch.tasks = [];
+
+	for ( i = 0; i < tasks.length; i += 1 ) {
+		tasks[i]();
+	}
+
+	// If updating the view caused some model blowback - e.g. a triple
+	// containing <option> elements caused the binding on the <select>
+	// to update - then we start over
+	if ( batch.fragments.length || batch.immediateObservers.length || batch.deferredObservers.length || batch.tasks.length ) { return flushChanges(); }
+}
+
+var refPattern = /\[\s*(\*|[0-9]|[1-9][0-9]+)\s*\]/g;
+var splitPattern = /([^\\](?:\\\\)*)\./;
+var escapeKeyPattern = /\\|\./g;
+var unescapeKeyPattern = /((?:\\)+)\1|\\(\.)/g;
+
+function escapeKey ( key ) {
+	if ( typeof key === 'string' ) {
+		return key.replace( escapeKeyPattern, '\\$&' );
+	}
+
+	return key;
+}
+
+function normalise ( ref ) {
+	return ref ? ref.replace( refPattern, '.$1' ) : '';
+}
+
+function splitKeypath ( keypath ) {
+	var result = [];
+	var match;
+
+	keypath = normalise( keypath );
+
+	while ( match = splitPattern.exec( keypath ) ) {
+		var index = match.index + match[1].length;
+		result.push( keypath.substr( 0, index ) );
+		keypath = keypath.substr( index + 1 );
+	}
+
+	result.push( keypath );
+
+	return result;
+}
+
+function unescapeKey ( key ) {
+	if ( typeof key === 'string' ) {
+		return key.replace( unescapeKeyPattern, '$1$2' );
+	}
+
+	return key;
+}
+
+var stack = [];
+var captureGroup;
+
+function startCapturing () {
+	stack.push( captureGroup = [] );
+}
+
+function stopCapturing () {
+	var dependencies = stack.pop();
+	captureGroup = stack[ stack.length - 1 ];
+	return dependencies;
+}
+
+function capture ( model ) {
+	if ( captureGroup ) {
+		captureGroup.push( model );
+	}
+}
+
+var KeyModel = function KeyModel ( key, parent ) {
+	this.value = key;
+	this.isReadonly = this.isKey = true;
+	this.deps = [];
+	this.links = [];
+	this.parent = parent;
+};
+
+KeyModel.prototype.get = function get ( shouldCapture ) {
+	if ( shouldCapture ) { capture( this ); }
+	return unescapeKey( this.value );
+};
+
+KeyModel.prototype.getKeypath = function getKeypath () {
+	return unescapeKey( this.value );
+};
+
+KeyModel.prototype.rebind = function rebind ( next, previous ) {
+		var this$1 = this;
+
+	var i = this.deps.length;
+	while ( i-- ) { this$1.deps[i].rebind( next, previous, false ); }
+
+	i = this.links.length;
+	while ( i-- ) { this$1.links[i].relinking( next, false ); }
+};
+
+KeyModel.prototype.register = function register ( dependant ) {
+	this.deps.push( dependant );
+};
+
+KeyModel.prototype.registerLink = function registerLink ( link ) {
+	addToArray( this.links, link );
+};
+
+KeyModel.prototype.unregister = function unregister ( dependant ) {
+	removeFromArray( this.deps, dependant );
+};
+
+KeyModel.prototype.unregisterLink = function unregisterLink ( link ) {
+	removeFromArray( this.links, link );
+};
+
+KeyModel.prototype.reference = noop;
+KeyModel.prototype.unreference = noop;
+
+function bind               ( x ) { x.bind(); }
+function cancel             ( x ) { x.cancel(); }
+function destroyed          ( x ) { x.destroyed(); }
+function handleChange       ( x ) { x.handleChange(); }
+function mark               ( x ) { x.mark(); }
+function markForce          ( x ) { x.mark( true ); }
+function marked             ( x ) { x.marked(); }
+function markedAll          ( x ) { x.markedAll(); }
+function render             ( x ) { x.render(); }
+function shuffled           ( x ) { x.shuffled(); }
+function teardown           ( x ) { x.teardown(); }
+function unbind             ( x ) { x.unbind(); }
+function unrender           ( x ) { x.unrender(); }
+function unrenderAndDestroy ( x ) { x.unrender( true ); }
+function update             ( x ) { x.update(); }
+function toString$1           ( x ) { return x.toString(); }
+function toEscapedString    ( x ) { return x.toString( true ); }
+
+var KeypathModel = function KeypathModel ( parent, ractive ) {
+	this.parent = parent;
+	this.ractive = ractive;
+	this.value = ractive ? parent.getKeypath( ractive ) : parent.getKeypath();
+	this.deps = [];
+	this.children = {};
+	this.isReadonly = this.isKeypath = true;
+};
+
+KeypathModel.prototype.get = function get ( shouldCapture ) {
+	if ( shouldCapture ) { capture( this ); }
+	return this.value;
+};
+
+KeypathModel.prototype.getChild = function getChild ( ractive ) {
+	if ( !( ractive._guid in this.children ) ) {
+		var model = new KeypathModel( this.parent, ractive );
+		this.children[ ractive._guid ] = model;
+		model.owner = this;
+	}
+	return this.children[ ractive._guid ];
+};
+
+KeypathModel.prototype.getKeypath = function getKeypath () {
+	return this.value;
+};
+
+KeypathModel.prototype.handleChange = function handleChange$1 () {
+		var this$1 = this;
+
+	var keys = Object.keys( this.children );
+	var i = keys.length;
+	while ( i-- ) {
+		this$1.children[ keys[i] ].handleChange();
+	}
+
+	this.deps.forEach( handleChange );
+};
+
+KeypathModel.prototype.rebindChildren = function rebindChildren ( next ) {
+		var this$1 = this;
+
+	var keys = Object.keys( this.children );
+	var i = keys.length;
+	while ( i-- ) {
+		var child = this$1.children[keys[i]];
+		child.value = next.getKeypath( child.ractive );
+		child.handleChange();
+	}
+};
+
+KeypathModel.prototype.rebind = function rebind ( next, previous ) {
+		var this$1 = this;
+
+	var model = next ? next.getKeypathModel( this.ractive ) : undefined;
+
+	var keys = Object.keys( this.children );
+	var i = keys.length;
+	while ( i-- ) {
+		this$1.children[ keys[i] ].rebind( next, previous, false );
+	}
+
+	i = this.deps.length;
+	while ( i-- ) {
+		this$1.deps[i].rebind( model, this$1, false );
+	}
+};
+
+KeypathModel.prototype.register = function register ( dep ) {
+	this.deps.push( dep );
+};
+
+KeypathModel.prototype.removeChild = function removeChild ( model ) {
+	if ( model.ractive ) { delete this.children[ model.ractive._guid ]; }
+};
+
+KeypathModel.prototype.teardown = function teardown$$1 () {
+		var this$1 = this;
+
+	if ( this.owner ) { this.owner.removeChild( this ); }
+
+	var keys = Object.keys( this.children );
+	var i = keys.length;
+	while ( i-- ) {
+		this$1.children[ keys[i] ].teardown();
+	}
+};
+
+KeypathModel.prototype.unregister = function unregister ( dep ) {
+	removeFromArray( this.deps, dep );
+	if ( !this.deps.length ) { this.teardown(); }
+};
+
+KeypathModel.prototype.reference = noop;
+KeypathModel.prototype.unreference = noop;
+
+var fnBind = Function.prototype.bind;
+
+function bind$1 ( fn, context ) {
+	if ( !/this/.test( fn.toString() ) ) { return fn; }
+
+	var bound = fnBind.call( fn, context );
+	for ( var prop in fn ) { bound[ prop ] = fn[ prop ]; }
+
+	return bound;
+}
+
+var hasProp = Object.prototype.hasOwnProperty;
+
+var shuffleTasks = { early: [], mark: [] };
+var registerQueue = { early: [], mark: [] };
+
+var ModelBase = function ModelBase ( parent ) {
+	this.deps = [];
+
+	this.children = [];
+	this.childByKey = {};
+	this.links = [];
+
+	this.keyModels = {};
+
+	this.bindings = [];
+	this.patternObservers = [];
+
+	if ( parent ) {
+		this.parent = parent;
+		this.root = parent.root;
+	}
+};
+
+ModelBase.prototype.addShuffleTask = function addShuffleTask ( task, stage ) {
+	if ( stage === void 0 ) stage = 'early';
+ shuffleTasks[stage].push( task ); };
+ModelBase.prototype.addShuffleRegister = function addShuffleRegister ( item, stage ) {
+	if ( stage === void 0 ) stage = 'early';
+ registerQueue[stage].push({ model: this, item: item }); };
+
+ModelBase.prototype.findMatches = function findMatches ( keys ) {
+	var len = keys.length;
+
+	var existingMatches = [ this ];
+	var matches;
+	var i;
+
+	var loop = function (  ) {
+		var key = keys[i];
+
+		if ( key === '*' ) {
+			matches = [];
+			existingMatches.forEach( function (model) {
+				matches.push.apply( matches, model.getValueChildren( model.get() ) );
+			});
+		} else {
+			matches = existingMatches.map( function (model) { return model.joinKey( key ); } );
+		}
+
+		existingMatches = matches;
+	};
+
+		for ( i = 0; i < len; i += 1 ) loop(  );
+
+	return matches;
+};
+
+ModelBase.prototype.getKeyModel = function getKeyModel ( key, skip ) {
+	if ( key !== undefined && !skip ) { return this.parent.getKeyModel( key, true ); }
+
+	if ( !( key in this.keyModels ) ) { this.keyModels[ key ] = new KeyModel( escapeKey( key ), this ); }
+
+	return this.keyModels[ key ];
+};
+
+ModelBase.prototype.getKeypath = function getKeypath ( ractive ) {
+	if ( ractive !== this.ractive && this._link ) { return this._link.target.getKeypath( ractive ); }
+
+	if ( !this.keypath ) {
+		var parent = this.parent && this.parent.getKeypath( ractive );
+		this.keypath = parent ? ((this.parent.getKeypath( ractive )) + "." + (escapeKey( this.key ))) : escapeKey( this.key );
+	}
+
+	return this.keypath;
+};
+
+ModelBase.prototype.getValueChildren = function getValueChildren ( value ) {
+		var this$1 = this;
+
+	var children;
+	if ( Array.isArray( value ) ) {
+		children = [];
+		if ( 'length' in this && this.length !== value.length ) {
+			children.push( this.joinKey( 'length' ) );
+		}
+		value.forEach( function ( m, i ) {
+			children.push( this$1.joinKey( i ) );
+		});
+	}
+
+	else if ( isObject( value ) || typeof value === 'function' ) {
+		children = Object.keys( value ).map( function (key) { return this$1.joinKey( key ); } );
+	}
+
+	else if ( value != null ) {
+		return [];
+	}
+
+	return children;
+};
+
+ModelBase.prototype.getVirtual = function getVirtual ( shouldCapture ) {
+		var this$1 = this;
+
+	var value = this.get( shouldCapture, { virtual: false } );
+	if ( isObject( value ) ) {
+		var result = Array.isArray( value ) ? [] : {};
+
+		var keys = Object.keys( value );
+		var i = keys.length;
+		while ( i-- ) {
+			var child = this$1.childByKey[ keys[i] ];
+			if ( !child ) { result[ keys[i] ] = value[ keys[i] ]; }
+			else if ( child._link ) { result[ keys[i] ] = child._link.getVirtual(); }
+			else { result[ keys[i] ] = child.getVirtual(); }
+		}
+
+		i = this.children.length;
+		while ( i-- ) {
+			var child$1 = this$1.children[i];
+			if ( !( child$1.key in result ) && child$1._link ) {
+				result[ child$1.key ] = child$1._link.getVirtual();
+			}
+		}
+
+		return result;
+	} else { return value; }
+};
+
+ModelBase.prototype.has = function has ( key ) {
+	if ( this._link ) { return this._link.has( key ); }
+
+	var value = this.get();
+	if ( !value ) { return false; }
+
+	key = unescapeKey( key );
+	if ( hasProp.call( value, key ) ) { return true; }
+
+	// We climb up the constructor chain to find if one of them contains the key
+	var constructor = value.constructor;
+	while ( constructor !== Function && constructor !== Array && constructor !== Object ) {
+		if ( hasProp.call( constructor.prototype, key ) ) { return true; }
+		constructor = constructor.constructor;
+	}
+
+	return false;
+};
+
+ModelBase.prototype.joinAll = function joinAll ( keys, opts ) {
+	var model = this;
+	for ( var i = 0; i < keys.length; i += 1 ) {
+		if ( opts && opts.lastLink === false && i + 1 === keys.length && model.childByKey[keys[i]] && model.childByKey[keys[i]]._link ) { return model.childByKey[keys[i]]; }
+		model = model.joinKey( keys[i], opts );
+	}
+
+	return model;
+};
+
+ModelBase.prototype.notifyUpstream = function notifyUpstream ( startPath ) {
+		var this$1 = this;
+
+	var parent = this.parent;
+	var path = startPath || [ this.key ];
+	while ( parent ) {
+		if ( parent.patternObservers.length ) { parent.patternObservers.forEach( function (o) { return o.notify( path.slice() ); } ); }
+		path.unshift( parent.key );
+		parent.links.forEach( function (l) { return l.notifiedUpstream( path, this$1.root ); } );
+		parent.deps.forEach( handleChange );
+		parent = parent.parent;
+	}
+};
+
+ModelBase.prototype.rebind = function rebind ( next, previous, safe ) {
+		var this$1 = this;
+
+	// tell the deps to move to the new target
+	var i = this.deps.length;
+	while ( i-- ) {
+		if ( this$1.deps[i].rebind ) { this$1.deps[i].rebind( next, previous, safe ); }
+	}
+
+	i = this.links.length;
+	while ( i-- ) {
+		var link = this$1.links[i];
+		// only relink the root of the link tree
+		if ( link.owner._link ) { link.relinking( next, safe ); }
+	}
+
+	i = this.children.length;
+	while ( i-- ) {
+		var child = this$1.children[i];
+		child.rebind( next ? next.joinKey( child.key ) : undefined, child, safe );
+	}
+
+	if ( this.keypathModel ) { this.keypathModel.rebind( next, previous, false ); }
+
+	i = this.bindings.length;
+	while ( i-- ) {
+		this$1.bindings[i].rebind( next, previous, safe );
+	}
+};
+
+ModelBase.prototype.reference = function reference () {
+	'refs' in this ? this.refs++ : this.refs = 1;
+};
+
+ModelBase.prototype.register = function register ( dep ) {
+	this.deps.push( dep );
+};
+
+ModelBase.prototype.registerLink = function registerLink ( link ) {
+	addToArray( this.links, link );
+};
+
+ModelBase.prototype.registerPatternObserver = function registerPatternObserver ( observer ) {
+	this.patternObservers.push( observer );
+	this.register( observer );
+};
+
+ModelBase.prototype.registerTwowayBinding = function registerTwowayBinding ( binding ) {
+	this.bindings.push( binding );
+};
+
+ModelBase.prototype.unreference = function unreference () {
+	if ( 'refs' in this ) { this.refs--; }
+};
+
+ModelBase.prototype.unregister = function unregister ( dep ) {
+	removeFromArray( this.deps, dep );
+};
+
+ModelBase.prototype.unregisterLink = function unregisterLink ( link ) {
+	removeFromArray( this.links, link );
+};
+
+ModelBase.prototype.unregisterPatternObserver = function unregisterPatternObserver ( observer ) {
+	removeFromArray( this.patternObservers, observer );
+	this.unregister( observer );
+};
+
+ModelBase.prototype.unregisterTwowayBinding = function unregisterTwowayBinding ( binding ) {
+	removeFromArray( this.bindings, binding );
+};
+
+ModelBase.prototype.updateFromBindings = function updateFromBindings$1 ( cascade ) {
+		var this$1 = this;
+
+	var i = this.bindings.length;
+	while ( i-- ) {
+		var value = this$1.bindings[i].getValue();
+		if ( value !== this$1.value ) { this$1.set( value ); }
+	}
+
+	// check for one-way bindings if there are no two-ways
+	if ( !this.bindings.length ) {
+		var oneway = findBoundValue( this.deps );
+		if ( oneway && oneway.value !== this.value ) { this.set( oneway.value ); }
+	}
+
+	if ( cascade ) {
+		this.children.forEach( updateFromBindings );
+		this.links.forEach( updateFromBindings );
+		if ( this._link ) { this._link.updateFromBindings( cascade ); }
+	}
+};
+
+// TODO: this may be better handled by overreiding `get` on models with a parent that isRoot
+function maybeBind ( model, value, shouldBind ) {
+	if ( shouldBind && typeof value === 'function' && model.parent && model.parent.isRoot ) {
+		if ( !model.boundValue ) {
+			model.boundValue = bind$1( value._r_unbound || value, model.parent.ractive );
+		}
+
+		return model.boundValue;
+	}
+
+	return value;
+}
+
+function updateFromBindings ( model ) {
+	model.updateFromBindings( true );
+}
+
+function findBoundValue( list ) {
+	var i = list.length;
+	while ( i-- ) {
+		if ( list[i].bound ) {
+			var owner = list[i].owner;
+			if ( owner ) {
+				var value = owner.name === 'checked' ?
+					owner.node.checked :
+					owner.node.value;
+				return { value: value };
+			}
+		}
+	}
+}
+
+function fireShuffleTasks ( stage ) {
+	if ( !stage ) {
+		fireShuffleTasks( 'early' );
+		fireShuffleTasks( 'mark' );
+	} else {
+		var tasks = shuffleTasks[stage];
+		shuffleTasks[stage] = [];
+		var i = tasks.length;
+		while ( i-- ) { tasks[i](); }
+
+		var register = registerQueue[stage];
+		registerQueue[stage] = [];
+		i = register.length;
+		while ( i-- ) { register[i].model.register( register[i].item ); }
+	}
+}
+
+function shuffle ( model, newIndices, link, unsafe ) {
+	model.shuffling = true;
+
+	var i = newIndices.length;
+	while ( i-- ) {
+		var idx = newIndices[ i ];
+		// nothing is actually changing, so move in the index and roll on
+		if ( i === idx ) {
+			continue;
+		}
+
+		// rebind the children on i to idx
+		if ( i in model.childByKey ) { model.childByKey[ i ].rebind( !~idx ? undefined : model.joinKey( idx ), model.childByKey[ i ], !unsafe ); }
+
+		if ( !~idx && model.keyModels[ i ] ) {
+			model.keyModels[i].rebind( undefined, model.keyModels[i], false );
+		} else if ( ~idx && model.keyModels[ i ] ) {
+			if ( !model.keyModels[ idx ] ) { model.childByKey[ idx ].getKeyModel( idx ); }
+			model.keyModels[i].rebind( model.keyModels[ idx ], model.keyModels[i], false );
+		}
+	}
+
+	var upstream = model.source().length !== model.source().value.length;
+
+	model.links.forEach( function (l) { return l.shuffle( newIndices ); } );
+	if ( !link ) { fireShuffleTasks( 'early' ); }
+
+	i = model.deps.length;
+	while ( i-- ) {
+		if ( model.deps[i].shuffle ) { model.deps[i].shuffle( newIndices ); }
+	}
+
+	model[ link ? 'marked' : 'mark' ]();
+	if ( !link ) { fireShuffleTasks( 'mark' ); }
+
+	if ( upstream ) { model.notifyUpstream(); }
+
+	model.shuffling = false;
+}
+
+KeyModel.prototype.addShuffleTask = ModelBase.prototype.addShuffleTask;
+KeyModel.prototype.addShuffleRegister = ModelBase.prototype.addShuffleRegister;
+KeypathModel.prototype.addShuffleTask = ModelBase.prototype.addShuffleTask;
+KeypathModel.prototype.addShuffleRegister = ModelBase.prototype.addShuffleRegister;
+
+// this is the dry method of checking to see if a rebind applies to
+// a particular keypath because in some cases, a dep may be bound
+// directly to a particular keypath e.g. foo.bars.0.baz and need
+// to avoid getting kicked to foo.bars.1.baz if foo.bars is unshifted
+function rebindMatch ( template, next, previous, fragment ) {
+	var keypath = template.r || template;
+
+	// no valid keypath, go with next
+	if ( !keypath || typeof keypath !== 'string' ) { return next; }
+
+	// completely contextual ref, go with next
+	if ( keypath === '.' || keypath[0] === '@' || ( next || previous ).isKey || ( next || previous ).isKeypath ) { return next; }
+
+	var parts = keypath.split( '/' );
+	var keys = splitKeypath( parts[ parts.length - 1 ] );
+	var last = keys[ keys.length - 1 ];
+
+	// check the keypath against the model keypath to see if it matches
+	var model = next || previous;
+
+	// check to see if this was an alias
+	if ( model && keys.length === 1 && last !== model.key && fragment ) {
+		keys = findAlias( last, fragment ) || keys;
+	}
+
+	var i = keys.length;
+	var match = true;
+	var shuffling = false;
+
+	while ( model && i-- ) {
+		if ( model.shuffling ) { shuffling = true; }
+		// non-strict comparison to account for indices in keypaths
+		if ( keys[i] != model.key ) { match = false; }
+		model = model.parent;
+	}
+
+	// next is undefined, but keypath is shuffling and previous matches
+	if ( !next && match && shuffling ) { return previous; }
+	// next is defined, but doesn't match the keypath
+	else if ( next && !match && shuffling ) { return previous; }
+	else { return next; }
+}
+
+function findAlias ( name, fragment ) {
+	while ( fragment ) {
+		var z = fragment.aliases;
+		if ( z && z[ name ] ) {
+			var aliases = ( fragment.owner.iterations ? fragment.owner : fragment ).owner.template.z;
+			for ( var i = 0; i < aliases.length; i++ ) {
+				if ( aliases[i].n === name ) {
+					var alias = aliases[i].x;
+					if ( !alias.r ) { return false; }
+					var parts = alias.r.split( '/' );
+					return splitKeypath( parts[ parts.length - 1 ] );
+				}
+			}
+			return;
+		}
+
+		fragment = fragment.componentParent || fragment.parent;
+	}
+}
+
+// temporary placeholder target for detached implicit links
+var Missing = {
+	key: '@missing',
+	animate: noop,
+	applyValue: noop,
+	get: noop,
+	getKeypath: function getKeypath () { return this.key; },
+	joinAll: function joinAll () { return this; },
+	joinKey: function joinKey () { return this; },
+	mark: noop,
+	registerLink: noop,
+	shufle: noop,
+	set: noop,
+	unregisterLink: noop
+};
+Missing.parent = Missing;
+
+var LinkModel = (function (ModelBase$$1) {
+	function LinkModel ( parent, owner, target, key ) {
+		ModelBase$$1.call( this, parent );
+
+		this.owner = owner;
+		this.target = target;
+		this.key = key === undefined ? owner.key : key;
+		if ( owner.isLink ) { this.sourcePath = (owner.sourcePath) + "." + (this.key); }
+
+		target.registerLink( this );
+
+		if ( parent ) { this.isReadonly = parent.isReadonly; }
+
+		this.isLink = true;
+	}
+
+	if ( ModelBase$$1 ) LinkModel.__proto__ = ModelBase$$1;
+	LinkModel.prototype = Object.create( ModelBase$$1 && ModelBase$$1.prototype );
+	LinkModel.prototype.constructor = LinkModel;
+
+	LinkModel.prototype.animate = function animate ( from, to, options, interpolator ) {
+		return this.target.animate( from, to, options, interpolator );
+	};
+
+	LinkModel.prototype.applyValue = function applyValue ( value ) {
+		if ( this.boundValue ) { this.boundValue = null; }
+		this.target.applyValue( value );
+	};
+
+	LinkModel.prototype.attach = function attach ( fragment ) {
+		var model = resolveReference( fragment, this.key );
+		if ( model ) {
+			this.relinking( model, false );
+		} else { // if there is no link available, move everything here to real models
+			this.owner.unlink();
+		}
+	};
+
+	LinkModel.prototype.detach = function detach () {
+		this.relinking( Missing, false );
+	};
+
+	LinkModel.prototype.get = function get ( shouldCapture, opts ) {
+		if ( opts === void 0 ) opts = {};
+
+		if ( shouldCapture ) {
+			capture( this );
+
+			// may need to tell the target to unwrap
+			opts.unwrap = true;
+		}
+
+		var bind$$1 = 'shouldBind' in opts ? opts.shouldBind : true;
+		opts.shouldBind = this.mapping && this.target.parent.isRoot;
+
+		return maybeBind( this, this.target.get( false, opts ), bind$$1 );
+	};
+
+	LinkModel.prototype.getKeypath = function getKeypath ( ractive ) {
+		if ( ractive && ractive !== this.root.ractive ) { return this.target.getKeypath( ractive ); }
+
+		return ModelBase$$1.prototype.getKeypath.call( this, ractive );
+	};
+
+	LinkModel.prototype.getKeypathModel = function getKeypathModel ( ractive ) {
+		if ( !this.keypathModel ) { this.keypathModel = new KeypathModel( this ); }
+		if ( ractive && ractive !== this.root.ractive ) { return this.keypathModel.getChild( ractive ); }
+		return this.keypathModel;
+	};
+
+	LinkModel.prototype.handleChange = function handleChange$1 () {
+		this.deps.forEach( handleChange );
+		this.links.forEach( handleChange );
+		this.notifyUpstream();
+	};
+
+	LinkModel.prototype.isDetached = function isDetached () { return this.virtual && this.target === Missing; };
+
+	LinkModel.prototype.joinKey = function joinKey ( key ) {
+		// TODO: handle nested links
+		if ( key === undefined || key === '' ) { return this; }
+
+		if ( !this.childByKey.hasOwnProperty( key ) ) {
+			var child = new LinkModel( this, this, this.target.joinKey( key ), key );
+			this.children.push( child );
+			this.childByKey[ key ] = child;
+		}
+
+		return this.childByKey[ key ];
+	};
+
+	LinkModel.prototype.mark = function mark$$1 ( force ) {
+		this.target.mark( force );
+	};
+
+	LinkModel.prototype.marked = function marked$1 () {
+		if ( this.boundValue ) { this.boundValue = null; }
+
+		this.links.forEach( marked );
+
+		this.deps.forEach( handleChange );
+	};
+
+	LinkModel.prototype.markedAll = function markedAll$1 () {
+		this.children.forEach( markedAll );
+		this.marked();
+	};
+
+	LinkModel.prototype.notifiedUpstream = function notifiedUpstream ( startPath, root ) {
+		var this$1 = this;
+
+		this.links.forEach( function (l) { return l.notifiedUpstream( startPath, this$1.root ); } );
+		this.deps.forEach( handleChange );
+		if ( startPath && this.rootLink && this.root !== root ) {
+			var path = startPath.slice( 1 );
+			path.unshift( this.key );
+			this.notifyUpstream( path );
+		}
+	};
+
+	LinkModel.prototype.relinked = function relinked () {
+		this.target.registerLink( this );
+		this.children.forEach( function (c) { return c.relinked(); } );
+	};
+
+	LinkModel.prototype.relinking = function relinking ( target, safe ) {
+		var this$1 = this;
+
+		if ( this.rootLink && this.sourcePath ) { target = rebindMatch( this.sourcePath, target, this.target ); }
+		if ( !target || this.target === target ) { return; }
+
+		this.target.unregisterLink( this );
+		if ( this.keypathModel ) { this.keypathModel.rebindChildren( target ); }
+
+		this.target = target;
+		this.children.forEach( function (c) {
+			c.relinking( target.joinKey( c.key ), safe );
+		});
+
+		if ( this.rootLink ) { this.addShuffleTask( function () {
+			this$1.relinked();
+			if ( !safe ) {
+				this$1.markedAll();
+				this$1.notifyUpstream();
+			}
+		}); }
+	};
+
+	LinkModel.prototype.set = function set ( value ) {
+		if ( this.boundValue ) { this.boundValue = null; }
+		this.target.set( value );
+	};
+
+	LinkModel.prototype.shuffle = function shuffle$1 ( newIndices ) {
+		// watch for extra shuffles caused by a shuffle in a downstream link
+		if ( this.shuffling ) { return; }
+
+		// let the real model handle firing off shuffles
+		if ( !this.target.shuffling ) {
+			this.target.shuffle( newIndices );
+		} else {
+			shuffle( this, newIndices, true );
+		}
+
+	};
+
+	LinkModel.prototype.source = function source () {
+		if ( this.target.source ) { return this.target.source(); }
+		else { return this.target; }
+	};
+
+	LinkModel.prototype.teardown = function teardown$1 () {
+		if ( this._link ) { this._link.teardown(); }
+		this.target.unregisterLink( this );
+		this.children.forEach( teardown );
+	};
+
+	return LinkModel;
+}(ModelBase));
+
+ModelBase.prototype.link = function link ( model, keypath, options ) {
+	var lnk = this._link || new LinkModel( this.parent, this, model, this.key );
+	lnk.implicit = options && options.implicit;
+	lnk.mapping = options && options.mapping;
+	lnk.sourcePath = keypath;
+	lnk.rootLink = true;
+	if ( this._link ) { this._link.relinking( model, false ); }
+	this.rebind( lnk, this, false );
+	fireShuffleTasks();
+
+	this._link = lnk;
+	lnk.markedAll();
+
+	this.notifyUpstream();
+	return lnk;
+};
+
+ModelBase.prototype.unlink = function unlink () {
+	if ( this._link ) {
+		var ln = this._link;
+		this._link = undefined;
+		ln.rebind( this, ln, false );
+		fireShuffleTasks();
+		ln.teardown();
+		this.notifyUpstream();
+	}
+};
+
+// TODO what happens if a transition is aborted?
+
+var tickers = [];
+var running = false;
+
+function tick () {
+	runloop.start();
+
+	var now = performance.now();
+
+	var i;
+	var ticker;
+
+	for ( i = 0; i < tickers.length; i += 1 ) {
+		ticker = tickers[i];
+
+		if ( !ticker.tick( now ) ) {
+			// ticker is complete, remove it from the stack, and decrement i so we don't miss one
+			tickers.splice( i--, 1 );
+		}
+	}
+
+	runloop.end();
+
+	if ( tickers.length ) {
+		requestAnimationFrame( tick );
+	} else {
+		running = false;
+	}
+}
+
+var Ticker = function Ticker ( options ) {
+	this.duration = options.duration;
+	this.step = options.step;
+	this.complete = options.complete;
+	this.easing = options.easing;
+
+	this.start = performance.now();
+	this.end = this.start + this.duration;
+
+	this.running = true;
+
+	tickers.push( this );
+	if ( !running ) { requestAnimationFrame( tick ); }
+};
+
+Ticker.prototype.tick = function tick ( now ) {
+	if ( !this.running ) { return false; }
+
+	if ( now > this.end ) {
+		if ( this.step ) { this.step( 1 ); }
+		if ( this.complete ) { this.complete( 1 ); }
+
+		return false;
+	}
+
+	var elapsed = now - this.start;
+	var eased = this.easing( elapsed / this.duration );
+
+	if ( this.step ) { this.step( eased ); }
+
+	return true;
+};
+
+Ticker.prototype.stop = function stop () {
+	if ( this.abort ) { this.abort(); }
+	this.running = false;
+};
+
+var prefixers = {};
+
+// TODO this is legacy. sooner we can replace the old adaptor API the better
+function prefixKeypath ( obj, prefix ) {
+	var prefixed = {};
+
+	if ( !prefix ) {
+		return obj;
+	}
+
+	prefix += '.';
+
+	for ( var key in obj ) {
+		if ( obj.hasOwnProperty( key ) ) {
+			prefixed[ prefix + key ] = obj[ key ];
+		}
+	}
+
+	return prefixed;
+}
+
+function getPrefixer ( rootKeypath ) {
+	var rootDot;
+
+	if ( !prefixers[ rootKeypath ] ) {
+		rootDot = rootKeypath ? rootKeypath + '.' : '';
+
+		prefixers[ rootKeypath ] = function ( relativeKeypath, value ) {
+			var obj;
+
+			if ( typeof relativeKeypath === 'string' ) {
+				obj = {};
+				obj[ rootDot + relativeKeypath ] = value;
+				return obj;
+			}
+
+			if ( typeof relativeKeypath === 'object' ) {
+				// 'relativeKeypath' is in fact a hash, not a keypath
+				return rootDot ? prefixKeypath( relativeKeypath, rootKeypath ) : relativeKeypath;
+			}
+		};
+	}
+
+	return prefixers[ rootKeypath ];
+}
+
+var Model = (function (ModelBase$$1) {
+	function Model ( parent, key ) {
+		ModelBase$$1.call( this, parent );
+
+		this.ticker = null;
+
+		if ( parent ) {
+			this.key = unescapeKey( key );
+			this.isReadonly = parent.isReadonly;
+
+			if ( parent.value ) {
+				this.value = parent.value[ this.key ];
+				if ( Array.isArray( this.value ) ) { this.length = this.value.length; }
+				this.adapt();
+			}
+		}
+	}
+
+	if ( ModelBase$$1 ) Model.__proto__ = ModelBase$$1;
+	Model.prototype = Object.create( ModelBase$$1 && ModelBase$$1.prototype );
+	Model.prototype.constructor = Model;
+
+	Model.prototype.adapt = function adapt () {
+		var this$1 = this;
+
+		var adaptors = this.root.adaptors;
+		var len = adaptors.length;
+
+		this.rewrap = false;
+
+		// Exit early if no adaptors
+		if ( len === 0 ) { return; }
+
+		var value = this.wrapper ? ( 'newWrapperValue' in this ? this.newWrapperValue : this.wrapperValue ) : this.value;
+
+		// TODO remove this legacy nonsense
+		var ractive = this.root.ractive;
+		var keypath = this.getKeypath();
+
+		// tear previous adaptor down if present
+		if ( this.wrapper ) {
+			var shouldTeardown = this.wrapperValue === value ? false : !this.wrapper.reset || this.wrapper.reset( value ) === false;
+
+			if ( shouldTeardown ) {
+				this.wrapper.teardown();
+				this.wrapper = null;
+
+				// don't branch for undefined values
+				if ( this.value !== undefined ) {
+					var parentValue = this.parent.value || this.parent.createBranch( this.key );
+					if ( parentValue[ this.key ] !== value ) { parentValue[ this.key ] = value; }
+				}
+			} else {
+				delete this.newWrapperValue;
+				this.wrapperValue = value;
+				this.value = this.wrapper.get();
+				return;
+			}
+		}
+
+		var i;
+
+		for ( i = 0; i < len; i += 1 ) {
+			var adaptor = adaptors[i];
+			if ( adaptor.filter( value, keypath, ractive ) ) {
+				this$1.wrapper = adaptor.wrap( ractive, value, keypath, getPrefixer( keypath ) );
+				this$1.wrapperValue = value;
+				this$1.wrapper.__model = this$1; // massive temporary hack to enable array adaptor
+
+				this$1.value = this$1.wrapper.get();
+
+				break;
+			}
+		}
+	};
+
+	Model.prototype.animate = function animate ( from, to, options, interpolator ) {
+		var this$1 = this;
+
+		if ( this.ticker ) { this.ticker.stop(); }
+
+		var fulfilPromise;
+		var promise = new Promise( function (fulfil) { return fulfilPromise = fulfil; } );
+
+		this.ticker = new Ticker({
+			duration: options.duration,
+			easing: options.easing,
+			step: function (t) {
+				var value = interpolator( t );
+				this$1.applyValue( value );
+				if ( options.step ) { options.step( t, value ); }
+			},
+			complete: function () {
+				this$1.applyValue( to );
+				if ( options.complete ) { options.complete( to ); }
+
+				this$1.ticker = null;
+				fulfilPromise( to );
+			}
+		});
+
+		promise.stop = this.ticker.stop;
+		return promise;
+	};
+
+	Model.prototype.applyValue = function applyValue ( value, notify ) {
+		if ( notify === void 0 ) notify = true;
+
+		if ( isEqual( value, this.value ) ) { return; }
+		if ( this.boundValue ) { this.boundValue = null; }
+
+		if ( this.parent.wrapper && this.parent.wrapper.set ) {
+			this.parent.wrapper.set( this.key, value );
+			this.parent.value = this.parent.wrapper.get();
+
+			this.value = this.parent.value[ this.key ];
+			if ( this.wrapper ) { this.newWrapperValue = this.value; }
+			this.adapt();
+		} else if ( this.wrapper ) {
+			this.newWrapperValue = value;
+			this.adapt();
+		} else {
+			var parentValue = this.parent.value || this.parent.createBranch( this.key );
+			if ( isObjectLike( parentValue ) ) {
+				parentValue[ this.key ] = value;
+			} else {
+				warnIfDebug( ("Attempted to set a property of a non-object '" + (this.getKeypath()) + "'") );
+				return;
+			}
+
+			this.value = value;
+			this.adapt();
+		}
+
+		// keep track of array stuff
+		if ( Array.isArray( value ) ) {
+			this.length = value.length;
+			this.isArray = true;
+		} else {
+			this.isArray = false;
+		}
+
+		// notify dependants
+		this.links.forEach( handleChange );
+		this.children.forEach( mark );
+		this.deps.forEach( handleChange );
+
+		if ( notify ) { this.notifyUpstream(); }
+
+		if ( this.parent.isArray ) {
+			if ( this.key === 'length' ) { this.parent.length = value; }
+			else { this.parent.joinKey( 'length' ).mark(); }
+		}
+	};
+
+	Model.prototype.createBranch = function createBranch ( key ) {
+		var branch = isNumeric( key ) ? [] : {};
+		this.applyValue( branch, false );
+
+		return branch;
+	};
+
+	Model.prototype.get = function get ( shouldCapture, opts ) {
+		if ( this._link ) { return this._link.get( shouldCapture, opts ); }
+		if ( shouldCapture ) { capture( this ); }
+		// if capturing, this value needs to be unwrapped because it's for external use
+		if ( opts && opts.virtual ) { return this.getVirtual( false ); }
+		return maybeBind( this, ( ( opts && 'unwrap' in opts ) ? opts.unwrap !== false : shouldCapture ) && this.wrapper ? this.wrapperValue : this.value, !opts || opts.shouldBind !== false );
+	};
+
+	Model.prototype.getKeypathModel = function getKeypathModel () {
+		if ( !this.keypathModel ) { this.keypathModel = new KeypathModel( this ); }
+		return this.keypathModel;
+	};
+
+	Model.prototype.joinKey = function joinKey ( key, opts ) {
+		if ( this._link ) {
+			if ( opts && opts.lastLink !== false && ( key === undefined || key === '' ) ) { return this; }
+			return this._link.joinKey( key );
+		}
+
+		if ( key === undefined || key === '' ) { return this; }
+
+
+		if ( !this.childByKey.hasOwnProperty( key ) ) {
+			var child = new Model( this, key );
+			this.children.push( child );
+			this.childByKey[ key ] = child;
+		}
+
+		if ( this.childByKey[ key ]._link && ( !opts || opts.lastLink !== false ) ) { return this.childByKey[ key ]._link; }
+		return this.childByKey[ key ];
+	};
+
+	Model.prototype.mark = function mark$1 ( force ) {
+		if ( this._link ) { return this._link.mark( force ); }
+
+		var old = this.value;
+		var value = this.retrieve();
+
+		if ( force || !isEqual( value, old ) ) {
+			this.value = value;
+			if ( this.boundValue ) { this.boundValue = null; }
+
+			// make sure the wrapper stays in sync
+			if ( old !== value || this.rewrap ) {
+				if ( this.wrapper ) { this.newWrapperValue = value; }
+				this.adapt();
+			}
+
+			// keep track of array stuff
+			if ( Array.isArray( value ) ) {
+				this.length = value.length;
+				this.isArray = true;
+			} else {
+				this.isArray = false;
+			}
+
+			this.children.forEach( force ? markForce : mark );
+			this.links.forEach( marked );
+
+			this.deps.forEach( handleChange );
+		}
+	};
+
+	Model.prototype.merge = function merge ( array, comparator ) {
+		var oldArray = this.value;
+		var newArray = array;
+		if ( oldArray === newArray ) { oldArray = recreateArray( this ); }
+		if ( comparator ) {
+			oldArray = oldArray.map( comparator );
+			newArray = newArray.map( comparator );
+		}
+
+		var oldLength = oldArray.length;
+
+		var usedIndices = {};
+		var firstUnusedIndex = 0;
+
+		var newIndices = oldArray.map( function (item) {
+			var index;
+			var start = firstUnusedIndex;
+
+			do {
+				index = newArray.indexOf( item, start );
+
+				if ( index === -1 ) {
+					return -1;
+				}
+
+				start = index + 1;
+			} while ( ( usedIndices[ index ] === true ) && start < oldLength );
+
+			// keep track of the first unused index, so we don't search
+			// the whole of newArray for each item in oldArray unnecessarily
+			if ( index === firstUnusedIndex ) {
+				firstUnusedIndex += 1;
+			}
+			// allow next instance of next "equal" to be found item
+			usedIndices[ index ] = true;
+			return index;
+		});
+
+		this.parent.value[ this.key ] = array;
+		this.shuffle( newIndices, true );
+	};
+
+	Model.prototype.retrieve = function retrieve () {
+		return this.parent.value ? this.parent.value[ this.key ] : undefined;
+	};
+
+	Model.prototype.set = function set ( value ) {
+		if ( this.ticker ) { this.ticker.stop(); }
+		this.applyValue( value );
+	};
+
+	Model.prototype.shuffle = function shuffle$1 ( newIndices, unsafe ) {
+		shuffle( this, newIndices, false, unsafe );
+	};
+
+	Model.prototype.source = function source () { return this; };
+
+	Model.prototype.teardown = function teardown$1 () {
+		if ( this._link ) { this._link.teardown(); }
+		this.children.forEach( teardown );
+		if ( this.wrapper ) { this.wrapper.teardown(); }
+		if ( this.keypathModel ) { this.keypathModel.teardown(); }
+	};
+
+	return Model;
+}(ModelBase));
+
+function recreateArray( model ) {
+	var array = [];
+
+	for ( var i = 0; i < model.length; i++ ) {
+		array[ i ] = (model.childByKey[i] || {}).value;
+	}
+
+	return array;
+}
+
+/* global global */
+var data = {};
+
+var SharedModel = (function (Model$$1) {
+	function SharedModel ( value, name ) {
+		Model$$1.call( this, null, ("@" + name) );
+		this.key = "@" + name;
+		this.value = value;
+		this.isRoot = true;
+		this.root = this;
+		this.adaptors = [];
+	}
+
+	if ( Model$$1 ) SharedModel.__proto__ = Model$$1;
+	SharedModel.prototype = Object.create( Model$$1 && Model$$1.prototype );
+	SharedModel.prototype.constructor = SharedModel;
+
+	SharedModel.prototype.getKeypath = function getKeypath () {
+		return this.key;
+	};
+
+	return SharedModel;
+}(Model));
+
+var SharedModel$1 = new SharedModel( data, 'shared' );
+
+var GlobalModel = new SharedModel( typeof global !== 'undefined' ? global : window, 'global' );
+
+function resolveReference ( fragment, ref ) {
+	var initialFragment = fragment;
+	// current context ref
+	if ( ref === '.' ) { return fragment.findContext(); }
+
+	// ancestor references
+	if ( ref[0] === '~' ) { return fragment.ractive.viewmodel.joinAll( splitKeypath( ref.slice( 2 ) ) ); }
+
+	// scoped references
+	if ( ref[0] === '.' || ref[0] === '^' ) {
+		var frag = fragment;
+		var parts = ref.split( '/' );
+		var explicitContext = parts[0] === '^^';
+		var context$1 = explicitContext ? null : fragment.findContext();
+
+		// account for the first context hop
+		if ( explicitContext ) { parts.unshift( '^^' ); }
+
+		// walk up the context chain
+		while ( parts[0] === '^^' ) {
+			parts.shift();
+			context$1 = null;
+			while ( frag && !context$1 ) {
+				context$1 = frag.context;
+				frag = frag.parent.component ? frag.parent.component.parentFragment : frag.parent;
+			}
+		}
+
+		if ( !context$1 && explicitContext ) {
+			throw new Error( ("Invalid context parent reference ('" + ref + "'). There is not context at that level.") );
+		}
+
+		// walk up the context path
+		while ( parts[0] === '.' || parts[0] === '..' ) {
+			var part = parts.shift();
+
+			if ( part === '..' ) {
+				context$1 = context$1.parent;
+			}
+		}
+
+		ref = parts.join( '/' );
+
+		// special case - `{{.foo}}` means the same as `{{./foo}}`
+		if ( ref[0] === '.' ) { ref = ref.slice( 1 ); }
+		return context$1.joinAll( splitKeypath( ref ) );
+	}
+
+	var keys = splitKeypath( ref );
+	if ( !keys.length ) { return; }
+	var base = keys.shift();
+
+	// special refs
+	if ( base[0] === '@' ) {
+		// shorthand from outside the template
+		// @this referring to local ractive instance
+		if ( base === '@this' || base === '@' ) {
+			return fragment.ractive.viewmodel.getRactiveModel().joinAll( keys );
+		}
+
+		// @index or @key referring to the nearest repeating index or key
+		else if ( base === '@index' || base === '@key' ) {
+			if ( keys.length ) { badReference( base ); }
+			var repeater = fragment.findRepeatingFragment();
+			// make sure the found fragment is actually an iteration
+			if ( !repeater.isIteration ) { return; }
+			return repeater.context && repeater.context.getKeyModel( repeater[ ref[1] === 'i' ? 'index' : 'key' ] );
+		}
+
+		// @global referring to window or global
+		else if ( base === '@global' ) {
+			return GlobalModel.joinAll( keys );
+		}
+
+		// @global referring to window or global
+		else if ( base === '@shared' ) {
+			return SharedModel$1.joinAll( keys );
+		}
+
+		// @keypath or @rootpath, the current keypath string
+		else if ( base === '@keypath' || base === '@rootpath' ) {
+			var root = ref[1] === 'r' ? fragment.ractive.root : null;
+			var context$2 = fragment.findContext();
+
+			// skip over component roots, which provide no context
+			while ( root && context$2.isRoot && context$2.ractive.component ) {
+				context$2 = context$2.ractive.component.parentFragment.findContext();
+			}
+
+			return context$2.getKeypathModel( root );
+		}
+
+		else if ( base === '@context' ) {
+			return new ContextModel( fragment.getContext() );
+		}
+
+		// @context-local data
+		else if ( base === '@local' ) {
+			return fragment.getContext()._data.joinAll( keys );
+		}
+
+		// nope
+		else {
+			throw new Error( ("Invalid special reference '" + base + "'") );
+		}
+	}
+
+	var context = fragment.findContext();
+
+	// check immediate context for a match
+	if ( context.has( base ) ) {
+		return context.joinKey( base ).joinAll( keys );
+	}
+
+	// walk up the fragment hierarchy looking for a matching ref, alias, or key in a context
+	var createMapping = false;
+	var shouldWarn = fragment.ractive.warnAboutAmbiguity;
+
+	while ( fragment ) {
+		// repeated fragments
+		if ( fragment.isIteration ) {
+			if ( base === fragment.parent.keyRef ) {
+				if ( keys.length ) { badReference( base ); }
+				return fragment.context.getKeyModel( fragment.key );
+			}
+
+			if ( base === fragment.parent.indexRef ) {
+				if ( keys.length ) { badReference( base ); }
+				return fragment.context.getKeyModel( fragment.index );
+			}
+		}
+
+		// alias node or iteration
+		if ( fragment.aliases  && fragment.aliases.hasOwnProperty( base ) ) {
+			var model = fragment.aliases[ base ];
+
+			if ( keys.length === 0 ) { return model; }
+			else if ( typeof model.joinAll === 'function' ) {
+				return model.joinAll( keys );
+			}
+		}
+
+		// check fragment context to see if it has the key we need
+		if ( fragment.context && fragment.context.has( base ) ) {
+			// this is an implicit mapping
+			if ( createMapping ) {
+				if ( shouldWarn ) { warnIfDebug( ("'" + ref + "' resolved but is ambiguous and will create a mapping to a parent component.") ); }
+				return context.root.createLink( base, fragment.context.joinKey( base ), base, { implicit: true }).joinAll( keys );
+			}
+
+			if ( shouldWarn ) { warnIfDebug( ("'" + ref + "' resolved but is ambiguous.") ); }
+			return fragment.context.joinKey( base ).joinAll( keys );
+		}
+
+		if ( ( fragment.componentParent || ( !fragment.parent && fragment.ractive.component ) ) && !fragment.ractive.isolated ) {
+			// ascend through component boundary
+			fragment = fragment.componentParent || fragment.ractive.component.parentFragment;
+			createMapping = true;
+		} else {
+			fragment = fragment.parent;
+		}
+	}
+
+	// if enabled, check the instance for a match
+	var instance = initialFragment.ractive;
+	if ( instance.resolveInstanceMembers && base !== 'data' && base in instance ) {
+		return instance.viewmodel.getRactiveModel().joinKey( base ).joinAll( keys );
+	}
+
+	if ( shouldWarn ) {
+		warnIfDebug( ("'" + ref + "' is ambiguous and did not resolve.") );
+	}
+
+	// didn't find anything, so go ahead and create the key on the local model
+	return context.joinKey( base ).joinAll( keys );
+}
+
+function badReference ( key ) {
+	throw new Error( ("An index or key reference (" + key + ") cannot have child properties") );
+}
+
+var ContextModel = function ContextModel ( context ) {
+	this.context = context;
+};
+
+ContextModel.prototype.get = function get () { return this.context; };
+
+var extern = {};
+
+function getRactiveContext ( ractive ) {
+	var assigns = [], len = arguments.length - 1;
+	while ( len-- > 0 ) assigns[ len ] = arguments[ len + 1 ];
+
+	var fragment = ractive.fragment || ractive._fakeFragment || ( ractive._fakeFragment = new FakeFragment( ractive ) );
+	return fragment.getContext.apply( fragment, assigns );
+}
+
+function getContext () {
+	var assigns = [], len = arguments.length;
+	while ( len-- ) assigns[ len ] = arguments[ len ];
+
+	if ( !this.ctx ) { this.ctx = new extern.Context( this ); }
+	assigns.unshift( Object.create( this.ctx ) );
+	return Object.assign.apply( null, assigns );
+}
+
+var FakeFragment = function FakeFragment ( ractive ) {
+	this.ractive = ractive;
+};
+
+FakeFragment.prototype.findContext = function findContext () { return this.ractive.viewmodel; };
+var proto$1 = FakeFragment.prototype;
+proto$1.getContext = getContext;
+proto$1.find = proto$1.findComponent = proto$1.findAll = proto$1.findAllComponents = noop;
+
+var keep = false;
+
+function set ( ractive, pairs, options ) {
+	var k = keep;
+
+	var deep = options && options.deep;
+	var shuffle = options && options.shuffle;
+	var promise = runloop.start( ractive, true );
+	if ( options && 'keep' in options ) { keep = options.keep; }
+
+	var i = pairs.length;
+	while ( i-- ) {
+		var model = pairs[i][0];
+		var value = pairs[i][1];
+		var keypath = pairs[i][2];
+
+		if ( !model ) {
+			runloop.end();
+			throw new Error( ("Failed to set invalid keypath '" + keypath + "'") );
+		}
+
+		if ( deep ) { deepSet( model, value ); }
+		else if ( shuffle ) {
+			var array = value;
+			var target = model.get();
+			// shuffle target array with itself
+			if ( !array ) { array = target; }
+
+			// if there's not an array there yet, go ahead and set
+			if ( target === undefined ) {
+				model.set( array );
+			} else {
+				if ( !Array.isArray( target ) || !Array.isArray( array ) ) {
+					runloop.end();
+					throw new Error( 'You cannot merge an array with a non-array' );
+				}
+
+				var comparator = getComparator( shuffle );
+				model.merge( array, comparator );
+			}
+		} else { model.set( value ); }
+	}
+
+	runloop.end();
+
+	keep = k;
+
+	return promise;
+}
+
+var star = /\*/;
+function gather ( ractive, keypath, base, isolated ) {
+	if ( !base && ( keypath[0] === '.' || keypath[1] === '^' ) ) {
+		warnIfDebug( "Attempted to set a relative keypath from a non-relative context. You can use a context object to set relative keypaths." );
+		return [];
+	}
+
+	var keys = splitKeypath( keypath );
+	var model = base || ractive.viewmodel;
+
+	if ( star.test( keypath ) ) {
+		return model.findMatches( keys );
+	} else {
+		if ( model === ractive.viewmodel ) {
+			// allow implicit mappings
+			if ( ractive.component && !ractive.isolated && !model.has( keys[0] ) && keypath[0] !== '@' && keypath[0] && !isolated ) {
+				return [ resolveReference( ractive.fragment || new FakeFragment( ractive ), keypath ) ];
+			} else {
+				return [ model.joinAll( keys ) ];
+			}
+		} else {
+			return [ model.joinAll( keys ) ];
+		}
+	}
+}
+
+function build ( ractive, keypath, value, isolated ) {
+	var sets = [];
+
+	// set multiple keypaths in one go
+	if ( isObject( keypath ) ) {
+		var loop = function ( k ) {
+			if ( keypath.hasOwnProperty( k ) ) {
+				sets.push.apply( sets, gather( ractive, k, null, isolated ).map( function (m) { return [ m, keypath[k], k ]; } ) );
+			}
+		};
+
+		for ( var k in keypath ) loop( k );
+
+	}
+	// set a single keypath
+	else {
+		sets.push.apply( sets, gather( ractive, keypath, null, isolated ).map( function (m) { return [ m, value, keypath ]; } ) );
+	}
+
+	return sets;
+}
+
+var deepOpts = { virtual: false };
+function deepSet( model, value ) {
+	var dest = model.get( false, deepOpts );
+
+	// if dest doesn't exist, just set it
+	if ( dest == null || typeof value !== 'object' ) { return model.set( value ); }
+	if ( typeof dest !== 'object' ) { return model.set( value ); }
+
+	for ( var k in value ) {
+		if ( value.hasOwnProperty( k ) ) {
+			deepSet( model.joinKey( k ), value[k] );
+		}
+	}
+}
+
+var comparators = {};
+function getComparator ( option ) {
+	if ( option === true ) { return null; } // use existing arrays
+	if ( typeof option === 'function' ) { return option; }
+
+	if ( typeof option === 'string' ) {
+		return comparators[ option ] || ( comparators[ option ] = function (thing) { return thing[ option ]; } );
+	}
+
+	throw new Error( 'If supplied, options.compare must be a string, function, or true' ); // TODO link to docs
+}
+
+var errorMessage = 'Cannot add to a non-numeric value';
+
+function add ( ractive, keypath, d, options ) {
+	if ( typeof keypath !== 'string' || !isNumeric( d ) ) {
+		throw new Error( 'Bad arguments' );
+	}
+
+	var sets = build( ractive, keypath, d, options && options.isolated );
+
+	return set( ractive, sets.map( function (pair) {
+		var model = pair[0];
+		var add = pair[1];
+		var value = model.get();
+		if ( !isNumeric( add ) || !isNumeric( value ) ) { throw new Error( errorMessage ); }
+		return [ model, value + add ];
+	}));
+}
+
+function Ractive$add ( keypath, d, options ) {
+	var num = typeof d === 'number' ? d : 1;
+	var opts = typeof d === 'object' ? d : options;
+	return add( this, keypath, num, opts );
+}
+
+function immediate ( value ) {
+	var promise = Promise.resolve( value );
+	Object.defineProperty( promise, 'stop', { value: noop });
+	return promise;
+}
+
+var linear = easing.linear;
+
+function getOptions ( options, instance ) {
+	options = options || {};
+
+	var easing$$1;
+	if ( options.easing ) {
+		easing$$1 = typeof options.easing === 'function' ?
+			options.easing :
+			instance.easing[ options.easing ];
+	}
+
+	return {
+		easing: easing$$1 || linear,
+		duration: 'duration' in options ? options.duration : 400,
+		complete: options.complete || noop,
+		step: options.step || noop,
+		interpolator: options.interpolator
+	};
+}
+
+function animate ( ractive, model, to, options ) {
+	options = getOptions( options, ractive );
+	var from = model.get();
+
+	// don't bother animating values that stay the same
+	if ( isEqual( from, to ) ) {
+		options.complete( options.to );
+		return immediate( to );
+	}
+
+	var interpolator = interpolate( from, to, ractive, options.interpolator );
+
+	// if we can't interpolate the value, set it immediately
+	if ( !interpolator ) {
+		runloop.start();
+		model.set( to );
+		runloop.end();
+
+		return immediate( to );
+	}
+
+	return model.animate( from, to, options, interpolator );
+}
+
+function Ractive$animate ( keypath, to, options ) {
+	if ( typeof keypath === 'object' ) {
+		var keys = Object.keys( keypath );
+
+		throw new Error( ("ractive.animate(...) no longer supports objects. Instead of ractive.animate({\n  " + (keys.map( function (key) { return ("'" + key + "': " + (keypath[ key ])); } ).join( '\n  ' )) + "\n}, {...}), do\n\n" + (keys.map( function (key) { return ("ractive.animate('" + key + "', " + (keypath[ key ]) + ", {...});"); } ).join( '\n' )) + "\n") );
+	}
+
+	return animate( this, this.viewmodel.joinAll( splitKeypath( keypath ) ), to, options );
+}
+
+function enqueue ( ractive, event ) {
+	if ( ractive.event ) {
+		ractive._eventQueue.push( ractive.event );
+	}
+
+	ractive.event = event;
+}
+
+function dequeue ( ractive ) {
+	if ( ractive._eventQueue.length ) {
+		ractive.event = ractive._eventQueue.pop();
+	} else {
+		ractive.event = null;
+	}
+}
+
+var initStars = {};
+var bubbleStars = {};
+
+// cartesian product of name parts and stars
+// adjusted appropriately for special cases
+function variants ( name, initial ) {
+	var map = initial ? initStars : bubbleStars;
+	if ( map[ name ] ) { return map[ name ]; }
+
+	var parts = name.split( '.' );
+	var result = [];
+	var base = false;
+
+	// initial events the implicit namespace of 'this'
+	if ( initial ) {
+		parts.unshift( 'this' );
+		base = true;
+	}
+
+	// use max - 1 bits as a bitmap to pick a part or a *
+	// need to skip the full star case if the namespace is synthetic
+	var max = Math.pow( 2, parts.length ) - ( initial ? 1 : 0 );
+	for ( var i = 0; i < max; i++ ) {
+		var join = [];
+		for ( var j = 0; j < parts.length; j++ ) {
+			join.push( 1 & ( i >> j ) ? '*' : parts[j] );
+		}
+		result.unshift( join.join( '.' ) );
+	}
+
+	if ( base ) {
+		// include non-this-namespaced versions
+		if ( parts.length > 2 ) {
+			result.push.apply( result, variants( name, false ) );
+		} else {
+			result.push( '*' );
+			result.push( name );
+		}
+	}
+
+	map[ name ] = result;
+	return result;
+}
+
+function fireEvent ( ractive, eventName, context, args ) {
+	if ( args === void 0 ) args = [];
+
+	if ( !eventName ) { return; }
+
+	context.name = eventName;
+	args.unshift( context );
+
+	var eventNames = ractive._nsSubs ? variants( eventName, true ) : [ '*', eventName ];
+
+	return fireEventAs( ractive, eventNames, context, args, true );
+}
+
+function fireEventAs  ( ractive, eventNames, context, args, initialFire ) {
+	if ( initialFire === void 0 ) initialFire = false;
+
+	var bubble = true;
+
+	if ( initialFire || ractive._nsSubs ) {
+		enqueue( ractive, context );
+
+		var i = eventNames.length;
+		while ( i-- ) {
+			if ( eventNames[ i ] in ractive._subs ) {
+				bubble = notifySubscribers( ractive, ractive._subs[ eventNames[ i ] ], context, args ) && bubble;
+			}
+		}
+
+		dequeue( ractive );
+	}
+
+	if ( ractive.parent && bubble ) {
+		if ( initialFire && ractive.component ) {
+			var fullName = ractive.component.name + '.' + eventNames[ eventNames.length - 1 ];
+			eventNames = variants( fullName, false );
+
+			if ( context && !context.component ) {
+				context.component = ractive;
+			}
+		}
+
+		bubble = fireEventAs( ractive.parent, eventNames, context, args );
+	}
+
+	return bubble;
+}
+
+function notifySubscribers ( ractive, subscribers, context, args ) {
+	var originalEvent = null;
+	var stopEvent = false;
+
+	// subscribers can be modified inflight, e.g. "once" functionality
+	// so we need to copy to make sure everyone gets called
+	subscribers = subscribers.slice();
+
+	for ( var i = 0, len = subscribers.length; i < len; i += 1 ) {
+		if ( !subscribers[ i ].off && subscribers[ i ].handler.apply( ractive, args ) === false ) {
+			stopEvent = true;
+		}
+	}
+
+	if ( context && stopEvent && ( originalEvent = context.event ) ) {
+		originalEvent.preventDefault && originalEvent.preventDefault();
+		originalEvent.stopPropagation && originalEvent.stopPropagation();
+	}
+
+	return !stopEvent;
+}
+
+var Hook = function Hook ( event ) {
+	this.event = event;
+	this.method = 'on' + event;
+};
+
+Hook.prototype.fire = function fire ( ractive, arg ) {
+	var context = getRactiveContext( ractive );
+
+	if ( ractive[ this.method ] ) {
+		arg ? ractive[ this.method ]( context, arg ) : ractive[ this.method ]( context );
+	}
+
+	fireEvent( ractive, this.event, context, arg ? [ arg, ractive ] : [ ractive ] );
+};
+
+function findAnchors ( fragment, name ) {
+	if ( name === void 0 ) name = null;
+
+	var res = [];
+
+	findAnchorsIn( fragment, name, res );
+
+	return res;
+}
+
+function findAnchorsIn ( item, name, result ) {
+	if ( item.isAnchor ) {
+		if ( !name || item.name === name ) {
+			result.push( item );
+		}
+	} else if ( item.items ) {
+		item.items.forEach( function (i) { return findAnchorsIn( i, name, result ); } );
+	} else if ( item.iterations ) {
+		item.iterations.forEach( function (i) { return findAnchorsIn( i, name, result ); } );
+	} else if ( item.fragment && !item.component ) {
+		findAnchorsIn( item.fragment, name, result );
+	}
+}
+
+function updateAnchors ( instance, name ) {
+	if ( name === void 0 ) name = null;
+
+	var anchors = findAnchors( instance.fragment, name );
+	var idxs = {};
+	var children = instance._children.byName;
+
+	anchors.forEach( function (a) {
+		var name = a.name;
+		if ( !( name in idxs ) ) { idxs[name] = 0; }
+		var idx = idxs[name];
+		var child = ( children[name] || [] )[idx];
+
+		if ( child && child.lastBound !== a ) {
+			if ( child.lastBound ) { child.lastBound.removeChild( child ); }
+			a.addChild( child );
+		}
+
+		idxs[name]++;
+	});
+}
+
+function unrenderChild ( meta ) {
+	if ( meta.instance.fragment.rendered ) {
+		meta.shouldDestroy = true;
+		meta.instance.unrender();
+	}
+	meta.instance.el = null;
+}
+
+var attachHook = new Hook( 'attachchild' );
+
+function attachChild ( child, options ) {
+	if ( options === void 0 ) options = {};
+
+	var children = this._children;
+
+	if ( child.parent && child.parent !== this ) { throw new Error( ("Instance " + (child._guid) + " is already attached to a different instance " + (child.parent._guid) + ". Please detach it from the other instance using detachChild first.") ); }
+	else if ( child.parent ) { throw new Error( ("Instance " + (child._guid) + " is already attached to this instance.") ); }
+
+	var meta = {
+		instance: child,
+		ractive: this,
+		name: options.name || child.constructor.name || 'Ractive',
+		target: options.target || false,
+		bubble: bubble,
+		findNextNode: findNextNode
+	};
+	meta.nameOption = options.name;
+
+	// child is managing itself
+	if ( !meta.target ) {
+		meta.parentFragment = this.fragment;
+		meta.external = true;
+	} else {
+		var list;
+		if ( !( list = children.byName[ meta.target ] ) ) {
+			list = [];
+			this.set( ("@this.children.byName." + (meta.target)), list );
+		}
+		var idx = options.prepend ? 0 : options.insertAt !== undefined ? options.insertAt : list.length;
+		list.splice( idx, 0, meta );
+	}
+
+	child.set({
+		'@this.parent': this,
+		'@this.root': this.root
+	});
+	child.component = meta;
+	children.push( meta );
+
+	attachHook.fire( child );
+
+	var promise = runloop.start( child, true );
+
+	if ( meta.target ) {
+		unrenderChild( meta );
+		this.set( ("@this.children.byName." + (meta.target)), null, { shuffle: true } );
+		updateAnchors( this, meta.target );
+	} else {
+		if ( !child.isolated ) { child.viewmodel.attached( this.fragment ); }
+	}
+
+	runloop.end();
+
+	promise.ractive = child;
+	return promise.then( function () { return child; } );
+}
+
+function bubble () { runloop.addFragment( this.instance.fragment ); }
+
+function findNextNode () {
+	if ( this.anchor ) { return this.anchor.findNextNode(); }
+}
+
+var detachHook = new Hook( 'detach' );
+
+function Ractive$detach () {
+	if ( this.isDetached ) {
+		return this.el;
+	}
+
+	if ( this.el ) {
+		removeFromArray( this.el.__ractive_instances__, this );
+	}
+
+	this.el = this.fragment.detach();
+	this.isDetached = true;
+
+	detachHook.fire( this );
+	return this.el;
+}
+
+var detachHook$1 = new Hook( 'detachchild' );
+
+function detachChild ( child ) {
+	var children = this._children;
+	var meta, index;
+
+	var i = children.length;
+	while ( i-- ) {
+		if ( children[i].instance === child ) {
+			index = i;
+			meta = children[i];
+			break;
+		}
+	}
+
+	if ( !meta || child.parent !== this ) { throw new Error( ("Instance " + (child._guid) + " is not attached to this instance.") ); }
+
+	var promise = runloop.start( child, true );
+
+	if ( meta.anchor ) { meta.anchor.removeChild( meta ); }
+	if ( !child.isolated ) { child.viewmodel.detached(); }
+
+	runloop.end();
+
+	children.splice( index, 1 );
+	if ( meta.target ) {
+		var list = children.byName[ meta.target ];
+		list.splice( list.indexOf( meta ), 1 );
+		this.set( ("@this.children.byName." + (meta.target)), null, { shuffle: true } );
+		updateAnchors( this, meta.target );
+	}
+	child.set({
+		'@this.parent': undefined,
+		'@this.root': child
+	});
+	child.component = null;
+
+	detachHook$1.fire( child );
+
+	promise.ractive = child;
+	return promise.then( function () { return child; } );
+}
+
+function Ractive$find ( selector, options ) {
+	var this$1 = this;
+	if ( options === void 0 ) options = {};
+
+	if ( !this.el ) { throw new Error( ("Cannot call ractive.find('" + selector + "') unless instance is rendered to the DOM") ); }
+
+	var node = this.fragment.find( selector, options );
+	if ( node ) { return node; }
+
+	if ( options.remote ) {
+		for ( var i = 0; i < this._children.length; i++ ) {
+			if ( !this$1._children[i].instance.fragment.rendered ) { continue; }
+			node = this$1._children[i].instance.find( selector, options );
+			if ( node ) { return node; }
+		}
+	}
+}
+
+function Ractive$findAll ( selector, options ) {
+	if ( options === void 0 ) options = {};
+
+	if ( !this.el ) { throw new Error( ("Cannot call ractive.findAll('" + selector + "', ...) unless instance is rendered to the DOM") ); }
+
+	if ( !Array.isArray( options.result ) ) { options.result = []; }
+
+	this.fragment.findAll( selector, options );
+
+	if ( options.remote ) {
+		// seach non-fragment children
+		this._children.forEach( function (c) {
+			if ( !c.target && c.instance.fragment && c.instance.fragment.rendered ) {
+				c.instance.findAll( selector, options );
+			}
+		});
+	}
+
+	return options.result;
+}
+
+function Ractive$findAllComponents ( selector, options ) {
+	if ( !options && typeof selector === 'object' ) {
+		options = selector;
+		selector = '';
+	}
+
+	options = options || {};
+
+	if ( !Array.isArray( options.result ) ) { options.result = []; }
+
+	this.fragment.findAllComponents( selector, options );
+
+	if ( options.remote ) {
+		// search non-fragment children
+		this._children.forEach( function (c) {
+			if ( !c.target && c.instance.fragment && c.instance.fragment.rendered ) {
+				if ( !selector || c.name === selector ) {
+					options.result.push( c.instance );
+				}
+
+				c.instance.findAllComponents( selector, options );
+			}
+		});
+	}
+
+	return options.result;
+}
+
+function Ractive$findComponent ( selector, options ) {
+	var this$1 = this;
+	if ( options === void 0 ) options = {};
+
+	if ( typeof selector === 'object' ) {
+		options = selector;
+		selector = '';
+	}
+
+	var child = this.fragment.findComponent( selector, options );
+	if ( child ) { return child; }
+
+	if ( options.remote ) {
+		if ( !selector && this._children.length ) { return this._children[0].instance; }
+		for ( var i = 0; i < this._children.length; i++ ) {
+			// skip children that are or should be in an anchor
+			if ( this$1._children[i].target ) { continue; }
+			if ( this$1._children[i].name === selector ) { return this$1._children[i].instance; }
+			child = this$1._children[i].instance.findComponent( selector, options );
+			if ( child ) { return child; }
+		}
+	}
+}
+
+function Ractive$findContainer ( selector ) {
+	if ( this.container ) {
+		if ( this.container.component && this.container.component.name === selector ) {
+			return this.container;
+		} else {
+			return this.container.findContainer( selector );
+		}
+	}
+
+	return null;
+}
+
+function Ractive$findParent ( selector ) {
+
+	if ( this.parent ) {
+		if ( this.parent.component && this.parent.component.name === selector ) {
+			return this.parent;
+		} else {
+			return this.parent.findParent ( selector );
+		}
+	}
+
+	return null;
+}
+
+// This function takes an array, the name of a mutator method, and the
+// arguments to call that mutator method with, and returns an array that
+// maps the old indices to their new indices.
+
+// So if you had something like this...
+//
+//     array = [ 'a', 'b', 'c', 'd' ];
+//     array.push( 'e' );
+//
+// ...you'd get `[ 0, 1, 2, 3 ]` - in other words, none of the old indices
+// have changed. If you then did this...
+//
+//     array.unshift( 'z' );
+//
+// ...the indices would be `[ 1, 2, 3, 4, 5 ]` - every item has been moved
+// one higher to make room for the 'z'. If you removed an item, the new index
+// would be -1...
+//
+//     array.splice( 2, 2 );
+//
+// ...this would result in [ 0, 1, -1, -1, 2, 3 ].
+//
+// This information is used to enable fast, non-destructive shuffling of list
+// sections when you do e.g. `ractive.splice( 'items', 2, 2 );
+
+function getNewIndices ( length, methodName, args ) {
+	var newIndices = [];
+
+	var spliceArguments = getSpliceEquivalent( length, methodName, args );
+
+	if ( !spliceArguments ) {
+		return null; // TODO support reverse and sort?
+	}
+
+	var balance = ( spliceArguments.length - 2 ) - spliceArguments[1];
+
+	var removeStart = Math.min( length, spliceArguments[0] );
+	var removeEnd = removeStart + spliceArguments[1];
+	newIndices.startIndex = removeStart;
+
+	var i;
+	for ( i = 0; i < removeStart; i += 1 ) {
+		newIndices.push( i );
+	}
+
+	for ( ; i < removeEnd; i += 1 ) {
+		newIndices.push( -1 );
+	}
+
+	for ( ; i < length; i += 1 ) {
+		newIndices.push( i + balance );
+	}
+
+	// there is a net shift for the rest of the array starting with index + balance
+	if ( balance !== 0 ) {
+		newIndices.touchedFrom = spliceArguments[0];
+	} else {
+		newIndices.touchedFrom = length;
+	}
+
+	return newIndices;
+}
+
+
+// The pop, push, shift an unshift methods can all be represented
+// as an equivalent splice
+function getSpliceEquivalent ( length, methodName, args ) {
+	switch ( methodName ) {
+		case 'splice':
+			if ( args[0] !== undefined && args[0] < 0 ) {
+				args[0] = length + Math.max( args[0], -length );
+			}
+
+			if ( args[0] === undefined ) { args[0] = 0; }
+
+			while ( args.length < 2 ) {
+				args.push( length - args[0] );
+			}
+
+			if ( typeof args[1] !== 'number' ) {
+				args[1] = length - args[0];
+			}
+
+			// ensure we only remove elements that exist
+			args[1] = Math.min( args[1], length - args[0] );
+
+			return args;
+
+		case 'sort':
+		case 'reverse':
+			return null;
+
+		case 'pop':
+			if ( length ) {
+				return [ length - 1, 1 ];
+			}
+			return [ 0, 0 ];
+
+		case 'push':
+			return [ length, 0 ].concat( args );
+
+		case 'shift':
+			return [ 0, length ? 1 : 0 ];
+
+		case 'unshift':
+			return [ 0, 0 ].concat( args );
+	}
+}
+
+var arrayProto = Array.prototype;
+
+var makeArrayMethod = function ( methodName ) {
+	function path ( keypath ) {
+		var args = [], len = arguments.length - 1;
+		while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
+
+		return model( this.viewmodel.joinAll( splitKeypath( keypath ) ), args );
+	}
+
+	function model ( mdl, args ) {
+		var array = mdl.get();
+
+		if ( !Array.isArray( array ) ) {
+			if ( array === undefined ) {
+				array = [];
+				var result$1 = arrayProto[ methodName ].apply( array, args );
+				var promise$1 = runloop.start( this, true ).then( function () { return result$1; } );
+				mdl.set( array );
+				runloop.end();
+				return promise$1;
+			} else {
+				throw new Error( ("shuffle array method " + methodName + " called on non-array at " + (mdl.getKeypath())) );
+			}
+		}
+
+		var newIndices = getNewIndices( array.length, methodName, args );
+		var result = arrayProto[ methodName ].apply( array, args );
+
+		var promise = runloop.start( this, true ).then( function () { return result; } );
+		promise.result = result;
+
+		if ( newIndices ) {
+			mdl.shuffle( newIndices );
+		} else {
+			mdl.set( result );
+		}
+
+		runloop.end();
+
+		return promise;
+	}
+
+	return { path: path, model: model };
+};
+
+var updateHook = new Hook( 'update' );
+
+function update$1 ( ractive, model, options ) {
+	// if the parent is wrapped, the adaptor will need to be updated before
+	// updating on this keypath
+	if ( model.parent && model.parent.wrapper ) {
+		model.parent.adapt();
+	}
+
+	var promise = runloop.start( ractive, true );
+
+	model.mark( options && options.force );
+
+	// notify upstream of changes
+	model.notifyUpstream();
+
+	runloop.end();
+
+	updateHook.fire( ractive, model );
+
+	return promise;
+}
+
+function Ractive$update ( keypath, options ) {
+	var opts, path;
+
+	if ( typeof keypath === 'string' ) {
+		path = splitKeypath( keypath );
+		opts = options;
+	} else {
+		opts = keypath;
+	}
+
+	return update$1( this, path ? this.viewmodel.joinAll( path ) : this.viewmodel, opts );
+}
+
+var TEXT              = 1;
+var INTERPOLATOR      = 2;
+var TRIPLE            = 3;
+var SECTION           = 4;
+var INVERTED          = 5;
+var CLOSING           = 6;
+var ELEMENT           = 7;
+var PARTIAL           = 8;
+var COMMENT           = 9;
+var DELIMCHANGE       = 10;
+var ANCHOR            = 11;
+var ATTRIBUTE         = 13;
+var CLOSING_TAG       = 14;
+var COMPONENT         = 15;
+var YIELDER           = 16;
+var INLINE_PARTIAL    = 17;
+var DOCTYPE           = 18;
+var ALIAS             = 19;
+
+var NUMBER_LITERAL    = 20;
+var STRING_LITERAL    = 21;
+var ARRAY_LITERAL     = 22;
+var OBJECT_LITERAL    = 23;
+var BOOLEAN_LITERAL   = 24;
+var REGEXP_LITERAL    = 25;
+
+var GLOBAL            = 26;
+var KEY_VALUE_PAIR    = 27;
+
+
+var REFERENCE         = 30;
+var REFINEMENT        = 31;
+var MEMBER            = 32;
+var PREFIX_OPERATOR   = 33;
+var BRACKETED         = 34;
+var CONDITIONAL       = 35;
+var INFIX_OPERATOR    = 36;
+
+var INVOCATION        = 40;
+
+var SECTION_IF        = 50;
+var SECTION_UNLESS    = 51;
+var SECTION_EACH      = 52;
+var SECTION_WITH      = 53;
+var SECTION_IF_WITH   = 54;
+
+var ELSE              = 60;
+var ELSEIF            = 61;
+
+var EVENT             = 70;
+var DECORATOR         = 71;
+var TRANSITION        = 72;
+var BINDING_FLAG      = 73;
+var DELEGATE_FLAG     = 74;
+
+function findElement( start, orComponent, name ) {
+	if ( orComponent === void 0 ) orComponent = true;
+
+	while ( start && ( start.type !== ELEMENT || ( name && start.name !== name ) ) && ( !orComponent || ( start.type !== COMPONENT && start.type !== ANCHOR ) ) ) {
+		// start is a fragment - look at the owner
+		if ( start.owner ) { start = start.owner; }
+		// start is a component or yielder - look at the container
+		else if ( start.component ) { start = start.containerFragment || start.component.parentFragment; }
+		// start is an item - look at the parent
+		else if ( start.parent ) { start = start.parent; }
+		// start is an item without a parent - look at the parent fragment
+		else if ( start.parentFragment ) { start = start.parentFragment; }
+
+		else { start = undefined; }
+	}
+
+	return start;
+}
+
+var modelPush = makeArrayMethod( 'push' ).model;
+var modelPop = makeArrayMethod( 'pop' ).model;
+var modelShift = makeArrayMethod( 'shift' ).model;
+var modelUnshift = makeArrayMethod( 'unshift' ).model;
+var modelSort = makeArrayMethod( 'sort' ).model;
+var modelSplice = makeArrayMethod( 'splice' ).model;
+var modelReverse = makeArrayMethod( 'reverse' ).model;
+
+var ContextData = (function (Model$$1) {
+	function ContextData ( options ) {
+		Model$$1.call( this, null, null );
+
+		this.isRoot = true;
+		this.root = this;
+		this.value = {};
+		this.ractive = options.ractive;
+		this.adaptors = [];
+		this.context = options.context;
+	}
+
+	if ( Model$$1 ) ContextData.__proto__ = Model$$1;
+	ContextData.prototype = Object.create( Model$$1 && Model$$1.prototype );
+	ContextData.prototype.constructor = ContextData;
+
+	ContextData.prototype.getKeypath = function getKeypath () {
+		return '@context.data';
+	};
+
+	return ContextData;
+}(Model));
+
+var Context = function Context ( fragment, element ) {
+	this.fragment = fragment;
+	this.element = element || findElement( fragment );
+	this.node = this.element && this.element.node;
+	this.ractive = fragment.ractive;
+	this.root = this;
+};
+
+var prototypeAccessors = { decorators: {},_data: {} };
+
+prototypeAccessors.decorators.get = function () {
+	var items = {};
+	if ( !this.element ) { return items; }
+	this.element.decorators.forEach( function (d) { return items[ d.name ] = d.intermediary; } );
+	return items;
+};
+
+prototypeAccessors._data.get = function () {
+	return this.model || ( this.root.model = new ContextData({ ractive: this.ractive, context: this.root }) );
+};
+
+// the usual mutation suspects
+Context.prototype.add = function add ( keypath, d, options ) {
+	var num = typeof d === 'number' ? +d : 1;
+	var opts = typeof d === 'object' ? d : options;
+	return set( this.ractive, build$1( this, keypath, num ).map( function (pair) {
+		var model = pair[0];
+			var val = pair[1];
+		var value = model.get();
+		if ( !isNumeric( val ) || !isNumeric( value ) ) { throw new Error( 'Cannot add non-numeric value' ); }
+		return [ model, value + val ];
+	}), opts );
+};
+
+Context.prototype.animate = function animate$$1 ( keypath, value, options ) {
+	var model = findModel( this, keypath ).model;
+	return animate( this.ractive, model, value, options );
+};
+
+// get relative keypaths and values
+Context.prototype.get = function get ( keypath ) {
+	if ( !keypath ) { return this.fragment.findContext().get( true ); }
+
+	var ref = findModel( this, keypath );
+		var model = ref.model;
+
+	return model ? model.get( true ) : undefined;
+};
+
+Context.prototype.link = function link ( source, dest ) {
+	var there = findModel( this, source ).model;
+	var here = findModel( this, dest ).model;
+	var promise = runloop.start( this.ractive, true );
+	here.link( there, source );
+	runloop.end();
+	return promise;
+};
+
+Context.prototype.listen = function listen ( event, handler ) {
+	var el = this.element;
+	el.on( event, handler );
+	return {
+		cancel: function cancel () { el.off( event, handler ); }
+	};
+};
+
+Context.prototype.observe = function observe ( keypath, callback, options ) {
+		if ( options === void 0 ) options = {};
+
+	if ( isObject( keypath ) ) { options = callback || {}; }
+	options.fragment = this.fragment;
+	return this.ractive.observe( keypath, callback, options );
+};
+
+Context.prototype.observeOnce = function observeOnce ( keypath, callback, options ) {
+		if ( options === void 0 ) options = {};
+
+	if ( isObject( keypath ) ) { options = callback || {}; }
+	options.fragment = this.fragment;
+	return this.ractive.observeOnce( keypath, callback, options );
+};
+
+Context.prototype.pop = function pop ( keypath ) {
+	return modelPop( findModel( this, keypath ).model, [] );
+};
+
+Context.prototype.push = function push ( keypath ) {
+		var values = [], len = arguments.length - 1;
+		while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];
+
+	return modelPush( findModel( this, keypath ).model, values );
+};
+
+Context.prototype.raise = function raise ( name, event ) {
+		var args = [], len$1 = arguments.length - 2;
+		while ( len$1-- > 0 ) args[ len$1 ] = arguments[ len$1 + 2 ];
+
+	var element = this.element;
+	var events, len, i;
+
+	while ( element ) {
+		events = element.events;
+		len = events && events.length;
+		for ( i = 0; i < len; i++ ) {
+			var ev = events[i];
+			if ( ~ev.template.n.indexOf( name ) ) {
+				var ctx = !event || !( 'original' in event ) ?
+					ev.element.getContext( event || {}, { original: {} } ) :
+					ev.element.getContext( event || {} );
+				return ev.fire( ctx, args );
+			}
+		}
+
+		element = element.parent;
+	}
+};
+
+Context.prototype.readLink = function readLink ( keypath, options ) {
+	return this.ractive.readLink( this.resolve( keypath ), options );
+};
+
+Context.prototype.resolve = function resolve ( path, ractive ) {
+	var ref = findModel( this, path );
+		var model = ref.model;
+		var instance = ref.instance;
+	return model ? model.getKeypath( ractive || instance ) : path;
+};
+
+Context.prototype.reverse = function reverse ( keypath ) {
+	return modelReverse( findModel( this, keypath ).model, [] );
+};
+
+Context.prototype.set = function set$$1 ( keypath, value, options ) {
+	return set( this.ractive, build$1( this, keypath, value ), options );
+};
+
+Context.prototype.shift = function shift ( keypath ) {
+	return modelShift( findModel( this, keypath ).model, [] );
+};
+
+Context.prototype.splice = function splice ( keypath, index, drop ) {
+		var add = [], len = arguments.length - 3;
+		while ( len-- > 0 ) add[ len ] = arguments[ len + 3 ];
+
+	add.unshift( index, drop );
+	return modelSplice( findModel( this, keypath ).model, add );
+};
+
+Context.prototype.sort = function sort ( keypath ) {
+	return modelSort( findModel( this, keypath ).model, [] );
+};
+
+Context.prototype.subtract = function subtract ( keypath, d, options ) {
+	var num = typeof d === 'number' ? d : 1;
+	var opts = typeof d === 'object' ? d : options;
+	return set( this.ractive, build$1( this, keypath, num ).map( function (pair) {
+		var model = pair[0];
+			var val = pair[1];
+		var value = model.get();
+		if ( !isNumeric( val ) || !isNumeric( value ) ) { throw new Error( 'Cannot add non-numeric value' ); }
+		return [ model, value - val ];
+	}), opts );
+};
+
+Context.prototype.toggle = function toggle ( keypath, options ) {
+	var ref = findModel( this, keypath );
+		var model = ref.model;
+	return set( this.ractive, [ [ model, !model.get() ] ], options );
+};
+
+Context.prototype.unlink = function unlink ( dest ) {
+	var here = findModel( this, dest ).model;
+	var promise = runloop.start( this.ractive, true );
+	if ( here.owner && here.owner._link ) { here.owner.unlink(); }
+	runloop.end();
+	return promise;
+};
+
+Context.prototype.unlisten = function unlisten ( event, handler ) {
+	this.element.off( event, handler );
+};
+
+Context.prototype.unshift = function unshift ( keypath ) {
+		var add = [], len = arguments.length - 1;
+		while ( len-- > 0 ) add[ len ] = arguments[ len + 1 ];
+
+	return modelUnshift( findModel( this, keypath ).model, add );
+};
+
+Context.prototype.update = function update$$1 ( keypath, options ) {
+	return update$1( this.ractive, findModel( this, keypath ).model, options );
+};
+
+Context.prototype.updateModel = function updateModel ( keypath, cascade ) {
+	var ref = findModel( this, keypath );
+		var model = ref.model;
+	var promise = runloop.start( this.ractive, true );
+	model.updateFromBindings( cascade );
+	runloop.end();
+	return promise;
+};
+
+// two-way binding related helpers
+Context.prototype.isBound = function isBound () {
+	var ref = this.getBindingModel( this );
+		var model = ref.model;
+	return !!model;
+};
+
+Context.prototype.getBindingPath = function getBindingPath ( ractive ) {
+	var ref = this.getBindingModel( this );
+		var model = ref.model;
+		var instance = ref.instance;
+	if ( model ) { return model.getKeypath( ractive || instance ); }
+};
+
+Context.prototype.getBinding = function getBinding () {
+	var ref = this.getBindingModel( this );
+		var model = ref.model;
+	if ( model ) { return model.get( true ); }
+};
+
+Context.prototype.getBindingModel = function getBindingModel ( ctx ) {
+	var el = ctx.element;
+	return { model: el.binding && el.binding.model, instance: el.parentFragment.ractive };
+};
+
+Context.prototype.setBinding = function setBinding ( value ) {
+	var ref = this.getBindingModel( this );
+		var model = ref.model;
+	return set( this.ractive, [ [ model, value ] ] );
+};
+
+Object.defineProperties( Context.prototype, prototypeAccessors );
+
+Context.forRactive = getRactiveContext;
+// circular deps are fun
+extern.Context = Context;
+
+// TODO: at some point perhaps this could support relative * keypaths?
+function build$1 ( ctx, keypath, value ) {
+	var sets = [];
+
+	// set multiple keypaths in one go
+	if ( isObject( keypath ) ) {
+		for ( var k in keypath ) {
+			if ( keypath.hasOwnProperty( k ) ) {
+				sets.push( [ findModel( ctx, k ).model, keypath[k] ] );
+			}
+		}
+
+	}
+	// set a single keypath
+	else {
+		sets.push( [ findModel( ctx, keypath ).model, value ] );
+	}
+
+	return sets;
+}
+
+function findModel ( ctx, path ) {
+	var frag = ctx.fragment;
+
+	if ( typeof path !== 'string' ) {
+		return { model: frag.findContext(), instance: path };
+	}
+
+	return { model: resolveReference( frag, path ), instance: frag.ractive };
+}
+
+function Ractive$fire ( eventName ) {
+	var args = [], len = arguments.length - 1;
+	while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
+
+	var ctx;
+
+	// watch for reproxy
+	if ( args[0] instanceof Context  ) {
+		var proto = args.shift();
+		ctx = Object.create( proto );
+		Object.assign( ctx, proto );
+	} else if ( typeof args[0] === 'object' && args[0].constructor === Object ) {
+		ctx = Context.forRactive( this, args.shift() );
+	} else {
+		ctx = Context.forRactive( this );
+	}
+
+
+	return fireEvent( this, eventName, ctx, args );
+}
+
+function Ractive$get ( keypath, opts ) {
+	if ( typeof keypath !== 'string' ) { return this.viewmodel.get( true, keypath ); }
+
+	var keys = splitKeypath( keypath );
+	var key = keys[0];
+
+	var model;
+
+	if ( !this.viewmodel.has( key ) ) {
+		// if this is an inline component, we may need to create
+		// an implicit mapping
+		if ( this.component && !this.isolated ) {
+			model = resolveReference( this.fragment || new FakeFragment( this ), key );
+		}
+	}
+
+	model = this.viewmodel.joinAll( keys );
+	return model.get( true, opts );
+}
+
+var query = doc && doc.querySelector;
+
+function getContext$2 ( node ) {
+	if ( typeof node === 'string' && query ) {
+		node = query.call( document, node );
+	}
+
+	var instances;
+	if ( node ) {
+		if ( node._ractive ) {
+			return node._ractive.proxy.getContext();
+		} else if ( ( instances = node.__ractive_instances__ ) && instances.length === 1 ) {
+			return getRactiveContext( instances[0] );
+		}
+	}
+}
+
+function getNodeInfo$1 ( node ) {
+	warnOnceIfDebug( "getNodeInfo has been renamed to getContext, and the getNodeInfo alias will be removed in a future release." );
+	return getContext$2 ( node );
+}
+
+function getContext$1 ( node, options ) {
+	if ( typeof node === 'string' ) {
+		node = this.find( node, options );
+	}
+
+	return getContext$2( node );
+}
+
+function getNodeInfo$$1 ( node, options ) {
+	if ( typeof node === 'string' ) {
+		node = this.find( node, options );
+	}
+
+	return getNodeInfo$1( node );
+}
+
+var html   = 'http://www.w3.org/1999/xhtml';
+var mathml = 'http://www.w3.org/1998/Math/MathML';
+var svg$1    = 'http://www.w3.org/2000/svg';
+var xlink  = 'http://www.w3.org/1999/xlink';
+var xml    = 'http://www.w3.org/XML/1998/namespace';
+var xmlns  = 'http://www.w3.org/2000/xmlns';
+
+var namespaces = { html: html, mathml: mathml, svg: svg$1, xlink: xlink, xml: xml, xmlns: xmlns };
+
+var createElement;
+var matches;
+var div;
+var methodNames;
+var unprefixed;
+var prefixed;
+var i;
+var j;
+var makeFunction;
+
+// Test for SVG support
+if ( !svg ) {
+	createElement = function ( type, ns, extend ) {
+		if ( ns && ns !== html ) {
+			throw 'This browser does not support namespaces other than http://www.w3.org/1999/xhtml. The most likely cause of this error is that you\'re trying to render SVG in an older browser. See http://docs.ractivejs.org/latest/svg-and-older-browsers for more information';
+		}
+
+		return extend ?
+			doc.createElement( type, extend ) :
+			doc.createElement( type );
+	};
+} else {
+	createElement = function ( type, ns, extend ) {
+		if ( !ns || ns === html ) {
+			return extend ?
+				doc.createElement( type, extend ) :
+				doc.createElement( type );
+		}
+
+		return extend ?
+			doc.createElementNS( ns, type, extend ) :
+			doc.createElementNS( ns, type );
+	};
+}
+
+function createDocumentFragment () {
+	return doc.createDocumentFragment();
+}
+
+function getElement ( input ) {
+	var output;
+
+	if ( !input || typeof input === 'boolean' ) { return; }
+
+	if ( !win || !doc || !input ) {
+		return null;
+	}
+
+	// We already have a DOM node - no work to do. (Duck typing alert!)
+	if ( input.nodeType ) {
+		return input;
+	}
+
+	// Get node from string
+	if ( typeof input === 'string' ) {
+		// try ID first
+		output = doc.getElementById( input );
+
+		// then as selector, if possible
+		if ( !output && doc.querySelector ) {
+			try {
+				output = doc.querySelector( input );
+			} catch (e) { /* this space intentionally left blank */ }
+		}
+
+		// did it work?
+		if ( output && output.nodeType ) {
+			return output;
+		}
+	}
+
+	// If we've been given a collection (jQuery, Zepto etc), extract the first item
+	if ( input[0] && input[0].nodeType ) {
+		return input[0];
+	}
+
+	return null;
+}
+
+if ( !isClient ) {
+	matches = null;
+} else {
+	div = createElement( 'div' );
+	methodNames = [ 'matches', 'matchesSelector' ];
+
+	makeFunction = function ( methodName ) {
+		return function ( node, selector ) {
+			return node[ methodName ]( selector );
+		};
+	};
+
+	i = methodNames.length;
+
+	while ( i-- && !matches ) {
+		unprefixed = methodNames[i];
+
+		if ( div[ unprefixed ] ) {
+			matches = makeFunction( unprefixed );
+		} else {
+			j = vendors.length;
+			while ( j-- ) {
+				prefixed = vendors[i] + unprefixed.substr( 0, 1 ).toUpperCase() + unprefixed.substring( 1 );
+
+				if ( div[ prefixed ] ) {
+					matches = makeFunction( prefixed );
+					break;
+				}
+			}
+		}
+	}
+
+	// IE8...
+	if ( !matches ) {
+		matches = function ( node, selector ) {
+			var parentNode, i;
+
+			parentNode = node.parentNode;
+
+			if ( !parentNode ) {
+				// empty dummy <div>
+				div.innerHTML = '';
+
+				parentNode = div;
+				node = node.cloneNode();
+
+				div.appendChild( node );
+			}
+
+			var nodes = parentNode.querySelectorAll( selector );
+
+			i = nodes.length;
+			while ( i-- ) {
+				if ( nodes[i] === node ) {
+					return true;
+				}
+			}
+
+			return false;
+		};
+	}
+}
+
+function detachNode ( node ) {
+	// stupid ie
+	if ( node && typeof node.parentNode !== 'unknown' && node.parentNode ) { // eslint-disable-line valid-typeof
+		node.parentNode.removeChild( node );
+	}
+
+	return node;
+}
+
+function safeToStringValue ( value ) {
+	return ( value == null || !value.toString ) ? '' : '' + value;
+}
+
+function safeAttributeString ( string ) {
+	return safeToStringValue( string )
+		.replace( /&/g, '&amp;' )
+		.replace( /"/g, '&quot;' )
+		.replace( /'/g, '&#39;' );
+}
+
+var insertHook = new Hook( 'insert' );
+
+function Ractive$insert ( target, anchor ) {
+	if ( !this.fragment.rendered ) {
+		// TODO create, and link to, documentation explaining this
+		throw new Error( 'The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.' );
+	}
+
+	target = getElement( target );
+	anchor = getElement( anchor ) || null;
+
+	if ( !target ) {
+		throw new Error( 'You must specify a valid target to insert into' );
+	}
+
+	target.insertBefore( this.detach(), anchor );
+	this.el = target;
+
+	( target.__ractive_instances__ || ( target.__ractive_instances__ = [] ) ).push( this );
+	this.isDetached = false;
+
+	fireInsertHook( this );
+}
+
+function fireInsertHook( ractive ) {
+	insertHook.fire( ractive );
+
+	ractive.findAllComponents('*').forEach( function (child) {
+		fireInsertHook( child.instance );
+	});
+}
+
+function link ( there, here, options ) {
+	var model;
+	var target = ( options && ( options.ractive || options.instance ) ) || this;
+
+	// may need to allow a mapping to resolve implicitly
+	var sourcePath = splitKeypath( there );
+	if ( !target.viewmodel.has( sourcePath[0] ) && target.component ) {
+		model = resolveReference( target.component.parentFragment, sourcePath[0] );
+		model = model.joinAll( sourcePath.slice( 1 ) );
+	}
+
+	var src = model || target.viewmodel.joinAll( sourcePath );
+	var dest = this.viewmodel.joinAll( splitKeypath( here ), { lastLink: false });
+
+	if ( isUpstream( src, dest ) || isUpstream( dest, src ) ) {
+		throw new Error( 'A keypath cannot be linked to itself.' );
+	}
+
+	var promise = runloop.start();
+
+	dest.link( src, there );
+
+	runloop.end();
+
+	return promise;
+}
+
+function isUpstream ( check, start ) {
+	var model = start;
+	while ( model ) {
+		if ( model === check ) { return true; }
+		model = model.target || model.parent;
+	}
+}
+
+var Observer = function Observer ( ractive, model, callback, options ) {
+	this.context = options.context || ractive;
+	this.callback = callback;
+	this.ractive = ractive;
+	this.keypath = options.keypath;
+	this.options = options;
+
+	if ( model ) { this.resolved( model ); }
+
+	if ( typeof options.old === 'function' ) {
+		this.oldContext = Object.create( ractive );
+		this.old = options.old;
+	} else {
+		this.old = old;
+	}
+
+	if ( options.init !== false ) {
+		this.dirty = true;
+		this.dispatch();
+	} else {
+		this.oldValue = this.old.call( this.oldContext, undefined, this.newValue );
+	}
+
+	this.dirty = false;
+};
+
+Observer.prototype.cancel = function cancel () {
+	this.cancelled = true;
+	if ( this.model ) {
+		this.model.unregister( this );
+	} else {
+		this.resolver.unbind();
+	}
+	removeFromArray( this.ractive._observers, this );
+};
+
+Observer.prototype.dispatch = function dispatch () {
+	if ( !this.cancelled ) {
+		this.callback.call( this.context, this.newValue, this.oldValue, this.keypath );
+		this.oldValue = this.old.call( this.oldContext, this.oldValue, this.model ? this.model.get() : this.newValue );
+		this.dirty = false;
+	}
+};
+
+Observer.prototype.handleChange = function handleChange () {
+		var this$1 = this;
+
+	if ( !this.dirty ) {
+		var newValue = this.model.get();
+		if ( isEqual( newValue, this.oldValue ) ) { return; }
+
+		this.newValue = newValue;
+
+		if ( this.options.strict && this.newValue === this.oldValue ) { return; }
+
+		runloop.addObserver( this, this.options.defer );
+		this.dirty = true;
+
+		if ( this.options.once ) { runloop.scheduleTask( function () { return this$1.cancel(); } ); }
+	}
+};
+
+Observer.prototype.rebind = function rebind ( next, previous ) {
+		var this$1 = this;
+
+	next = rebindMatch( this.keypath, next, previous );
+	// TODO: set up a resolver if next is undefined?
+	if ( next === this.model ) { return false; }
+
+	if ( this.model ) { this.model.unregister( this ); }
+	if ( next ) { next.addShuffleTask( function () { return this$1.resolved( next ); } ); }
+};
+
+Observer.prototype.resolved = function resolved ( model ) {
+	this.model = model;
+
+	this.oldValue = undefined;
+	this.newValue = model.get();
+
+	model.register( this );
+};
+
+function old ( previous, next ) {
+	return next;
+}
+
+var star$1 = /\*+/g;
+
+var PatternObserver = function PatternObserver ( ractive, baseModel, keys, callback, options ) {
+	var this$1 = this;
+
+	this.context = options.context || ractive;
+	this.ractive = ractive;
+	this.baseModel = baseModel;
+	this.keys = keys;
+	this.callback = callback;
+
+	var pattern = keys.join( '\\.' ).replace( star$1, '(.+)' );
+	var baseKeypath = this.baseKeypath = baseModel.getKeypath( ractive );
+	this.pattern = new RegExp( ("^" + (baseKeypath ? baseKeypath + '\\.' : '') + pattern + "$") );
+	this.recursive = keys.length === 1 && keys[0] === '**';
+	if ( this.recursive ) { this.keys = [ '*' ]; }
+
+	this.oldValues = {};
+	this.newValues = {};
+
+	this.defer = options.defer;
+	this.once = options.once;
+	this.strict = options.strict;
+
+	this.dirty = false;
+	this.changed = [];
+	this.partial = false;
+	this.links = options.links;
+
+	var models = baseModel.findMatches( this.keys );
+
+	models.forEach( function (model) {
+		this$1.newValues[ model.getKeypath( this$1.ractive ) ] = model.get();
+	});
+
+	if ( options.init !== false ) {
+		this.dispatch();
+	} else {
+		this.oldValues = this.newValues;
+	}
+
+	baseModel.registerPatternObserver( this );
+};
+
+PatternObserver.prototype.cancel = function cancel () {
+	this.baseModel.unregisterPatternObserver( this );
+	removeFromArray( this.ractive._observers, this );
+};
+
+PatternObserver.prototype.dispatch = function dispatch () {
+		var this$1 = this;
+
+	var newValues = this.newValues;
+	this.newValues = {};
+	Object.keys( newValues ).forEach( function (keypath) {
+		var newValue = newValues[ keypath ];
+		var oldValue = this$1.oldValues[ keypath ];
+
+		if ( this$1.strict && newValue === oldValue ) { return; }
+		if ( isEqual( newValue, oldValue ) ) { return; }
+
+		var args = [ newValue, oldValue, keypath ];
+		if ( keypath ) {
+			var wildcards = this$1.pattern.exec( keypath );
+			if ( wildcards ) {
+				args = args.concat( wildcards.slice( 1 ) );
+			}
+		}
+
+		this$1.callback.apply( this$1.context, args );
+	});
+
+	if ( this.partial ) {
+		for ( var k in newValues ) {
+			this$1.oldValues[k] = newValues[k];
+		}
+	} else {
+		this.oldValues = newValues;
+	}
+
+	this.dirty = false;
+};
+
+PatternObserver.prototype.notify = function notify ( key ) {
+	this.changed.push( key );
+};
+
+PatternObserver.prototype.shuffle = function shuffle ( newIndices ) {
+		var this$1 = this;
+
+	if ( !Array.isArray( this.baseModel.value ) ) { return; }
+
+	var max = this.baseModel.value.length;
+
+	for ( var i = 0; i < newIndices.length; i++ ) {
+		if ( newIndices[ i ] === -1 || newIndices[ i ] === i ) { continue; }
+		this$1.changed.push([ i ]);
+	}
+
+	for ( var i$1 = newIndices.touchedFrom; i$1 < max; i$1++ ) {
+		this$1.changed.push([ i$1 ]);
+	}
+};
+
+PatternObserver.prototype.handleChange = function handleChange () {
+		var this$1 = this;
+
+	if ( !this.dirty || this.changed.length ) {
+		if ( !this.dirty ) { this.newValues = {}; }
+
+		if ( !this.changed.length ) {
+			this.baseModel.findMatches( this.keys ).forEach( function (model) {
+				var keypath = model.getKeypath( this$1.ractive );
+				this$1.newValues[ keypath ] = model.get();
+			});
+			this.partial = false;
+		} else {
+			var count = 0;
+
+			if ( this.recursive ) {
+				this.changed.forEach( function (keys) {
+					var model = this$1.baseModel.joinAll( keys );
+					if ( model.isLink && !this$1.links ) { return; }
+					count++;
+					this$1.newValues[ model.getKeypath( this$1.ractive ) ] = model.get();
+				});
+			} else {
+				var ok = this.baseModel.isRoot ?
+					this.changed.map( function (keys) { return keys.map( escapeKey ).join( '.' ); } ) :
+					this.changed.map( function (keys) { return this$1.baseKeypath + '.' + keys.map( escapeKey ).join( '.' ); } );
+
+				this.baseModel.findMatches( this.keys ).forEach( function (model) {
+					var keypath = model.getKeypath( this$1.ractive );
+					var check = function (k) {
+						return ( k.indexOf( keypath ) === 0 && ( k.length === keypath.length || k[ keypath.length ] === '.' ) ) ||
+							( keypath.indexOf( k ) === 0 && ( k.length === keypath.length || keypath[ k.length ] === '.' ) );
+					};
+
+					// is this model on a changed keypath?
+					if ( ok.filter( check ).length ) {
+						count++;
+						this$1.newValues[ keypath ] = model.get();
+					}
+				});
+			}
+
+			// no valid change triggered, so bail to avoid breakage
+			if ( !count ) { return; }
+
+			this.partial = true;
+		}
+
+		runloop.addObserver( this, this.defer );
+		this.dirty = true;
+		this.changed.length = 0;
+
+		if ( this.once ) { this.cancel(); }
+	}
+};
+
+function negativeOne () {
+	return -1;
+}
+
+var ArrayObserver = function ArrayObserver ( ractive, model, callback, options ) {
+	this.ractive = ractive;
+	this.model = model;
+	this.keypath = model.getKeypath();
+	this.callback = callback;
+	this.options = options;
+
+	this.pending = null;
+
+	model.register( this );
+
+	if ( options.init !== false ) {
+		this.sliced = [];
+		this.shuffle([]);
+		this.dispatch();
+	} else {
+		this.sliced = this.slice();
+	}
+};
+
+ArrayObserver.prototype.cancel = function cancel () {
+	this.model.unregister( this );
+	removeFromArray( this.ractive._observers, this );
+};
+
+ArrayObserver.prototype.dispatch = function dispatch () {
+	this.callback( this.pending );
+	this.pending = null;
+	if ( this.options.once ) { this.cancel(); }
+};
+
+ArrayObserver.prototype.handleChange = function handleChange () {
+	if ( this.pending ) {
+		// post-shuffle
+		runloop.addObserver( this, this.options.defer );
+	} else {
+		// entire array changed
+		this.shuffle( this.sliced.map( negativeOne ) );
+		this.handleChange();
+	}
+};
+
+ArrayObserver.prototype.shuffle = function shuffle ( newIndices ) {
+		var this$1 = this;
+
+	var newValue = this.slice();
+
+	var inserted = [];
+	var deleted = [];
+	var start;
+
+	var hadIndex = {};
+
+	newIndices.forEach( function ( newIndex, oldIndex ) {
+		hadIndex[ newIndex ] = true;
+
+		if ( newIndex !== oldIndex && start === undefined ) {
+			start = oldIndex;
+		}
+
+		if ( newIndex === -1 ) {
+			deleted.push( this$1.sliced[ oldIndex ] );
+		}
+	});
+
+	if ( start === undefined ) { start = newIndices.length; }
+
+	var len = newValue.length;
+	for ( var i = 0; i < len; i += 1 ) {
+		if ( !hadIndex[i] ) { inserted.push( newValue[i] ); }
+	}
+
+	this.pending = { inserted: inserted, deleted: deleted, start: start };
+	this.sliced = newValue;
+};
+
+ArrayObserver.prototype.slice = function slice () {
+	var value = this.model.get();
+	return Array.isArray( value ) ? value.slice() : [];
+};
+
+function observe ( keypath, callback, options ) {
+	var this$1 = this;
+
+	var observers = [];
+	var map;
+	var opts;
+
+	if ( isObject( keypath ) ) {
+		map = keypath;
+		opts = callback || {};
+	} else {
+		if ( typeof keypath === 'function' ) {
+			map = { '': keypath };
+			opts = callback || {};
+		} else {
+			map = {};
+			map[ keypath ] = callback;
+			opts = options || {};
+		}
+	}
+
+	var silent = false;
+	Object.keys( map ).forEach( function (keypath) {
+		var callback = map[ keypath ];
+		var caller = function () {
+			var args = [], len = arguments.length;
+			while ( len-- ) args[ len ] = arguments[ len ];
+
+			if ( silent ) { return; }
+			return callback.apply( this, args );
+		};
+
+		var keypaths = keypath.split( ' ' );
+		if ( keypaths.length > 1 ) { keypaths = keypaths.filter( function (k) { return k; } ); }
+
+		keypaths.forEach( function (keypath) {
+			opts.keypath = keypath;
+			var observer = createObserver( this$1, keypath, caller, opts );
+			if ( observer ) { observers.push( observer ); }
+		});
+	});
+
+	// add observers to the Ractive instance, so they can be
+	// cancelled on ractive.teardown()
+	this._observers.push.apply( this._observers, observers );
+
+	return {
+		cancel: function () { return observers.forEach( function (o) { return o.cancel(); } ); },
+		isSilenced: function () { return silent; },
+		silence: function () { return silent = true; },
+		resume: function () { return silent = false; }
+	};
+}
+
+function createObserver ( ractive, keypath, callback, options ) {
+	var keys = splitKeypath( keypath );
+	var wildcardIndex = keys.indexOf( '*' );
+	if ( !~wildcardIndex ) { wildcardIndex = keys.indexOf( '**' ); }
+
+	options.fragment = options.fragment || ractive.fragment;
+
+	var model;
+	if ( !options.fragment ) {
+		model = ractive.viewmodel.joinKey( keys[0] );
+	} else {
+		// .*.whatever relative wildcard is a special case because splitkeypath doesn't handle the leading .
+		if ( ~keys[0].indexOf( '.*' ) ) {
+			model = options.fragment.findContext();
+			wildcardIndex = 0;
+			keys[0] = keys[0].slice( 1 );
+		} else {
+			model = wildcardIndex === 0 ? options.fragment.findContext() : resolveReference( options.fragment, keys[0] );
+		}
+	}
+
+	// the model may not exist key
+	if ( !model ) { model = ractive.viewmodel.joinKey( keys[0] ); }
+
+	if ( !~wildcardIndex ) {
+		model = model.joinAll( keys.slice( 1 ) );
+		if ( options.array ) {
+			return new ArrayObserver( ractive, model, callback, options );
+		} else {
+			return new Observer( ractive, model, callback, options );
+		}
+	} else {
+		var double = keys.indexOf( '**' );
+		if ( ~double ) {
+			if ( double + 1 !== keys.length || ~keys.indexOf( '*' ) ) {
+				warnOnceIfDebug( "Recursive observers may only specify a single '**' at the end of the path." );
+				return;
+			}
+		}
+
+		model = model.joinAll( keys.slice( 1, wildcardIndex ) );
+
+		return new PatternObserver( ractive, model, keys.slice( wildcardIndex ), callback, options );
+	}
+}
+
+var onceOptions = { init: false, once: true };
+
+function observeOnce ( keypath, callback, options ) {
+	if ( isObject( keypath ) || typeof keypath === 'function' ) {
+		options = Object.assign( callback || {}, onceOptions );
+		return this.observe( keypath, options );
+	}
+
+	options = Object.assign( options || {}, onceOptions );
+	return this.observe( keypath, callback, options );
+}
+
+var trim = function (str) { return str.trim(); };
+
+var notEmptyString = function (str) { return str !== ''; };
+
+function Ractive$off ( eventName, callback ) {
+	var this$1 = this;
+
+	// if no event is specified, remove _all_ event listeners
+	if ( !eventName ) {
+		this._subs = {};
+	} else {
+		// Handle multiple space-separated event names
+		var eventNames = eventName.split( ' ' ).map( trim ).filter( notEmptyString );
+
+		eventNames.forEach( function (event) {
+			var subs = this$1._subs[ event ];
+			// if given a specific callback to remove, remove only it
+			if ( subs && callback ) {
+				var entry = subs.find( function (s) { return s.callback === callback; } );
+				if ( entry ) {
+					removeFromArray( subs, entry );
+					entry.off = true;
+
+					if ( event.indexOf( '.' ) ) { this$1._nsSubs--; }
+				}
+			}
+
+			// otherwise, remove all listeners for this event
+			else if ( subs ) {
+				if ( event.indexOf( '.' ) ) { this$1._nsSubs -= subs.length; }
+				subs.length = 0;
+			}
+		});
+	}
+
+	return this;
+}
+
+function Ractive$on ( eventName, callback ) {
+	var this$1 = this;
+
+	// eventName may already be a map
+	var map = typeof eventName === 'object' ? eventName : {};
+	// or it may be a string along with a callback
+	if ( typeof eventName === 'string' ) { map[ eventName ] = callback; }
+
+	var silent = false;
+	var events = [];
+
+	var loop = function ( k ) {
+		var callback$1 = map[k];
+		var caller = function () {
+			var args = [], len = arguments.length;
+			while ( len-- ) args[ len ] = arguments[ len ];
+
+			if ( !silent ) { return callback$1.apply( this, args ); }
+		};
+		var entry = {
+			callback: callback$1,
+			handler: caller
+		};
+
+		if ( map.hasOwnProperty( k ) ) {
+			var names = k.split( ' ' ).map( trim ).filter( notEmptyString );
+			names.forEach( function (n) {
+				( this$1._subs[ n ] || ( this$1._subs[ n ] = [] ) ).push( entry );
+				if ( n.indexOf( '.' ) ) { this$1._nsSubs++; }
+				events.push( [ n, entry ] );
+			});
+		}
+	};
+
+	for ( var k in map ) loop( k );
+
+	return {
+		cancel: function () { return events.forEach( function (e) { return this$1.off( e[0], e[1].callback ); } ); },
+		isSilenced: function () { return silent; },
+		silence: function () { return silent = true; },
+		resume: function () { return silent = false; }
+	};
+}
+
+function Ractive$once ( eventName, handler ) {
+	var listener = this.on( eventName, function () {
+		handler.apply( this, arguments );
+		listener.cancel();
+	});
+
+	// so we can still do listener.cancel() manually
+	return listener;
+}
+
+var pop = makeArrayMethod( 'pop' ).path;
+
+var push = makeArrayMethod( 'push' ).path;
+
+function readLink ( keypath, options ) {
+	if ( options === void 0 ) options = {};
+
+	var path = splitKeypath( keypath );
+
+	if ( this.viewmodel.has( path[0] ) ) {
+		var model = this.viewmodel.joinAll( path );
+
+		if ( !model.isLink ) { return; }
+
+		while ( ( model = model.target ) && options.canonical !== false ) {
+			if ( !model.isLink ) { break; }
+		}
+
+		if ( model ) { return { ractive: model.root.ractive, keypath: model.getKeypath() }; }
+	}
+}
+
+var PREFIX = '/* Ractive.js component styles */';
+
+// Holds current definitions of styles.
+var styleDefinitions = [];
+
+// Flag to tell if we need to update the CSS
+var isDirty = false;
+
+// These only make sense on the browser. See additional setup below.
+var styleElement = null;
+var useCssText = null;
+
+function addCSS( styleDefinition ) {
+	styleDefinitions.push( styleDefinition );
+	isDirty = true;
+}
+
+function applyCSS() {
+
+	// Apply only seems to make sense when we're in the DOM. Server-side renders
+	// can call toCSS to get the updated CSS.
+	if ( !doc || !isDirty ) { return; }
+
+	if ( useCssText ) {
+		styleElement.styleSheet.cssText = getCSS( null );
+	} else {
+		styleElement.innerHTML = getCSS( null );
+	}
+
+	isDirty = false;
+}
+
+function getCSS( cssIds ) {
+
+	var filteredStyleDefinitions = cssIds ? styleDefinitions.filter( function (style) { return ~cssIds.indexOf( style.id ); } ) : styleDefinitions;
+
+	return filteredStyleDefinitions.reduce( function ( styles, style ) { return (styles + "\n\n/* {" + (style.id) + "} */\n" + (style.styles)); }, PREFIX );
+
+}
+
+// If we're on the browser, additional setup needed.
+if ( doc && ( !styleElement || !styleElement.parentNode ) ) {
+
+	styleElement = doc.createElement( 'style' );
+	styleElement.type = 'text/css';
+
+	doc.getElementsByTagName( 'head' )[ 0 ].appendChild( styleElement );
+
+	useCssText = !!styleElement.styleSheet;
+}
+
+function fillGaps ( target ) {
+	var sources = [], len = arguments.length - 1;
+	while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];
+
+
+	for (var i = 0; i < sources.length; i++){
+		var source = sources[i];
+		for ( var key in source ) {
+			// Source can be a prototype-less object.
+			if ( key in target || !Object.prototype.hasOwnProperty.call( source, key ) ) { continue; }
+			target[ key ] = source[ key ];
+		}
+	}
+
+	return target;
+}
+
+function toPairs ( obj ) {
+	if ( obj === void 0 ) obj = {};
+
+	var pairs = [];
+	for ( var key in obj ) {
+		// Source can be a prototype-less object.
+		if ( !Object.prototype.hasOwnProperty.call( obj, key ) ) { continue; }
+		pairs.push( [ key, obj[ key ] ] );
+	}
+	return pairs;
+}
+
+var adaptConfigurator = {
+	extend: function ( Parent, proto, options ) {
+		proto.adapt = combine( proto.adapt, ensureArray( options.adapt ) );
+	},
+
+	init: function init () {}
+};
+
+var remove = /\/\*(?:[\s\S]*?)\*\//g;
+var escape = /url\(\s*(['"])(?:\\[\s\S]|(?!\1).)*\1\s*\)|url\((?:\\[\s\S]|[^)])*\)|(['"])(?:\\[\s\S]|(?!\2).)*\2/gi;
+var value = /\0(\d+)/g;
+
+// Removes comments and strings from the given CSS to make it easier to parse.
+// Callback receives the cleaned CSS and a function which can be used to put
+// the removed strings back in place after parsing is done.
+var cleanCss = function ( css, callback, additionalReplaceRules ) {
+	if ( additionalReplaceRules === void 0 ) additionalReplaceRules = [];
+
+	var values = [];
+	var reconstruct = function (css) { return css.replace( value, function ( match, n ) { return values[ n ]; } ); };
+	css = css.replace( escape, function (match) { return ("\u0000" + (values.push( match ) - 1)); }).replace( remove, '' );
+
+	additionalReplaceRules.forEach( function ( pattern ) {
+		css = css.replace( pattern, function (match) { return ("\u0000" + (values.push( match ) - 1)); } );
+	});
+
+	return callback( css, reconstruct );
+};
+
+var selectorsPattern = /(?:^|\}|\{)\s*([^\{\}\0]+)\s*(?=\{)/g;
+var keyframesDeclarationPattern = /@keyframes\s+[^\{\}]+\s*\{(?:[^{}]+|\{[^{}]+})*}/gi;
+var selectorUnitPattern = /((?:(?:\[[^\]]+\])|(?:[^\s\+\>~:]))+)((?:::?[^\s\+\>\~\(:]+(?:\([^\)]+\))?)*\s*[\s\+\>\~]?)\s*/g;
+var excludePattern = /^(?:@|\d+%)/;
+var dataRvcGuidPattern = /\[data-ractive-css~="\{[a-z0-9-]+\}"]/g;
+
+function trim$1 ( str ) {
+	return str.trim();
+}
+
+function extractString ( unit ) {
+	return unit.str;
+}
+
+function transformSelector ( selector, parent ) {
+	var selectorUnits = [];
+	var match;
+
+	while ( match = selectorUnitPattern.exec( selector ) ) {
+		selectorUnits.push({
+			str: match[0],
+			base: match[1],
+			modifiers: match[2]
+		});
+	}
+
+	// For each simple selector within the selector, we need to create a version
+	// that a) combines with the id, and b) is inside the id
+	var base = selectorUnits.map( extractString );
+
+	var transformed = [];
+	var i = selectorUnits.length;
+
+	while ( i-- ) {
+		var appended = base.slice();
+
+		// Pseudo-selectors should go after the attribute selector
+		var unit = selectorUnits[i];
+		appended[i] = unit.base + parent + unit.modifiers || '';
+
+		var prepended = base.slice();
+		prepended[i] = parent + ' ' + prepended[i];
+
+		transformed.push( appended.join( ' ' ), prepended.join( ' ' ) );
+	}
+
+	return transformed.join( ', ' );
+}
+
+function transformCss ( css, id ) {
+	var dataAttr = "[data-ractive-css~=\"{" + id + "}\"]";
+
+	var transformed;
+
+	if ( dataRvcGuidPattern.test( css ) ) {
+		transformed = css.replace( dataRvcGuidPattern, dataAttr );
+	} else {
+		transformed = cleanCss( css, function ( css, reconstruct ) {
+			css = css.replace( selectorsPattern, function ( match, $1 ) {
+				// don't transform at-rules and keyframe declarations
+				if ( excludePattern.test( $1 ) ) { return match; }
+
+				var selectors = $1.split( ',' ).map( trim$1 );
+				var transformed = selectors
+					.map( function (selector) { return transformSelector( selector, dataAttr ); } )
+					.join( ', ' ) + ' ';
+
+				return match.replace( $1, transformed );
+			});
+
+			return reconstruct( css );
+		}, [ keyframesDeclarationPattern ]);
+	}
+
+	return transformed;
+}
+
+function s4() {
+	return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
+}
+
+function uuid() {
+	return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
+}
+
+var hasCurly = /\{/;
+var cssConfigurator = {
+	name: 'css',
+
+	// Called when creating a new component definition
+	extend: function ( Parent, proto, options ) {
+		if ( !options.css ) { return; }
+		var css = typeof options.css === 'string' && !hasCurly.test( options.css ) ?
+			( getElement( options.css ) || options.css ) :
+			options.css;
+
+		var id = options.cssId || uuid();
+
+		if ( typeof css === 'object' ) {
+			css = 'textContent' in css ? css.textContent : css.innerHTML;
+		}
+
+		if ( !css ) { return; }
+
+		var styles = options.noCssTransform ? css : transformCss( css, id );
+
+		proto.cssId = id;
+
+		addCSS( { id: id, styles: styles } );
+	},
+
+	// Called when creating a new component instance
+	init: function ( Parent, target, options ) {
+		if ( !options.css ) { return; }
+
+		warnIfDebug( "\nThe css option is currently not supported on a per-instance basis and will be discarded. Instead, we recommend instantiating from a component definition with a css option.\n\nconst Component = Ractive.extend({\n\t...\n\tcss: '/* your css */',\n\t...\n});\n\nconst componentInstance = new Component({ ... })\n\t\t" );
+	}
+
+};
+
+function validate ( data ) {
+	// Warn if userOptions.data is a non-POJO
+	if ( data && data.constructor !== Object ) {
+		if ( typeof data === 'function' ) {
+			// TODO do we need to support this in the new Ractive() case?
+		} else if ( typeof data !== 'object' ) {
+			fatal( ("data option must be an object or a function, `" + data + "` is not valid") );
+		} else {
+			warnIfDebug( 'If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged' );
+		}
+	}
+}
+
+var dataConfigurator = {
+	name: 'data',
+
+	extend: function ( Parent, proto, options ) {
+		var key;
+		var value;
+
+		// check for non-primitives, which could cause mutation-related bugs
+		if ( options.data && isObject( options.data ) ) {
+			for ( key in options.data ) {
+				value = options.data[ key ];
+
+				if ( value && typeof value === 'object' ) {
+					if ( isObject( value ) || Array.isArray( value ) ) {
+						warnIfDebug( "Passing a `data` option with object and array properties to Ractive.extend() is discouraged, as mutating them is likely to cause bugs. Consider using a data function instead:\n\n  // this...\n  data: function () {\n    return {\n      myObject: {}\n    };\n  })\n\n  // instead of this:\n  data: {\n    myObject: {}\n  }" );
+					}
+				}
+			}
+		}
+
+		proto.data = combine$1( proto.data, options.data );
+	},
+
+	init: function ( Parent, ractive, options ) {
+		var result = combine$1( Parent.prototype.data, options.data );
+
+		if ( typeof result === 'function' ) { result = result.call( ractive ); }
+
+		// bind functions to the ractive instance at the top level,
+		// unless it's a non-POJO (in which case alarm bells should ring)
+		if ( result && result.constructor === Object ) {
+			for ( var prop in result ) {
+				if ( typeof result[ prop ] === 'function' ) {
+					var value = result[ prop ];
+					result[ prop ] = bind$1( value, ractive );
+					result[ prop ]._r_unbound = value;
+				}
+			}
+		}
+
+		return result || {};
+	},
+
+	reset: function reset ( ractive ) {
+		var result = this.init( ractive.constructor, ractive, ractive.viewmodel );
+		ractive.viewmodel.root.set( result );
+		return true;
+	}
+};
+
+function combine$1 ( parentValue, childValue ) {
+	validate( childValue );
+
+	var parentIsFn = typeof parentValue === 'function';
+	var childIsFn = typeof childValue === 'function';
+
+	// Very important, otherwise child instance can become
+	// the default data object on Ractive or a component.
+	// then ractive.set() ends up setting on the prototype!
+	if ( !childValue && !parentIsFn ) {
+		childValue = {};
+	}
+
+	// Fast path, where we just need to copy properties from
+	// parent to child
+	if ( !parentIsFn && !childIsFn ) {
+		return fromProperties( childValue, parentValue );
+	}
+
+	return function () {
+		var child = childIsFn ? callDataFunction( childValue, this ) : childValue;
+		var parent = parentIsFn ? callDataFunction( parentValue, this ) : parentValue;
+
+		return fromProperties( child, parent );
+	};
+}
+
+function callDataFunction ( fn, context ) {
+	var data = fn.call( context );
+
+	if ( !data ) { return; }
+
+	if ( typeof data !== 'object' ) {
+		fatal( 'Data function must return an object' );
+	}
+
+	if ( data.constructor !== Object ) {
+		warnOnceIfDebug( 'Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged' );
+	}
+
+	return data;
+}
+
+function fromProperties ( primary, secondary ) {
+	if ( primary && secondary ) {
+		for ( var key in secondary ) {
+			if ( !( key in primary ) ) {
+				primary[ key ] = secondary[ key ];
+			}
+		}
+
+		return primary;
+	}
+
+	return primary || secondary;
+}
+
+var TEMPLATE_VERSION = 4;
+
+var pattern = /\$\{([^\}]+)\}/g;
+
+function fromExpression ( body, length ) {
+	if ( length === void 0 ) length = 0;
+
+	var args = new Array( length );
+
+	while ( length-- ) {
+		args[length] = "_" + length;
+	}
+
+	// Functions created directly with new Function() look like this:
+	//     function anonymous (_0 /**/) { return _0*2 }
+	//
+	// With this workaround, we get a little more compact:
+	//     function (_0){return _0*2}
+	return new Function( [], ("return function (" + (args.join(',')) + "){return(" + body + ");};") )();
+}
+
+function fromComputationString ( str, bindTo ) {
+	var hasThis;
+
+	var functionBody = 'return (' + str.replace( pattern, function ( match, keypath ) {
+		hasThis = true;
+		return ("__ractive.get(\"" + keypath + "\")");
+	}) + ');';
+
+	if ( hasThis ) { functionBody = "var __ractive = this; " + functionBody; }
+	var fn = new Function( functionBody );
+	return hasThis ? fn.bind( bindTo ) : fn;
+}
+
+var functions = Object.create( null );
+
+function getFunction ( str, i ) {
+	if ( functions[ str ] ) { return functions[ str ]; }
+	return functions[ str ] = createFunction( str, i );
+}
+
+function addFunctions( template ) {
+	if ( !template ) { return; }
+
+	var exp = template.e;
+
+	if ( !exp ) { return; }
+
+	Object.keys( exp ).forEach( function ( str ) {
+		if ( functions[ str ] ) { return; }
+		functions[ str ] = exp[ str ];
+	});
+}
+
+var leadingWhitespace = /^\s+/;
+
+var ParseError = function ( message ) {
+	this.name = 'ParseError';
+	this.message = message;
+	try {
+		throw new Error(message);
+	} catch (e) {
+		this.stack = e.stack;
+	}
+};
+
+ParseError.prototype = Error.prototype;
+
+var Parser = function ( str, options ) {
+	var item;
+	var lineStart = 0;
+
+	this.str = str;
+	this.options = options || {};
+	this.pos = 0;
+
+	this.lines = this.str.split( '\n' );
+	this.lineEnds = this.lines.map( function (line) {
+		var lineEnd = lineStart + line.length + 1; // +1 for the newline
+
+		lineStart = lineEnd;
+		return lineEnd;
+	}, 0 );
+
+	// Custom init logic
+	if ( this.init ) { this.init( str, options ); }
+
+	var items = [];
+
+	while ( ( this.pos < this.str.length ) && ( item = this.read() ) ) {
+		items.push( item );
+	}
+
+	this.leftover = this.remaining();
+	this.result = this.postProcess ? this.postProcess( items, options ) : items;
+};
+
+Parser.prototype = {
+	read: function read ( converters ) {
+		var this$1 = this;
+
+		var i, item;
+
+		if ( !converters ) { converters = this.converters; }
+
+		var pos = this.pos;
+
+		var len = converters.length;
+		for ( i = 0; i < len; i += 1 ) {
+			this$1.pos = pos; // reset for each attempt
+
+			if ( item = converters[i]( this$1 ) ) {
+				return item;
+			}
+		}
+
+		return null;
+	},
+
+	getContextMessage: function getContextMessage ( pos, message ) {
+		var ref = this.getLinePos( pos );
+		var lineNum = ref[0];
+		var columnNum = ref[1];
+		if ( this.options.contextLines === -1 ) {
+			return [ lineNum, columnNum, (message + " at line " + lineNum + " character " + columnNum) ];
+		}
+
+		var line = this.lines[ lineNum - 1 ];
+
+		var contextUp = '';
+		var contextDown = '';
+		if ( this.options.contextLines ) {
+			var start = lineNum - 1 - this.options.contextLines < 0 ? 0 : lineNum - 1 - this.options.contextLines;
+			contextUp = this.lines.slice( start, lineNum - 1 - start ).join( '\n' ).replace( /\t/g, '  ' );
+			contextDown = this.lines.slice( lineNum, lineNum + this.options.contextLines ).join( '\n' ).replace( /\t/g, '  ' );
+			if ( contextUp ) {
+				contextUp += '\n';
+			}
+			if ( contextDown ) {
+				contextDown = '\n' + contextDown;
+			}
+		}
+
+		var numTabs = 0;
+		var annotation = contextUp + line.replace( /\t/g, function ( match, char ) {
+			if ( char < columnNum ) {
+				numTabs += 1;
+			}
+
+			return '  ';
+		}) + '\n' + new Array( columnNum + numTabs ).join( ' ' ) + '^----' + contextDown;
+
+		return [ lineNum, columnNum, (message + " at line " + lineNum + " character " + columnNum + ":\n" + annotation) ];
+	},
+
+	getLinePos: function getLinePos ( char ) {
+		var this$1 = this;
+
+		var lineNum = 0;
+		var lineStart = 0;
+
+		while ( char >= this.lineEnds[ lineNum ] ) {
+			lineStart = this$1.lineEnds[ lineNum ];
+			lineNum += 1;
+		}
+
+		var columnNum = char - lineStart;
+		return [ lineNum + 1, columnNum + 1, char ]; // line/col should be one-based, not zero-based!
+	},
+
+	error: function error ( message ) {
+		var ref = this.getContextMessage( this.pos, message );
+		var lineNum = ref[0];
+		var columnNum = ref[1];
+		var msg = ref[2];
+
+		var error = new ParseError( msg );
+
+		error.line = lineNum;
+		error.character = columnNum;
+		error.shortMessage = message;
+
+		throw error;
+	},
+
+	matchString: function matchString ( string ) {
+		if ( this.str.substr( this.pos, string.length ) === string ) {
+			this.pos += string.length;
+			return string;
+		}
+	},
+
+	matchPattern: function matchPattern ( pattern ) {
+		var match;
+
+		if ( match = pattern.exec( this.remaining() ) ) {
+			this.pos += match[0].length;
+			return match[1] || match[0];
+		}
+	},
+
+	allowWhitespace: function allowWhitespace () {
+		this.matchPattern( leadingWhitespace );
+	},
+
+	remaining: function remaining () {
+		return this.str.substring( this.pos );
+	},
+
+	nextChar: function nextChar () {
+		return this.str.charAt( this.pos );
+	},
+
+	warn: function warn$$1 ( message ) {
+		var msg = this.getContextMessage( this.pos, message )[2];
+
+		warnIfDebug( msg );
+	}
+};
+
+Parser.extend = function ( proto ) {
+	var Parent = this;
+	var Child = function ( str, options ) {
+		Parser.call( this, str, options );
+	};
+
+	Child.prototype = Object.create( Parent.prototype );
+
+	for ( var key in proto ) {
+		if ( proto.hasOwnProperty( key ) ) {
+			Child.prototype[ key ] = proto[ key ];
+		}
+	}
+
+	Child.extend = Parser.extend;
+	return Child;
+};
+
+var delimiterChangePattern = /^[^\s=]+/;
+var whitespacePattern = /^\s+/;
+
+function readDelimiterChange ( parser ) {
+	if ( !parser.matchString( '=' ) ) {
+		return null;
+	}
+
+	var start = parser.pos;
+
+	// allow whitespace before new opening delimiter
+	parser.allowWhitespace();
+
+	var opening = parser.matchPattern( delimiterChangePattern );
+	if ( !opening ) {
+		parser.pos = start;
+		return null;
+	}
+
+	// allow whitespace (in fact, it's necessary...)
+	if ( !parser.matchPattern( whitespacePattern ) ) {
+		return null;
+	}
+
+	var closing = parser.matchPattern( delimiterChangePattern );
+	if ( !closing ) {
+		parser.pos = start;
+		return null;
+	}
+
+	// allow whitespace before closing '='
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( '=' ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	return [ opening, closing ];
+}
+
+var regexpPattern = /^(\/(?:[^\n\r\u2028\u2029/\\[]|\\.|\[(?:[^\n\r\u2028\u2029\]\\]|\\.)*])+\/(?:([gimuy])(?![a-z]*\2))*(?![a-zA-Z_$0-9]))/;
+
+function readNumberLiteral ( parser ) {
+	var result;
+
+	if ( result = parser.matchPattern( regexpPattern ) ) {
+		return {
+			t: REGEXP_LITERAL,
+			v: result
+		};
+	}
+
+	return null;
+}
+
+var pattern$1 = /[-/\\^$*+?.()|[\]{}]/g;
+
+function escapeRegExp ( str ) {
+	return str.replace( pattern$1, '\\$&' );
+}
+
+var regExpCache = {};
+
+var getLowestIndex = function ( haystack, needles ) {
+	return haystack.search( regExpCache[needles.join()] || ( regExpCache[needles.join()] = new RegExp( needles.map( escapeRegExp ).join( '|' ) ) ) );
+};
+
+// https://github.com/kangax/html-minifier/issues/63#issuecomment-37763316
+var booleanAttributes = /^(allowFullscreen|async|autofocus|autoplay|checked|compact|controls|declare|default|defaultChecked|defaultMuted|defaultSelected|defer|disabled|enabled|formNoValidate|hidden|indeterminate|inert|isMap|itemScope|loop|multiple|muted|noHref|noResize|noShade|noValidate|noWrap|open|pauseOnExit|readOnly|required|reversed|scoped|seamless|selected|sortable|translate|trueSpeed|typeMustMatch|visible)$/i;
+var voidElementNames = /^(?:area|base|br|col|command|doctype|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/i;
+
+var htmlEntities = { quot: 34, amp: 38, apos: 39, lt: 60, gt: 62, nbsp: 160, iexcl: 161, cent: 162, pound: 163, curren: 164, yen: 165, brvbar: 166, sect: 167, uml: 168, copy: 169, ordf: 170, laquo: 171, not: 172, shy: 173, reg: 174, macr: 175, deg: 176, plusmn: 177, sup2: 178, sup3: 179, acute: 180, micro: 181, para: 182, middot: 183, cedil: 184, sup1: 185, ordm: 186, raquo: 187, frac14: 188, frac12: 189, frac34: 190, iquest: 191, Agrave: 192, Aacute: 193, Acirc: 194, Atilde: 195, Auml: 196, Aring: 197, AElig: 198, Ccedil: 199, Egrave: 200, Eacute: 201, Ecirc: 202, Euml: 203, Igrave: 204, Iacute: 205, Icirc: 206, Iuml: 207, ETH: 208, Ntilde: 209, Ograve: 210, Oacute: 211, Ocirc: 212, Otilde: 213, Ouml: 214, times: 215, Oslash: 216, Ugrave: 217, Uacute: 218, Ucirc: 219, Uuml: 220, Yacute: 221, THORN: 222, szlig: 223, agrave: 224, aacute: 225, acirc: 226, atilde: 227, auml: 228, aring: 229, aelig: 230, ccedil: 231, egrave: 232, eacute: 233, ecirc: 234, euml: 235, igrave: 236, iacute: 237, icirc: 238, iuml: 239, eth: 240, ntilde: 241, ograve: 242, oacute: 243, ocirc: 244, otilde: 245, ouml: 246, divide: 247, oslash: 248, ugrave: 249, uacute: 250, ucirc: 251, uuml: 252, yacute: 253, thorn: 254, yuml: 255, OElig: 338, oelig: 339, Scaron: 352, scaron: 353, Yuml: 376, fnof: 402, circ: 710, tilde: 732, Alpha: 913, Beta: 914, Gamma: 915, Delta: 916, Epsilon: 917, Zeta: 918, Eta: 919, Theta: 920, Iota: 921, Kappa: 922, Lambda: 923, Mu: 924, Nu: 925, Xi: 926, Omicron: 927, Pi: 928, Rho: 929, Sigma: 931, Tau: 932, Upsilon: 933, Phi: 934, Chi: 935, Psi: 936, Omega: 937, alpha: 945, beta: 946, gamma: 947, delta: 948, epsilon: 949, zeta: 950, eta: 951, theta: 952, iota: 953, kappa: 954, lambda: 955, mu: 956, nu: 957, xi: 958, omicron: 959, pi: 960, rho: 961, sigmaf: 962, sigma: 963, tau: 964, upsilon: 965, phi: 966, chi: 967, psi: 968, omega: 969, thetasym: 977, upsih: 978, piv: 982, ensp: 8194, emsp: 8195, thinsp: 8201, zwnj: 8204, zwj: 8205, lrm: 8206, rlm: 8207, ndash: 8211, mdash: 8212, lsquo: 8216, rsquo: 8217, sbquo: 8218, ldquo: 8220, rdquo: 8221, bdquo: 8222, dagger: 8224, Dagger: 8225, bull: 8226, hellip: 8230, permil: 8240, prime: 8242, Prime: 8243, lsaquo: 8249, rsaquo: 8250, oline: 8254, frasl: 8260, euro: 8364, image: 8465, weierp: 8472, real: 8476, trade: 8482, alefsym: 8501, larr: 8592, uarr: 8593, rarr: 8594, darr: 8595, harr: 8596, crarr: 8629, lArr: 8656, uArr: 8657, rArr: 8658, dArr: 8659, hArr: 8660, forall: 8704, part: 8706, exist: 8707, empty: 8709, nabla: 8711, isin: 8712, notin: 8713, ni: 8715, prod: 8719, sum: 8721, minus: 8722, lowast: 8727, radic: 8730, prop: 8733, infin: 8734, ang: 8736, and: 8743, or: 8744, cap: 8745, cup: 8746, int: 8747, there4: 8756, sim: 8764, cong: 8773, asymp: 8776, ne: 8800, equiv: 8801, le: 8804, ge: 8805, sub: 8834, sup: 8835, nsub: 8836, sube: 8838, supe: 8839, oplus: 8853, otimes: 8855, perp: 8869, sdot: 8901, lceil: 8968, rceil: 8969, lfloor: 8970, rfloor: 8971, lang: 9001, rang: 9002, loz: 9674, spades: 9824, clubs: 9827, hearts: 9829, diams: 9830	};
+var controlCharacters = [ 8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 382, 376 ];
+var entityPattern = new RegExp( '&(#?(?:x[\\w\\d]+|\\d+|' + Object.keys( htmlEntities ).join( '|' ) + '));?', 'g' );
+var codePointSupport = typeof String.fromCodePoint === 'function';
+var codeToChar = codePointSupport ? String.fromCodePoint : String.fromCharCode;
+
+function decodeCharacterReferences ( html ) {
+	return html.replace( entityPattern, function ( match, entity ) {
+		var code;
+
+		// Handle named entities
+		if ( entity[0] !== '#' ) {
+			code = htmlEntities[ entity ];
+		} else if ( entity[1] === 'x' ) {
+			code = parseInt( entity.substring( 2 ), 16 );
+		} else {
+			code = parseInt( entity.substring( 1 ), 10 );
+		}
+
+		if ( !code ) {
+			return match;
+		}
+
+		return codeToChar( validateCode( code ) );
+	});
+}
+
+var lessThan = /</g;
+var greaterThan = />/g;
+var amp = /&/g;
+var invalid = 65533;
+
+function escapeHtml ( str ) {
+	return str
+		.replace( amp, '&amp;' )
+		.replace( lessThan, '&lt;' )
+		.replace( greaterThan, '&gt;' );
+}
+
+// some code points are verboten. If we were inserting HTML, the browser would replace the illegal
+// code points with alternatives in some cases - since we're bypassing that mechanism, we need
+// to replace them ourselves
+//
+// Source: http://en.wikipedia.org/wiki/Character_encodings_in_HTML#Illegal_characters
+function validateCode ( code ) {
+	if ( !code ) {
+		return invalid;
+	}
+
+	// line feed becomes generic whitespace
+	if ( code === 10 ) {
+		return 32;
+	}
+
+	// ASCII range. (Why someone would use HTML entities for ASCII characters I don't know, but...)
+	if ( code < 128 ) {
+		return code;
+	}
+
+	// code points 128-159 are dealt with leniently by browsers, but they're incorrect. We need
+	// to correct the mistake or we'll end up with missing € signs and so on
+	if ( code <= 159 ) {
+		return controlCharacters[ code - 128 ];
+	}
+
+	// basic multilingual plane
+	if ( code < 55296 ) {
+		return code;
+	}
+
+	// UTF-16 surrogate halves
+	if ( code <= 57343 ) {
+		return invalid;
+	}
+
+	// rest of the basic multilingual plane
+	if ( code <= 65535 ) {
+		return code;
+	} else if ( !codePointSupport ) {
+		return invalid;
+	}
+
+	// supplementary multilingual plane 0x10000 - 0x1ffff
+	if ( code >= 65536 && code <= 131071 ) {
+		return code;
+	}
+
+	// supplementary ideographic plane 0x20000 - 0x2ffff
+	if ( code >= 131072 && code <= 196607 ) {
+		return code;
+	}
+
+	return invalid;
+}
+
+var expectedExpression = 'Expected a JavaScript expression';
+var expectedParen = 'Expected closing paren';
+
+// bulletproof number regex from https://gist.github.com/Rich-Harris/7544330
+var numberPattern = /^(?:[+-]?)0*(?:(?:(?:[1-9]\d*)?\.\d+)|(?:(?:0|[1-9]\d*)\.)|(?:0|[1-9]\d*))(?:[eE][+-]?\d+)?/;
+
+function readNumberLiteral$1 ( parser ) {
+	var result;
+
+	if ( result = parser.matchPattern( numberPattern ) ) {
+		return {
+			t: NUMBER_LITERAL,
+			v: result
+		};
+	}
+
+	return null;
+}
+
+function readBooleanLiteral ( parser ) {
+	var remaining = parser.remaining();
+
+	if ( remaining.substr( 0, 4 ) === 'true' ) {
+		parser.pos += 4;
+		return {
+			t: BOOLEAN_LITERAL,
+			v: 'true'
+		};
+	}
+
+	if ( remaining.substr( 0, 5 ) === 'false' ) {
+		parser.pos += 5;
+		return {
+			t: BOOLEAN_LITERAL,
+			v: 'false'
+		};
+	}
+
+	return null;
+}
+
+// Match one or more characters until: ", ', \, or EOL/EOF.
+// EOL/EOF is written as (?!.) (meaning there's no non-newline char next).
+var stringMiddlePattern = /^(?=.)[^"'\\]+?(?:(?!.)|(?=["'\\]))/;
+
+// Match one escape sequence, including the backslash.
+var escapeSequencePattern = /^\\(?:[`'"\\bfnrt]|0(?![0-9])|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|(?=.)[^ux0-9])/;
+
+// Match one ES5 line continuation (backslash + line terminator).
+var lineContinuationPattern = /^\\(?:\r\n|[\u000A\u000D\u2028\u2029])/;
+
+// Helper for defining getDoubleQuotedString and getSingleQuotedString.
+var makeQuotedStringMatcher = function ( okQuote ) {
+	return function ( parser ) {
+		var literal = '"';
+		var done = false;
+		var next;
+
+		while ( !done ) {
+			next = ( parser.matchPattern( stringMiddlePattern ) || parser.matchPattern( escapeSequencePattern ) ||
+				parser.matchString( okQuote ) );
+			if ( next ) {
+				if ( next === "\"" ) {
+					literal += "\\\"";
+				} else if ( next === "\\'" ) {
+					literal += "'";
+				} else {
+					literal += next;
+				}
+			} else {
+				next = parser.matchPattern( lineContinuationPattern );
+				if ( next ) {
+					// convert \(newline-like) into a \u escape, which is allowed in JSON
+					literal += '\\u' + ( '000' + next.charCodeAt(1).toString(16) ).slice( -4 );
+				} else {
+					done = true;
+				}
+			}
+		}
+
+		literal += '"';
+
+		// use JSON.parse to interpret escapes
+		return JSON.parse( literal );
+	};
+};
+
+var singleMatcher = makeQuotedStringMatcher( "\"" );
+var doubleMatcher = makeQuotedStringMatcher( "'" );
+
+var readStringLiteral = function ( parser ) {
+	var start = parser.pos;
+	var quote = parser.matchString( "'" ) || parser.matchString( "\"" );
+
+	if ( quote ) {
+		var string = ( quote === "'" ? singleMatcher : doubleMatcher )( parser );
+
+		if ( !parser.matchString( quote ) ) {
+			parser.pos = start;
+			return null;
+		}
+
+		return {
+			t: STRING_LITERAL,
+			v: string
+		};
+	}
+
+	return null;
+};
+
+// Match one or more characters until: ", ', or \
+var stringMiddlePattern$1 = /^[^`"\\\$]+?(?:(?=[`"\\\$]))/;
+
+var escapes = /[\r\n\t\b\f]/g;
+function getString ( literal ) {
+	return JSON.parse( ("\"" + (literal.replace( escapes, escapeChar )) + "\"") );
+}
+
+function escapeChar ( c ) {
+	switch ( c ) {
+		case '\n': return '\\n';
+		case '\r': return '\\r';
+		case '\t': return '\\t';
+		case '\b': return '\\b';
+		case '\f': return '\\f';
+	}
+}
+
+function readTemplateStringLiteral ( parser ) {
+	if ( !parser.matchString( '`' ) ) { return null; }
+
+	var literal = '';
+	var done = false;
+	var next;
+	var parts = [];
+
+	while ( !done ) {
+		next = parser.matchPattern( stringMiddlePattern$1 ) || parser.matchPattern( escapeSequencePattern ) ||
+			parser.matchString( '$' ) || parser.matchString( '"' );
+		if ( next ) {
+			if ( next === "\"" ) {
+				literal += "\\\"";
+			} else if ( next === '\\`' ) {
+				literal += '`';
+			} else if ( next === '$' ) {
+				if ( parser.matchString( '{' ) ) {
+					parts.push({ t: STRING_LITERAL, v: getString( literal ) });
+					literal = '';
+
+					parser.allowWhitespace();
+					var expr = readExpression( parser );
+
+					if ( !expr ) { parser.error( 'Expected valid expression' ); }
+
+					parts.push({ t: BRACKETED, x: expr });
+
+					parser.allowWhitespace();
+					if ( !parser.matchString( '}' ) ) { parser.error( "Expected closing '}' after interpolated expression" ); }
+				} else {
+					literal += '$';
+				}
+			} else {
+				literal += next;
+			}
+		} else {
+			next = parser.matchPattern( lineContinuationPattern );
+			if ( next ) {
+				// convert \(newline-like) into a \u escape, which is allowed in JSON
+				literal += '\\u' + ( '000' + next.charCodeAt(1).toString(16) ).slice( -4 );
+			} else {
+				done = true;
+			}
+		}
+	}
+
+	if ( literal.length ) { parts.push({ t: STRING_LITERAL, v: getString( literal ) }); }
+
+	if ( !parser.matchString( '`' ) ) { parser.error( "Expected closing '`'" ); }
+
+	if ( parts.length === 1 ) {
+		return parts[0];
+	} else {
+		var result = parts.pop();
+		var part;
+
+		while ( part = parts.pop() ) {
+			result = {
+				t: INFIX_OPERATOR,
+				s: '+',
+				o: [ part, result ]
+			};
+		}
+
+		return {
+			t: BRACKETED,
+			x: result
+		};
+	}
+}
+
+var name = /^[a-zA-Z_$][a-zA-Z_$0-9]*/;
+var spreadPattern = /^\s*\.{3}/;
+var legalReference = /^(?:[a-zA-Z$_0-9]|\\\.)+(?:(?:\.(?:[a-zA-Z$_0-9]|\\\.)+)|(?:\[[0-9]+\]))*/;
+var relaxedName = /^[a-zA-Z_$][-\/a-zA-Z_$0-9]*(?:\.(?:[a-zA-Z_$][-\/a-zA-Z_$0-9]*))*/;
+
+var identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;
+
+// http://mathiasbynens.be/notes/javascript-properties
+// can be any name, string literal, or number literal
+function readKey ( parser ) {
+	var token;
+
+	if ( token = readStringLiteral( parser ) ) {
+		return identifier.test( token.v ) ? token.v : '"' + token.v.replace( /"/g, '\\"' ) + '"';
+	}
+
+	if ( token = readNumberLiteral$1( parser ) ) {
+		return token.v;
+	}
+
+	if ( token = parser.matchPattern( name ) ) {
+		return token;
+	}
+
+	return null;
+}
+
+function readKeyValuePair ( parser ) {
+	var spread;
+	var start = parser.pos;
+
+	// allow whitespace between '{' and key
+	parser.allowWhitespace();
+
+	var refKey = parser.nextChar() !== '\'' && parser.nextChar() !== '"';
+	if ( refKey ) { spread = parser.matchPattern( spreadPattern ); }
+
+	var key = spread ? readExpression( parser ) : readKey( parser );
+	if ( key === null ) {
+		parser.pos = start;
+		return null;
+	}
+
+	// allow whitespace between key and ':'
+	parser.allowWhitespace();
+
+	// es2015 shorthand property
+	if ( refKey && ( parser.nextChar() === ',' || parser.nextChar() === '}' ) ) {
+		if ( !spread && !name.test( key ) ) {
+			parser.error( ("Expected a valid reference, but found '" + key + "' instead.") );
+		}
+
+		var pair = {
+			t: KEY_VALUE_PAIR,
+			k: key,
+			v: {
+				t: REFERENCE,
+				n: key
+			}
+		};
+
+		if ( spread ) {
+			pair.p = true;
+		}
+
+		return pair;
+	}
+
+
+	// next character must be ':'
+	if ( !parser.matchString( ':' ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	// allow whitespace between ':' and value
+	parser.allowWhitespace();
+
+	// next expression must be a, well... expression
+	var value = readExpression( parser );
+	if ( value === null ) {
+		parser.pos = start;
+		return null;
+	}
+
+	return {
+		t: KEY_VALUE_PAIR,
+		k: key,
+		v: value
+	};
+}
+
+function readKeyValuePairs ( parser ) {
+	var start = parser.pos;
+
+	var pair = readKeyValuePair( parser );
+	if ( pair === null ) {
+		return null;
+	}
+
+	var pairs = [ pair ];
+
+	if ( parser.matchString( ',' ) ) {
+		var keyValuePairs = readKeyValuePairs( parser );
+
+		if ( !keyValuePairs ) {
+			parser.pos = start;
+			return null;
+		}
+
+		return pairs.concat( keyValuePairs );
+	}
+
+	return pairs;
+}
+
+var readObjectLiteral = function ( parser ) {
+	var start = parser.pos;
+
+	// allow whitespace
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( '{' ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	var keyValuePairs = readKeyValuePairs( parser );
+
+	// allow whitespace between final value and '}'
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( '}' ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	return {
+		t: OBJECT_LITERAL,
+		m: keyValuePairs
+	};
+};
+
+var readArrayLiteral = function ( parser ) {
+	var start = parser.pos;
+
+	// allow whitespace before '['
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( '[' ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	var expressionList = readExpressionList( parser, true );
+
+	if ( !parser.matchString( ']' ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	return {
+		t: ARRAY_LITERAL,
+		m: expressionList
+	};
+};
+
+function readLiteral ( parser ) {
+	return readNumberLiteral$1( parser )         ||
+	       readBooleanLiteral( parser )        ||
+	       readStringLiteral( parser )         ||
+	       readTemplateStringLiteral( parser ) ||
+	       readObjectLiteral( parser )         ||
+	       readArrayLiteral( parser )          ||
+	       readNumberLiteral( parser );
+}
+
+// if a reference is a browser global, we don't deference it later, so it needs special treatment
+var globals = /^(?:Array|console|Date|RegExp|decodeURIComponent|decodeURI|encodeURIComponent|encodeURI|isFinite|isNaN|parseFloat|parseInt|JSON|Math|NaN|undefined|null|Object|Number|String|Boolean)\b/;
+
+// keywords are not valid references, with the exception of `this`
+var keywords = /^(?:break|case|catch|continue|debugger|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|var|void|while|with)$/;
+
+var prefixPattern = /^(?:\@\.|\@|~\/|(?:\^\^\/(?:\^\^\/)*(?:\.\.\/)*)|(?:\.\.\/)+|\.\/(?:\.\.\/)*|\.)/;
+var specials = /^(key|index|keypath|rootpath|this|global|shared|context|event|node|local)/;
+
+function readReference ( parser ) {
+	var prefix, name$$1, global, reference, lastDotIndex;
+
+	var startPos = parser.pos;
+
+	prefix = parser.matchPattern( prefixPattern ) || '';
+	name$$1 = ( !prefix && parser.relaxedNames && parser.matchPattern( relaxedName ) ) ||
+			parser.matchPattern( legalReference );
+	var actual = prefix.length + ( ( name$$1 && name$$1.length ) || 0 );
+
+	if ( prefix === '@.' ) {
+		prefix = '@';
+		if ( name$$1 ) { name$$1 = 'this.' + name$$1; }
+		else { name$$1 = 'this'; }
+	}
+
+	if ( !name$$1 && prefix ) {
+		name$$1 = prefix;
+		prefix = '';
+	}
+
+	if ( !name$$1 ) {
+		return null;
+	}
+
+	if ( prefix === '@' ) {
+		if ( !specials.test( name$$1 ) ) {
+			parser.error( ("Unrecognized special reference @" + name$$1) );
+		} else if ( ( ~name$$1.indexOf( 'event' ) || ~name$$1.indexOf( 'node' ) ) && !parser.inEvent ) {
+			parser.error( "@event and @node are only valid references within an event directive" );
+		} else if ( ~name$$1.indexOf( 'context' ) ) {
+			parser.pos = parser.pos - ( name$$1.length - 7 );
+			return {
+				t: BRACKETED,
+				x: {
+					t: REFERENCE,
+					n: '@context'
+				}
+			};
+		}
+	}
+
+	// bug out if it's a keyword (exception for ancestor/restricted refs - see https://github.com/ractivejs/ractive/issues/1497)
+	if ( !prefix && !parser.relaxedNames && keywords.test( name$$1 ) ) {
+		parser.pos = startPos;
+		return null;
+	}
+
+	// if this is a browser global, stop here
+	if ( !prefix && globals.test( name$$1 ) ) {
+		global = globals.exec( name$$1 )[0];
+		parser.pos = startPos + global.length;
+
+		return {
+			t: GLOBAL,
+			v: global
+		};
+	}
+
+	reference = ( prefix || '' ) + normalise( name$$1 );
+
+	if ( parser.matchString( '(' ) ) {
+		// if this is a method invocation (as opposed to a function) we need
+		// to strip the method name from the reference combo, else the context
+		// will be wrong
+		// but only if the reference was actually a member and not a refinement
+		lastDotIndex = reference.lastIndexOf( '.' );
+		if ( lastDotIndex !== -1 && name$$1[ name$$1.length - 1 ] !== ']' ) {
+			var refLength = reference.length;
+			reference = reference.substr( 0, lastDotIndex );
+			parser.pos = startPos + ( actual - ( refLength - lastDotIndex ) );
+		} else {
+			parser.pos -= 1;
+		}
+	}
+
+	return {
+		t: REFERENCE,
+		n: reference.replace( /^this\./, './' ).replace( /^this$/, '.' )
+	};
+}
+
+function readBracketedExpression ( parser ) {
+	if ( !parser.matchString( '(' ) ) { return null; }
+
+	parser.allowWhitespace();
+
+	var expr = readExpression( parser );
+
+	if ( !expr ) { parser.error( expectedExpression ); }
+
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( ')' ) ) { parser.error( expectedParen ); }
+
+	return {
+		t: BRACKETED,
+		x: expr
+	};
+}
+
+var readPrimary = function ( parser ) {
+	return readLiteral( parser )
+		|| readReference( parser )
+		|| readBracketedExpression( parser );
+};
+
+function readRefinement ( parser ) {
+	// some things call for strict refinement (partial names), meaning no space between reference and refinement
+	if ( !parser.strictRefinement ) {
+		parser.allowWhitespace();
+	}
+
+	// "." name
+	if ( parser.matchString( '.' ) ) {
+		parser.allowWhitespace();
+
+		var name$$1 = parser.matchPattern( name );
+		if ( name$$1 ) {
+			return {
+				t: REFINEMENT,
+				n: name$$1
+			};
+		}
+
+		parser.error( 'Expected a property name' );
+	}
+
+	// "[" expression "]"
+	if ( parser.matchString( '[' ) ) {
+		parser.allowWhitespace();
+
+		var expr = readExpression( parser );
+		if ( !expr ) { parser.error( expectedExpression ); }
+
+		parser.allowWhitespace();
+
+		if ( !parser.matchString( ']' ) ) { parser.error( "Expected ']'" ); }
+
+		return {
+			t: REFINEMENT,
+			x: expr
+		};
+	}
+
+	return null;
+}
+
+var readMemberOrInvocation = function ( parser ) {
+	var expression = readPrimary( parser );
+
+	if ( !expression ) { return null; }
+
+	while ( expression ) {
+		var refinement = readRefinement( parser );
+		if ( refinement ) {
+			expression = {
+				t: MEMBER,
+				x: expression,
+				r: refinement
+			};
+		}
+
+		else if ( parser.matchString( '(' ) ) {
+			parser.allowWhitespace();
+			var expressionList = readExpressionList( parser, true );
+
+			parser.allowWhitespace();
+
+			if ( !parser.matchString( ')' ) ) {
+				parser.error( expectedParen );
+			}
+
+			expression = {
+				t: INVOCATION,
+				x: expression
+			};
+
+			if ( expressionList ) { expression.o = expressionList; }
+		}
+
+		else {
+			break;
+		}
+	}
+
+	return expression;
+};
+
+var readTypeOf;
+
+var makePrefixSequenceMatcher = function ( symbol, fallthrough ) {
+	return function ( parser ) {
+		var expression;
+
+		if ( expression = fallthrough( parser ) ) {
+			return expression;
+		}
+
+		if ( !parser.matchString( symbol ) ) {
+			return null;
+		}
+
+		parser.allowWhitespace();
+
+		expression = readExpression( parser );
+		if ( !expression ) {
+			parser.error( expectedExpression );
+		}
+
+		return {
+			s: symbol,
+			o: expression,
+			t: PREFIX_OPERATOR
+		};
+	};
+};
+
+// create all prefix sequence matchers, return readTypeOf
+(function() {
+	var i, len, matcher, fallthrough;
+
+	var prefixOperators = '! ~ + - typeof'.split( ' ' );
+
+	fallthrough = readMemberOrInvocation;
+	for ( i = 0, len = prefixOperators.length; i < len; i += 1 ) {
+		matcher = makePrefixSequenceMatcher( prefixOperators[i], fallthrough );
+		fallthrough = matcher;
+	}
+
+	// typeof operator is higher precedence than multiplication, so provides the
+	// fallthrough for the multiplication sequence matcher we're about to create
+	// (we're skipping void and delete)
+	readTypeOf = fallthrough;
+}());
+
+var readTypeof = readTypeOf;
+
+var readLogicalOr;
+
+var makeInfixSequenceMatcher = function ( symbol, fallthrough ) {
+	return function ( parser ) {
+		// > and / have to be quoted
+		if ( parser.inUnquotedAttribute && ( symbol === '>' || symbol === '/' ) ) { return fallthrough( parser ); }
+
+		var start, left, right;
+
+		left = fallthrough( parser );
+		if ( !left ) {
+			return null;
+		}
+
+		// Loop to handle left-recursion in a case like `a * b * c` and produce
+		// left association, i.e. `(a * b) * c`.  The matcher can't call itself
+		// to parse `left` because that would be infinite regress.
+		while ( true ) {
+			start = parser.pos;
+
+			parser.allowWhitespace();
+
+			if ( !parser.matchString( symbol ) ) {
+				parser.pos = start;
+				return left;
+			}
+
+			// special case - in operator must not be followed by [a-zA-Z_$0-9]
+			if ( symbol === 'in' && /[a-zA-Z_$0-9]/.test( parser.remaining().charAt( 0 ) ) ) {
+				parser.pos = start;
+				return left;
+			}
+
+			parser.allowWhitespace();
+
+			// right operand must also consist of only higher-precedence operators
+			right = fallthrough( parser );
+			if ( !right ) {
+				parser.pos = start;
+				return left;
+			}
+
+			left = {
+				t: INFIX_OPERATOR,
+				s: symbol,
+				o: [ left, right ]
+			};
+
+			// Loop back around.  If we don't see another occurrence of the symbol,
+			// we'll return left.
+		}
+	};
+};
+
+// create all infix sequence matchers, and return readLogicalOr
+(function() {
+	var i, len, matcher, fallthrough;
+
+	// All the infix operators on order of precedence (source: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)
+	// Each sequence matcher will initially fall through to its higher precedence
+	// neighbour, and only attempt to match if one of the higher precedence operators
+	// (or, ultimately, a literal, reference, or bracketed expression) already matched
+	var infixOperators = '* / % + - << >> >>> < <= > >= in instanceof == != === !== & ^ | && ||'.split( ' ' );
+
+	// A typeof operator is higher precedence than multiplication
+	fallthrough = readTypeof;
+	for ( i = 0, len = infixOperators.length; i < len; i += 1 ) {
+		matcher = makeInfixSequenceMatcher( infixOperators[i], fallthrough );
+		fallthrough = matcher;
+	}
+
+	// Logical OR is the fallthrough for the conditional matcher
+	readLogicalOr = fallthrough;
+}());
+
+var readLogicalOr$1 = readLogicalOr;
+
+// The conditional operator is the lowest precedence operator, so we start here
+function getConditional ( parser ) {
+	var expression = readLogicalOr$1( parser );
+	if ( !expression ) {
+		return null;
+	}
+
+	var start = parser.pos;
+
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( '?' ) ) {
+		parser.pos = start;
+		return expression;
+	}
+
+	parser.allowWhitespace();
+
+	var ifTrue = readExpression( parser );
+	if ( !ifTrue ) {
+		parser.error( expectedExpression );
+	}
+
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( ':' ) ) {
+		parser.error( 'Expected ":"' );
+	}
+
+	parser.allowWhitespace();
+
+	var ifFalse = readExpression( parser );
+	if ( !ifFalse ) {
+		parser.error( expectedExpression );
+	}
+
+	return {
+		t: CONDITIONAL,
+		o: [ expression, ifTrue, ifFalse ]
+	};
+}
+
+function readExpression ( parser ) {
+	// The conditional operator is the lowest precedence operator (except yield,
+	// assignment operators, and commas, none of which are supported), so we
+	// start there. If it doesn't match, it 'falls through' to progressively
+	// higher precedence operators, until it eventually matches (or fails to
+	// match) a 'primary' - a literal or a reference. This way, the abstract syntax
+	// tree has everything in its proper place, i.e. 2 + 3 * 4 === 14, not 20.
+	return getConditional( parser );
+}
+
+function readExpressionList ( parser, spread ) {
+	var isSpread;
+	var expressions = [];
+
+	var pos = parser.pos;
+
+	do {
+		parser.allowWhitespace();
+
+		if ( spread ) {
+			isSpread = parser.matchPattern( spreadPattern );
+		}
+
+		var expr = readExpression( parser );
+
+		if ( expr === null && expressions.length ) {
+			parser.error( expectedExpression );
+		} else if ( expr === null ) {
+			parser.pos = pos;
+			return null;
+		}
+
+		if ( isSpread ) {
+			expr.p = true;
+		}
+
+		expressions.push( expr );
+
+		parser.allowWhitespace();
+	} while ( parser.matchString( ',' ) );
+
+	return expressions;
+}
+
+function readExpressionOrReference ( parser, expectedFollowers ) {
+	var start = parser.pos;
+	var expression = readExpression( parser );
+
+	if ( !expression ) {
+		// valid reference but invalid expression e.g. `{{new}}`?
+		var ref = parser.matchPattern( /^(\w+)/ );
+		if ( ref ) {
+			return {
+				t: REFERENCE,
+				n: ref
+			};
+		}
+
+		return null;
+	}
+
+	for ( var i = 0; i < expectedFollowers.length; i += 1 ) {
+		if ( parser.remaining().substr( 0, expectedFollowers[i].length ) === expectedFollowers[i] ) {
+			return expression;
+		}
+	}
+
+	parser.pos = start;
+	return readReference( parser );
+}
+
+function flattenExpression ( expression ) {
+	var refs;
+	var count = 0;
+
+	extractRefs( expression, refs = [] );
+	var stringified = stringify( expression );
+
+	return {
+		r: refs,
+		s: getVars(stringified)
+	};
+
+	function getVars(expr) {
+		var vars = [];
+		for ( var i = count - 1; i >= 0; i-- ) {
+			vars.push( ("x$" + i) );
+		}
+		return vars.length ? ("(function(){var " + (vars.join(',')) + ";return(" + expr + ");})()") : expr;
+	}
+
+	function stringify ( node ) {
+		if ( typeof node === 'string' ) {
+			return node;
+		}
+
+		switch ( node.t ) {
+			case BOOLEAN_LITERAL:
+			case GLOBAL:
+			case NUMBER_LITERAL:
+			case REGEXP_LITERAL:
+				return node.v;
+
+			case STRING_LITERAL:
+				return JSON.stringify( String( node.v ) );
+
+			case ARRAY_LITERAL:
+				if ( node.m && hasSpread( node.m )) {
+					return ("[].concat(" + (makeSpread( node.m, '[', ']', stringify )) + ")");
+				} else {
+					return '[' + ( node.m ? node.m.map( stringify ).join( ',' ) : '' ) + ']';
+				}
+
+			case OBJECT_LITERAL:
+				if ( node.m && hasSpread( node.m ) ) {
+					return ("Object.assign({}," + (makeSpread( node.m, '{', '}', stringifyPair)) + ")");
+				} else {
+					return '{' + ( node.m ? node.m.map( function (n) { return ((n.k) + ":" + (stringify( n.v ))); } ).join( ',' ) : '' ) + '}';
+				}
+
+			case PREFIX_OPERATOR:
+				return ( node.s === 'typeof' ? 'typeof ' : node.s ) + stringify( node.o );
+
+			case INFIX_OPERATOR:
+				return stringify( node.o[0] ) + ( node.s.substr( 0, 2 ) === 'in' ? ' ' + node.s + ' ' : node.s ) + stringify( node.o[1] );
+
+			case INVOCATION:
+				if ( node.o && hasSpread( node.o ) ) {
+					var id = count++;
+					return ("(x$" + id + "=" + (stringify(node.x)) + ").apply(x$" + id + "," + (stringify({ t: ARRAY_LITERAL, m: node.o })) + ")");
+				} else {
+					return stringify( node.x ) + '(' + ( node.o ? node.o.map( stringify ).join( ',' ) : '' ) + ')';
+				}
+
+			case BRACKETED:
+				return '(' + stringify( node.x ) + ')';
+
+			case MEMBER:
+				return stringify( node.x ) + stringify( node.r );
+
+			case REFINEMENT:
+				return ( node.n ? '.' + node.n : '[' + stringify( node.x ) + ']' );
+
+			case CONDITIONAL:
+				return stringify( node.o[0] ) + '?' + stringify( node.o[1] ) + ':' + stringify( node.o[2] );
+
+			case REFERENCE:
+				return '_' + refs.indexOf( node.n );
+
+			default:
+				throw new Error( 'Expected legal JavaScript' );
+		}
+	}
+
+	function stringifyPair ( node ) { return node.p ? stringify( node.k ) : ((node.k) + ":" + (stringify( node.v ))); }
+
+	function makeSpread ( list, open, close, fn ) {
+		var out = list.reduce( function ( a, c ) {
+			if ( c.p ) {
+				a.str += "" + (a.open ? close + ',' : a.str.length ? ',' : '') + (fn( c ));
+			} else {
+				a.str += "" + (!a.str.length ? open : !a.open ? ',' + open : ',') + (fn( c ));
+			}
+			a.open = !c.p;
+			return a;
+		}, { open: false, str: '' } );
+		if ( out.open ) { out.str += close; }
+		return out.str;
+	}
+}
+
+function hasSpread ( list ) {
+	for ( var i = 0; i < list.length; i++ ) {
+		if ( list[i].p ) { return true; }
+	}
+
+	return false;
+}
+
+// TODO maybe refactor this?
+function extractRefs ( node, refs ) {
+	if ( node.t === REFERENCE && typeof node.n === 'string' ) {
+		if ( !~refs.indexOf( node.n ) ) {
+			refs.unshift( node.n );
+		}
+	}
+
+	var list = node.o || node.m;
+	if ( list ) {
+		if ( isObject( list ) ) {
+			extractRefs( list, refs );
+		} else {
+			var i = list.length;
+			while ( i-- ) {
+				extractRefs( list[i], refs );
+			}
+		}
+	}
+
+	if ( node.k && node.t === KEY_VALUE_PAIR && typeof node.k !== 'string' ) {
+		extractRefs( node.k, refs );
+	}
+
+	if ( node.x ) {
+		extractRefs( node.x, refs );
+	}
+
+	if ( node.r ) {
+		extractRefs( node.r, refs );
+	}
+
+	if ( node.v ) {
+		extractRefs( node.v, refs );
+	}
+}
+
+function refineExpression ( expression, mustache ) {
+	var referenceExpression;
+
+	if ( expression ) {
+		while ( expression.t === BRACKETED && expression.x ) {
+			expression = expression.x;
+		}
+
+		if ( expression.t === REFERENCE ) {
+			var n = expression.n;
+			if ( !~n.indexOf( '@context' ) ) {
+				mustache.r = expression.n;
+			} else {
+				mustache.x = flattenExpression( expression );
+			}
+		} else {
+			if ( referenceExpression = getReferenceExpression( expression ) ) {
+				mustache.rx = referenceExpression;
+			} else {
+				mustache.x = flattenExpression( expression );
+			}
+		}
+
+		return mustache;
+	}
+}
+
+// TODO refactor this! it's bewildering
+function getReferenceExpression ( expression ) {
+	var members = [];
+	var refinement;
+
+	while ( expression.t === MEMBER && expression.r.t === REFINEMENT ) {
+		refinement = expression.r;
+
+		if ( refinement.x ) {
+			if ( refinement.x.t === REFERENCE ) {
+				members.unshift( refinement.x );
+			} else {
+				members.unshift( flattenExpression( refinement.x ) );
+			}
+		} else {
+			members.unshift( refinement.n );
+		}
+
+		expression = expression.x;
+	}
+
+	if ( expression.t !== REFERENCE ) {
+		return null;
+	}
+
+	return {
+		r: expression.n,
+		m: members
+	};
+}
+
+var attributeNamePattern = /^[^\s"'>\/=]+/;
+var onPattern = /^on/;
+var eventPattern = /^on-([a-zA-Z\*\.$_]((?:[a-zA-Z\*\.$_0-9\-]|\\-)+))$/;
+var reservedEventNames = /^(?:change|reset|teardown|update|construct|config|init|render|complete|unrender|detach|insert|destruct|attachchild|detachchild)$/;
+var decoratorPattern = /^as-([a-z-A-Z][-a-zA-Z_0-9]*)$/;
+var transitionPattern = /^([a-zA-Z](?:(?!-in-out)[-a-zA-Z_0-9])*)-(in|out|in-out)$/;
+var boundPattern = /^((bind|class)-(([-a-zA-Z0-9_])+))$/;
+var directives = {
+	lazy: { t: BINDING_FLAG, v: 'l' },
+	twoway: { t: BINDING_FLAG, v: 't' },
+	'no-delegation': { t: DELEGATE_FLAG }
+};
+var unquotedAttributeValueTextPattern = /^[^\s"'=<>\/`]+/;
+var proxyEvent = /^[^\s"'=<>@\[\]()]*/;
+var whitespace = /^\s+/;
+
+var slashes = /\\/g;
+function splitEvent ( str ) {
+	var result = [];
+	var s = 0;
+
+	for ( var i = 0; i < str.length; i++ ) {
+		if ( str[i] === '-' && str[ i - 1 ] !== '\\' ) {
+			result.push( str.substring( s, i ).replace( slashes, '' ) );
+			s = i + 1;
+		}
+	}
+
+	result.push( str.substring( s ).replace( slashes, '' ) );
+
+	return result;
+}
+
+function readAttribute ( parser ) {
+	var name, i, nearest, idx;
+
+	parser.allowWhitespace();
+
+	name = parser.matchPattern( attributeNamePattern );
+	if ( !name ) {
+		return null;
+	}
+
+	// check for accidental delimiter consumption e.g. <tag bool{{>attrs}} />
+	nearest = name.length;
+	for ( i = 0; i < parser.tags.length; i++ ) {
+		if ( ~( idx = name.indexOf( parser.tags[ i ].open ) ) ) {
+			if ( idx < nearest ) { nearest = idx; }
+		}
+	}
+	if ( nearest < name.length ) {
+		parser.pos -= name.length - nearest;
+		name = name.substr( 0, nearest );
+		if ( !name ) { return null; }
+	}
+
+	return { n: name };
+}
+
+function readAttributeValue ( parser ) {
+	var start = parser.pos;
+
+	// next character must be `=`, `/`, `>` or whitespace
+	if ( !/[=\/>\s]/.test( parser.nextChar() ) ) {
+		parser.error( 'Expected `=`, `/`, `>` or whitespace' );
+	}
+
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( '=' ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	parser.allowWhitespace();
+
+	var valueStart = parser.pos;
+	var startDepth = parser.sectionDepth;
+
+	var value = readQuotedAttributeValue( parser, "'" ) ||
+			readQuotedAttributeValue( parser, "\"" ) ||
+			readUnquotedAttributeValue( parser );
+
+	if ( value === null ) {
+		parser.error( 'Expected valid attribute value' );
+	}
+
+	if ( parser.sectionDepth !== startDepth ) {
+		parser.pos = valueStart;
+		parser.error( 'An attribute value must contain as many opening section tags as closing section tags' );
+	}
+
+	if ( !value.length ) {
+		return '';
+	}
+
+	if ( value.length === 1 && typeof value[0] === 'string' ) {
+		return decodeCharacterReferences( value[0] );
+	}
+
+	return value;
+}
+
+function readUnquotedAttributeValueToken ( parser ) {
+	var text, index;
+
+	var start = parser.pos;
+
+	text = parser.matchPattern( unquotedAttributeValueTextPattern );
+
+	if ( !text ) {
+		return null;
+	}
+
+	var haystack = text;
+	var needles = parser.tags.map( function (t) { return t.open; } ); // TODO refactor... we do this in readText.js as well
+
+	if ( ( index = getLowestIndex( haystack, needles ) ) !== -1 ) {
+		text = text.substr( 0, index );
+		parser.pos = start + text.length;
+	}
+
+	return text;
+}
+
+function readUnquotedAttributeValue ( parser ) {
+	parser.inAttribute = true;
+
+	var tokens = [];
+
+	var token = readMustache( parser ) || readUnquotedAttributeValueToken( parser );
+	while ( token ) {
+		tokens.push( token );
+		token = readMustache( parser ) || readUnquotedAttributeValueToken( parser );
+	}
+
+	if ( !tokens.length ) {
+		return null;
+	}
+
+	parser.inAttribute = false;
+	return tokens;
+}
+
+function readQuotedAttributeValue ( parser, quoteMark ) {
+	var start = parser.pos;
+
+	if ( !parser.matchString( quoteMark ) ) {
+		return null;
+	}
+
+	parser.inAttribute = quoteMark;
+
+	var tokens = [];
+
+	var token = readMustache( parser ) || readQuotedStringToken( parser, quoteMark );
+	while ( token !== null ) {
+		tokens.push( token );
+		token = readMustache( parser ) || readQuotedStringToken( parser, quoteMark );
+	}
+
+	if ( !parser.matchString( quoteMark ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	parser.inAttribute = false;
+
+	return tokens;
+}
+
+function readQuotedStringToken ( parser, quoteMark ) {
+	var haystack = parser.remaining();
+
+	var needles = parser.tags.map( function (t) { return t.open; } ); // TODO refactor... we do this in readText.js as well
+	needles.push( quoteMark );
+
+	var index = getLowestIndex( haystack, needles );
+
+	if ( index === -1 ) {
+		parser.error( 'Quoted attribute value must have a closing quote' );
+	}
+
+	if ( !index ) {
+		return null;
+	}
+
+	parser.pos += index;
+	return haystack.substr( 0, index );
+}
+
+function readAttributeOrDirective ( parser ) {
+	var match, directive;
+
+	var attribute = readAttribute( parser, false );
+
+	if ( !attribute ) { return null; }
+
+		// lazy, twoway
+	if ( directive = directives[ attribute.n ] ) {
+		attribute.t = directive.t;
+		if ( directive.v ) { attribute.v = directive.v; }
+		delete attribute.n; // no name necessary
+		parser.allowWhitespace();
+		if ( parser.nextChar() === '=' ) { attribute.f = readAttributeValue( parser ); }
+	}
+
+		// decorators
+	else if ( match = decoratorPattern.exec( attribute.n ) ) {
+		attribute.n = match[1];
+		attribute.t = DECORATOR;
+		readArguments( parser, attribute );
+	}
+
+		// transitions
+	else if ( match = transitionPattern.exec( attribute.n ) ) {
+		attribute.n = match[1];
+		attribute.t = TRANSITION;
+		readArguments( parser, attribute );
+		attribute.v = match[2] === 'in-out' ? 't0' : match[2] === 'in' ? 't1' : 't2';
+	}
+
+		// on-click etc
+	else if ( match = eventPattern.exec( attribute.n ) ) {
+		attribute.n = splitEvent( match[1] );
+		attribute.t = EVENT;
+
+		parser.inEvent = true;
+
+			// check for a proxy event
+		if ( !readProxyEvent( parser, attribute ) ) {
+				// otherwise, it's an expression
+			readArguments( parser, attribute, true );
+		} else if ( reservedEventNames.test( attribute.f ) ) {
+			parser.pos -= attribute.f.length;
+			parser.error( 'Cannot use reserved event names (change, reset, teardown, update, construct, config, init, render, unrender, complete, detach, insert, destruct, attachchild, detachchild)' );
+		}
+
+		parser.inEvent = false;
+	}
+
+		// bound directives
+	else if ( match = boundPattern.exec( attribute.n ) ){
+		var bind = match[2] === 'bind';
+		attribute.n = bind ? match[3] : match[1];
+		attribute.t = ATTRIBUTE;
+		readArguments( parser, attribute, false, true );
+
+		if ( !attribute.f && bind ) {
+			attribute.f = [{ t: INTERPOLATOR, r: match[3] }];
+		}
+	}
+
+	else {
+		parser.allowWhitespace();
+		var value = parser.nextChar() === '=' ? readAttributeValue( parser ) : null;
+		attribute.f = value != null ? value : attribute.f;
+
+		if ( parser.sanitizeEventAttributes && onPattern.test( attribute.n ) ) {
+			return { exclude: true };
+		} else {
+			attribute.f = attribute.f || ( attribute.f === '' ? '' : 0 );
+			attribute.t = ATTRIBUTE;
+		}
+	}
+
+	return attribute;
+}
+
+function readProxyEvent ( parser, attribute ) {
+	var start = parser.pos;
+	if ( !parser.matchString( '=' ) ) { parser.error( "Missing required directive arguments" ); }
+
+	var quote = parser.matchString( "'" ) || parser.matchString( "\"" );
+	parser.allowWhitespace();
+	var proxy = parser.matchPattern( proxyEvent );
+
+	if ( proxy !== undefined ) {
+		if ( quote ) {
+			parser.allowWhitespace();
+			if ( !parser.matchString( quote ) ) { parser.pos = start; }
+			else { return ( attribute.f = proxy ) || true; }
+		} else if ( !parser.matchPattern( whitespace ) ) {
+			parser.pos = start;
+		} else {
+			return ( attribute.f = proxy ) || true;
+		}
+	} else {
+		parser.pos = start;
+	}
+}
+
+function readArguments ( parser, attribute, required, single ) {
+	if ( required === void 0 ) required = false;
+	if ( single === void 0 ) single = false;
+
+	parser.allowWhitespace();
+	if ( !parser.matchString( '=' ) ) {
+		if ( required ) { parser.error( "Missing required directive arguments" ); }
+		return;
+	}
+	parser.allowWhitespace();
+
+	var quote = parser.matchString( '"' ) || parser.matchString( "'" );
+	var spread = parser.spreadArgs;
+	parser.spreadArgs = true;
+	parser.inUnquotedAttribute = !quote;
+	var expr = single ? readExpressionOrReference( parser, [ quote || ' ', '/', '>' ] ) : { m: readExpressionList( parser ), t: ARRAY_LITERAL };
+	parser.inUnquotedAttribute = false;
+	parser.spreadArgs = spread;
+
+	if ( quote ) {
+		parser.allowWhitespace();
+		if ( parser.matchString( quote ) !== quote ) { parser.error( ("Expected matching quote '" + quote + "'") ); }
+	}
+
+	if ( single ) {
+		var interpolator = { t: INTERPOLATOR };
+		refineExpression( expr, interpolator );
+		attribute.f = [interpolator];
+	} else {
+		attribute.f = flattenExpression( expr );
+	}
+}
+
+var delimiterChangeToken = { t: DELIMCHANGE, exclude: true };
+
+function readMustache ( parser ) {
+	var mustache, i;
+
+	// If we're inside a <script> or <style> tag, and we're not
+	// interpolating, bug out
+	if ( parser.interpolate[ parser.inside ] === false ) {
+		return null;
+	}
+
+	for ( i = 0; i < parser.tags.length; i += 1 ) {
+		if ( mustache = readMustacheOfType( parser, parser.tags[i] ) ) {
+			return mustache;
+		}
+	}
+
+	if ( parser.inTag && !parser.inAttribute ) {
+		mustache = readAttributeOrDirective( parser );
+		if ( mustache ) {
+			parser.allowWhitespace();
+			return mustache;
+		}
+	}
+}
+
+function readMustacheOfType ( parser, tag ) {
+	var mustache, reader, i;
+
+	var start = parser.pos;
+
+	if ( parser.matchString( '\\' + tag.open ) ) {
+		if ( start === 0 || parser.str[ start - 1 ] !== '\\' ) {
+			return tag.open;
+		}
+	} else if ( !parser.matchString( tag.open ) ) {
+		return null;
+	}
+
+	// delimiter change?
+	if ( mustache = readDelimiterChange( parser ) ) {
+		// find closing delimiter or abort...
+		if ( !parser.matchString( tag.close ) ) {
+			return null;
+		}
+
+		// ...then make the switch
+		tag.open = mustache[0];
+		tag.close = mustache[1];
+		parser.sortMustacheTags();
+
+		return delimiterChangeToken;
+	}
+
+	parser.allowWhitespace();
+
+	// illegal section closer
+	if ( parser.matchString( '/' ) ) {
+		parser.pos -= 1;
+		var rewind = parser.pos;
+		if ( !readNumberLiteral( parser ) ) {
+			parser.pos = rewind - ( tag.close.length );
+			if ( parser.inAttribute ) {
+				parser.pos = start;
+				return null;
+			} else {
+				parser.error( 'Attempted to close a section that wasn\'t open' );
+			}
+		} else {
+			parser.pos = rewind;
+		}
+	}
+
+	for ( i = 0; i < tag.readers.length; i += 1 ) {
+		reader = tag.readers[i];
+
+		if ( mustache = reader( parser, tag ) ) {
+			if ( tag.isStatic ) {
+				mustache.s = 1;
+			}
+
+			if ( parser.includeLinePositions ) {
+				mustache.p = parser.getLinePos( start );
+			}
+
+			return mustache;
+		}
+	}
+
+	parser.pos = start;
+	return null;
+}
+
+function readTriple ( parser, tag ) {
+	var expression = readExpression( parser );
+
+	if ( !expression ) {
+		return null;
+	}
+
+	if ( !parser.matchString( tag.close ) ) {
+		parser.error( ("Expected closing delimiter '" + (tag.close) + "'") );
+	}
+
+	var triple = { t: TRIPLE };
+	refineExpression( expression, triple ); // TODO handle this differently - it's mysterious
+
+	return triple;
+}
+
+function readUnescaped ( parser, tag ) {
+	if ( !parser.matchString( '&' ) ) {
+		return null;
+	}
+
+	parser.allowWhitespace();
+
+	var expression = readExpression( parser );
+
+	if ( !expression ) {
+		return null;
+	}
+
+	if ( !parser.matchString( tag.close ) ) {
+		parser.error( ("Expected closing delimiter '" + (tag.close) + "'") );
+	}
+
+	var triple = { t: TRIPLE };
+	refineExpression( expression, triple ); // TODO handle this differently - it's mysterious
+
+	return triple;
+}
+
+var legalAlias = /^(?:[a-zA-Z$_0-9]|\\\.)+(?:(?:(?:[a-zA-Z$_0-9]|\\\.)+)|(?:\[[0-9]+\]))*/;
+var asRE = /^as/i;
+
+function readAliases( parser ) {
+	var aliases = [];
+	var alias;
+	var start = parser.pos;
+
+	parser.allowWhitespace();
+
+	alias = readAlias( parser );
+
+	if ( alias ) {
+		alias.x = refineExpression( alias.x, {} );
+		aliases.push( alias );
+
+		parser.allowWhitespace();
+
+		while ( parser.matchString(',') ) {
+			alias = readAlias( parser );
+
+			if ( !alias ) {
+				parser.error( 'Expected another alias.' );
+			}
+
+			alias.x = refineExpression( alias.x, {} );
+			aliases.push( alias );
+
+			parser.allowWhitespace();
+		}
+
+		return aliases;
+	}
+
+	parser.pos = start;
+	return null;
+}
+
+function readAlias( parser ) {
+	var start = parser.pos;
+
+	parser.allowWhitespace();
+
+	var expr = readExpression( parser, [] );
+
+	if ( !expr ) {
+		parser.pos = start;
+		return null;
+	}
+
+	parser.allowWhitespace();
+
+	if ( !parser.matchPattern( asRE ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	parser.allowWhitespace();
+
+	var alias = parser.matchPattern( legalAlias );
+
+	if ( !alias ) {
+		parser.error( 'Expected a legal alias name.' );
+	}
+
+	return { n: alias, x: expr };
+}
+
+function readPartial ( parser, tag ) {
+	var type = parser.matchString( '>' ) || parser.matchString( 'yield' );
+	var partial = { t: type === '>' ? PARTIAL : YIELDER };
+	var aliases;
+
+	if ( !type ) { return null; }
+
+	parser.allowWhitespace();
+
+	if ( type === '>' || !( aliases = parser.matchString( 'with' ) ) ) {
+		// Partial names can include hyphens, so we can't use readExpression
+		// blindly. Instead, we use the `relaxedNames` flag to indicate that
+		// `foo-bar` should be read as a single name, rather than 'subtract
+		// bar from foo'
+		parser.relaxedNames = parser.strictRefinement = true;
+		var expression = readExpression( parser );
+		parser.relaxedNames = parser.strictRefinement = false;
+
+		if ( !expression && type === '>' ) { return null; }
+
+		if ( expression ) {
+			refineExpression( expression, partial ); // TODO...
+			parser.allowWhitespace();
+			if ( type !== '>' ) { aliases = parser.matchString( 'with' ); }
+		}
+	}
+
+	parser.allowWhitespace();
+
+	// check for alias context e.g. `{{>foo bar as bat, bip as bop}}`
+	if ( aliases || type === '>' ) {
+		aliases = readAliases( parser );
+		if ( aliases && aliases.length ) {
+			partial.z = aliases;
+		}
+
+		// otherwise check for literal context e.g. `{{>foo bar}}` then
+		// turn it into `{{#with bar}}{{>foo}}{{/with}}`
+		else if ( type === '>' ) {
+			var context = readExpression( parser );
+			if ( context) {
+				partial.c = {};
+				refineExpression( context, partial.c );
+			}
+		}
+
+		else {
+			// {{yield with}} requires some aliases
+			parser.error( "Expected one or more aliases" );
+		}
+	}
+
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( tag.close ) ) {
+		parser.error( ("Expected closing delimiter '" + (tag.close) + "'") );
+	}
+
+	return partial;
+}
+
+function readComment ( parser, tag ) {
+	if ( !parser.matchString( '!' ) ) {
+		return null;
+	}
+
+	var index = parser.remaining().indexOf( tag.close );
+
+	if ( index !== -1 ) {
+		parser.pos += index + tag.close.length;
+		return { t: COMMENT };
+	}
+}
+
+function readInterpolator ( parser, tag ) {
+	var expression, err;
+
+	var start = parser.pos;
+
+	// TODO would be good for perf if we could do away with the try-catch
+	try {
+		expression = readExpressionOrReference( parser, [ tag.close ] );
+	} catch ( e ) {
+		err = e;
+	}
+
+	if ( !expression ) {
+		if ( parser.str.charAt( start ) === '!' ) {
+			// special case - comment
+			parser.pos = start;
+			return null;
+		}
+
+		if ( err ) {
+			throw err;
+		}
+	}
+
+	if ( !parser.matchString( tag.close ) ) {
+		parser.error( ("Expected closing delimiter '" + (tag.close) + "' after reference") );
+
+		if ( !expression ) {
+			// special case - comment
+			if ( parser.nextChar() === '!' ) {
+				return null;
+			}
+
+			parser.error( "Expected expression or legal reference" );
+		}
+	}
+
+	var interpolator = { t: INTERPOLATOR };
+	refineExpression( expression, interpolator ); // TODO handle this differently - it's mysterious
+
+	return interpolator;
+}
+
+function readClosing ( parser, tag ) {
+	var start = parser.pos;
+
+	if ( !parser.matchString( tag.open ) ) {
+		return null;
+	}
+
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( '/' ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	parser.allowWhitespace();
+
+	var remaining = parser.remaining();
+	var index = remaining.indexOf( tag.close );
+
+	if ( index !== -1 ) {
+		var closing = {
+			t: CLOSING,
+			r: remaining.substr( 0, index ).split( ' ' )[0]
+		};
+
+		parser.pos += index;
+
+		if ( !parser.matchString( tag.close ) ) {
+			parser.error( ("Expected closing delimiter '" + (tag.close) + "'") );
+		}
+
+		return closing;
+	}
+
+	parser.pos = start;
+	return null;
+}
+
+var elsePattern = /^\s*else\s*/;
+
+function readElse ( parser, tag ) {
+	var start = parser.pos;
+
+	if ( !parser.matchString( tag.open ) ) {
+		return null;
+	}
+
+	if ( !parser.matchPattern( elsePattern ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	if ( !parser.matchString( tag.close ) ) {
+		parser.error( ("Expected closing delimiter '" + (tag.close) + "'") );
+	}
+
+	return {
+		t: ELSE
+	};
+}
+
+var elsePattern$1 = /^\s*elseif\s+/;
+
+function readElseIf ( parser, tag ) {
+	var start = parser.pos;
+
+	if ( !parser.matchString( tag.open ) ) {
+		return null;
+	}
+
+	if ( !parser.matchPattern( elsePattern$1 ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	var expression = readExpression( parser );
+
+	if ( !parser.matchString( tag.close ) ) {
+		parser.error( ("Expected closing delimiter '" + (tag.close) + "'") );
+	}
+
+	return {
+		t: ELSEIF,
+		x: expression
+	};
+}
+
+var handlebarsBlockCodes = {
+	each:    SECTION_EACH,
+	if:      SECTION_IF,
+	with:    SECTION_IF_WITH,
+	unless:  SECTION_UNLESS
+};
+
+var indexRefPattern = /^\s*:\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;
+var keyIndexRefPattern = /^\s*,\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/;
+var handlebarsBlockPattern = new RegExp( '^(' + Object.keys( handlebarsBlockCodes ).join( '|' ) + ')\\b' );
+
+function readSection ( parser, tag ) {
+	var expression, section, child, children, hasElse, block, unlessBlock, closed, i, expectedClose;
+	var aliasOnly = false;
+
+	var start = parser.pos;
+
+	if ( parser.matchString( '^' ) ) {
+		// watch out for parent context refs - {{^^/^^/foo}}
+		if ( parser.matchString( '^/' ) ){
+			parser.pos = start;
+			return null;
+		}
+		section = { t: SECTION, f: [], n: SECTION_UNLESS };
+	} else if ( parser.matchString( '#' ) ) {
+		section = { t: SECTION, f: [] };
+
+		if ( parser.matchString( 'partial' ) ) {
+			parser.pos = start - parser.standardDelimiters[0].length;
+			parser.error( 'Partial definitions can only be at the top level of the template, or immediately inside components' );
+		}
+
+		if ( block = parser.matchPattern( handlebarsBlockPattern ) ) {
+			expectedClose = block;
+			section.n = handlebarsBlockCodes[ block ];
+		}
+	} else {
+		return null;
+	}
+
+	parser.allowWhitespace();
+
+	if ( block === 'with' ) {
+		var aliases = readAliases( parser );
+		if ( aliases ) {
+			aliasOnly = true;
+			section.z = aliases;
+			section.t = ALIAS;
+		}
+	} else if ( block === 'each' ) {
+		var alias = readAlias( parser );
+		if ( alias ) {
+			section.z = [ { n: alias.n, x: { r: '.' } } ];
+			expression = alias.x;
+		}
+	}
+
+	if ( !aliasOnly ) {
+		if ( !expression ) { expression = readExpression( parser ); }
+
+		if ( !expression ) {
+			parser.error( 'Expected expression' );
+		}
+
+		// optional index and key references
+		if ( i = parser.matchPattern( indexRefPattern ) ) {
+			var extra;
+
+			if ( extra = parser.matchPattern( keyIndexRefPattern ) ) {
+				section.i = i + ',' + extra;
+			} else {
+				section.i = i;
+			}
+		}
+
+		if ( !block && expression.n ) {
+			expectedClose = expression.n;
+		}
+	}
+
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( tag.close ) ) {
+		parser.error( ("Expected closing delimiter '" + (tag.close) + "'") );
+	}
+
+	parser.sectionDepth += 1;
+	children = section.f;
+
+	var pos;
+	do {
+		pos = parser.pos;
+		if ( child = readClosing( parser, tag ) ) {
+			if ( expectedClose && child.r !== expectedClose ) {
+				if ( !block ) {
+					if ( child.r ) { parser.warn( ("Expected " + (tag.open) + "/" + expectedClose + (tag.close) + " but found " + (tag.open) + "/" + (child.r) + (tag.close)) ); }
+				} else {
+					parser.pos = pos;
+					parser.error( ("Expected " + (tag.open) + "/" + expectedClose + (tag.close)) );
+				}
+			}
+
+			parser.sectionDepth -= 1;
+			closed = true;
+		}
+
+		else if ( !aliasOnly && ( child = readElseIf( parser, tag ) ) ) {
+			if ( section.n === SECTION_UNLESS ) {
+				parser.error( '{{else}} not allowed in {{#unless}}' );
+			}
+
+			if ( hasElse ) {
+				parser.error( 'illegal {{elseif...}} after {{else}}' );
+			}
+
+			if ( !unlessBlock ) {
+				unlessBlock = [];
+			}
+
+			var mustache = {
+				t: SECTION,
+				n: SECTION_IF,
+				f: children = []
+			};
+			refineExpression( child.x, mustache );
+
+			unlessBlock.push( mustache );
+		}
+
+		else if ( !aliasOnly && ( child = readElse( parser, tag ) ) ) {
+			if ( section.n === SECTION_UNLESS ) {
+				parser.error( '{{else}} not allowed in {{#unless}}' );
+			}
+
+			if ( hasElse ) {
+				parser.error( 'there can only be one {{else}} block, at the end of a section' );
+			}
+
+			hasElse = true;
+
+			// use an unless block if there's no elseif
+			if ( !unlessBlock ) {
+				unlessBlock = [];
+			}
+
+			unlessBlock.push({
+				t: SECTION,
+				n: SECTION_UNLESS,
+				f: children = []
+			});
+		}
+
+		else {
+			child = parser.read( READERS );
+
+			if ( !child ) {
+				break;
+			}
+
+			children.push( child );
+		}
+	} while ( !closed );
+
+	if ( unlessBlock ) {
+		section.l = unlessBlock;
+	}
+
+	if ( !aliasOnly ) {
+		refineExpression( expression, section );
+	}
+
+	// TODO if a section is empty it should be discarded. Don't do
+	// that here though - we need to clean everything up first, as
+	// it may contain removeable whitespace. As a temporary measure,
+	// to pass the existing tests, remove empty `f` arrays
+	if ( !section.f.length ) {
+		delete section.f;
+	}
+
+	return section;
+}
+
+var OPEN_COMMENT = '<!--';
+var CLOSE_COMMENT = '-->';
+
+function readHtmlComment ( parser ) {
+	var start = parser.pos;
+
+	if ( parser.textOnlyMode || !parser.matchString( OPEN_COMMENT ) ) {
+		return null;
+	}
+
+	var remaining = parser.remaining();
+	var endIndex = remaining.indexOf( CLOSE_COMMENT );
+
+	if ( endIndex === -1 ) {
+		parser.error( 'Illegal HTML - expected closing comment sequence (\'-->\')' );
+	}
+
+	var content = remaining.substr( 0, endIndex );
+	parser.pos += endIndex + 3;
+
+	var comment = {
+		t: COMMENT,
+		c: content
+	};
+
+	if ( parser.includeLinePositions ) {
+		comment.p = parser.getLinePos( start );
+	}
+
+	return comment;
+}
+
+var leadingLinebreak = /^[ \t\f\r\n]*\r?\n/;
+var trailingLinebreak = /\r?\n[ \t\f\r\n]*$/;
+
+var stripStandalones = function ( items ) {
+	var i, current, backOne, backTwo, lastSectionItem;
+
+	for ( i=1; i<items.length; i+=1 ) {
+		current = items[i];
+		backOne = items[i-1];
+		backTwo = items[i-2];
+
+		// if we're at the end of a [text][comment][text] sequence...
+		if ( isString( current ) && isComment( backOne ) && isString( backTwo ) ) {
+
+			// ... and the comment is a standalone (i.e. line breaks either side)...
+			if ( trailingLinebreak.test( backTwo ) && leadingLinebreak.test( current ) ) {
+
+				// ... then we want to remove the whitespace after the first line break
+				items[i-2] = backTwo.replace( trailingLinebreak, '\n' );
+
+				// and the leading line break of the second text token
+				items[i] = current.replace( leadingLinebreak, '' );
+			}
+		}
+
+		// if the current item is a section, and it is preceded by a linebreak, and
+		// its first item is a linebreak...
+		if ( isSection( current ) && isString( backOne ) ) {
+			if ( trailingLinebreak.test( backOne ) && isString( current.f[0] ) && leadingLinebreak.test( current.f[0] ) ) {
+				items[i-1] = backOne.replace( trailingLinebreak, '\n' );
+				current.f[0] = current.f[0].replace( leadingLinebreak, '' );
+			}
+		}
+
+		// if the last item was a section, and it is followed by a linebreak, and
+		// its last item is a linebreak...
+		if ( isString( current ) && isSection( backOne ) ) {
+			lastSectionItem = lastItem( backOne.f );
+
+			if ( isString( lastSectionItem ) && trailingLinebreak.test( lastSectionItem ) && leadingLinebreak.test( current ) ) {
+				backOne.f[ backOne.f.length - 1 ] = lastSectionItem.replace( trailingLinebreak, '\n' );
+				items[i] = current.replace( leadingLinebreak, '' );
+			}
+		}
+	}
+
+	return items;
+};
+
+function isString ( item ) {
+	return typeof item === 'string';
+}
+
+function isComment ( item ) {
+	return item.t === COMMENT || item.t === DELIMCHANGE;
+}
+
+function isSection ( item ) {
+	return ( item.t === SECTION || item.t === INVERTED ) && item.f;
+}
+
+var trimWhitespace = function ( items, leadingPattern, trailingPattern ) {
+	var item;
+
+	if ( leadingPattern ) {
+		item = items[0];
+		if ( typeof item === 'string' ) {
+			item = item.replace( leadingPattern, '' );
+
+			if ( !item ) {
+				items.shift();
+			} else {
+				items[0] = item;
+			}
+		}
+	}
+
+	if ( trailingPattern ) {
+		item = lastItem( items );
+		if ( typeof item === 'string' ) {
+			item = item.replace( trailingPattern, '' );
+
+			if ( !item ) {
+				items.pop();
+			} else {
+				items[ items.length - 1 ] = item;
+			}
+		}
+	}
+};
+
+var contiguousWhitespace = /[ \t\f\r\n]+/g;
+var preserveWhitespaceElements = /^(?:pre|script|style|textarea)$/i;
+var leadingWhitespace$1 = /^[ \t\f\r\n]+/;
+var trailingWhitespace = /[ \t\f\r\n]+$/;
+var leadingNewLine = /^(?:\r\n|\r|\n)/;
+var trailingNewLine = /(?:\r\n|\r|\n)$/;
+
+function cleanup ( items, stripComments, preserveWhitespace, removeLeadingWhitespace, removeTrailingWhitespace ) {
+	if ( typeof items === 'string' ) { return; }
+
+	var i,
+		item,
+		previousItem,
+		nextItem,
+		preserveWhitespaceInsideFragment,
+		removeLeadingWhitespaceInsideFragment,
+		removeTrailingWhitespaceInsideFragment;
+
+	// First pass - remove standalones and comments etc
+	stripStandalones( items );
+
+	i = items.length;
+	while ( i-- ) {
+		item = items[i];
+
+		// Remove delimiter changes, unsafe elements etc
+		if ( item.exclude ) {
+			items.splice( i, 1 );
+		}
+
+		// Remove comments, unless we want to keep them
+		else if ( stripComments && item.t === COMMENT ) {
+			items.splice( i, 1 );
+		}
+	}
+
+	// If necessary, remove leading and trailing whitespace
+	trimWhitespace( items, removeLeadingWhitespace ? leadingWhitespace$1 : null, removeTrailingWhitespace ? trailingWhitespace : null );
+
+	i = items.length;
+	while ( i-- ) {
+		item = items[i];
+
+		// Recurse
+		if ( item.f ) {
+			var isPreserveWhitespaceElement = item.t === ELEMENT && preserveWhitespaceElements.test( item.e );
+			preserveWhitespaceInsideFragment = preserveWhitespace || isPreserveWhitespaceElement;
+
+			if ( !preserveWhitespace && isPreserveWhitespaceElement ) {
+				trimWhitespace( item.f, leadingNewLine, trailingNewLine );
+			}
+
+			if ( !preserveWhitespaceInsideFragment ) {
+				previousItem = items[ i - 1 ];
+				nextItem = items[ i + 1 ];
+
+				// if the previous item was a text item with trailing whitespace,
+				// remove leading whitespace inside the fragment
+				if ( !previousItem || ( typeof previousItem === 'string' && trailingWhitespace.test( previousItem ) ) ) {
+					removeLeadingWhitespaceInsideFragment = true;
+				}
+
+				// and vice versa
+				if ( !nextItem || ( typeof nextItem === 'string' && leadingWhitespace$1.test( nextItem ) ) ) {
+					removeTrailingWhitespaceInsideFragment = true;
+				}
+			}
+
+			cleanup( item.f, stripComments, preserveWhitespaceInsideFragment, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );
+		}
+
+		// Split if-else blocks into two (an if, and an unless)
+		if ( item.l ) {
+			cleanup( item.l, stripComments, preserveWhitespace, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );
+
+			item.l.forEach( function (s) { return s.l = 1; } );
+			item.l.unshift( i + 1, 0 );
+			items.splice.apply( items, item.l );
+			delete item.l; // TODO would be nice if there was a way around this
+		}
+
+		// Clean up conditional attributes
+		if ( item.m ) {
+			cleanup( item.m, stripComments, preserveWhitespace, removeLeadingWhitespaceInsideFragment, removeTrailingWhitespaceInsideFragment );
+			if ( item.m.length < 1 ) { delete item.m; }
+		}
+	}
+
+	// final pass - fuse text nodes together
+	i = items.length;
+	while ( i-- ) {
+		if ( typeof items[i] === 'string' ) {
+			if ( typeof items[i+1] === 'string' ) {
+				items[i] = items[i] + items[i+1];
+				items.splice( i + 1, 1 );
+			}
+
+			if ( !preserveWhitespace ) {
+				items[i] = items[i].replace( contiguousWhitespace, ' ' );
+			}
+
+			if ( items[i] === '' ) {
+				items.splice( i, 1 );
+			}
+		}
+	}
+}
+
+var closingTagPattern = /^([a-zA-Z]{1,}:?[a-zA-Z0-9\-]*)\s*\>/;
+
+function readClosingTag ( parser ) {
+	var tag;
+
+	var start = parser.pos;
+
+	// are we looking at a closing tag?
+	if ( !parser.matchString( '</' ) ) {
+		return null;
+	}
+
+	if ( tag = parser.matchPattern( closingTagPattern ) ) {
+		if ( parser.inside && tag !== parser.inside ) {
+			parser.pos = start;
+			return null;
+		}
+
+		return {
+			t: CLOSING_TAG,
+			e: tag
+		};
+	}
+
+	// We have an illegal closing tag, report it
+	parser.pos -= 2;
+	parser.error( 'Illegal closing tag' );
+}
+
+var tagNamePattern = /^[a-zA-Z]{1,}:?[a-zA-Z0-9\-]*/;
+var anchorPattern = /^[a-zA-Z_$][-a-zA-Z0-9_$]*/;
+var validTagNameFollower = /^[\s\n\/>]/;
+var exclude = { exclude: true };
+
+// based on http://developers.whatwg.org/syntax.html#syntax-tag-omission
+var disallowedContents = {
+	li: [ 'li' ],
+	dt: [ 'dt', 'dd' ],
+	dd: [ 'dt', 'dd' ],
+	p: 'address article aside blockquote div dl fieldset footer form h1 h2 h3 h4 h5 h6 header hgroup hr main menu nav ol p pre section table ul'.split( ' ' ),
+	rt: [ 'rt', 'rp' ],
+	rp: [ 'rt', 'rp' ],
+	optgroup: [ 'optgroup' ],
+	option: [ 'option', 'optgroup' ],
+	thead: [ 'tbody', 'tfoot' ],
+	tbody: [ 'tbody', 'tfoot' ],
+	tfoot: [ 'tbody' ],
+	tr: [ 'tr', 'tbody' ],
+	td: [ 'td', 'th', 'tr' ],
+	th: [ 'td', 'th', 'tr' ]
+};
+
+function readElement$1 ( parser ) {
+	var attribute, selfClosing, children, partials, hasPartials, child, closed, pos, remaining, closingTag, anchor;
+
+	var start = parser.pos;
+
+	if ( parser.inside || parser.inAttribute || parser.textOnlyMode ) {
+		return null;
+	}
+
+	if ( !parser.matchString( '<' ) ) {
+		return null;
+	}
+
+	// if this is a closing tag, abort straight away
+	if ( parser.nextChar() === '/' ) {
+		return null;
+	}
+
+	var element = {};
+	if ( parser.includeLinePositions ) {
+		element.p = parser.getLinePos( start );
+	}
+
+	// check for doctype decl
+	if ( parser.matchString( '!' ) ) {
+		element.t = DOCTYPE;
+		if ( !parser.matchPattern( /^doctype/i ) ) {
+			parser.error( 'Expected DOCTYPE declaration' );
+		}
+
+		element.a = parser.matchPattern( /^(.+?)>/ );
+		return element;
+	}
+	// check for anchor
+	else if ( anchor = parser.matchString( '#' ) ) {
+		parser.allowWhitespace();
+		element.t = ANCHOR;
+		element.n = parser.matchPattern( anchorPattern );
+	}
+	// otherwise, it's an element/component
+	else {
+		element.t = ELEMENT;
+
+		// element name
+		element.e = parser.matchPattern( tagNamePattern );
+		if ( !element.e ) {
+			return null;
+		}
+	}
+
+	// next character must be whitespace, closing solidus or '>'
+	if ( !validTagNameFollower.test( parser.nextChar() ) ) {
+		parser.error( 'Illegal tag name' );
+	}
+
+	parser.allowWhitespace();
+
+	parser.inTag = true;
+
+	// directives and attributes
+	while ( attribute = readMustache( parser ) ) {
+		if ( attribute !== false ) {
+			if ( !element.m ) { element.m = []; }
+			element.m.push( attribute );
+		}
+
+		parser.allowWhitespace();
+	}
+
+	parser.inTag = false;
+
+	// allow whitespace before closing solidus
+	parser.allowWhitespace();
+
+	// self-closing solidus?
+	if ( parser.matchString( '/' ) ) {
+		selfClosing = true;
+	}
+
+	// closing angle bracket
+	if ( !parser.matchString( '>' ) ) {
+		return null;
+	}
+
+	var lowerCaseName = ( element.e || element.n ).toLowerCase();
+	var preserveWhitespace = parser.preserveWhitespace;
+
+	if ( !selfClosing && ( anchor || !voidElementNames.test( element.e ) ) ) {
+		if ( !anchor ) {
+			parser.elementStack.push( lowerCaseName );
+
+			// Special case - if we open a script element, further tags should
+			// be ignored unless they're a closing script element
+			if ( lowerCaseName in parser.interpolate ) {
+				parser.inside = lowerCaseName;
+			}
+		}
+
+		children = [];
+		partials = Object.create( null );
+
+		do {
+			pos = parser.pos;
+			remaining = parser.remaining();
+
+			if ( !remaining ) {
+				parser.error( ("Missing end " + (parser.elementStack.length > 1 ? 'tags' : 'tag') + " (" + (parser.elementStack.reverse().map( function (x) { return ("</" + x + ">"); } ).join( '' )) + ")") );
+			}
+
+			// if for example we're in an <li> element, and we see another
+			// <li> tag, close the first so they become siblings
+			if ( !anchor && !canContain( lowerCaseName, remaining ) ) {
+				closed = true;
+			}
+
+			// closing tag
+			else if ( !anchor && ( closingTag = readClosingTag( parser ) ) ) {
+				closed = true;
+
+				var closingTagName = closingTag.e.toLowerCase();
+
+				// if this *isn't* the closing tag for the current element...
+				if ( closingTagName !== lowerCaseName ) {
+					// rewind parser
+					parser.pos = pos;
+
+					// if it doesn't close a parent tag, error
+					if ( !~parser.elementStack.indexOf( closingTagName ) ) {
+						var errorMessage = 'Unexpected closing tag';
+
+						// add additional help for void elements, since component names
+						// might clash with them
+						if ( voidElementNames.test( closingTagName ) ) {
+							errorMessage += " (<" + closingTagName + "> is a void element - it cannot contain children)";
+						}
+
+						parser.error( errorMessage );
+					}
+				}
+			}
+
+			else if ( anchor && readAnchorClose( parser, element.n ) ) {
+				closed = true;
+			}
+
+			// implicit close by closing section tag. TODO clean this up
+			else if ( child = readClosing( parser, { open: parser.standardDelimiters[0], close: parser.standardDelimiters[1] } ) ) {
+				closed = true;
+				parser.pos = pos;
+			}
+
+			else {
+				if ( child = parser.read( PARTIAL_READERS ) ) {
+					if ( partials[ child.n ] ) {
+						parser.pos = pos;
+						parser.error( 'Duplicate partial definition' );
+					}
+
+					cleanup( child.f, parser.stripComments, preserveWhitespace, !preserveWhitespace, !preserveWhitespace );
+
+					partials[ child.n ] = child.f;
+					hasPartials = true;
+				}
+
+				else {
+					if ( child = parser.read( READERS ) ) {
+						children.push( child );
+					} else {
+						closed = true;
+					}
+				}
+			}
+		} while ( !closed );
+
+		if ( children.length ) {
+			element.f = children;
+		}
+
+		if ( hasPartials ) {
+			element.p = partials;
+		}
+
+		parser.elementStack.pop();
+	}
+
+	parser.inside = null;
+
+	if ( parser.sanitizeElements && parser.sanitizeElements.indexOf( lowerCaseName ) !== -1 ) {
+		return exclude;
+	}
+
+	return element;
+}
+
+function canContain ( name, remaining ) {
+	var match = /^<([a-zA-Z][a-zA-Z0-9]*)/.exec( remaining );
+	var disallowed = disallowedContents[ name ];
+
+	if ( !match || !disallowed ) {
+		return true;
+	}
+
+	return !~disallowed.indexOf( match[1].toLowerCase() );
+}
+
+function readAnchorClose ( parser, name ) {
+	var pos = parser.pos;
+	if ( !parser.matchString( '</' ) ) {
+		return null;
+	}
+
+	parser.matchString( '#' );
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( name ) ) {
+		parser.pos = pos;
+		return null;
+	}
+
+	parser.allowWhitespace();
+
+	if ( !parser.matchString( '>' ) ) {
+		parser.pos = pos;
+		return null;
+	}
+
+	return true;
+}
+
+function readText ( parser ) {
+	var index, disallowed, barrier;
+
+	var remaining = parser.remaining();
+
+	if ( parser.textOnlyMode ) {
+		disallowed = parser.tags.map( function (t) { return t.open; } );
+		disallowed = disallowed.concat( parser.tags.map( function (t) { return '\\' + t.open; } ) );
+
+		index = getLowestIndex( remaining, disallowed );
+	} else {
+		barrier = parser.inside ? '</' + parser.inside : '<';
+
+		if ( parser.inside && !parser.interpolate[ parser.inside ] ) {
+			index = remaining.indexOf( barrier );
+		} else {
+			disallowed = parser.tags.map( function (t) { return t.open; } );
+			disallowed = disallowed.concat( parser.tags.map( function (t) { return '\\' + t.open; } ) );
+
+			// http://developers.whatwg.org/syntax.html#syntax-attributes
+			if ( parser.inAttribute === true ) {
+				// we're inside an unquoted attribute value
+				disallowed.push( "\"", "'", "=", "<", ">", '`' );
+			} else if ( parser.inAttribute ) {
+				// quoted attribute value
+				disallowed.push( parser.inAttribute );
+			} else {
+				disallowed.push( barrier );
+			}
+
+			index = getLowestIndex( remaining, disallowed );
+		}
+	}
+
+	if ( !index ) {
+		return null;
+	}
+
+	if ( index === -1 ) {
+		index = remaining.length;
+	}
+
+	parser.pos += index;
+
+	if ( ( parser.inside && parser.inside !== 'textarea' ) || parser.textOnlyMode ) {
+		return remaining.substr( 0, index );
+	} else {
+		return decodeCharacterReferences( remaining.substr( 0, index ) );
+	}
+}
+
+var partialDefinitionSectionPattern = /^\s*#\s*partial\s+/;
+
+function readPartialDefinitionSection ( parser ) {
+	var child, closed;
+
+	var start = parser.pos;
+
+	var delimiters = parser.standardDelimiters;
+
+	if ( !parser.matchString( delimiters[0] ) ) {
+		return null;
+	}
+
+	if ( !parser.matchPattern( partialDefinitionSectionPattern ) ) {
+		parser.pos = start;
+		return null;
+	}
+
+	var name = parser.matchPattern( /^[a-zA-Z_$][a-zA-Z_$0-9\-\/]*/ );
+
+	if ( !name ) {
+		parser.error( 'expected legal partial name' );
+	}
+
+	parser.allowWhitespace();
+	if ( !parser.matchString( delimiters[1] ) ) {
+		parser.error( ("Expected closing delimiter '" + (delimiters[1]) + "'") );
+	}
+
+	var content = [];
+
+	var open = delimiters[0];
+	var close = delimiters[1];
+
+	do {
+		if ( child = readClosing( parser, { open: open, close: close }) ) {
+			if ( child.r !== 'partial' ) {
+				parser.error( ("Expected " + open + "/partial" + close) );
+			}
+
+			closed = true;
+		}
+
+		else {
+			child = parser.read( READERS );
+
+			if ( !child ) {
+				parser.error( ("Expected " + open + "/partial" + close) );
+			}
+
+			content.push( child );
+		}
+	} while ( !closed );
+
+	return {
+		t: INLINE_PARTIAL,
+		n: name,
+		f: content
+	};
+}
+
+function readTemplate ( parser ) {
+	var fragment = [];
+	var partials = Object.create( null );
+	var hasPartials = false;
+
+	var preserveWhitespace = parser.preserveWhitespace;
+
+	while ( parser.pos < parser.str.length ) {
+		var pos = parser.pos;
+		var item = (void 0), partial = (void 0);
+
+		if ( partial = parser.read( PARTIAL_READERS ) ) {
+			if ( partials[ partial.n ] ) {
+				parser.pos = pos;
+				parser.error( 'Duplicated partial definition' );
+			}
+
+			cleanup( partial.f, parser.stripComments, preserveWhitespace, !preserveWhitespace, !preserveWhitespace );
+
+			partials[ partial.n ] = partial.f;
+			hasPartials = true;
+		} else if ( item = parser.read( READERS ) ) {
+			fragment.push( item );
+		} else  {
+			parser.error( 'Unexpected template content' );
+		}
+	}
+
+	var result = {
+		v: TEMPLATE_VERSION,
+		t: fragment
+	};
+
+	if ( hasPartials ) {
+		result.p = partials;
+	}
+
+	return result;
+}
+
+function insertExpressions ( obj, expr ) {
+
+	Object.keys( obj ).forEach( function (key) {
+		if  ( isExpression( key, obj ) ) { return addTo( obj, expr ); }
+
+		var ref = obj[ key ];
+		if ( hasChildren( ref ) ) { insertExpressions( ref, expr ); }
+	});
+}
+
+function isExpression( key, obj ) {
+	return key === 's' && Array.isArray( obj.r );
+}
+
+function addTo( obj, expr ) {
+	var s = obj.s;
+	var r = obj.r;
+	if ( !expr[ s ] ) { expr[ s ] = fromExpression( s, r.length ); }
+}
+
+function hasChildren( ref ) {
+	return Array.isArray( ref ) || isObject( ref );
+}
+
+var shared = {};
+
+// See https://github.com/ractivejs/template-spec for information
+// about the Ractive template specification
+
+var STANDARD_READERS = [ readPartial, readUnescaped, readSection, readInterpolator, readComment ];
+var TRIPLE_READERS = [ readTriple ];
+var STATIC_READERS = [ readUnescaped, readSection, readInterpolator ]; // TODO does it make sense to have a static section?
+
+var READERS = [ readMustache, readHtmlComment, readElement$1, readText ];
+var PARTIAL_READERS = [ readPartialDefinitionSection ];
+
+var defaultInterpolate = [ 'script', 'style', 'template' ];
+
+var StandardParser = Parser.extend({
+	init: function init ( str, options ) {
+		var this$1 = this;
+
+		var tripleDelimiters = options.tripleDelimiters || shared.defaults.tripleDelimiters;
+		var staticDelimiters = options.staticDelimiters || shared.defaults.staticDelimiters;
+		var staticTripleDelimiters = options.staticTripleDelimiters || shared.defaults.staticTripleDelimiters;
+
+		this.standardDelimiters = options.delimiters || shared.defaults.delimiters;
+
+		this.tags = [
+			{ isStatic: false, isTriple: false, open: this.standardDelimiters[0], close: this.standardDelimiters[1], readers: STANDARD_READERS },
+			{ isStatic: false, isTriple: true,  open: tripleDelimiters[0],        close: tripleDelimiters[1],        readers: TRIPLE_READERS },
+			{ isStatic: true,  isTriple: false, open: staticDelimiters[0],        close: staticDelimiters[1],        readers: STATIC_READERS },
+			{ isStatic: true,  isTriple: true,  open: staticTripleDelimiters[0],  close: staticTripleDelimiters[1],  readers: TRIPLE_READERS }
+		];
+
+		this.contextLines = options.contextLines || shared.defaults.contextLines;
+
+		this.sortMustacheTags();
+
+		this.sectionDepth = 0;
+		this.elementStack = [];
+
+		this.interpolate = Object.create( options.interpolate || shared.defaults.interpolate || {} );
+		this.interpolate.textarea = true;
+		defaultInterpolate.forEach( function (t) { return this$1.interpolate[ t ] = !options.interpolate || options.interpolate[ t ] !== false; } );
+
+		if ( options.sanitize === true ) {
+			options.sanitize = {
+				// blacklist from https://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/lang/html/html4-elements-whitelist.json
+				elements: 'applet base basefont body frame frameset head html isindex link meta noframes noscript object param script style title'.split( ' ' ),
+				eventAttributes: true
+			};
+		}
+
+		this.stripComments = options.stripComments !== false;
+		this.preserveWhitespace = options.preserveWhitespace;
+		this.sanitizeElements = options.sanitize && options.sanitize.elements;
+		this.sanitizeEventAttributes = options.sanitize && options.sanitize.eventAttributes;
+		this.includeLinePositions = options.includeLinePositions;
+		this.textOnlyMode = options.textOnlyMode;
+		this.csp = options.csp;
+
+		this.transforms = options.transforms || options.parserTransforms;
+		if ( this.transforms ) {
+			this.transforms = this.transforms.concat( shared.defaults.parserTransforms );
+		} else {
+			this.transforms = shared.defaults.parserTransforms;
+		}
+	},
+
+	postProcess: function postProcess ( result ) {
+		// special case - empty string
+		if ( !result.length ) {
+			return { t: [], v: TEMPLATE_VERSION };
+		}
+
+		if ( this.sectionDepth > 0 ) {
+			this.error( 'A section was left open' );
+		}
+
+		cleanup( result[0].t, this.stripComments, this.preserveWhitespace, !this.preserveWhitespace, !this.preserveWhitespace );
+
+		var transforms = this.transforms;
+		if ( transforms.length ) {
+			var tlen = transforms.length;
+			var walk = function ( fragment ) {
+				var len = fragment.length;
+
+				for ( var i = 0; i < len; i++ ) {
+					var node = fragment[i];
+
+					if ( node.t === ELEMENT ) {
+						for ( var j = 0; j < tlen; j++ ) {
+							var res = transforms[j].call( shared.Ractive, node );
+							if ( !res ) {
+								continue;
+							} else if ( res.remove ) {
+								fragment.splice( i--, 1 );
+								len--;
+								break;
+							} else if ( res.replace ) {
+								if ( Array.isArray( res.replace ) ) {
+									fragment.splice.apply( fragment, [ i--, 1 ].concat( res.replace ) );
+									len += res.replace.length - 1;
+								} else {
+									fragment[i--] = node = res.replace;
+								}
+
+								break;
+							}
+						}
+
+						// watch for partials
+						if ( node.p ) {
+							for ( var k in node.p ) { walk( node.p[k] ); }
+						}
+					}
+
+					if ( node.f ) { walk( node.f ); }
+				}
+			};
+
+			// process the root fragment
+			walk( result[0].t );
+
+			// watch for root partials
+			if ( result[0].p ) {
+				for ( var k in result[0].p ) { walk( result[0].p[k] ); }
+			}
+		}
+
+		if ( this.csp !== false ) {
+			var expr = {};
+			insertExpressions( result[0].t, expr );
+			if ( Object.keys( expr ).length ) { result[0].e = expr; }
+		}
+
+		return result[0];
+	},
+
+	converters: [
+		readTemplate
+	],
+
+	sortMustacheTags: function sortMustacheTags () {
+		// Sort in order of descending opening delimiter length (longer first),
+		// to protect against opening delimiters being substrings of each other
+		this.tags.sort( function ( a, b ) {
+			return b.open.length - a.open.length;
+		});
+	}
+});
+
+function parse ( template, options ) {
+	return new StandardParser( template, options || {} ).result;
+}
+
+var parseOptions = [
+	'delimiters',
+	'tripleDelimiters',
+	'staticDelimiters',
+	'staticTripleDelimiters',
+	'csp',
+	'interpolate',
+	'preserveWhitespace',
+	'sanitize',
+	'stripComments',
+	'contextLines'
+];
+
+var TEMPLATE_INSTRUCTIONS = "Either preparse or use a ractive runtime source that includes the parser. ";
+
+var COMPUTATION_INSTRUCTIONS = "Either include a version of Ractive that can parse or convert your computation strings to functions.";
+
+
+function throwNoParse ( method, error, instructions ) {
+	if ( !method ) {
+		fatal( ("Missing Ractive.parse - cannot parse " + error + ". " + instructions) );
+	}
+}
+
+function createFunction ( body, length ) {
+	throwNoParse( fromExpression, 'new expression function', TEMPLATE_INSTRUCTIONS );
+	return fromExpression( body, length );
+}
+
+function createFunctionFromString ( str, bindTo ) {
+	throwNoParse( fromComputationString, 'compution string "${str}"', COMPUTATION_INSTRUCTIONS );
+	return fromComputationString( str, bindTo );
+}
+
+var parser = {
+
+	fromId: function fromId ( id, options ) {
+		if ( !doc ) {
+			if ( options && options.noThrow ) { return; }
+			throw new Error( ("Cannot retrieve template #" + id + " as Ractive is not running in a browser.") );
+		}
+
+		if ( id ) { id = id.replace( /^#/, '' ); }
+
+		var template;
+
+		if ( !( template = doc.getElementById( id ) )) {
+			if ( options && options.noThrow ) { return; }
+			throw new Error( ("Could not find template element with id #" + id) );
+		}
+
+		if ( template.tagName.toUpperCase() !== 'SCRIPT' ) {
+			if ( options && options.noThrow ) { return; }
+			throw new Error( ("Template element with id #" + id + ", must be a <script> element") );
+		}
+
+		return ( 'textContent' in template ? template.textContent : template.innerHTML );
+
+	},
+
+	isParsed: function isParsed ( template) {
+		return !( typeof template === 'string' );
+	},
+
+	getParseOptions: function getParseOptions ( ractive ) {
+		// Could be Ractive or a Component
+		if ( ractive.defaults ) { ractive = ractive.defaults; }
+
+		return parseOptions.reduce( function ( val, key ) {
+			val[ key ] = ractive[ key ];
+			return val;
+		}, {});
+	},
+
+	parse: function parse$1 ( template, options ) {
+		throwNoParse( parse, 'template', TEMPLATE_INSTRUCTIONS );
+		var parsed = parse( template, options );
+		addFunctions( parsed );
+		return parsed;
+	},
+
+	parseFor: function parseFor( template, ractive ) {
+		return this.parse( template, this.getParseOptions( ractive ) );
+	}
+};
+
+var templateConfigurator = {
+	name: 'template',
+
+	extend: function extend ( Parent, proto, options ) {
+		// only assign if exists
+		if ( 'template' in options ) {
+			var template = options.template;
+
+			if ( typeof template === 'function' ) {
+				proto.template = template;
+			} else {
+				proto.template = parseTemplate( template, proto );
+			}
+		}
+	},
+
+	init: function init ( Parent, ractive, options ) {
+		// TODO because of prototypal inheritance, we might just be able to use
+		// ractive.template, and not bother passing through the Parent object.
+		// At present that breaks the test mocks' expectations
+		var template = 'template' in options ? options.template : Parent.prototype.template;
+		template = template || { v: TEMPLATE_VERSION, t: [] };
+
+		if ( typeof template === 'function' ) {
+			var fn = template;
+			template = getDynamicTemplate( ractive, fn );
+
+			ractive._config.template = {
+				fn: fn,
+				result: template
+			};
+		}
+
+		template = parseTemplate( template, ractive );
+
+		// TODO the naming of this is confusing - ractive.template refers to [...],
+		// but Component.prototype.template refers to {v:1,t:[],p:[]}...
+		// it's unnecessary, because the developer never needs to access
+		// ractive.template
+		ractive.template = template.t;
+
+		if ( template.p ) {
+			extendPartials( ractive.partials, template.p );
+		}
+	},
+
+	reset: function reset ( ractive ) {
+		var result = resetValue( ractive );
+
+		if ( result ) {
+			var parsed = parseTemplate( result, ractive );
+
+			ractive.template = parsed.t;
+			extendPartials( ractive.partials, parsed.p, true );
+
+			return true;
+		}
+	}
+};
+
+function resetValue ( ractive ) {
+	var initial = ractive._config.template;
+
+	// If this isn't a dynamic template, there's nothing to do
+	if ( !initial || !initial.fn ) {
+		return;
+	}
+
+	var result = getDynamicTemplate( ractive, initial.fn );
+
+	// TODO deep equality check to prevent unnecessary re-rendering
+	// in the case of already-parsed templates
+	if ( result !== initial.result ) {
+		initial.result = result;
+		return result;
+	}
+}
+
+function getDynamicTemplate ( ractive, fn ) {
+	return fn.call( ractive, {
+		fromId: parser.fromId,
+		isParsed: parser.isParsed,
+		parse: function parse ( template, options ) {
+			if ( options === void 0 ) options = parser.getParseOptions( ractive );
+
+			return parser.parse( template, options );
+		}
+	});
+}
+
+function parseTemplate ( template, ractive ) {
+	if ( typeof template === 'string' ) {
+		// parse will validate and add expression functions
+		template = parseAsString( template, ractive );
+	}
+	else {
+		// need to validate and add exp for already parsed template
+		validate$1( template );
+		addFunctions( template );
+	}
+
+	return template;
+}
+
+function parseAsString ( template, ractive ) {
+	// ID of an element containing the template?
+	if ( template[0] === '#' ) {
+		template = parser.fromId( template );
+	}
+
+	return parser.parseFor( template, ractive );
+}
+
+function validate$1( template ) {
+
+	// Check that the template even exists
+	if ( template == undefined ) {
+		throw new Error( ("The template cannot be " + template + ".") );
+	}
+
+	// Check the parsed template has a version at all
+	else if ( typeof template.v !== 'number' ) {
+		throw new Error( 'The template parser was passed a non-string template, but the template doesn\'t have a version.  Make sure you\'re passing in the template you think you are.' );
+	}
+
+	// Check we're using the correct version
+	else if ( template.v !== TEMPLATE_VERSION ) {
+		throw new Error( ("Mismatched template version (expected " + TEMPLATE_VERSION + ", got " + (template.v) + ") Please ensure you are using the latest version of Ractive.js in your build process as well as in your app") );
+	}
+}
+
+function extendPartials ( existingPartials, newPartials, overwrite ) {
+	if ( !newPartials ) { return; }
+
+	// TODO there's an ambiguity here - we need to overwrite in the `reset()`
+	// case, but not initially...
+
+	for ( var key in newPartials ) {
+		if ( overwrite || !existingPartials.hasOwnProperty( key ) ) {
+			existingPartials[ key ] = newPartials[ key ];
+		}
+	}
+}
+
+var registryNames = [
+	'adaptors',
+	'components',
+	'computed',
+	'decorators',
+	'easing',
+	'events',
+	'interpolators',
+	'partials',
+	'transitions'
+];
+
+var registriesOnDefaults = [
+	'computed'
+];
+
+var Registry = function Registry ( name, useDefaults ) {
+	this.name = name;
+	this.useDefaults = useDefaults;
+};
+
+Registry.prototype.extend = function extend ( Parent, proto, options ) {
+	var parent = this.useDefaults ? Parent.defaults : Parent;
+	var target = this.useDefaults ? proto : proto.constructor;
+	this.configure( parent, target, options );
+};
+
+Registry.prototype.init = function init () {
+	// noop
+};
+
+Registry.prototype.configure = function configure ( Parent, target, options ) {
+	var name = this.name;
+	var option = options[ name ];
+
+	var registry = Object.create( Parent[name] );
+
+	for ( var key in option ) {
+		registry[ key ] = option[ key ];
+	}
+
+	target[ name ] = registry;
+};
+
+Registry.prototype.reset = function reset ( ractive ) {
+	var registry = ractive[ this.name ];
+	var changed = false;
+
+	Object.keys( registry ).forEach( function (key) {
+		var item = registry[ key ];
+
+		if ( item._fn ) {
+			if ( item._fn.isOwner ) {
+				registry[key] = item._fn;
+			} else {
+				delete registry[key];
+			}
+			changed = true;
+		}
+	});
+
+	return changed;
+};
+
+var registries = registryNames.map( function (name) {
+	var putInDefaults = registriesOnDefaults.indexOf(name) > -1;
+	return new Registry( name, putInDefaults );
+});
+
+function wrap ( parent, name, method ) {
+	if ( !/_super/.test( method ) ) { return method; }
+
+	function wrapper () {
+		var superMethod = getSuperMethod( wrapper._parent, name );
+		var hasSuper = '_super' in this;
+		var oldSuper = this._super;
+
+		this._super = superMethod;
+
+		var result = method.apply( this, arguments );
+
+		if ( hasSuper ) {
+			this._super = oldSuper;
+		} else {
+			delete this._super;
+		}
+
+		return result;
+	}
+
+	wrapper._parent = parent;
+	wrapper._method = method;
+
+	return wrapper;
+}
+
+function getSuperMethod ( parent, name ) {
+	if ( name in parent ) {
+		var value = parent[ name ];
+
+		return typeof value === 'function' ?
+			value :
+			function () { return value; };
+	}
+
+	return noop;
+}
+
+function getMessage( deprecated, correct, isError ) {
+	return "options." + deprecated + " has been deprecated in favour of options." + correct + "."
+		+ ( isError ? (" You cannot specify both options, please use options." + correct + ".") : '' );
+}
+
+function deprecateOption ( options, deprecatedOption, correct ) {
+	if ( deprecatedOption in options ) {
+		if( !( correct in options ) ) {
+			warnIfDebug( getMessage( deprecatedOption, correct ) );
+			options[ correct ] = options[ deprecatedOption ];
+		} else {
+			throw new Error( getMessage( deprecatedOption, correct, true ) );
+		}
+	}
+}
+
+function deprecate ( options ) {
+	deprecateOption( options, 'beforeInit', 'onconstruct' );
+	deprecateOption( options, 'init', 'onrender' );
+	deprecateOption( options, 'complete', 'oncomplete' );
+	deprecateOption( options, 'eventDefinitions', 'events' );
+
+	// Using extend with Component instead of options,
+	// like Human.extend( Spider ) means adaptors as a registry
+	// gets copied to options. So we have to check if actually an array
+	if ( Array.isArray( options.adaptors ) ) {
+		deprecateOption( options, 'adaptors', 'adapt' );
+	}
+}
+
+var custom = {
+	adapt: adaptConfigurator,
+	css: cssConfigurator,
+	data: dataConfigurator,
+	template: templateConfigurator
+};
+
+var defaultKeys = Object.keys( defaults );
+
+var isStandardKey = makeObj( defaultKeys.filter( function (key) { return !custom[ key ]; } ) );
+
+// blacklisted keys that we don't double extend
+var isBlacklisted = makeObj( defaultKeys.concat( registries.map( function (r) { return r.name; } ), [ 'on', 'observe', 'attributes' ] ) );
+
+var order = [].concat(
+	defaultKeys.filter( function (key) { return !registries[ key ] && !custom[ key ]; } ),
+	registries,
+	//custom.data,
+	custom.template,
+	custom.css
+);
+
+var config = {
+	extend: function ( Parent, proto$$1, options ) { return configure( 'extend', Parent, proto$$1, options ); },
+	init: function ( Parent, ractive, options ) { return configure( 'init', Parent, ractive, options ); },
+	reset: function (ractive) { return order.filter( function (c) { return c.reset && c.reset( ractive ); } ).map( function (c) { return c.name; } ); }
+};
+
+function configure ( method, Parent, target, options ) {
+	deprecate( options );
+
+	for ( var key in options ) {
+		if ( isStandardKey.hasOwnProperty( key ) ) {
+			var value = options[ key ];
+
+			// warn the developer if they passed a function and ignore its value
+
+			// NOTE: we allow some functions on "el" because we duck type element lists
+			// and some libraries or ef'ed-up virtual browsers (phantomJS) return a
+			// function object as the result of querySelector methods
+			if ( key !== 'el' && typeof value === 'function' ) {
+				warnIfDebug( (key + " is a Ractive option that does not expect a function and will be ignored"),
+					method === 'init' ? target : null );
+			}
+			else {
+				target[ key ] = value;
+			}
+		}
+	}
+
+	// disallow combination of `append` and `enhance`
+	if ( options.append && options.enhance ) {
+		throw new Error( 'Cannot use append and enhance at the same time' );
+	}
+
+	registries.forEach( function (registry) {
+		registry[ method ]( Parent, target, options );
+	});
+
+	adaptConfigurator[ method ]( Parent, target, options );
+	templateConfigurator[ method ]( Parent, target, options );
+	cssConfigurator[ method ]( Parent, target, options );
+
+	extendOtherMethods( Parent.prototype, target, options );
+}
+
+var _super = /\b_super\b/;
+function extendOtherMethods ( parent, target, options ) {
+	for ( var key in options ) {
+		if ( !isBlacklisted[ key ] && options.hasOwnProperty( key ) ) {
+			var member = options[ key ];
+
+			// if this is a method that overwrites a method, wrap it:
+			if ( typeof member === 'function' ) {
+				if ( key in proto && !_super.test( member.toString() ) ) {
+					warnIfDebug( ("Overriding Ractive prototype function '" + key + "' without calling the '" + _super + "' method can be very dangerous.") );
+				}
+				member = wrap( parent, key, member );
+			}
+
+			target[ key ] = member;
+		}
+	}
+}
+
+function makeObj ( array ) {
+	var obj = {};
+	array.forEach( function (x) { return obj[x] = true; } );
+	return obj;
+}
+
+var Item = function Item ( options ) {
+	this.parentFragment = options.parentFragment;
+	this.ractive = options.parentFragment.ractive;
+
+	this.template = options.template;
+	this.index = options.index;
+	this.type = options.template.t;
+
+	this.dirty = false;
+};
+
+Item.prototype.bubble = function bubble () {
+	if ( !this.dirty ) {
+		this.dirty = true;
+		this.parentFragment.bubble();
+	}
+};
+
+Item.prototype.destroyed = function destroyed () {
+	if ( this.fragment ) { this.fragment.destroyed(); }
+};
+
+Item.prototype.find = function find () {
+	return null;
+};
+
+Item.prototype.findComponent = function findComponent () {
+	return null;
+};
+
+Item.prototype.findNextNode = function findNextNode () {
+	return this.parentFragment.findNextNode( this );
+};
+
+Item.prototype.shuffled = function shuffled () {
+	if ( this.fragment ) { this.fragment.shuffled(); }
+};
+
+Item.prototype.valueOf = function valueOf () {
+	return this.toString();
+};
+
+Item.prototype.findAll = noop;
+Item.prototype.findAllComponents = noop;
+
+var ContainerItem = (function (Item) {
+	function ContainerItem ( options ) {
+		Item.call( this, options );
+	}
+
+	if ( Item ) ContainerItem.__proto__ = Item;
+	ContainerItem.prototype = Object.create( Item && Item.prototype );
+	ContainerItem.prototype.constructor = ContainerItem;
+
+	ContainerItem.prototype.detach = function detach () {
+		return this.fragment ? this.fragment.detach() : createDocumentFragment();
+	};
+
+	ContainerItem.prototype.find = function find ( selector ) {
+		if ( this.fragment ) {
+			return this.fragment.find( selector );
+		}
+	};
+
+	ContainerItem.prototype.findAll = function findAll ( selector, options ) {
+		if ( this.fragment ) {
+			this.fragment.findAll( selector, options );
+		}
+	};
+
+	ContainerItem.prototype.findComponent = function findComponent ( name ) {
+		if ( this.fragment ) {
+			return this.fragment.findComponent( name );
+		}
+	};
+
+	ContainerItem.prototype.findAllComponents = function findAllComponents ( name, options ) {
+		if ( this.fragment ) {
+			this.fragment.findAllComponents( name, options );
+		}
+	};
+
+	ContainerItem.prototype.firstNode = function firstNode ( skipParent ) {
+		return this.fragment && this.fragment.firstNode( skipParent );
+	};
+
+	ContainerItem.prototype.toString = function toString ( escape ) {
+		return this.fragment ? this.fragment.toString( escape ) : '';
+	};
+
+	return ContainerItem;
+}(Item));
+
+var ComputationChild = (function (Model$$1) {
+	function ComputationChild ( parent, key ) {
+		Model$$1.call( this, parent, key );
+
+		this.isReadonly = !this.root.ractive.syncComputedChildren;
+		this.dirty = true;
+	}
+
+	if ( Model$$1 ) ComputationChild.__proto__ = Model$$1;
+	ComputationChild.prototype = Object.create( Model$$1 && Model$$1.prototype );
+	ComputationChild.prototype.constructor = ComputationChild;
+
+	var prototypeAccessors = { setRoot: {} };
+
+	prototypeAccessors.setRoot.get = function () { return this.parent.setRoot; };
+
+	ComputationChild.prototype.applyValue = function applyValue ( value ) {
+		Model$$1.prototype.applyValue.call( this, value );
+
+		if ( !this.isReadonly ) {
+			var source = this.parent;
+			// computed models don't have a shuffle method
+			while ( source && source.shuffle ) {
+				source = source.parent;
+			}
+
+			if ( source ) {
+				source.dependencies.forEach( mark );
+			}
+		}
+
+		if ( this.setRoot ) {
+			this.setRoot.set( this.setRoot.value );
+		}
+	};
+
+	ComputationChild.prototype.get = function get ( shouldCapture ) {
+		if ( shouldCapture ) { capture( this ); }
+
+		if ( this.dirty ) {
+			this.dirty = false;
+			var parentValue = this.parent.get();
+			this.value = parentValue ? parentValue[ this.key ] : undefined;
+		}
+
+		return this.value;
+	};
+
+	ComputationChild.prototype.handleChange = function handleChange$1 () {
+		this.dirty = true;
+
+		if ( this.boundValue ) { this.boundValue = null; }
+
+		this.links.forEach( marked );
+		this.deps.forEach( handleChange );
+		this.children.forEach( handleChange );
+	};
+
+	ComputationChild.prototype.joinKey = function joinKey ( key ) {
+		if ( key === undefined || key === '' ) { return this; }
+
+		if ( !this.childByKey.hasOwnProperty( key ) ) {
+			var child = new ComputationChild( this, key );
+			this.children.push( child );
+			this.childByKey[ key ] = child;
+		}
+
+		return this.childByKey[ key ];
+	};
+
+	Object.defineProperties( ComputationChild.prototype, prototypeAccessors );
+
+	return ComputationChild;
+}(Model));
+
+/* global console */
+/* eslint no-console:"off" */
+
+var Computation = (function (Model$$1) {
+	function Computation ( viewmodel, signature, key ) {
+		Model$$1.call( this, null, null );
+
+		this.root = this.parent = viewmodel;
+		this.signature = signature;
+
+		this.key = key; // not actually used, but helps with debugging
+		this.isExpression = key && key[0] === '@';
+
+		this.isReadonly = !this.signature.setter;
+
+		this.context = viewmodel.computationContext;
+
+		this.dependencies = [];
+
+		this.children = [];
+		this.childByKey = {};
+
+		this.deps = [];
+
+		this.dirty = true;
+
+		// TODO: is there a less hackish way to do this?
+		this.shuffle = undefined;
+	}
+
+	if ( Model$$1 ) Computation.__proto__ = Model$$1;
+	Computation.prototype = Object.create( Model$$1 && Model$$1.prototype );
+	Computation.prototype.constructor = Computation;
+
+	var prototypeAccessors = { setRoot: {} };
+
+	prototypeAccessors.setRoot.get = function () {
+		if ( this.signature.setter ) { return this; }
+	};
+
+	Computation.prototype.get = function get ( shouldCapture ) {
+		if ( shouldCapture ) { capture( this ); }
+
+		if ( this.dirty ) {
+			this.dirty = false;
+			var old = this.value;
+			this.value = this.getValue();
+			if ( !isEqual( old, this.value ) ) { this.notifyUpstream(); }
+			if ( this.wrapper ) { this.newWrapperValue = this.value; }
+			this.adapt();
+		}
+
+		// if capturing, this value needs to be unwrapped because it's for external use
+		return maybeBind( this, shouldCapture && this.wrapper ? this.wrapperValue : this.value );
+	};
+
+	Computation.prototype.getValue = function getValue () {
+		startCapturing();
+		var result;
+
+		try {
+			result = this.signature.getter.call( this.context );
+		} catch ( err ) {
+			warnIfDebug( ("Failed to compute " + (this.getKeypath()) + ": " + (err.message || err)) );
+
+			// TODO this is all well and good in Chrome, but...
+			// ...also, should encapsulate this stuff better, and only
+			// show it if Ractive.DEBUG
+			if ( hasConsole ) {
+				if ( console.groupCollapsed ) { console.groupCollapsed( '%cshow details', 'color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;' ); }
+				var sig = this.signature;
+				console.error( ((err.name) + ": " + (err.message) + "\n\n" + (sig.getterString) + (sig.getterUseStack ? '\n\n' + err.stack : '')) );
+				if ( console.groupCollapsed ) { console.groupEnd(); }
+			}
+		}
+
+		var dependencies = stopCapturing();
+		this.setDependencies( dependencies );
+
+		return result;
+	};
+
+	Computation.prototype.mark = function mark () {
+		this.handleChange();
+	};
+
+	Computation.prototype.rebind = function rebind ( next, previous ) {
+		// computations will grab all of their deps again automagically
+		if ( next !== previous ) { this.handleChange(); }
+	};
+
+	Computation.prototype.set = function set ( value ) {
+		if ( this.isReadonly ) {
+			throw new Error( ("Cannot set read-only computed value '" + (this.key) + "'") );
+		}
+
+		this.signature.setter( value );
+		this.mark();
+	};
+
+	Computation.prototype.setDependencies = function setDependencies ( dependencies ) {
+		var this$1 = this;
+
+		// unregister any soft dependencies we no longer have
+		var i = this.dependencies.length;
+		while ( i-- ) {
+			var model = this$1.dependencies[i];
+			if ( !~dependencies.indexOf( model ) ) { model.unregister( this$1 ); }
+		}
+
+		// and add any new ones
+		i = dependencies.length;
+		while ( i-- ) {
+			var model$1 = dependencies[i];
+			if ( !~this$1.dependencies.indexOf( model$1 ) ) { model$1.register( this$1 ); }
+		}
+
+		this.dependencies = dependencies;
+	};
+
+	Computation.prototype.teardown = function teardown () {
+		var this$1 = this;
+
+		var i = this.dependencies.length;
+		while ( i-- ) {
+			if ( this$1.dependencies[i] ) { this$1.dependencies[i].unregister( this$1 ); }
+		}
+		if ( this.root.computations[this.key] === this ) { delete this.root.computations[this.key]; }
+		Model$$1.prototype.teardown.call(this);
+	};
+
+	Object.defineProperties( Computation.prototype, prototypeAccessors );
+
+	return Computation;
+}(Model));
+
+var prototype$1 = Computation.prototype;
+var child = ComputationChild.prototype;
+prototype$1.handleChange = child.handleChange;
+prototype$1.joinKey = child.joinKey;
+
+var ExpressionProxy = (function (Model$$1) {
+	function ExpressionProxy ( fragment, template ) {
+		var this$1 = this;
+
+		Model$$1.call( this, fragment.ractive.viewmodel, null );
+
+		this.fragment = fragment;
+		this.template = template;
+
+		this.isReadonly = true;
+		this.dirty = true;
+
+		this.fn = getFunction( template.s, template.r.length );
+
+		this.models = this.template.r.map( function (ref) {
+			return resolveReference( this$1.fragment, ref );
+		});
+		this.dependencies = [];
+
+		this.shuffle = undefined;
+
+		this.bubble();
+	}
+
+	if ( Model$$1 ) ExpressionProxy.__proto__ = Model$$1;
+	ExpressionProxy.prototype = Object.create( Model$$1 && Model$$1.prototype );
+	ExpressionProxy.prototype.constructor = ExpressionProxy;
+
+	ExpressionProxy.prototype.bubble = function bubble ( actuallyChanged ) {
+		if ( actuallyChanged === void 0 ) actuallyChanged = true;
+
+		// refresh the keypath
+		this.keypath = undefined;
+
+		if ( actuallyChanged ) {
+			this.handleChange();
+		}
+	};
+
+	ExpressionProxy.prototype.getKeypath = function getKeypath () {
+		var this$1 = this;
+
+		if ( !this.template ) { return '@undefined'; }
+		if ( !this.keypath ) {
+			this.keypath = '@' + this.template.s.replace( /_(\d+)/g, function ( match, i ) {
+				if ( i >= this$1.models.length ) { return match; }
+
+				var model = this$1.models[i];
+				return model ? model.getKeypath() : '@undefined';
+			});
+		}
+
+		return this.keypath;
+	};
+
+	ExpressionProxy.prototype.getValue = function getValue () {
+		var this$1 = this;
+
+		startCapturing();
+		var result;
+
+		try {
+			var params = this.models.map( function (m) { return m ? m.get( true ) : undefined; } );
+			result = this.fn.apply( this.fragment.ractive, params );
+		} catch ( err ) {
+			warnIfDebug( ("Failed to compute " + (this.getKeypath()) + ": " + (err.message || err)) );
+		}
+
+		var dependencies = stopCapturing();
+		// remove missing deps
+		this.dependencies.filter( function (d) { return !~dependencies.indexOf( d ); } ).forEach( function (d) {
+			d.unregister( this$1 );
+			removeFromArray( this$1.dependencies, d );
+		});
+		// register new deps
+		dependencies.filter( function (d) { return !~this$1.dependencies.indexOf( d ); } ).forEach( function (d) {
+			d.register( this$1 );
+			this$1.dependencies.push( d );
+		});
+
+		return result;
+	};
+
+	ExpressionProxy.prototype.rebind = function rebind ( next, previous, safe ) {
+		var idx = this.models.indexOf( previous );
+
+		if ( ~idx ) {
+			next = rebindMatch( this.template.r[idx], next, previous );
+			if ( next !== previous ) {
+				previous.unregister( this );
+				this.models.splice( idx, 1, next );
+				if ( next ) { next.addShuffleRegister( this, 'mark' ); }
+			}
+		}
+		this.bubble( !safe );
+	};
+
+	ExpressionProxy.prototype.retrieve = function retrieve () {
+		return this.get();
+	};
+
+	ExpressionProxy.prototype.teardown = function teardown () {
+		var this$1 = this;
+
+		this.unbind();
+		this.fragment = undefined;
+		if ( this.dependencies ) { this.dependencies.forEach( function (d) { return d.unregister( this$1 ); } ); }
+		Model$$1.prototype.teardown.call(this);
+	};
+
+	ExpressionProxy.prototype.unreference = function unreference () {
+		Model$$1.prototype.unreference.call(this);
+		if ( !this.deps.length && !this.refs ) { this.teardown(); }
+	};
+
+	ExpressionProxy.prototype.unregister = function unregister ( dep ) {
+		Model$$1.prototype.unregister.call( this, dep );
+		if ( !this.deps.length && !this.refs ) { this.teardown(); }
+	};
+
+	return ExpressionProxy;
+}(Model));
+
+var prototype = ExpressionProxy.prototype;
+var computation = Computation.prototype;
+prototype.get = computation.get;
+prototype.handleChange = computation.handleChange;
+prototype.joinKey = computation.joinKey;
+prototype.mark = computation.mark;
+prototype.unbind = noop;
+
+var ReferenceExpressionChild = (function (Model$$1) {
+	function ReferenceExpressionChild ( parent, key ) {
+		Model$$1.call ( this, parent, key );
+		this.dirty = true;
+	}
+
+	if ( Model$$1 ) ReferenceExpressionChild.__proto__ = Model$$1;
+	ReferenceExpressionChild.prototype = Object.create( Model$$1 && Model$$1.prototype );
+	ReferenceExpressionChild.prototype.constructor = ReferenceExpressionChild;
+
+	ReferenceExpressionChild.prototype.applyValue = function applyValue ( value ) {
+		if ( isEqual( value, this.value ) ) { return; }
+
+		var parent = this.parent;
+		var keys = [ this.key ];
+		while ( parent ) {
+			if ( parent.base ) {
+				var target = parent.model.joinAll( keys );
+				target.applyValue( value );
+				break;
+			}
+
+			keys.unshift( parent.key );
+
+			parent = parent.parent;
+		}
+	};
+
+	ReferenceExpressionChild.prototype.get = function get ( shouldCapture, opts ) {
+		this.retrieve();
+		return Model$$1.prototype.get.call( this, shouldCapture, opts );
+	};
+
+	ReferenceExpressionChild.prototype.joinKey = function joinKey ( key ) {
+		if ( key === undefined || key === '' ) { return this; }
+
+		if ( !this.childByKey.hasOwnProperty( key ) ) {
+			var child = new ReferenceExpressionChild( this, key );
+			this.children.push( child );
+			this.childByKey[ key ] = child;
+		}
+
+		return this.childByKey[ key ];
+	};
+
+	ReferenceExpressionChild.prototype.mark = function mark$$1 () {
+		this.dirty = true;
+		Model$$1.prototype.mark.call(this);
+	};
+
+	ReferenceExpressionChild.prototype.retrieve = function retrieve () {
+		if ( this.dirty ) {
+			this.dirty = false;
+			var parent = this.parent.get();
+			this.value = parent && parent[ this.key ];
+		}
+
+		return this.value;
+	};
+
+	return ReferenceExpressionChild;
+}(Model));
+
+var ReferenceExpressionProxy = (function (Model$$1) {
+	function ReferenceExpressionProxy ( fragment, template ) {
+		var this$1 = this;
+
+		Model$$1.call( this, null, null );
+		this.dirty = true;
+		this.root = fragment.ractive.viewmodel;
+		this.template = template;
+
+		this.base = resolve$1( fragment, template );
+
+		var intermediary = this.intermediary = {
+			handleChange: function () { return this$1.handleChange(); },
+			rebind: function ( next, previous ) {
+				if ( previous === this$1.base ) {
+					next = rebindMatch( template, next, previous );
+					if ( next !== this$1.base ) {
+						this$1.base.unregister( intermediary );
+						this$1.base = next;
+					}
+				} else {
+					var idx = this$1.members.indexOf( previous );
+					if ( ~idx ) {
+						// only direct references will rebind... expressions handle themselves
+						next = rebindMatch( template.m[idx].n, next, previous );
+						if ( next !== this$1.members[idx] ) {
+							this$1.members.splice( idx, 1, next );
+						}
+					}
+				}
+
+				if ( next !== previous ) { previous.unregister( intermediary ); }
+				if ( next ) { next.addShuffleTask( function () { return next.register( intermediary ); } ); }
+
+				this$1.bubble();
+			}
+		};
+
+		this.members = template.m.map( function ( template ) {
+			if ( typeof template === 'string' ) {
+				return { get: function () { return template; } };
+			}
+
+			var model;
+
+			if ( template.t === REFERENCE ) {
+				model = resolveReference( fragment, template.n );
+				model.register( intermediary );
+
+				return model;
+			}
+
+			model = new ExpressionProxy( fragment, template );
+			model.register( intermediary );
+			return model;
+		});
+
+		this.bubble();
+	}
+
+	if ( Model$$1 ) ReferenceExpressionProxy.__proto__ = Model$$1;
+	ReferenceExpressionProxy.prototype = Object.create( Model$$1 && Model$$1.prototype );
+	ReferenceExpressionProxy.prototype.constructor = ReferenceExpressionProxy;
+
+	ReferenceExpressionProxy.prototype.bubble = function bubble () {
+		if ( !this.base ) { return; }
+		if ( !this.dirty ) { this.handleChange(); }
+	};
+
+	ReferenceExpressionProxy.prototype.get = function get ( shouldCapture ) {
+		if ( this.dirty ) {
+			this.bubble();
+
+			var keys = this.members.map( function (m) { return escapeKey( String( m.get() ) ); } );
+			var model = this.base.joinAll( keys );
+
+			if ( model !== this.model ) {
+				if ( this.model ) {
+					this.model.unregister( this );
+					this.model.unregisterTwowayBinding( this );
+				}
+
+				this.model = model;
+				this.parent = model.parent;
+				this.model.register( this );
+				this.model.registerTwowayBinding( this );
+
+				if ( this.keypathModel ) { this.keypathModel.handleChange(); }
+			}
+
+			this.value = this.model.get( shouldCapture );
+			this.dirty = false;
+			this.mark();
+			return this.value;
+		} else {
+			return this.model ? this.model.get( shouldCapture ) : undefined;
+		}
+	};
+
+	// indirect two-way bindings
+	ReferenceExpressionProxy.prototype.getValue = function getValue () {
+		var this$1 = this;
+
+		this.value = this.model ? this.model.get() : undefined;
+
+		var i = this.bindings.length;
+		while ( i-- ) {
+			var value = this$1.bindings[i].getValue();
+			if ( value !== this$1.value ) { return value; }
+		}
+
+		// check one-way bindings
+		var oneway = findBoundValue( this.deps );
+		if ( oneway ) { return oneway.value; }
+
+		return this.value;
+	};
+
+	ReferenceExpressionProxy.prototype.getKeypath = function getKeypath () {
+		return this.model ? this.model.getKeypath() : '@undefined';
+	};
+
+	ReferenceExpressionProxy.prototype.handleChange = function handleChange$$1 () {
+		this.dirty = true;
+		this.mark();
+	};
+
+	ReferenceExpressionProxy.prototype.joinKey = function joinKey ( key ) {
+		if ( key === undefined || key === '' ) { return this; }
+
+		if ( !this.childByKey.hasOwnProperty( key ) ) {
+			var child = new ReferenceExpressionChild( this, key );
+			this.children.push( child );
+			this.childByKey[ key ] = child;
+		}
+
+		return this.childByKey[ key ];
+	};
+
+	ReferenceExpressionProxy.prototype.mark = function mark$1 () {
+		if ( this.dirty ) {
+			this.deps.forEach( handleChange );
+		}
+
+		this.links.forEach( marked );
+		this.children.forEach( mark );
+	};
+
+	ReferenceExpressionProxy.prototype.rebind = function rebind () { this.handleChange(); };
+
+	ReferenceExpressionProxy.prototype.retrieve = function retrieve () {
+		return this.value;
+	};
+
+	ReferenceExpressionProxy.prototype.set = function set ( value ) {
+		this.model.set( value );
+	};
+
+	ReferenceExpressionProxy.prototype.teardown = function teardown$$1 () {
+		var this$1 = this;
+
+		if ( this.model ) {
+			this.model.unregister( this );
+			this.model.unregisterTwowayBinding( this );
+		}
+		if ( this.members ) {
+			this.members.forEach( function (m) { return m && m.unregister && m.unregister( this$1 ); } );
+		}
+	};
+
+	ReferenceExpressionProxy.prototype.unreference = function unreference () {
+		Model$$1.prototype.unreference.call(this);
+		if ( !this.deps.length && !this.refs ) { this.teardown(); }
+	};
+
+	ReferenceExpressionProxy.prototype.unregister = function unregister ( dep ) {
+		Model$$1.prototype.unregister.call( this, dep );
+		if ( !this.deps.length && !this.refs ) { this.teardown(); }
+	};
+
+	return ReferenceExpressionProxy;
+}(Model));
+
+function resolve$1 ( fragment, template ) {
+	if ( template.r ) {
+		return resolveReference( fragment, template.r );
+	}
+
+	else if ( template.x ) {
+		return new ExpressionProxy( fragment, template.x );
+	}
+
+	else if ( template.rx ) {
+		return new ReferenceExpressionProxy( fragment, template.rx );
+	}
+}
+
+function resolveAliases( aliases, fragment ) {
+	var resolved = {};
+
+	for ( var i = 0; i < aliases.length; i++ ) {
+		resolved[ aliases[i].n ] = resolve$1( fragment, aliases[i].x );
+	}
+
+	for ( var k in resolved ) {
+		resolved[k].reference();
+	}
+
+	return resolved;
+}
+
+var Alias = (function (ContainerItem$$1) {
+	function Alias ( options ) {
+		ContainerItem$$1.call( this, options );
+
+		this.fragment = null;
+	}
+
+	if ( ContainerItem$$1 ) Alias.__proto__ = ContainerItem$$1;
+	Alias.prototype = Object.create( ContainerItem$$1 && ContainerItem$$1.prototype );
+	Alias.prototype.constructor = Alias;
+
+	Alias.prototype.bind = function bind () {
+		this.fragment = new Fragment({
+			owner: this,
+			template: this.template.f
+		});
+
+		this.fragment.aliases = resolveAliases( this.template.z, this.parentFragment );
+		this.fragment.bind();
+	};
+
+	Alias.prototype.render = function render ( target ) {
+		this.rendered = true;
+		if ( this.fragment ) { this.fragment.render( target ); }
+	};
+
+	Alias.prototype.unbind = function unbind () {
+		var this$1 = this;
+
+		for ( var k in this$1.fragment.aliases ) {
+			this$1.fragment.aliases[k].unreference();
+		}
+
+		this.fragment.aliases = {};
+		if ( this.fragment ) { this.fragment.unbind(); }
+	};
+
+	Alias.prototype.unrender = function unrender ( shouldDestroy ) {
+		if ( this.rendered && this.fragment ) { this.fragment.unrender( shouldDestroy ); }
+		this.rendered = false;
+	};
+
+	Alias.prototype.update = function update () {
+		if ( this.dirty ) {
+			this.dirty = false;
+			this.fragment.update();
+		}
+	};
+
+	return Alias;
+}(ContainerItem));
+
+var space = /\s+/;
+
+function readStyle ( css ) {
+	if ( typeof css !== 'string' ) { return {}; }
+
+	return cleanCss( css, function ( css, reconstruct ) {
+		return css.split( ';' )
+			.filter( function (rule) { return !!rule.trim(); } )
+			.map( reconstruct )
+			.reduce(function ( rules, rule ) {
+				var i = rule.indexOf(':');
+				var name = rule.substr( 0, i ).trim();
+				rules[ name ] = rule.substr( i + 1 ).trim();
+				return rules;
+			}, {});
+	});
+}
+
+function readClass ( str ) {
+	var list = str.split( space );
+
+  // remove any empty entries
+	var i = list.length;
+	while ( i-- ) {
+		if ( !list[i] ) { list.splice( i, 1 ); }
+	}
+
+	return list;
+}
+
+var hyphenateCamel = function ( camelCaseStr ) {
+	return camelCaseStr.replace( /([A-Z])/g, function ( match, $1 ) {
+		return '-' + $1.toLowerCase();
+	});
+};
+
+var textTypes = [ undefined, 'text', 'search', 'url', 'email', 'hidden', 'password', 'search', 'reset', 'submit' ];
+
+function getUpdateDelegate ( attribute ) {
+	var element = attribute.element;
+	var name = attribute.name;
+
+	if ( name === 'value' ) {
+		if ( attribute.interpolator ) { attribute.interpolator.bound = true; }
+
+		// special case - selects
+		if ( element.name === 'select' && name === 'value' ) {
+			return element.getAttribute( 'multiple' ) ? updateMultipleSelectValue : updateSelectValue;
+		}
+
+		if ( element.name === 'textarea' ) { return updateStringValue; }
+
+		// special case - contenteditable
+		if ( element.getAttribute( 'contenteditable' ) != null ) { return updateContentEditableValue; }
+
+		// special case - <input>
+		if ( element.name === 'input' ) {
+			var type = element.getAttribute( 'type' );
+
+			// type='file' value='{{fileList}}'>
+			if ( type === 'file' ) { return noop; } // read-only
+
+			// type='radio' name='{{twoway}}'
+			if ( type === 'radio' && element.binding && element.binding.attribute.name === 'name' ) { return updateRadioValue; }
+
+			if ( ~textTypes.indexOf( type ) ) { return updateStringValue; }
+		}
+
+		return updateValue;
+	}
+
+	var node = element.node;
+
+	// special case - <input type='radio' name='{{twoway}}' value='foo'>
+	if ( attribute.isTwoway && name === 'name' ) {
+		if ( node.type === 'radio' ) { return updateRadioName; }
+		if ( node.type === 'checkbox' ) { return updateCheckboxName; }
+	}
+
+	if ( name === 'style' ) { return updateStyleAttribute; }
+
+	if ( name.indexOf( 'style-' ) === 0 ) { return updateInlineStyle; }
+
+	// special case - class names. IE fucks things up, again
+	if ( name === 'class' && ( !node.namespaceURI || node.namespaceURI === html ) ) { return updateClassName; }
+
+	if ( name.indexOf( 'class-' ) === 0 ) { return updateInlineClass; }
+
+	if ( attribute.isBoolean ) {
+		var type$1 = element.getAttribute( 'type' );
+		if ( attribute.interpolator && name === 'checked' && ( type$1 === 'checkbox' || type$1 === 'radio' ) ) { attribute.interpolator.bound = true; }
+		return updateBoolean;
+	}
+
+	if ( attribute.namespace && attribute.namespace !== attribute.node.namespaceURI ) { return updateNamespacedAttribute; }
+
+	return updateAttribute;
+}
+
+function updateMultipleSelectValue ( reset ) {
+	var value = this.getValue();
+
+	if ( !Array.isArray( value ) ) { value = [ value ]; }
+
+	var options = this.node.options;
+	var i = options.length;
+
+	if ( reset ) {
+		while ( i-- ) { options[i].selected = false; }
+	} else {
+		while ( i-- ) {
+			var option = options[i];
+			var optionValue = option._ractive ?
+				option._ractive.value :
+				option.value; // options inserted via a triple don't have _ractive
+
+			option.selected = arrayContains( value, optionValue );
+		}
+	}
+}
+
+function updateSelectValue ( reset ) {
+	var value = this.getValue();
+
+	if ( !this.locked ) { // TODO is locked still a thing?
+		this.node._ractive.value = value;
+
+		var options = this.node.options;
+		var i = options.length;
+		var wasSelected = false;
+
+		if ( reset ) {
+			while ( i-- ) { options[i].selected = false; }
+		} else {
+			while ( i-- ) {
+				var option = options[i];
+				var optionValue = option._ractive ?
+					option._ractive.value :
+					option.value; // options inserted via a triple don't have _ractive
+				if ( option.disabled && option.selected ) { wasSelected = true; }
+
+				if ( optionValue == value ) { // double equals as we may be comparing numbers with strings
+					option.selected = true;
+					return;
+				}
+			}
+		}
+
+		if ( !wasSelected ) { this.node.selectedIndex = -1; }
+	}
+}
+
+
+function updateContentEditableValue ( reset ) {
+	var value = this.getValue();
+
+	if ( !this.locked ) {
+		if ( reset ) { this.node.innerHTML = ''; }
+		else { this.node.innerHTML = value === undefined ? '' : value; }
+	}
+}
+
+function updateRadioValue ( reset ) {
+	var node = this.node;
+	var wasChecked = node.checked;
+
+	var value = this.getValue();
+
+	if ( reset ) { return node.checked = false; }
+
+	//node.value = this.element.getAttribute( 'value' );
+	node.value = this.node._ractive.value = value;
+	node.checked = this.element.compare( value, this.element.getAttribute( 'name' ) );
+
+	// This is a special case - if the input was checked, and the value
+	// changed so that it's no longer checked, the twoway binding is
+	// most likely out of date. To fix it we have to jump through some
+	// hoops... this is a little kludgy but it works
+	if ( wasChecked && !node.checked && this.element.binding && this.element.binding.rendered ) {
+		this.element.binding.group.model.set( this.element.binding.group.getValue() );
+	}
+}
+
+function updateValue ( reset ) {
+	if ( !this.locked ) {
+		if ( reset ) {
+			this.node.removeAttribute( 'value' );
+			this.node.value = this.node._ractive.value = null;
+		} else {
+			var value = this.getValue();
+
+			this.node.value = this.node._ractive.value = value;
+			this.node.setAttribute( 'value', safeToStringValue( value ) );
+		}
+	}
+}
+
+function updateStringValue ( reset ) {
+	if ( !this.locked ) {
+		if ( reset ) {
+			this.node._ractive.value = '';
+			this.node.removeAttribute( 'value' );
+		} else {
+			var value = this.getValue();
+
+			this.node._ractive.value = value;
+
+			this.node.value = safeToStringValue( value );
+			this.node.setAttribute( 'value', safeToStringValue( value ) );
+		}
+	}
+}
+
+function updateRadioName ( reset ) {
+	if ( reset ) { this.node.checked = false; }
+	else { this.node.checked = this.element.compare( this.getValue(), this.element.binding.getValue() ); }
+}
+
+function updateCheckboxName ( reset ) {
+	var ref = this;
+	var element = ref.element;
+	var node = ref.node;
+	var binding = element.binding;
+
+	var value = this.getValue();
+	var valueAttribute = element.getAttribute( 'value' );
+
+	if ( reset ) {
+		// TODO: WAT?
+	}
+
+	if ( !Array.isArray( value ) ) {
+		binding.isChecked = node.checked = element.compare( value, valueAttribute );
+	} else {
+		var i = value.length;
+		while ( i-- ) {
+			if ( element.compare ( valueAttribute, value[i] ) ) {
+				binding.isChecked = node.checked = true;
+				return;
+			}
+		}
+		binding.isChecked = node.checked = false;
+	}
+}
+
+function updateStyleAttribute ( reset ) {
+	var props = reset ? {} : readStyle( this.getValue() || '' );
+	var style = this.node.style;
+	var keys = Object.keys( props );
+	var prev = this.previous || [];
+
+	var i = 0;
+	while ( i < keys.length ) {
+		if ( keys[i] in style ) {
+			var safe = props[ keys[i] ].replace( '!important', '' );
+			style.setProperty( keys[i], safe, safe.length !== props[ keys[i] ].length ? 'important' : '' );
+		}
+		i++;
+	}
+
+	// remove now-missing attrs
+	i = prev.length;
+	while ( i-- ) {
+		if ( !~keys.indexOf( prev[i] ) && prev[i] in style ) { style.setProperty( prev[i], '', '' ); }
+	}
+
+	this.previous = keys;
+}
+
+function updateInlineStyle ( reset ) {
+	if ( !this.style ) {
+		this.style = hyphenateCamel( this.name.substr( 6 ) );
+	}
+
+	var value = reset ? '' : safeToStringValue( this.getValue() );
+	var safe = value.replace( '!important', '' );
+	this.node.style.setProperty( this.style, safe, safe.length !== value.length ? 'important' : '' );
+}
+
+function updateClassName ( reset ) {
+	var value = reset ? [] : readClass( safeToStringValue( this.getValue() ) );
+
+	// watch out for werdo svg elements
+	var cls = this.node.className;
+	cls = cls.baseVal !== undefined ? cls.baseVal : cls;
+
+	var attr = readClass( cls );
+	var prev = this.previous || attr.slice( 0 );
+
+	var className = value.concat( attr.filter( function (c) { return !~prev.indexOf( c ); } ) ).join( ' ' );
+
+	if ( className !== cls ) {
+		if ( typeof this.node.className !== 'string' ) {
+			this.node.className.baseVal = className;
+		} else {
+			this.node.className = className;
+		}
+	}
+
+	this.previous = value;
+}
+
+function updateInlineClass ( reset ) {
+	var name = this.name.substr( 6 );
+
+	// watch out for werdo svg elements
+	var cls = this.node.className;
+	cls = cls.baseVal !== undefined ? cls.baseVal : cls;
+
+	var attr = readClass( cls );
+	var value = reset ? false : this.getValue();
+
+	if ( !this.inlineClass ) { this.inlineClass = name; }
+
+	if ( value && !~attr.indexOf( name ) ) { attr.push( name ); }
+	else if ( !value && ~attr.indexOf( name ) ) { attr.splice( attr.indexOf( name ), 1 ); }
+
+	if ( typeof this.node.className !== 'string' ) {
+		this.node.className.baseVal = attr.join( ' ' );
+	} else {
+		this.node.className = attr.join( ' ' );
+	}
+}
+
+function updateBoolean ( reset ) {
+	// with two-way binding, only update if the change wasn't initiated by the user
+	// otherwise the cursor will often be sent to the wrong place
+	if ( !this.locked ) {
+		if ( reset ) {
+			if ( this.useProperty ) { this.node[ this.propertyName ] = false; }
+			this.node.removeAttribute( this.propertyName );
+		} else {
+			if ( this.useProperty ) {
+				this.node[ this.propertyName ] = this.getValue();
+			} else {
+				var val = this.getValue();
+				if ( val ) {
+					this.node.setAttribute( this.propertyName, typeof val === 'string' ? val : '' );
+				} else {
+					this.node.removeAttribute( this.propertyName );
+				}
+			}
+		}
+	}
+}
+
+function updateAttribute ( reset ) {
+	if ( reset ) { this.node.removeAttribute( this.name ); }
+	else { this.node.setAttribute( this.name, safeToStringValue( this.getString() ) ); }
+}
+
+function updateNamespacedAttribute ( reset ) {
+	if ( reset ) { this.node.removeAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ) ); }
+	else { this.node.setAttributeNS( this.namespace, this.name.slice( this.name.indexOf( ':' ) + 1 ), safeToStringValue( this.getString() ) ); }
+}
+
+var propertyNames = {
+	'accept-charset': 'acceptCharset',
+	accesskey: 'accessKey',
+	bgcolor: 'bgColor',
+	class: 'className',
+	codebase: 'codeBase',
+	colspan: 'colSpan',
+	contenteditable: 'contentEditable',
+	datetime: 'dateTime',
+	dirname: 'dirName',
+	for: 'htmlFor',
+	'http-equiv': 'httpEquiv',
+	ismap: 'isMap',
+	maxlength: 'maxLength',
+	novalidate: 'noValidate',
+	pubdate: 'pubDate',
+	readonly: 'readOnly',
+	rowspan: 'rowSpan',
+	tabindex: 'tabIndex',
+	usemap: 'useMap'
+};
+
+var div$1 = doc ? createElement( 'div' ) : null;
+
+var attributes = false;
+function inAttributes() { return attributes; }
+function doInAttributes( fn ) {
+	attributes = true;
+	fn();
+	attributes = false;
+}
+
+var ConditionalAttribute = (function (Item$$1) {
+	function ConditionalAttribute ( options ) {
+		Item$$1.call( this, options );
+
+		this.attributes = [];
+
+		this.owner = options.owner;
+
+		this.fragment = new Fragment({
+			ractive: this.ractive,
+			owner: this,
+			template: this.template
+		});
+		// this fragment can't participate in node-y things
+		this.fragment.findNextNode = noop;
+
+		this.dirty = false;
+	}
+
+	if ( Item$$1 ) ConditionalAttribute.__proto__ = Item$$1;
+	ConditionalAttribute.prototype = Object.create( Item$$1 && Item$$1.prototype );
+	ConditionalAttribute.prototype.constructor = ConditionalAttribute;
+
+	ConditionalAttribute.prototype.bind = function bind () {
+		this.fragment.bind();
+	};
+
+	ConditionalAttribute.prototype.bubble = function bubble () {
+		if ( !this.dirty ) {
+			this.dirty = true;
+			this.owner.bubble();
+		}
+	};
+
+	ConditionalAttribute.prototype.render = function render () {
+		this.node = this.owner.node;
+		if ( this.node ) {
+			this.isSvg = this.node.namespaceURI === svg$1;
+		}
+
+		attributes = true;
+		if ( !this.rendered ) { this.fragment.render(); }
+
+		this.rendered = true;
+		this.dirty = true; // TODO this seems hacky, but necessary for tests to pass in browser AND node.js
+		this.update();
+		attributes = false;
+	};
+
+	ConditionalAttribute.prototype.toString = function toString () {
+		return this.fragment.toString();
+	};
+
+	ConditionalAttribute.prototype.unbind = function unbind () {
+		this.fragment.unbind();
+	};
+
+	ConditionalAttribute.prototype.unrender = function unrender () {
+		this.rendered = false;
+		this.fragment.unrender();
+	};
+
+	ConditionalAttribute.prototype.update = function update () {
+		var this$1 = this;
+
+		var str;
+		var attrs;
+
+		if ( this.dirty ) {
+			this.dirty = false;
+
+			var current = attributes;
+			attributes = true;
+			this.fragment.update();
+
+			if ( this.rendered && this.node ) {
+				str = this.fragment.toString();
+
+				attrs = parseAttributes( str, this.isSvg );
+
+				// any attributes that previously existed but no longer do
+				// must be removed
+				this.attributes.filter( function (a) { return notIn( attrs, a ); } ).forEach( function (a) {
+					this$1.node.removeAttribute( a.name );
+				});
+
+				attrs.forEach( function (a) {
+					this$1.node.setAttribute( a.name, a.value );
+				});
+
+				this.attributes = attrs;
+			}
+
+			attributes = current || false;
+		}
+	};
+
+	return ConditionalAttribute;
+}(Item));
+
+var onlyWhitespace = /^\s*$/;
+function parseAttributes ( str, isSvg ) {
+	if ( onlyWhitespace.test( str ) ) { return []; }
+	var tagName = isSvg ? 'svg' : 'div';
+	return str
+		? (div$1.innerHTML = "<" + tagName + " " + str + "></" + tagName + ">") &&
+			toArray(div$1.childNodes[0].attributes)
+		: [];
+}
+
+function notIn ( haystack, needle ) {
+	var i = haystack.length;
+
+	while ( i-- ) {
+		if ( haystack[i].name === needle.name ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+
+function lookupNamespace ( node, prefix ) {
+	var qualified = "xmlns:" + prefix;
+
+	while ( node ) {
+		if ( node.hasAttribute && node.hasAttribute( qualified ) ) { return node.getAttribute( qualified ); }
+		node = node.parentNode;
+	}
+
+	return namespaces[ prefix ];
+}
+
+var attribute = false;
+function inAttribute () { return attribute; }
+
+var Attribute = (function (Item$$1) {
+	function Attribute ( options ) {
+		Item$$1.call( this, options );
+
+		this.name = options.template.n;
+		this.namespace = null;
+
+		this.owner = options.owner || options.parentFragment.owner || options.element || findElement( options.parentFragment );
+		this.element = options.element || (this.owner.attributeByName ? this.owner : findElement( options.parentFragment ) );
+		this.parentFragment = options.parentFragment; // shared
+		this.ractive = this.parentFragment.ractive;
+
+		this.rendered = false;
+		this.updateDelegate = null;
+		this.fragment = null;
+
+		this.element.attributeByName[ this.name ] = this;
+
+		if ( !Array.isArray( options.template.f ) ) {
+			this.value = options.template.f;
+			if ( this.value === 0 ) {
+				this.value = '';
+			} else if ( this.value === undefined ) {
+				this.value = true;
+			}
+		} else {
+			this.fragment = new Fragment({
+				owner: this,
+				template: options.template.f
+			});
+		}
+
+		this.interpolator = this.fragment &&
+			this.fragment.items.length === 1 &&
+			this.fragment.items[0].type === INTERPOLATOR &&
+			this.fragment.items[0];
+
+		if ( this.interpolator ) { this.interpolator.owner = this; }
+	}
+
+	if ( Item$$1 ) Attribute.__proto__ = Item$$1;
+	Attribute.prototype = Object.create( Item$$1 && Item$$1.prototype );
+	Attribute.prototype.constructor = Attribute;
+
+	Attribute.prototype.bind = function bind () {
+		if ( this.fragment ) {
+			this.fragment.bind();
+		}
+	};
+
+	Attribute.prototype.bubble = function bubble () {
+		if ( !this.dirty ) {
+			this.parentFragment.bubble();
+			this.element.bubble();
+			this.dirty = true;
+		}
+	};
+
+	Attribute.prototype.getString = function getString () {
+		attribute = true;
+		var value = this.fragment ?
+			this.fragment.toString() :
+			this.value != null ? '' + this.value : '';
+		attribute = false;
+		return value;
+	};
+
+	// TODO could getValue ever be called for a static attribute,
+	// or can we assume that this.fragment exists?
+	Attribute.prototype.getValue = function getValue () {
+		attribute = true;
+		var value = this.fragment ? this.fragment.valueOf() : booleanAttributes.test( this.name ) ? true : this.value;
+		attribute = false;
+		return value;
+	};
+
+	Attribute.prototype.render = function render () {
+		var node = this.element.node;
+		this.node = node;
+
+		// should we use direct property access, or setAttribute?
+		if ( !node.namespaceURI || node.namespaceURI === namespaces.html ) {
+			this.propertyName = propertyNames[ this.name ] || this.name;
+
+			if ( node[ this.propertyName ] !== undefined ) {
+				this.useProperty = true;
+			}
+
+			// is attribute a boolean attribute or 'value'? If so we're better off doing e.g.
+			// node.selected = true rather than node.setAttribute( 'selected', '' )
+			if ( booleanAttributes.test( this.name ) || this.isTwoway ) {
+				this.isBoolean = true;
+			}
+
+			if ( this.propertyName === 'value' ) {
+				node._ractive.value = this.value;
+			}
+		}
+
+		if ( node.namespaceURI ) {
+			var index = this.name.indexOf( ':' );
+			if ( index !== -1 ) {
+				this.namespace = lookupNamespace( node, this.name.slice( 0, index ) );
+			} else {
+				this.namespace = node.namespaceURI;
+			}
+		}
+
+		this.rendered = true;
+		this.updateDelegate = getUpdateDelegate( this );
+		this.updateDelegate();
+	};
+
+	Attribute.prototype.toString = function toString () {
+		if ( inAttributes() ) { return ''; }
+		attribute = true;
+
+		var value = this.getValue();
+
+		// Special case - select and textarea values (should not be stringified)
+		if ( this.name === 'value' && ( this.element.getAttribute( 'contenteditable' ) !== undefined || ( this.element.name === 'select' || this.element.name === 'textarea' ) ) ) {
+			return;
+		}
+
+		// Special case – bound radio `name` attributes
+		if ( this.name === 'name' && this.element.name === 'input' && this.interpolator && this.element.getAttribute( 'type' ) === 'radio' ) {
+			return ("name=\"{{" + (this.interpolator.model.getKeypath()) + "}}\"");
+		}
+
+		// Special case - style and class attributes and directives
+		if ( this.owner === this.element && ( this.name === 'style' || this.name === 'class' || this.style || this.inlineClass ) ) {
+			return;
+		}
+
+		if ( !this.rendered && this.owner === this.element && ( !this.name.indexOf( 'style-' ) || !this.name.indexOf( 'class-' ) ) ) {
+			if ( !this.name.indexOf( 'style-' ) ) {
+				this.style = hyphenateCamel( this.name.substr( 6 ) );
+			} else {
+				this.inlineClass = this.name.substr( 6 );
+			}
+
+			return;
+		}
+
+		if ( booleanAttributes.test( this.name ) ) { return value ? ( typeof value === 'string' ? ((this.name) + "=\"" + (safeAttributeString(value)) + "\"") : this.name ) : ''; }
+		if ( value == null ) { return ''; }
+
+		var str = safeAttributeString( this.getString() );
+		attribute = false;
+
+		return str ?
+			((this.name) + "=\"" + str + "\"") :
+			this.name;
+	};
+
+	Attribute.prototype.unbind = function unbind () {
+		if ( this.fragment ) { this.fragment.unbind(); }
+	};
+
+	Attribute.prototype.unrender = function unrender () {
+		this.updateDelegate( true );
+
+		this.rendered = false;
+	};
+
+	Attribute.prototype.update = function update () {
+		if ( this.dirty ) {
+			this.dirty = false;
+			if ( this.fragment ) { this.fragment.update(); }
+			if ( this.rendered ) { this.updateDelegate(); }
+			if ( this.isTwoway && !this.locked ) {
+				this.interpolator.twowayBinding.lastVal( true, this.interpolator.model.get() );
+			}
+		}
+	};
+
+	return Attribute;
+}(Item));
+
+var BindingFlag = (function (Item$$1) {
+	function BindingFlag ( options ) {
+		Item$$1.call( this, options );
+
+		this.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );
+		this.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment );
+		this.flag = options.template.v === 'l' ? 'lazy' : 'twoway';
+
+		if ( this.element.type === ELEMENT ) {
+			if ( Array.isArray( options.template.f ) ) {
+				this.fragment = new Fragment({
+					owner: this,
+					template: options.template.f
+				});
+			}
+
+			this.interpolator = this.fragment &&
+								this.fragment.items.length === 1 &&
+								this.fragment.items[0].type === INTERPOLATOR &&
+								this.fragment.items[0];
+		}
+	}
+
+	if ( Item$$1 ) BindingFlag.__proto__ = Item$$1;
+	BindingFlag.prototype = Object.create( Item$$1 && Item$$1.prototype );
+	BindingFlag.prototype.constructor = BindingFlag;
+
+	BindingFlag.prototype.bind = function bind () {
+		if ( this.fragment ) { this.fragment.bind(); }
+		set$1( this, this.getValue(), true );
+	};
+
+	BindingFlag.prototype.bubble = function bubble () {
+		if ( !this.dirty ) {
+			this.element.bubble();
+			this.dirty = true;
+		}
+	};
+
+	BindingFlag.prototype.getValue = function getValue () {
+		if ( this.fragment ) { return this.fragment.valueOf(); }
+		else if ( 'value' in this ) { return this.value; }
+		else if ( 'f' in this.template ) { return this.template.f; }
+		else { return true; }
+	};
+
+	BindingFlag.prototype.render = function render () {
+		set$1( this, this.getValue(), true );
+	};
+
+	BindingFlag.prototype.toString = function toString () { return ''; };
+
+	BindingFlag.prototype.unbind = function unbind () {
+		if ( this.fragment ) { this.fragment.unbind(); }
+
+		delete this.element[ this.flag ];
+	};
+
+	BindingFlag.prototype.unrender = function unrender () {
+		if ( this.element.rendered ) { this.element.recreateTwowayBinding(); }
+	};
+
+	BindingFlag.prototype.update = function update () {
+		if ( this.dirty ) {
+			if ( this.fragment ) { this.fragment.update(); }
+			set$1( this, this.getValue(), true );
+		}
+	};
+
+	return BindingFlag;
+}(Item));
+
+function set$1 ( flag, value, update ) {
+	if ( value === 0 ) {
+		flag.value = true;
+	} else if ( value === 'true' ) {
+		flag.value = true;
+	} else if ( value === 'false' || value === '0' ) {
+		flag.value = false;
+	} else {
+		flag.value = value;
+	}
+
+	var current = flag.element[ flag.flag ];
+	flag.element[ flag.flag ] = flag.value;
+	if ( update && !flag.element.attributes.binding && current !== flag.value ) {
+		flag.element.recreateTwowayBinding();
+	}
+
+	return flag.value;
+}
+
+var RactiveModel = (function (Model$$1) {
+	function RactiveModel ( ractive ) {
+		Model$$1.call( this, null, '' );
+		this.value = ractive;
+		this.isRoot = true;
+		this.root = this;
+		this.adaptors = [];
+		this.ractive = ractive;
+	}
+
+	if ( Model$$1 ) RactiveModel.__proto__ = Model$$1;
+	RactiveModel.prototype = Object.create( Model$$1 && Model$$1.prototype );
+	RactiveModel.prototype.constructor = RactiveModel;
+
+	RactiveModel.prototype.joinKey = function joinKey ( key ) {
+		var model = Model$$1.prototype.joinKey.call( this, key );
+
+		if ( ( key === 'root' || key === 'parent' ) && !model.isLink ) { return initLink( model, key ); }
+		else if ( key === 'data' ) { return this.ractive.viewmodel; }
+
+		return model;
+	};
+
+	RactiveModel.prototype.getKeypath = function getKeypath () {
+		return '@this';
+	};
+
+	RactiveModel.prototype.retrieve = function retrieve () {
+		return this.ractive;
+	};
+
+	return RactiveModel;
+}(Model));
+
+function initLink ( model, key ) {
+	model.applyValue = function ( value ) {
+		this.parent.value[ key ] = value;
+		if ( value && value.viewmodel ) {
+			this.link( value.viewmodel.getRactiveModel(), key );
+			this._link.markedAll();
+		} else {
+			this.link( Object.create( Missing ), key );
+			this._link.markedAll();
+		}
+	};
+
+	model.applyValue( model.parent.ractive[ key ], key );
+	model._link.set = function (v) { return model.applyValue( v ); };
+	model._link.applyValue = function (v) { return model.applyValue( v ); };
+	return model._link;
+}
+
+var hasProp$1 = Object.prototype.hasOwnProperty;
+
+var RootModel = (function (Model$$1) {
+	function RootModel ( options ) {
+		Model$$1.call( this, null, null );
+
+		this.isRoot = true;
+		this.root = this;
+		this.ractive = options.ractive; // TODO sever this link
+
+		this.value = options.data;
+		this.adaptors = options.adapt;
+		this.adapt();
+
+		this.computationContext = options.ractive;
+		this.computations = {};
+	}
+
+	if ( Model$$1 ) RootModel.__proto__ = Model$$1;
+	RootModel.prototype = Object.create( Model$$1 && Model$$1.prototype );
+	RootModel.prototype.constructor = RootModel;
+
+	RootModel.prototype.attached = function attached ( fragment ) {
+		attachImplicits( this, fragment );
+	};
+
+	RootModel.prototype.compute = function compute ( key, signature ) {
+		var computation = new Computation( this, signature, key );
+		this.computations[ escapeKey( key ) ] = computation;
+
+		return computation;
+	};
+
+	RootModel.prototype.createLink = function createLink ( keypath, target, targetPath, options ) {
+		var keys = splitKeypath( keypath );
+
+		var model = this;
+		while ( keys.length ) {
+			var key = keys.shift();
+			model = model.childByKey[ key ] || model.joinKey( key );
+		}
+
+		return model.link( target, targetPath, options );
+	};
+
+	RootModel.prototype.detached = function detached () {
+		detachImplicits( this );
+	};
+
+	RootModel.prototype.get = function get ( shouldCapture, options ) {
+		var this$1 = this;
+
+		if ( shouldCapture ) { capture( this ); }
+
+		if ( !options || options.virtual !== false ) {
+			var result = this.getVirtual();
+			var keys = Object.keys( this.computations );
+			var i = keys.length;
+			while ( i-- ) {
+				result[ keys[i] ] = this$1.computations[ keys[i] ].get();
+			}
+
+			return result;
+		} else {
+			return this.value;
+		}
+	};
+
+	RootModel.prototype.getKeypath = function getKeypath () {
+		return '';
+	};
+
+	RootModel.prototype.getRactiveModel = function getRactiveModel () {
+		return this.ractiveModel || ( this.ractiveModel = new RactiveModel( this.ractive ) );
+	};
+
+	RootModel.prototype.getValueChildren = function getValueChildren () {
+		var this$1 = this;
+
+		var children = Model$$1.prototype.getValueChildren.call( this, this.value );
+
+		this.children.forEach( function (child) {
+			if ( child._link ) {
+				var idx = children.indexOf( child );
+				if ( ~idx ) { children.splice( idx, 1, child._link ); }
+				else { children.push( child._link ); }
+			}
+		});
+
+		for ( var k in this$1.computations ) {
+			children.push( this$1.computations[k] );
+		}
+
+		return children;
+	};
+
+	RootModel.prototype.has = function has ( key ) {
+		var value = this.value;
+		var unescapedKey = unescapeKey( key );
+
+		if ( unescapedKey === '@this' || unescapedKey === '@global' || unescapedKey === '@shared' ) { return true; }
+		if ( unescapedKey[0] === '~' && unescapedKey[1] === '/' ) { unescapedKey = unescapedKey.slice( 2 ); }
+		if ( key === '' || hasProp$1.call( value, unescapedKey ) ) { return true; }
+
+		// mappings/links and computations
+		if ( key in this.computations || this.childByKey[unescapedKey] && this.childByKey[unescapedKey]._link ) { return true; }
+
+		// We climb up the constructor chain to find if one of them contains the unescapedKey
+		var constructor = value.constructor;
+		while ( constructor !== Function && constructor !== Array && constructor !== Object ) {
+			if ( hasProp$1.call( constructor.prototype, unescapedKey ) ) { return true; }
+			constructor = constructor.constructor;
+		}
+
+		return false;
+	};
+
+	RootModel.prototype.joinKey = function joinKey ( key, opts ) {
+		if ( key[0] === '@' ) {
+			if ( key === '@this' || key === '@' ) { return this.getRactiveModel(); }
+			if ( key === '@global' ) { return GlobalModel; }
+			if ( key === '@shared' ) { return SharedModel$1; }
+			return;
+		}
+
+		if ( key[0] === '~' && key[1] === '/' ) { key = key.slice( 2 ); }
+
+		return this.computations.hasOwnProperty( key ) ? this.computations[ key ] :
+		       Model$$1.prototype.joinKey.call( this, key, opts );
+	};
+
+	RootModel.prototype.set = function set ( value ) {
+		// TODO wrapping root node is a baaaad idea. We should prevent this
+		var wrapper = this.wrapper;
+		if ( wrapper ) {
+			var shouldTeardown = !wrapper.reset || wrapper.reset( value ) === false;
+
+			if ( shouldTeardown ) {
+				wrapper.teardown();
+				this.wrapper = null;
+				this.value = value;
+				this.adapt();
+			}
+		} else {
+			this.value = value;
+			this.adapt();
+		}
+
+		this.deps.forEach( handleChange );
+		this.children.forEach( mark );
+	};
+
+	RootModel.prototype.retrieve = function retrieve () {
+		return this.wrapper ? this.wrapper.get() : this.value;
+	};
+
+	RootModel.prototype.teardown = function teardown$$1 () {
+		var this$1 = this;
+
+		Model$$1.prototype.teardown.call(this);
+		for ( var k in this$1.computations ) {
+			this$1.computations[ k ].teardown();
+		}
+	};
+
+	return RootModel;
+}(Model));
+
+RootModel.prototype.update = noop;
+
+function attachImplicits ( model, fragment ) {
+	if ( model._link && model._link.implicit && model._link.isDetached() ) {
+		model.attach( fragment );
+	}
+
+	// look for virtual children to relink and cascade
+	for ( var k in model.childByKey ) {
+		if ( k in model.value ) {
+			attachImplicits( model.childByKey[k], fragment );
+		} else if ( !model.childByKey[k]._link || model.childByKey[k]._link.isDetached() ) {
+			var mdl = resolveReference( fragment, k );
+			if ( mdl ) {
+				model.childByKey[k].link( mdl, k, { implicit: true } );
+			}
+		}
+	}
+}
+
+function detachImplicits ( model ) {
+	if ( model._link && model._link.implicit ) {
+		model.unlink();
+	}
+
+	for ( var k in model.childByKey ) {
+		detachImplicits( model.childByKey[k] );
+	}
+}
+
+function getComputationSignature ( ractive, key, signature ) {
+	var getter;
+	var setter;
+
+	// useful for debugging
+	var getterString;
+	var getterUseStack;
+	var setterString;
+
+	if ( typeof signature === 'function' ) {
+		getter = bind$1( signature, ractive );
+		getterString = signature.toString();
+		getterUseStack = true;
+	}
+
+	if ( typeof signature === 'string' ) {
+		getter = createFunctionFromString( signature, ractive );
+		getterString = signature;
+	}
+
+	if ( typeof signature === 'object' ) {
+		if ( typeof signature.get === 'string' ) {
+			getter = createFunctionFromString( signature.get, ractive );
+			getterString = signature.get;
+		} else if ( typeof signature.get === 'function' ) {
+			getter = bind$1( signature.get, ractive );
+			getterString = signature.get.toString();
+			getterUseStack = true;
+		} else {
+			fatal( '`%s` computation must have a `get()` method', key );
+		}
+
+		if ( typeof signature.set === 'function' ) {
+			setter = bind$1( signature.set, ractive );
+			setterString = signature.set.toString();
+		}
+	}
+
+	return {
+		getter: getter,
+		setter: setter,
+		getterString: getterString,
+		setterString: setterString,
+		getterUseStack: getterUseStack
+	};
+}
+
+var constructHook = new Hook( 'construct' );
+
+var registryNames$1 = [
+	'adaptors',
+	'components',
+	'decorators',
+	'easing',
+	'events',
+	'interpolators',
+	'partials',
+	'transitions'
+];
+
+var uid = 0;
+
+function construct ( ractive, options ) {
+	if ( Ractive.DEBUG ) { welcome(); }
+
+	initialiseProperties( ractive );
+	handleAttributes( ractive );
+
+	// if there's not a delegation setting, inherit from parent if it's not default
+	if ( !options.hasOwnProperty( 'delegate' ) && ractive.parent && ractive.parent.delegate !== ractive.delegate ) {
+		ractive.delegate = false;
+	}
+
+	// TODO don't allow `onconstruct` with `new Ractive()`, there's no need for it
+	constructHook.fire( ractive, options );
+
+	// Add registries
+	var i = registryNames$1.length;
+	while ( i-- ) {
+		var name = registryNames$1[ i ];
+		ractive[ name ] = Object.assign( Object.create( ractive.constructor[ name ] || null ), options[ name ] );
+	}
+
+	if ( ractive._attributePartial ) {
+		ractive.partials['extra-attributes'] = ractive._attributePartial;
+		delete ractive._attributePartial;
+	}
+
+	// Create a viewmodel
+	var viewmodel = new RootModel({
+		adapt: getAdaptors( ractive, ractive.adapt, options ),
+		data: dataConfigurator.init( ractive.constructor, ractive, options ),
+		ractive: ractive
+	});
+
+	ractive.viewmodel = viewmodel;
+
+	// Add computed properties
+	var computed = Object.assign( Object.create( ractive.constructor.prototype.computed ), options.computed );
+
+	for ( var key in computed ) {
+		if ( key === '__proto__' ) { continue; }
+		var signature = getComputationSignature( ractive, key, computed[ key ] );
+		viewmodel.compute( key, signature );
+	}
+}
+
+function getAdaptors ( ractive, protoAdapt, options ) {
+	protoAdapt = protoAdapt.map( lookup );
+	var adapt = ensureArray( options.adapt ).map( lookup );
+
+	var srcs = [ protoAdapt, adapt ];
+	if ( ractive.parent && !ractive.isolated ) {
+		srcs.push( ractive.parent.viewmodel.adaptors );
+	}
+
+	return combine.apply( null, srcs );
+
+	function lookup ( adaptor ) {
+		if ( typeof adaptor === 'string' ) {
+			adaptor = findInViewHierarchy( 'adaptors', ractive, adaptor );
+
+			if ( !adaptor ) {
+				fatal( missingPlugin( adaptor, 'adaptor' ) );
+			}
+		}
+
+		return adaptor;
+	}
+}
+
+function initialiseProperties ( ractive ) {
+	// Generate a unique identifier, for places where you'd use a weak map if it
+	// existed
+	ractive._guid = 'r-' + uid++;
+
+	// events
+	ractive._subs = Object.create( null );
+	ractive._nsSubs = 0;
+
+	// storage for item configuration from instantiation to reset,
+	// like dynamic functions or original values
+	ractive._config = {};
+
+	// events
+	ractive.event = null;
+	ractive._eventQueue = [];
+
+	// observers
+	ractive._observers = [];
+
+	// external children
+	ractive._children = [];
+	ractive._children.byName = {};
+	ractive.children = ractive._children;
+
+	if ( !ractive.component ) {
+		ractive.root = ractive;
+		ractive.parent = ractive.container = null; // TODO container still applicable?
+	}
+}
+
+function handleAttributes ( ractive ) {
+	var component = ractive.component;
+	var attributes = ractive.constructor.attributes;
+
+	if ( attributes && component ) {
+		var tpl = component.template;
+		var attrs = tpl.m ? tpl.m.slice() : [];
+
+		// grab all of the passed attribute names
+		var props = attrs.filter( function (a) { return a.t === ATTRIBUTE; } ).map( function (a) { return a.n; } );
+
+		// warn about missing requireds
+		attributes.required.forEach( function (p) {
+			if ( !~props.indexOf( p ) ) {
+				warnIfDebug( ("Component '" + (component.name) + "' requires attribute '" + p + "' to be provided") );
+			}
+		});
+
+		// set up a partial containing non-property attributes
+		var all = attributes.optional.concat( attributes.required );
+		var partial = [];
+		var i = attrs.length;
+		while ( i-- ) {
+			var a = attrs[i];
+			if ( a.t === ATTRIBUTE && !~all.indexOf( a.n ) ) {
+				if ( attributes.mapAll ) {
+					// map the attribute if requested and make the extra attribute in the partial refer to the mapping
+					partial.unshift({ t: ATTRIBUTE, n: a.n, f: [{ t: INTERPOLATOR, r: ("~/" + (a.n)) }] });
+				} else {
+					// transfer the attribute to the extra attributes partal
+					partial.unshift( attrs.splice( i, 1 )[0] );
+				}
+			}
+		}
+
+		if ( partial.length ) { component.template = { t: tpl.t, e: tpl.e, f: tpl.f, m: attrs, p: tpl.p }; }
+		ractive._attributePartial = partial;
+	}
+}
+
+var teardownHook = new Hook( 'teardown' );
+var destructHook = new Hook( 'destruct' );
+
+// Teardown. This goes through the root fragment and all its children, removing observers
+// and generally cleaning up after itself
+
+function Ractive$teardown () {
+	var this$1 = this;
+
+	if ( this.torndown ) {
+		warnIfDebug( 'ractive.teardown() was called on a Ractive instance that was already torn down' );
+		return Promise.resolve();
+	}
+
+	this.shouldDestroy = true;
+	return teardown$1( this, function () { return this$1.fragment.rendered ? this$1.unrender() : Promise.resolve(); } );
+}
+
+function teardown$1 ( instance, getPromise ) {
+	instance.torndown = true;
+	instance.viewmodel.teardown();
+	instance.fragment.unbind();
+	instance._observers.slice().forEach( cancel );
+
+	if ( instance.el && instance.el.__ractive_instances__ ) {
+		removeFromArray( instance.el.__ractive_instances__, instance );
+	}
+
+	var promise = getPromise();
+
+	teardownHook.fire( instance );
+	promise.then( function () { return destructHook.fire( instance ); } );
+
+	return promise;
+}
+
+var Component = (function (Item$$1) {
+	function Component ( options, ComponentConstructor ) {
+		var this$1 = this;
+
+		Item$$1.call( this, options );
+		this.isAnchor = this.template.t === ANCHOR;
+		this.type = this.isAnchor ? ANCHOR : COMPONENT; // override ELEMENT from super
+
+		var partials = options.template.p || {};
+		if ( !( 'content' in partials ) ) { partials.content = options.template.f || []; }
+		this._partials = partials; // TEMP
+
+		if ( this.isAnchor ) {
+			this.name = options.template.n;
+
+			this.addChild = addChild;
+			this.removeChild = removeChild;
+		} else {
+			var instance = Object.create( ComponentConstructor.prototype );
+
+			this.instance = instance;
+			this.name = options.template.e;
+
+			if ( instance.el ) {
+				warnIfDebug( ("The <" + (this.name) + "> component has a default 'el' property; it has been disregarded") );
+			}
+
+			// find container
+			var fragment = options.parentFragment;
+			var container;
+			while ( fragment ) {
+				if ( fragment.owner.type === YIELDER ) {
+					container = fragment.owner.container;
+					break;
+				}
+
+				fragment = fragment.parent;
+			}
+
+			// add component-instance-specific properties
+			instance.parent = this.parentFragment.ractive;
+			instance.container = container || null;
+			instance.root = instance.parent.root;
+			instance.component = this;
+
+			construct( this.instance, { partials: partials });
+
+			// for hackability, this could be an open option
+			// for any ractive instance, but for now, just
+			// for components and just for ractive...
+			instance._inlinePartials = partials;
+		}
+
+		this.attributeByName = {};
+
+		this.attributes = [];
+		var leftovers = [];
+		( this.template.m || [] ).forEach( function (template) {
+			switch ( template.t ) {
+				case ATTRIBUTE:
+				case EVENT:
+					this$1.attributes.push( createItem({
+						owner: this$1,
+						parentFragment: this$1.parentFragment,
+						template: template
+					}) );
+					break;
+
+				case TRANSITION:
+				case BINDING_FLAG:
+				case DECORATOR:
+					break;
+
+				default:
+					leftovers.push( template );
+					break;
+			}
+		});
+
+		if ( leftovers.length ) {
+			this.attributes.push( new ConditionalAttribute({
+				owner: this,
+				parentFragment: this.parentFragment,
+				template: leftovers
+			}) );
+		}
+
+		this.eventHandlers = [];
+	}
+
+	if ( Item$$1 ) Component.__proto__ = Item$$1;
+	Component.prototype = Object.create( Item$$1 && Item$$1.prototype );
+	Component.prototype.constructor = Component;
+
+	Component.prototype.bind = function bind$1 () {
+		if ( !this.isAnchor ) {
+			this.attributes.forEach( bind );
+
+			initialise( this.instance, {
+				partials: this._partials
+			}, {
+				cssIds: this.parentFragment.cssIds
+			});
+
+			this.eventHandlers.forEach( bind );
+
+			this.bound = true;
+		}
+	};
+
+	Component.prototype.bubble = function bubble () {
+		if ( !this.dirty ) {
+			this.dirty = true;
+			this.parentFragment.bubble();
+		}
+	};
+
+	Component.prototype.destroyed = function destroyed$$1 () {
+		if ( !this.isAnchor && this.instance.fragment ) { this.instance.fragment.destroyed(); }
+	};
+
+	Component.prototype.detach = function detach () {
+		if ( this.isAnchor ) {
+			if ( this.instance ) { return this.instance.fragment.detach(); }
+			return createDocumentFragment();
+		}
+
+		return this.instance.fragment.detach();
+	};
+
+	Component.prototype.find = function find ( selector, options ) {
+		if ( this.instance ) { return this.instance.fragment.find( selector, options ); }
+	};
+
+	Component.prototype.findAll = function findAll ( selector, options ) {
+		if ( this.instance ) { this.instance.fragment.findAll( selector, options ); }
+	};
+
+	Component.prototype.findComponent = function findComponent ( name, options ) {
+		if ( !name || this.name === name ) { return this.instance; }
+
+		if ( this.instance.fragment ) {
+			return this.instance.fragment.findComponent( name, options );
+		}
+	};
+
+	Component.prototype.findAllComponents = function findAllComponents ( name, options ) {
+		var result = options.result;
+
+		if ( this.instance && ( !name || this.name === name ) ) {
+			result.push( this.instance );
+		}
+
+		if ( this.instance ) { this.instance.findAllComponents( name, options ); }
+	};
+
+	Component.prototype.firstNode = function firstNode ( skipParent ) {
+		if ( this.instance ) { return this.instance.fragment.firstNode( skipParent ); }
+	};
+
+	Component.prototype.getContext = function getContext$$1 () {
+		var assigns = [], len = arguments.length;
+		while ( len-- ) assigns[ len ] = arguments[ len ];
+
+		assigns.unshift( this.instance );
+		return getRactiveContext.apply( null, assigns );
+	};
+
+	Component.prototype.render = function render$1$$1 ( target, occupants ) {
+		if ( this.isAnchor ) {
+			this.rendered = true;
+			this.target = target;
+
+			if ( !checking.length ) {
+				checking.push( this.ractive );
+				if ( occupants ) {
+					this.occupants = occupants;
+					checkAnchors();
+					this.occupants = null;
+				} else {
+					runloop.scheduleTask( checkAnchors, true );
+				}
+			}
+		} else {
+			render$1( this.instance, target, null, occupants );
+
+			this.attributes.forEach( render );
+			this.eventHandlers.forEach( render );
+
+			this.rendered = true;
+		}
+	};
+
+	Component.prototype.toString = function toString$$1 () {
+		if ( this.instance ) { return this.instance.toHTML(); }
+	};
+
+	Component.prototype.unbind = function unbind$1 () {
+		if ( !this.isAnchor ) {
+			this.bound = false;
+
+			this.attributes.forEach( unbind );
+
+			teardown$1( this.instance, function () { return runloop.promise(); } );
+		}
+	};
+
+	Component.prototype.unrender = function unrender$1 ( shouldDestroy ) {
+		this.shouldDestroy = shouldDestroy;
+
+		if ( this.isAnchor ) {
+			if ( this.item ) { unrenderItem( this, this.item ); }
+			this.target = null;
+			if ( !checking.length ) {
+				checking.push( this.ractive );
+				runloop.scheduleTask( checkAnchors, true );
+			}
+		} else {
+			this.instance.unrender();
+			this.instance.el = this.instance.target = null;
+			this.attributes.forEach( unrender );
+			this.eventHandlers.forEach( unrender );
+		}
+
+		this.rendered = false;
+	};
+
+	Component.prototype.update = function update$1 () {
+		this.dirty = false;
+		if ( this.instance ) {
+			this.instance.fragment.update();
+			this.attributes.forEach( update );
+			this.eventHandlers.forEach( update );
+		}
+	};
+
+	return Component;
+}(Item));
+
+function addChild ( meta ) {
+	if ( this.item ) { this.removeChild( this.item ); }
+
+	var child = meta.instance;
+	meta.anchor = this;
+
+	meta.parentFragment = this.parentFragment;
+	meta.name = meta.nameOption || this.name;
+	this.name = meta.name;
+
+
+	if ( !child.isolated ) { child.viewmodel.attached( this.parentFragment ); }
+
+	// render as necessary
+	if ( this.rendered ) {
+		renderItem( this, meta );
+	}
+}
+
+function removeChild ( meta ) {
+	// unrender as necessary
+	if ( this.item === meta ) {
+		unrenderItem( this, meta );
+		this.name = this.template.n;
+	}
+}
+
+function renderItem ( anchor, meta ) {
+	if ( !anchor.rendered ) { return; }
+
+	meta.shouldDestroy = false;
+	meta.parentFragment = anchor.parentFragment;
+
+	anchor.item = meta;
+	anchor.instance = meta.instance;
+	var nextNode = anchor.parentFragment.findNextNode( anchor );
+
+	if ( meta.instance.fragment.rendered ) {
+		meta.instance.unrender();
+	}
+
+	meta.partials = meta.instance.partials;
+	meta.instance.partials = Object.assign( {}, meta.partials, anchor._partials );
+
+	meta.instance.fragment.unbind();
+	meta.instance.fragment.bind( meta.instance.viewmodel );
+
+	anchor.attributes.forEach( bind );
+	anchor.eventHandlers.forEach( bind );
+	anchor.attributes.forEach( render );
+	anchor.eventHandlers.forEach( render );
+
+	var target = anchor.parentFragment.findParentNode();
+	render$1( meta.instance, target, target.contains( nextNode ) ? nextNode : null, anchor.occupants );
+
+	if ( meta.lastBound !== anchor ) {
+		meta.lastBound = anchor;
+	}
+}
+
+function unrenderItem ( anchor, meta ) {
+	if ( !anchor.rendered ) { return; }
+
+	meta.shouldDestroy = true;
+	meta.instance.unrender();
+
+	anchor.eventHandlers.forEach( unrender );
+	anchor.attributes.forEach( unrender );
+	anchor.eventHandlers.forEach( unbind );
+	anchor.attributes.forEach( unbind );
+
+	meta.instance.el = meta.instance.anchor = null;
+	meta.parentFragment = null;
+	meta.anchor = null;
+	anchor.item = null;
+	anchor.instance = null;
+}
+
+var checking = [];
+function checkAnchors () {
+	var list = checking;
+	checking = [];
+
+	list.forEach( updateAnchors );
+}
+
+function setupArgsFn ( item, template, fragment, opts ) {
+	if ( opts === void 0 ) opts = {};
+
+	if ( template && template.f && template.f.s ) {
+		item.fn = getFunction( template.f.s, template.f.r.length );
+		if ( opts.register === true ) {
+			item.models = resolveArgs( item, template, fragment, opts );
+		}
+	}
+}
+
+function resolveArgs ( item, template, fragment, opts ) {
+	if ( opts === void 0 ) opts = {};
+
+	return template.f.r.map( function ( ref, i ) {
+		var model;
+
+		if ( opts.specialRef && ( model = opts.specialRef( ref, i ) ) ) { return model; }
+
+		model = resolveReference( fragment, ref );
+		if ( opts.register === true ) {
+			model.register( item );
+		}
+
+		return model;
+	});
+}
+
+function teardownArgsFn ( item, template ) {
+	if ( template && template.f && template.f.s ) {
+		if ( item.models ) { item.models.forEach( function (m) {
+			if ( m && m.unregister ) { m.unregister( item ); }
+		}); }
+		item.models = null;
+	}
+}
+
+var missingDecorator = {
+	update: noop,
+	teardown: noop
+};
+
+var Decorator = function Decorator ( options ) {
+	this.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );
+	this.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment );
+	this.parentFragment = this.owner.parentFragment;
+	this.ractive = this.owner.ractive;
+	var template = this.template = options.template;
+
+	this.name = template.n;
+
+	this.node = null;
+	this.intermediary = null;
+
+	this.element.decorators.push( this );
+};
+
+Decorator.prototype.bind = function bind () {
+	setupArgsFn( this, this.template, this.parentFragment, { register: true } );
+};
+
+Decorator.prototype.bubble = function bubble () {
+	if ( !this.dirty ) {
+		this.dirty = true;
+		this.owner.bubble();
+	}
+};
+
+Decorator.prototype.destroyed = function destroyed () {
+	if ( this.intermediary ) { this.intermediary.teardown(); }
+	this.shouldDestroy = true;
+};
+
+Decorator.prototype.handleChange = function handleChange () { this.bubble(); };
+
+Decorator.prototype.rebind = function rebind ( next, previous, safe ) {
+	var idx = this.models.indexOf( previous );
+	if ( !~idx ) { return; }
+
+	next = rebindMatch( this.template.f.r[ idx ], next, previous );
+	if ( next === previous ) { return; }
+
+	previous.unregister( this );
+	this.models.splice( idx, 1, next );
+	if ( next ) { next.addShuffleRegister( this, 'mark' ); }
+
+	if ( !safe ) { this.bubble(); }
+};
+
+Decorator.prototype.render = function render () {
+		var this$1 = this;
+
+	runloop.scheduleTask( function () {
+		var fn = findInViewHierarchy( 'decorators', this$1.ractive, this$1.name );
+
+		if ( !fn ) {
+			warnOnce( missingPlugin( this$1.name, 'decorator' ) );
+			this$1.intermediary = missingDecorator;
+			return;
+		}
+
+		this$1.node = this$1.element.node;
+
+		var args;
+		if ( this$1.fn ) {
+			args = this$1.models.map( function (model) {
+				if ( !model ) { return undefined; }
+
+				return model.get();
+			});
+			args = this$1.fn.apply( this$1.ractive, args );
+		}
+
+		this$1.intermediary = fn.apply( this$1.ractive, [ this$1.node ].concat( args ) );
+
+		if ( !this$1.intermediary || !this$1.intermediary.teardown ) {
+			throw new Error( ("The '" + (this$1.name) + "' decorator must return an object with a teardown method") );
+		}
+
+		// watch out for decorators that cause their host element to be unrendered
+		if ( this$1.shouldDestroy ) { this$1.destroyed(); }
+	}, true );
+	this.rendered = true;
+};
+
+Decorator.prototype.toString = function toString () { return ''; };
+
+Decorator.prototype.unbind = function unbind () {
+	teardownArgsFn( this, this.template );
+};
+
+Decorator.prototype.unrender = function unrender ( shouldDestroy ) {
+	if ( ( !shouldDestroy || this.element.rendered ) && this.intermediary ) { this.intermediary.teardown(); }
+	this.rendered = false;
+};
+
+Decorator.prototype.update = function update () {
+	var instance = this.intermediary;
+
+	if ( !this.dirty ) {
+		if ( instance && instance.invalidate ) {
+			runloop.scheduleTask( function () { return instance.invalidate(); }, true );
+		}
+		return;
+	}
+
+	this.dirty = false;
+
+	if ( instance ) {
+		if ( !instance.update ) {
+			this.unrender();
+			this.render();
+		}
+		else {
+			var args = this.models.map( function (model) { return model && model.get(); } );
+			instance.update.apply( this.ractive, this.fn.apply( this.ractive, args ) );
+		}
+	}
+};
+
+var Doctype = (function (Item$$1) {
+	function Doctype () {
+		Item$$1.apply(this, arguments);
+	}
+
+	if ( Item$$1 ) Doctype.__proto__ = Item$$1;
+	Doctype.prototype = Object.create( Item$$1 && Item$$1.prototype );
+	Doctype.prototype.constructor = Doctype;
+
+	Doctype.prototype.toString = function toString () {
+		return '<!DOCTYPE' + this.template.a + '>';
+	};
+
+	return Doctype;
+}(Item));
+
+var proto$2 = Doctype.prototype;
+proto$2.bind = proto$2.render = proto$2.teardown = proto$2.unbind = proto$2.unrender = proto$2.update = noop;
+
+var Binding = function Binding ( element, name ) {
+	if ( name === void 0 ) name = 'value';
+
+	this.element = element;
+	this.ractive = element.ractive;
+	this.attribute = element.attributeByName[ name ];
+
+	var interpolator = this.attribute.interpolator;
+	interpolator.twowayBinding = this;
+
+	var model = interpolator.model;
+
+	if ( model.isReadonly && !model.setRoot ) {
+		var keypath = model.getKeypath().replace( /^@/, '' );
+		warnOnceIfDebug( ("Cannot use two-way binding on <" + (element.name) + "> element: " + keypath + " is read-only. To suppress this warning use <" + (element.name) + " twoway='false'...>"), { ractive: this.ractive });
+		return false;
+	}
+
+	this.attribute.isTwoway = true;
+	this.model = model;
+
+	// initialise value, if it's undefined
+	var value = model.get();
+	this.wasUndefined = value === undefined;
+
+	if ( value === undefined && this.getInitialValue ) {
+		value = this.getInitialValue();
+		model.set( value );
+	}
+	this.lastVal( true, value );
+
+	var parentForm = findElement( this.element, false, 'form' );
+	if ( parentForm ) {
+		this.resetValue = value;
+		parentForm.formBindings.push( this );
+	}
+};
+
+Binding.prototype.bind = function bind () {
+	this.model.registerTwowayBinding( this );
+};
+
+Binding.prototype.handleChange = function handleChange () {
+		var this$1 = this;
+
+	var value = this.getValue();
+	if ( this.lastVal() === value ) { return; }
+
+	runloop.start( this.root );
+	this.attribute.locked = true;
+	this.model.set( value );
+	this.lastVal( true, value );
+
+	// if the value changes before observers fire, unlock to be updatable cause something weird and potentially freezy is up
+	if ( this.model.get() !== value ) { this.attribute.locked = false; }
+	else { runloop.scheduleTask( function () { return this$1.attribute.locked = false; } ); }
+
+	runloop.end();
+};
+
+Binding.prototype.lastVal = function lastVal ( setting, value ) {
+	if ( setting ) { this.lastValue = value; }
+	else { return this.lastValue; }
+};
+
+Binding.prototype.rebind = function rebind ( next, previous ) {
+		var this$1 = this;
+
+	if ( this.model && this.model === previous ) { previous.unregisterTwowayBinding( this ); }
+	if ( next ) {
+		this.model = next;
+		runloop.scheduleTask( function () { return next.registerTwowayBinding( this$1 ); } );
+	}
+};
+
+Binding.prototype.render = function render () {
+	this.node = this.element.node;
+	this.node._ractive.binding = this;
+	this.rendered = true; // TODO is this used anywhere?
+};
+
+Binding.prototype.setFromNode = function setFromNode ( node ) {
+	this.model.set( node.value );
+};
+
+Binding.prototype.unbind = function unbind () {
+	this.model.unregisterTwowayBinding( this );
+};
+
+Binding.prototype.unrender = noop;
+
+// This is the handler for DOM events that would lead to a change in the model
+// (i.e. change, sometimes, input, and occasionally click and keyup)
+function handleDomEvent () {
+	this._ractive.binding.handleChange();
+}
+
+var CheckboxBinding = (function (Binding$$1) {
+	function CheckboxBinding ( element ) {
+		Binding$$1.call( this, element, 'checked' );
+	}
+
+	if ( Binding$$1 ) CheckboxBinding.__proto__ = Binding$$1;
+	CheckboxBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );
+	CheckboxBinding.prototype.constructor = CheckboxBinding;
+
+	CheckboxBinding.prototype.render = function render () {
+		Binding$$1.prototype.render.call(this);
+
+		this.element.on( 'change', handleDomEvent );
+
+		if ( this.node.attachEvent ) {
+			this.element.on( 'click', handleDomEvent );
+		}
+	};
+
+	CheckboxBinding.prototype.unrender = function unrender () {
+		this.element.off( 'change', handleDomEvent );
+		this.element.off( 'click', handleDomEvent );
+	};
+
+	CheckboxBinding.prototype.getInitialValue = function getInitialValue () {
+		return !!this.element.getAttribute( 'checked' );
+	};
+
+	CheckboxBinding.prototype.getValue = function getValue () {
+		return this.node.checked;
+	};
+
+	CheckboxBinding.prototype.setFromNode = function setFromNode ( node ) {
+		this.model.set( node.checked );
+	};
+
+	return CheckboxBinding;
+}(Binding));
+
+function getBindingGroup ( group, model, getValue ) {
+	var hash = group + "-bindingGroup";
+	return model[hash] || ( model[ hash ] = new BindingGroup( hash, model, getValue ) );
+}
+
+var BindingGroup = function BindingGroup ( hash, model, getValue ) {
+	var this$1 = this;
+
+	this.model = model;
+	this.hash = hash;
+	this.getValue = function () {
+		this$1.value = getValue.call(this$1);
+		return this$1.value;
+	};
+
+	this.bindings = [];
+};
+
+BindingGroup.prototype.add = function add ( binding ) {
+	this.bindings.push( binding );
+};
+
+BindingGroup.prototype.bind = function bind () {
+	this.value = this.model.get();
+	this.model.registerTwowayBinding( this );
+	this.bound = true;
+};
+
+BindingGroup.prototype.remove = function remove ( binding ) {
+	removeFromArray( this.bindings, binding );
+	if ( !this.bindings.length ) {
+		this.unbind();
+	}
+};
+
+BindingGroup.prototype.unbind = function unbind () {
+	this.model.unregisterTwowayBinding( this );
+	this.bound = false;
+	delete this.model[this.hash];
+};
+
+BindingGroup.prototype.rebind = Binding.prototype.rebind;
+
+var push$1 = [].push;
+
+function getValue() {
+	var this$1 = this;
+
+	var all = this.bindings.filter(function (b) { return b.node && b.node.checked; }).map(function (b) { return b.element.getAttribute( 'value' ); });
+	var res = [];
+	all.forEach(function (v) { if ( !this$1.bindings[0].arrayContains( res, v ) ) { res.push( v ); } });
+	return res;
+}
+
+var CheckboxNameBinding = (function (Binding$$1) {
+	function CheckboxNameBinding ( element ) {
+		Binding$$1.call( this, element, 'name' );
+
+		this.checkboxName = true; // so that ractive.updateModel() knows what to do with this
+
+		// Each input has a reference to an array containing it and its
+		// group, as two-way binding depends on being able to ascertain
+		// the status of all inputs within the group
+		this.group = getBindingGroup( 'checkboxes', this.model, getValue );
+		this.group.add( this );
+
+		if ( this.noInitialValue ) {
+			this.group.noInitialValue = true;
+		}
+
+		// If no initial value was set, and this input is checked, we
+		// update the model
+		if ( this.group.noInitialValue && this.element.getAttribute( 'checked' ) ) {
+			var existingValue = this.model.get();
+			var bindingValue = this.element.getAttribute( 'value' );
+
+			if ( !this.arrayContains( existingValue, bindingValue ) ) {
+				push$1.call( existingValue, bindingValue ); // to avoid triggering runloop with array adaptor
+			}
+		}
+	}
+
+	if ( Binding$$1 ) CheckboxNameBinding.__proto__ = Binding$$1;
+	CheckboxNameBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );
+	CheckboxNameBinding.prototype.constructor = CheckboxNameBinding;
+
+	CheckboxNameBinding.prototype.bind = function bind () {
+		if ( !this.group.bound ) {
+			this.group.bind();
+		}
+	};
+
+	CheckboxNameBinding.prototype.getInitialValue = function getInitialValue () {
+		// This only gets called once per group (of inputs that
+		// share a name), because it only gets called if there
+		// isn't an initial value. By the same token, we can make
+		// a note of that fact that there was no initial value,
+		// and populate it using any `checked` attributes that
+		// exist (which users should avoid, but which we should
+		// support anyway to avoid breaking expectations)
+		this.noInitialValue = true; // TODO are noInitialValue and wasUndefined the same thing?
+		return [];
+	};
+
+	CheckboxNameBinding.prototype.getValue = function getValue () {
+		return this.group.value;
+	};
+
+	CheckboxNameBinding.prototype.handleChange = function handleChange () {
+		this.isChecked = this.element.node.checked;
+		this.group.value = this.model.get();
+		var value = this.element.getAttribute( 'value' );
+		if ( this.isChecked && !this.arrayContains( this.group.value, value ) ) {
+			this.group.value.push( value );
+		} else if ( !this.isChecked && this.arrayContains( this.group.value, value ) ) {
+			this.removeFromArray( this.group.value, value );
+		}
+		// make sure super knows there's a change
+		this.lastValue = null;
+		Binding$$1.prototype.handleChange.call(this);
+	};
+
+	CheckboxNameBinding.prototype.render = function render () {
+		Binding$$1.prototype.render.call(this);
+
+		var node = this.node;
+
+		var existingValue = this.model.get();
+		var bindingValue = this.element.getAttribute( 'value' );
+
+		if ( Array.isArray( existingValue ) ) {
+			this.isChecked = this.arrayContains( existingValue, bindingValue );
+		} else {
+			this.isChecked = this.element.compare( existingValue, bindingValue );
+		}
+		node.name = '{{' + this.model.getKeypath() + '}}';
+		node.checked = this.isChecked;
+
+		this.element.on( 'change', handleDomEvent );
+
+		// in case of IE emergency, bind to click event as well
+		if ( this.node.attachEvent ) {
+			this.element.on( 'click', handleDomEvent );
+		}
+	};
+
+	CheckboxNameBinding.prototype.setFromNode = function setFromNode ( node ) {
+		this.group.bindings.forEach( function (binding) { return binding.wasUndefined = true; } );
+
+		if ( node.checked ) {
+			var valueSoFar = this.group.getValue();
+			valueSoFar.push( this.element.getAttribute( 'value' ) );
+
+			this.group.model.set( valueSoFar );
+		}
+	};
+
+	CheckboxNameBinding.prototype.unbind = function unbind () {
+		this.group.remove( this );
+	};
+
+	CheckboxNameBinding.prototype.unrender = function unrender () {
+		var el = this.element;
+
+		el.off( 'change', handleDomEvent );
+		el.off( 'click', handleDomEvent );
+	};
+
+	CheckboxNameBinding.prototype.arrayContains = function arrayContains ( selectValue, optionValue ) {
+		var this$1 = this;
+
+		var i = selectValue.length;
+		while ( i-- ) {
+			if ( this$1.element.compare( optionValue, selectValue[i] ) ) { return true; }
+		}
+		return false;
+	};
+
+	CheckboxNameBinding.prototype.removeFromArray = function removeFromArray ( array, item ) {
+		var this$1 = this;
+
+		if (!array) { return; }
+		var i = array.length;
+		while( i-- ) {
+			if ( this$1.element.compare( item, array[i] ) ) {
+				array.splice( i, 1 );
+			}
+		}
+	};
+
+	return CheckboxNameBinding;
+}(Binding));
+
+var ContentEditableBinding = (function (Binding$$1) {
+	function ContentEditableBinding () {
+		Binding$$1.apply(this, arguments);
+	}
+
+	if ( Binding$$1 ) ContentEditableBinding.__proto__ = Binding$$1;
+	ContentEditableBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );
+	ContentEditableBinding.prototype.constructor = ContentEditableBinding;
+
+	ContentEditableBinding.prototype.getInitialValue = function getInitialValue () {
+		return this.element.fragment ? this.element.fragment.toString() : '';
+	};
+
+	ContentEditableBinding.prototype.getValue = function getValue () {
+		return this.element.node.innerHTML;
+	};
+
+	ContentEditableBinding.prototype.render = function render () {
+		Binding$$1.prototype.render.call(this);
+
+		var el = this.element;
+
+		el.on( 'change', handleDomEvent );
+		el.on( 'blur', handleDomEvent );
+
+		if ( !this.ractive.lazy ) {
+			el.on( 'input', handleDomEvent );
+
+			if ( this.node.attachEvent ) {
+				el.on( 'keyup', handleDomEvent );
+			}
+		}
+	};
+
+	ContentEditableBinding.prototype.setFromNode = function setFromNode ( node ) {
+		this.model.set( node.innerHTML );
+	};
+
+	ContentEditableBinding.prototype.unrender = function unrender () {
+		var el = this.element;
+
+		el.off( 'blur', handleDomEvent );
+		el.off( 'change', handleDomEvent );
+		el.off( 'input', handleDomEvent );
+		el.off( 'keyup', handleDomEvent );
+	};
+
+	return ContentEditableBinding;
+}(Binding));
+
+function handleBlur () {
+	handleDomEvent.call( this );
+
+	var value = this._ractive.binding.model.get();
+	this.value = value == undefined ? '' : value;
+}
+
+function handleDelay ( delay ) {
+	var timeout;
+
+	return function () {
+		var this$1 = this;
+
+		if ( timeout ) { clearTimeout( timeout ); }
+
+		timeout = setTimeout( function () {
+			var binding = this$1._ractive.binding;
+			if ( binding.rendered ) { handleDomEvent.call( this$1 ); }
+			timeout = null;
+		}, delay );
+	};
+}
+
+var GenericBinding = (function (Binding$$1) {
+	function GenericBinding () {
+		Binding$$1.apply(this, arguments);
+	}
+
+	if ( Binding$$1 ) GenericBinding.__proto__ = Binding$$1;
+	GenericBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );
+	GenericBinding.prototype.constructor = GenericBinding;
+
+	GenericBinding.prototype.getInitialValue = function getInitialValue () {
+		return '';
+	};
+
+	GenericBinding.prototype.getValue = function getValue () {
+		return this.node.value;
+	};
+
+	GenericBinding.prototype.render = function render () {
+		Binding$$1.prototype.render.call(this);
+
+		// any lazy setting for this element overrides the root
+		// if the value is a number, it's a timeout
+		var lazy = this.ractive.lazy;
+		var timeout = false;
+		var el = this.element;
+
+		if ( 'lazy' in this.element ) {
+			lazy = this.element.lazy;
+		}
+
+		if ( isNumeric( lazy ) ) {
+			timeout = +lazy;
+			lazy = false;
+		}
+
+		this.handler = timeout ? handleDelay( timeout ) : handleDomEvent;
+
+		var node = this.node;
+
+		el.on( 'change', handleDomEvent );
+
+		if ( node.type !== 'file' ) {
+			if ( !lazy ) {
+				el.on( 'input', this.handler );
+
+				// IE is a special snowflake
+				if ( node.attachEvent ) {
+					el.on( 'keyup', this.handler );
+				}
+			}
+
+			el.on( 'blur', handleBlur );
+		}
+	};
+
+	GenericBinding.prototype.unrender = function unrender () {
+		var el = this.element;
+		this.rendered = false;
+
+		el.off( 'change', handleDomEvent );
+		el.off( 'input', this.handler );
+		el.off( 'keyup', this.handler );
+		el.off( 'blur', handleBlur );
+	};
+
+	return GenericBinding;
+}(Binding));
+
+var FileBinding = (function (GenericBinding$$1) {
+	function FileBinding () {
+		GenericBinding$$1.apply(this, arguments);
+	}
+
+	if ( GenericBinding$$1 ) FileBinding.__proto__ = GenericBinding$$1;
+	FileBinding.prototype = Object.create( GenericBinding$$1 && GenericBinding$$1.prototype );
+	FileBinding.prototype.constructor = FileBinding;
+
+	FileBinding.prototype.getInitialValue = function getInitialValue () {
+		return undefined;
+	};
+
+	FileBinding.prototype.getValue = function getValue () {
+		return this.node.files;
+	};
+
+	FileBinding.prototype.render = function render () {
+		this.element.lazy = false;
+		GenericBinding$$1.prototype.render.call(this);
+	};
+
+	FileBinding.prototype.setFromNode = function setFromNode ( node ) {
+		this.model.set( node.files );
+	};
+
+	return FileBinding;
+}(GenericBinding));
+
+function getSelectedOptions ( select ) {
+	return select.selectedOptions
+		? toArray( select.selectedOptions )
+		: select.options
+			? toArray( select.options ).filter( function (option) { return option.selected; } )
+			: [];
+}
+
+var MultipleSelectBinding = (function (Binding$$1) {
+	function MultipleSelectBinding () {
+		Binding$$1.apply(this, arguments);
+	}
+
+	if ( Binding$$1 ) MultipleSelectBinding.__proto__ = Binding$$1;
+	MultipleSelectBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );
+	MultipleSelectBinding.prototype.constructor = MultipleSelectBinding;
+
+	MultipleSelectBinding.prototype.getInitialValue = function getInitialValue () {
+		return this.element.options
+			.filter( function (option) { return option.getAttribute( 'selected' ); } )
+			.map( function (option) { return option.getAttribute( 'value' ); } );
+	};
+
+	MultipleSelectBinding.prototype.getValue = function getValue () {
+		var options = this.element.node.options;
+		var len = options.length;
+
+		var selectedValues = [];
+
+		for ( var i = 0; i < len; i += 1 ) {
+			var option = options[i];
+
+			if ( option.selected ) {
+				var optionValue = option._ractive ? option._ractive.value : option.value;
+				selectedValues.push( optionValue );
+			}
+		}
+
+		return selectedValues;
+	};
+
+	MultipleSelectBinding.prototype.handleChange = function handleChange () {
+		var attribute = this.attribute;
+		var previousValue = attribute.getValue();
+
+		var value = this.getValue();
+
+		if ( previousValue === undefined || !arrayContentsMatch( value, previousValue ) ) {
+			Binding$$1.prototype.handleChange.call(this);
+		}
+
+		return this;
+	};
+
+	MultipleSelectBinding.prototype.render = function render () {
+		Binding$$1.prototype.render.call(this);
+
+		this.element.on( 'change', handleDomEvent );
+
+		if ( this.model.get() === undefined ) {
+			// get value from DOM, if possible
+			this.handleChange();
+		}
+	};
+
+	MultipleSelectBinding.prototype.setFromNode = function setFromNode ( node ) {
+		var selectedOptions = getSelectedOptions( node );
+		var i = selectedOptions.length;
+		var result = new Array( i );
+
+		while ( i-- ) {
+			var option = selectedOptions[i];
+			result[i] = option._ractive ? option._ractive.value : option.value;
+		}
+
+		this.model.set( result );
+	};
+
+	MultipleSelectBinding.prototype.unrender = function unrender () {
+		this.element.off( 'change', handleDomEvent );
+	};
+
+	return MultipleSelectBinding;
+}(Binding));
+
+var NumericBinding = (function (GenericBinding$$1) {
+	function NumericBinding () {
+		GenericBinding$$1.apply(this, arguments);
+	}
+
+	if ( GenericBinding$$1 ) NumericBinding.__proto__ = GenericBinding$$1;
+	NumericBinding.prototype = Object.create( GenericBinding$$1 && GenericBinding$$1.prototype );
+	NumericBinding.prototype.constructor = NumericBinding;
+
+	NumericBinding.prototype.getInitialValue = function getInitialValue () {
+		return undefined;
+	};
+
+	NumericBinding.prototype.getValue = function getValue () {
+		var value = parseFloat( this.node.value );
+		return isNaN( value ) ? undefined : value;
+	};
+
+	NumericBinding.prototype.setFromNode = function setFromNode ( node ) {
+		var value = parseFloat( node.value );
+		if ( !isNaN( value ) ) { this.model.set( value ); }
+	};
+
+	return NumericBinding;
+}(GenericBinding));
+
+var siblings = {};
+
+function getSiblings ( hash ) {
+	return siblings[ hash ] || ( siblings[ hash ] = [] );
+}
+
+var RadioBinding = (function (Binding$$1) {
+	function RadioBinding ( element ) {
+		Binding$$1.call( this, element, 'checked' );
+
+		this.siblings = getSiblings( this.ractive._guid + this.element.getAttribute( 'name' ) );
+		this.siblings.push( this );
+	}
+
+	if ( Binding$$1 ) RadioBinding.__proto__ = Binding$$1;
+	RadioBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );
+	RadioBinding.prototype.constructor = RadioBinding;
+
+	RadioBinding.prototype.getValue = function getValue () {
+		return this.node.checked;
+	};
+
+	RadioBinding.prototype.handleChange = function handleChange () {
+		runloop.start( this.root );
+
+		this.siblings.forEach( function (binding) {
+			binding.model.set( binding.getValue() );
+		});
+
+		runloop.end();
+	};
+
+	RadioBinding.prototype.render = function render () {
+		Binding$$1.prototype.render.call(this);
+
+		this.element.on( 'change', handleDomEvent );
+
+		if ( this.node.attachEvent ) {
+			this.element.on( 'click', handleDomEvent );
+		}
+	};
+
+	RadioBinding.prototype.setFromNode = function setFromNode ( node ) {
+		this.model.set( node.checked );
+	};
+
+	RadioBinding.prototype.unbind = function unbind () {
+		removeFromArray( this.siblings, this );
+	};
+
+	RadioBinding.prototype.unrender = function unrender () {
+		this.element.off( 'change', handleDomEvent );
+		this.element.off( 'click', handleDomEvent );
+	};
+
+	return RadioBinding;
+}(Binding));
+
+function getValue$1() {
+	var checked = this.bindings.filter( function (b) { return b.node.checked; } );
+	if ( checked.length > 0 ) {
+		return checked[0].element.getAttribute( 'value' );
+	}
+}
+
+var RadioNameBinding = (function (Binding$$1) {
+	function RadioNameBinding ( element ) {
+		Binding$$1.call( this, element, 'name' );
+
+		this.group = getBindingGroup( 'radioname', this.model, getValue$1 );
+		this.group.add( this );
+
+		if ( element.checked ) {
+			this.group.value = this.getValue();
+		}
+	}
+
+	if ( Binding$$1 ) RadioNameBinding.__proto__ = Binding$$1;
+	RadioNameBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );
+	RadioNameBinding.prototype.constructor = RadioNameBinding;
+
+	RadioNameBinding.prototype.bind = function bind () {
+		var this$1 = this;
+
+		if ( !this.group.bound ) {
+			this.group.bind();
+		}
+
+		// update name keypath when necessary
+		this.nameAttributeBinding = {
+			handleChange: function () { return this$1.node.name = "{{" + (this$1.model.getKeypath()) + "}}"; },
+			rebind: noop
+		};
+
+		this.model.getKeypathModel().register( this.nameAttributeBinding );
+	};
+
+	RadioNameBinding.prototype.getInitialValue = function getInitialValue () {
+		if ( this.element.getAttribute( 'checked' ) ) {
+			return this.element.getAttribute( 'value' );
+		}
+	};
+
+	RadioNameBinding.prototype.getValue = function getValue () {
+		return this.element.getAttribute( 'value' );
+	};
+
+	RadioNameBinding.prototype.handleChange = function handleChange () {
+		// If this <input> is the one that's checked, then the value of its
+		// `name` model gets set to its value
+		if ( this.node.checked ) {
+			this.group.value = this.getValue();
+			Binding$$1.prototype.handleChange.call(this);
+		}
+	};
+
+	RadioNameBinding.prototype.lastVal = function lastVal ( setting, value ) {
+		if ( !this.group ) { return; }
+		if ( setting ) { this.group.lastValue = value; }
+		else { return this.group.lastValue; }
+	};
+
+	RadioNameBinding.prototype.render = function render () {
+		Binding$$1.prototype.render.call(this);
+
+		var node = this.node;
+
+		node.name = "{{" + (this.model.getKeypath()) + "}}";
+		node.checked = this.element.compare ( this.model.get(), this.element.getAttribute( 'value' ) );
+
+		this.element.on( 'change', handleDomEvent );
+
+		if ( node.attachEvent ) {
+			this.element.on( 'click', handleDomEvent );
+		}
+	};
+
+	RadioNameBinding.prototype.setFromNode = function setFromNode ( node ) {
+		if ( node.checked ) {
+			this.group.model.set( this.element.getAttribute( 'value' ) );
+		}
+	};
+
+	RadioNameBinding.prototype.unbind = function unbind () {
+		this.group.remove( this );
+
+		this.model.getKeypathModel().unregister( this.nameAttributeBinding );
+	};
+
+	RadioNameBinding.prototype.unrender = function unrender () {
+		var el = this.element;
+
+		el.off( 'change', handleDomEvent );
+		el.off( 'click', handleDomEvent );
+	};
+
+	return RadioNameBinding;
+}(Binding));
+
+var SingleSelectBinding = (function (Binding$$1) {
+	function SingleSelectBinding () {
+		Binding$$1.apply(this, arguments);
+	}
+
+	if ( Binding$$1 ) SingleSelectBinding.__proto__ = Binding$$1;
+	SingleSelectBinding.prototype = Object.create( Binding$$1 && Binding$$1.prototype );
+	SingleSelectBinding.prototype.constructor = SingleSelectBinding;
+
+	SingleSelectBinding.prototype.forceUpdate = function forceUpdate () {
+		var this$1 = this;
+
+		var value = this.getValue();
+
+		if ( value !== undefined ) {
+			this.attribute.locked = true;
+			runloop.scheduleTask( function () { return this$1.attribute.locked = false; } );
+			this.model.set( value );
+		}
+	};
+
+	SingleSelectBinding.prototype.getInitialValue = function getInitialValue () {
+		if ( this.element.getAttribute( 'value' ) !== undefined ) {
+			return;
+		}
+
+		var options = this.element.options;
+		var len = options.length;
+
+		if ( !len ) { return; }
+
+		var value;
+		var optionWasSelected;
+		var i = len;
+
+		// take the final selected option...
+		while ( i-- ) {
+			var option = options[i];
+
+			if ( option.getAttribute( 'selected' ) ) {
+				if ( !option.getAttribute( 'disabled' ) ) {
+					value = option.getAttribute( 'value' );
+				}
+
+				optionWasSelected = true;
+				break;
+			}
+		}
+
+		// or the first non-disabled option, if none are selected
+		if ( !optionWasSelected ) {
+			while ( ++i < len ) {
+				if ( !options[i].getAttribute( 'disabled' ) ) {
+					value = options[i].getAttribute( 'value' );
+					break;
+				}
+			}
+		}
+
+		// This is an optimisation (aka hack) that allows us to forgo some
+		// other more expensive work
+		// TODO does it still work? seems at odds with new architecture
+		if ( value !== undefined ) {
+			this.element.attributeByName.value.value = value;
+		}
+
+		return value;
+	};
+
+	SingleSelectBinding.prototype.getValue = function getValue () {
+		var options = this.node.options;
+		var len = options.length;
+
+		var i;
+		for ( i = 0; i < len; i += 1 ) {
+			var option = options[i];
+
+			if ( options[i].selected && !options[i].disabled ) {
+				return option._ractive ? option._ractive.value : option.value;
+			}
+		}
+	};
+
+	SingleSelectBinding.prototype.render = function render () {
+		Binding$$1.prototype.render.call(this);
+		this.element.on( 'change', handleDomEvent );
+	};
+
+	SingleSelectBinding.prototype.setFromNode = function setFromNode ( node ) {
+		var option = getSelectedOptions( node )[0];
+		this.model.set( option._ractive ? option._ractive.value : option.value );
+	};
+
+	SingleSelectBinding.prototype.unrender = function unrender () {
+		this.element.off( 'change', handleDomEvent );
+	};
+
+	return SingleSelectBinding;
+}(Binding));
+
+function isBindable ( attribute ) {
+
+	// The fragment must be a single non-string fragment
+	if ( !attribute || !attribute.template.f || attribute.template.f.length !== 1 || attribute.template.f[0].s ) { return false; }
+
+	// A binding is an interpolator `{{ }}`, yey.
+	if ( attribute.template.f[0].t === INTERPOLATOR ) { return true; }
+
+	// The above is probably the only true case. For the rest, show an appropriate
+	// warning before returning false.
+
+	// You can't bind a triple curly. HTML values on an attribute makes no sense.
+	if ( attribute.template.f[0].t === TRIPLE ) { warnIfDebug( 'It is not possible create a binding using a triple mustache.' ); }
+
+	return false;
+}
+
+function selectBinding ( element ) {
+	var name = element.name;
+	var attributes = element.attributeByName;
+	var isBindableByValue = isBindable( attributes.value );
+	var isBindableByContentEditable = isBindable( attributes.contenteditable );
+	var isContentEditable =  element.getAttribute( 'contenteditable' );
+
+	// contenteditable
+	// Bind if the contenteditable is true or a binding that may become true.
+	if ( ( isContentEditable || isBindableByContentEditable ) && isBindableByValue ) { return ContentEditableBinding; }
+
+	// <input>
+	if ( name === 'input' ) {
+		var type = element.getAttribute( 'type' );
+
+		if ( type === 'radio' ) {
+			var isBindableByName = isBindable( attributes.name );
+			var isBindableByChecked = isBindable( attributes.checked );
+
+			// For radios we can either bind the name or checked, but not both.
+			// Name binding is handed instead.
+			if ( isBindableByName && isBindableByChecked ) {
+				warnIfDebug( 'A radio input can have two-way binding on its name attribute, or its checked attribute - not both', { ractive: element.root });
+				return RadioNameBinding;
+			}
+
+			if ( isBindableByName ) { return RadioNameBinding; }
+
+			if ( isBindableByChecked ) { return RadioBinding; }
+
+			// Dead end. Unknown binding on radio input.
+			return null;
+		}
+
+		if ( type === 'checkbox' ) {
+			var isBindableByName$1 = isBindable( attributes.name );
+			var isBindableByChecked$1 = isBindable( attributes.checked );
+
+			// A checkbox with bindings for both name and checked. Checked treated as
+			// the checkbox value, name is treated as a regular binding.
+			//
+			// See https://github.com/ractivejs/ractive/issues/1749
+			if ( isBindableByName$1 && isBindableByChecked$1 ) { return CheckboxBinding; }
+
+			if ( isBindableByName$1 ) { return CheckboxNameBinding; }
+
+			if ( isBindableByChecked$1 ) { return CheckboxBinding; }
+
+			// Dead end. Unknown binding on checkbox input.
+			return null;
+		}
+
+		if ( type === 'file' && isBindableByValue ) { return FileBinding; }
+
+		if ( type === 'number' && isBindableByValue ) { return NumericBinding; }
+
+		if ( type === 'range' && isBindableByValue ) { return NumericBinding; }
+
+		// Some input of unknown type (browser usually falls back to text).
+		if ( isBindableByValue ) { return GenericBinding; }
+
+		// Dead end. Some unknown input and an unbindable.
+		return null;
+	}
+
+	// <select>
+	if ( name === 'select' && isBindableByValue ){
+		return element.getAttribute( 'multiple' ) ? MultipleSelectBinding : SingleSelectBinding;
+	}
+
+	// <textarea>
+	if ( name === 'textarea' && isBindableByValue ) { return GenericBinding; }
+
+	// Dead end. Some unbindable element.
+	return null;
+}
+
+var endsWithSemi = /;\s*$/;
+
+var Element = (function (ContainerItem$$1) {
+	function Element ( options ) {
+		var this$1 = this;
+
+		ContainerItem$$1.call( this, options );
+
+		this.name = options.template.e.toLowerCase();
+
+		// find parent element
+		this.parent = findElement( this.parentFragment, false );
+
+		if ( this.parent && this.parent.name === 'option' ) {
+			throw new Error( ("An <option> element cannot contain other elements (encountered <" + (this.name) + ">)") );
+		}
+
+		this.decorators = [];
+
+		// create attributes
+		this.attributeByName = {};
+
+		var attrs;
+		var n, attr, val, cls, name, template, leftovers;
+
+		var m = this.template.m;
+		var len = ( m && m.length ) || 0;
+
+		for ( var i = 0; i < len; i++ ) {
+			template = m[i];
+			switch ( template.t ) {
+				case ATTRIBUTE:
+				case BINDING_FLAG:
+				case DECORATOR:
+				case EVENT:
+				case TRANSITION:
+					attr = createItem({
+						owner: this$1,
+						parentFragment: this$1.parentFragment,
+						template: template
+					});
+
+					n = template.n;
+
+					attrs = attrs || ( attrs = this$1.attributes = [] );
+
+					if ( n === 'value' ) { val = attr; }
+					else if ( n === 'name' ) { name = attr; }
+					else if ( n === 'class' ) { cls = attr; }
+					else { attrs.push( attr ); }
+
+					break;
+
+				case DELEGATE_FLAG:
+				  this$1.delegate = false;
+					break;
+
+				default:
+					( leftovers || ( leftovers = [] ) ).push( template );
+					break;
+			}
+		}
+
+		if ( name ) { attrs.push( name ); }
+		if ( val ) { attrs.push( val ); }
+		if ( cls ) { attrs.unshift( cls ); }
+
+		if ( leftovers ) {
+			( attrs || ( this.attributes = [] ) ).push( new ConditionalAttribute({
+				owner: this,
+				parentFragment: this.parentFragment,
+				template: leftovers
+			}) );
+
+			// empty leftovers array
+			leftovers = [];
+		}
+
+		// create children
+		if ( options.template.f && !options.deferContent ) {
+			this.fragment = new Fragment({
+				template: options.template.f,
+				owner: this,
+				cssIds: null
+			});
+		}
+
+		this.binding = null; // filled in later
+	}
+
+	if ( ContainerItem$$1 ) Element.__proto__ = ContainerItem$$1;
+	Element.prototype = Object.create( ContainerItem$$1 && ContainerItem$$1.prototype );
+	Element.prototype.constructor = Element;
+
+	Element.prototype.bind = function bind$1 () {
+		var attrs = this.attributes;
+		if ( attrs ) {
+			attrs.binding = true;
+			attrs.forEach( bind );
+			attrs.binding = false;
+		}
+
+		if ( this.fragment ) { this.fragment.bind(); }
+
+		// create two-way binding if necessary
+		if ( !this.binding ) { this.recreateTwowayBinding(); }
+		else { this.binding.bind(); }
+	};
+
+	Element.prototype.createTwowayBinding = function createTwowayBinding () {
+		if ( 'twoway' in this ? this.twoway : this.ractive.twoway ) {
+			var Binding = selectBinding( this );
+			if ( Binding ) {
+				var binding = new Binding( this );
+				if ( binding && binding.model ) { return binding; }
+			}
+		}
+	};
+
+	Element.prototype.destroyed = function destroyed$1 () {
+		var this$1 = this;
+
+		if ( this.attributes ) { this.attributes.forEach( destroyed ); }
+
+		if ( !this.parentFragment.delegate && this.listeners ) {
+			var ls = this.listeners;
+			for ( var k in ls ) {
+				if ( ls[k] && ls[k].length ) { this$1.node.removeEventListener( k, handler ); }
+			}
+		}
+
+		if ( this.fragment ) { this.fragment.destroyed(); }
+	};
+
+	Element.prototype.detach = function detach () {
+		// if this element is no longer rendered, the transitions are complete and the attributes can be torn down
+		if ( !this.rendered ) { this.destroyed(); }
+
+		return detachNode( this.node );
+	};
+
+	Element.prototype.find = function find ( selector, options ) {
+		if ( this.node && matches( this.node, selector ) ) { return this.node; }
+		if ( this.fragment ) {
+			return this.fragment.find( selector, options );
+		}
+	};
+
+	Element.prototype.findAll = function findAll ( selector, options ) {
+		var result = options.result;
+
+		if ( matches( this.node, selector ) ) {
+			result.push( this.node );
+		}
+
+		if ( this.fragment ) {
+			this.fragment.findAll( selector, options );
+		}
+	};
+
+	Element.prototype.findNextNode = function findNextNode () {
+		return null;
+	};
+
+	Element.prototype.firstNode = function firstNode () {
+		return this.node;
+	};
+
+	Element.prototype.getAttribute = function getAttribute ( name ) {
+		var attribute = this.attributeByName[ name ];
+		return attribute ? attribute.getValue() : undefined;
+	};
+
+	Element.prototype.getContext = function getContext () {
+		var assigns = [], len = arguments.length;
+		while ( len-- ) assigns[ len ] = arguments[ len ];
+
+		if ( this.fragment ) { return (ref = this.fragment).getContext.apply( ref, assigns ); }
+
+		if ( !this.ctx ) { this.ctx = new Context( this.parentFragment, this ); }
+		assigns.unshift( Object.create( this.ctx ) );
+		return Object.assign.apply( null, assigns );
+		var ref;
+	};
+
+	Element.prototype.off = function off ( event, callback, capture ) {
+		if ( capture === void 0 ) capture = false;
+
+		var delegate = this.parentFragment.delegate;
+		var ref = this.listeners && this.listeners[event];
+
+		if ( !ref ) { return; }
+		removeFromArray( ref, callback );
+
+		if ( delegate ) {
+			var listeners = ( delegate.listeners || ( delegate.listeners = [] ) ) && ( delegate.listeners[event] || ( delegate.listeners[event] = [] ) );
+			if ( listeners.refs && !--listeners.refs ) { delegate.off( event, delegateHandler, true ); }
+		} else if ( this.rendered ) {
+			var n = this.node;
+			var add = n.addEventListener;
+			var rem = n.removeEventListener;
+
+			if ( !ref.length ) {
+				rem.call( n, event, handler, capture );
+			} else if ( ref.length && !ref.refs && capture ) {
+				rem.call( n, event, handler, true );
+				add.call( n, event, handler, false );
+			}
+		}
+	};
+
+	Element.prototype.on = function on ( event, callback, capture ) {
+		if ( capture === void 0 ) capture = false;
+
+		var delegate = this.parentFragment.delegate;
+		var ref = ( this.listeners || ( this.listeners = {} ) )[event] || ( this.listeners[event] = [] );
+
+		if ( delegate ) {
+			var listeners = ( delegate.listeners || ( delegate.listeners = [] ) ) && delegate.listeners[event] || ( delegate.listeners[event] = [] );
+			if ( !listeners.refs ) {
+				listeners.refs = 0;
+				delegate.on( event, delegateHandler, true );
+				listeners.refs++;
+			} else {
+				listeners.refs++;
+			}
+		} else if ( this.rendered ) {
+			var n = this.node;
+			var add = n.addEventListener;
+			var rem = n.removeEventListener;
+
+			if ( !ref.length ) {
+				add.call( n, event, handler, capture );
+			} else if ( ref.length && !ref.refs && capture ) {
+				rem.call( n, event, handler, false );
+				add.call( n, event, handler, true );
+			}
+		}
+
+		addToArray( this.listeners[event], callback );
+	};
+
+	Element.prototype.recreateTwowayBinding = function recreateTwowayBinding () {
+		if ( this.binding ) {
+			this.binding.unbind();
+			this.binding.unrender();
+		}
+
+		if ( this.binding = this.createTwowayBinding() ) {
+			this.binding.bind();
+			if ( this.rendered ) { this.binding.render(); }
+		}
+	};
+
+	Element.prototype.render = function render$1 ( target, occupants ) {
+		var this$1 = this;
+
+		// TODO determine correct namespace
+		this.namespace = getNamespace( this );
+
+		var node;
+		var existing = false;
+
+		if ( occupants ) {
+			var n;
+			while ( ( n = occupants.shift() ) ) {
+				if ( n.nodeName.toUpperCase() === this$1.template.e.toUpperCase() && n.namespaceURI === this$1.namespace ) {
+					this$1.node = node = n;
+					existing = true;
+					break;
+				} else {
+					detachNode( n );
+				}
+			}
+		}
+
+		if ( !node ) {
+			var name = this.template.e;
+			node = createElement( this.namespace === html ? name.toLowerCase() : name, this.namespace, this.getAttribute( 'is' ) );
+			this.node = node;
+		}
+
+		// tie the node to this vdom element
+		Object.defineProperty( node, '_ractive', {
+			value: {
+				proxy: this
+			}
+		});
+
+		// Is this a top-level node of a component? If so, we may need to add
+		// a data-ractive-css attribute, for CSS encapsulation
+		if ( this.parentFragment.cssIds ) {
+			node.setAttribute( 'data-ractive-css', this.parentFragment.cssIds.map( function (x) { return ("{" + x + "}"); } ).join( ' ' ) );
+		}
+
+		if ( existing && this.foundNode ) { this.foundNode( node ); }
+
+		// register intro before rendering content so children can find the intro
+		var intro = this.intro;
+		if ( intro && intro.shouldFire( 'intro' ) ) {
+			intro.isIntro = true;
+			intro.isOutro = false;
+			runloop.registerTransition( intro );
+		}
+
+		if ( this.fragment ) {
+			var children = existing ? toArray( node.childNodes ) : undefined;
+
+			this.fragment.render( node, children );
+
+			// clean up leftover children
+			if ( children ) {
+				children.forEach( detachNode );
+			}
+		}
+
+		if ( existing ) {
+			// store initial values for two-way binding
+			if ( this.binding && this.binding.wasUndefined ) { this.binding.setFromNode( node ); }
+			// remove unused attributes
+			var i = node.attributes.length;
+			while ( i-- ) {
+				var name$1 = node.attributes[i].name;
+				if ( !( name$1 in this$1.attributeByName ) ){ node.removeAttribute( name$1 ); }
+			}
+		}
+
+		if ( this.attributes ) { this.attributes.forEach( render ); }
+		if ( this.binding ) { this.binding.render(); }
+
+		if ( !this.parentFragment.delegate && this.listeners ) {
+			var ls = this.listeners;
+			for ( var k in ls ) {
+				if ( ls[k] && ls[k].length ) { this$1.node.addEventListener( k, handler, !!ls[k].refs ); }
+			}
+		}
+
+		if ( !existing ) {
+			target.appendChild( node );
+		}
+
+		this.rendered = true;
+	};
+
+	Element.prototype.toString = function toString$$1 () {
+		var tagName = this.template.e;
+
+		var attrs = ( this.attributes && this.attributes.map( stringifyAttribute ).join( '' ) ) || '';
+
+		// Special case - selected options
+		if ( this.name === 'option' && this.isSelected() ) {
+			attrs += ' selected';
+		}
+
+		// Special case - two-way radio name bindings
+		if ( this.name === 'input' && inputIsCheckedRadio( this ) ) {
+			attrs += ' checked';
+		}
+
+		// Special case style and class attributes and directives
+		var style, cls;
+		this.attributes && this.attributes.forEach( function (attr) {
+			if ( attr.name === 'class' ) {
+				cls = ( cls || '' ) + ( cls ? ' ' : '' ) + safeAttributeString( attr.getString() );
+			} else if ( attr.name === 'style' ) {
+				style = ( style || '' ) + ( style ? ' ' : '' ) + safeAttributeString( attr.getString() );
+				if ( style && !endsWithSemi.test( style ) ) { style += ';'; }
+			} else if ( attr.style ) {
+				style = ( style || '' ) + ( style ? ' ' : '' ) +  (attr.style) + ": " + (safeAttributeString( attr.getString() )) + ";";
+			} else if ( attr.inlineClass && attr.getValue() ) {
+				cls = ( cls || '' ) + ( cls ? ' ' : '' ) + attr.inlineClass;
+			}
+		});
+		// put classes first, then inline style
+		if ( style !== undefined ) { attrs = ' style' + ( style ? ("=\"" + style + "\"") : '' ) + attrs; }
+		if ( cls !== undefined ) { attrs = ' class' + (cls ? ("=\"" + cls + "\"") : '') + attrs; }
+
+		if ( this.parentFragment.cssIds ) {
+			attrs += " data-ractive-css=\"" + (this.parentFragment.cssIds.map( function (x) { return ("{" + x + "}"); } ).join( ' ' )) + "\"";
+		}
+
+		var str = "<" + tagName + attrs + ">";
+
+		if ( voidElementNames.test( this.name ) ) { return str; }
+
+		// Special case - textarea
+		if ( this.name === 'textarea' && this.getAttribute( 'value' ) !== undefined ) {
+			str += escapeHtml( this.getAttribute( 'value' ) );
+		}
+
+		// Special case - contenteditable
+		else if ( this.getAttribute( 'contenteditable' ) !== undefined ) {
+			str += ( this.getAttribute( 'value' ) || '' );
+		}
+
+		if ( this.fragment ) {
+			str += this.fragment.toString( !/^(?:script|style)$/i.test( this.template.e ) ); // escape text unless script/style
+		}
+
+		str += "</" + tagName + ">";
+		return str;
+	};
+
+	Element.prototype.unbind = function unbind$1 () {
+		var attrs = this.attributes;
+		if ( attrs ) {
+			attrs.unbinding = true;
+			attrs.forEach( unbind );
+			attrs.unbinding = false;
+		}
+
+		if ( this.binding ) { this.binding.unbind(); }
+		if ( this.fragment ) { this.fragment.unbind(); }
+	};
+
+	Element.prototype.unrender = function unrender$$1 ( shouldDestroy ) {
+		if ( !this.rendered ) { return; }
+		this.rendered = false;
+
+		// unrendering before intro completed? complete it now
+		// TODO should be an API for aborting transitions
+		var transition = this.intro;
+		if ( transition && transition.complete ) { transition.complete(); }
+
+		// Detach as soon as we can
+		if ( this.name === 'option' ) {
+			// <option> elements detach immediately, so that
+			// their parent <select> element syncs correctly, and
+			// since option elements can't have transitions anyway
+			this.detach();
+		} else if ( shouldDestroy ) {
+			runloop.detachWhenReady( this );
+		}
+
+		// outro transition
+		var outro = this.outro;
+		if ( outro && outro.shouldFire( 'outro' ) ) {
+			outro.isIntro = false;
+			outro.isOutro = true;
+			runloop.registerTransition( outro );
+		}
+
+		if ( this.fragment ) { this.fragment.unrender(); }
+
+		if ( this.binding ) { this.binding.unrender(); }
+	};
+
+	Element.prototype.update = function update$1 () {
+		if ( this.dirty ) {
+			this.dirty = false;
+
+			this.attributes && this.attributes.forEach( update );
+
+			if ( this.fragment ) { this.fragment.update(); }
+		}
+	};
+
+	return Element;
+}(ContainerItem));
+
+function inputIsCheckedRadio ( element ) {
+	var nameAttr = element.attributeByName.name;
+	return element.getAttribute( 'type' ) === 'radio' &&
+		( nameAttr || {} ).interpolator &&
+		element.getAttribute( 'value' ) === nameAttr.interpolator.model.get();
+}
+
+function stringifyAttribute ( attribute ) {
+	var str = attribute.toString();
+	return str ? ' ' + str : '';
+}
+
+function getNamespace ( element ) {
+	// Use specified namespace...
+	var xmlns$$1 = element.getAttribute( 'xmlns' );
+	if ( xmlns$$1 ) { return xmlns$$1; }
+
+	// ...or SVG namespace, if this is an <svg> element
+	if ( element.name === 'svg' ) { return svg$1; }
+
+	var parent = element.parent;
+
+	if ( parent ) {
+		// ...or HTML, if the parent is a <foreignObject>
+		if ( parent.name === 'foreignobject' ) { return html; }
+
+		// ...or inherit from the parent node
+		return parent.node.namespaceURI;
+	}
+
+	return element.ractive.el.namespaceURI;
+}
+
+function delegateHandler ( ev ) {
+	var name = ev.type;
+	var end = ev.currentTarget;
+	var endEl = end._ractive && end._ractive.proxy;
+	var node = ev.target;
+	var bubble = true;
+	var listeners;
+
+	// starting with the origin node, walk up the DOM looking for ractive nodes with a matching event listener
+	while ( bubble && node && node !== end ) {
+		var proxy = node._ractive && node._ractive.proxy;
+		if ( proxy && proxy.parentFragment.delegate === endEl && shouldFire( ev, node, end ) ) {
+			listeners = proxy.listeners && proxy.listeners[name];
+
+			if ( listeners ) {
+				listeners.forEach( function (l) {
+					bubble = l.call( node, ev ) !== false && bubble;
+				});
+			}
+		}
+
+		node = node.parentNode;
+	}
+
+	return bubble;
+}
+
+var UIEvent = win !== null ? win.UIEvent : null;
+function shouldFire ( event, start, end ) {
+	if ( UIEvent && event instanceof UIEvent ) {
+		var node = start;
+		while ( node && node !== end ) {
+			if ( node.disabled ) { return false; }
+			node = node.parentNode;
+		}
+	}
+
+	return true;
+}
+
+function handler ( ev ) {
+	var this$1 = this;
+
+	var el = this._ractive.proxy;
+	if ( !el.listeners || !el.listeners[ ev.type ] ) { return; }
+	el.listeners[ ev.type ].forEach( function (l) { return l.call( this$1, ev ); } );
+}
+
+var Form = (function (Element$$1) {
+	function Form ( options ) {
+		Element$$1.call( this, options );
+		this.formBindings = [];
+	}
+
+	if ( Element$$1 ) Form.__proto__ = Element$$1;
+	Form.prototype = Object.create( Element$$1 && Element$$1.prototype );
+	Form.prototype.constructor = Form;
+
+	Form.prototype.render = function render ( target, occupants ) {
+		Element$$1.prototype.render.call( this, target, occupants );
+		this.on( 'reset', handleReset );
+	};
+
+	Form.prototype.unrender = function unrender ( shouldDestroy ) {
+		this.off( 'reset', handleReset );
+		Element$$1.prototype.unrender.call( this, shouldDestroy );
+	};
+
+	return Form;
+}(Element));
+
+function handleReset () {
+	var element = this._ractive.proxy;
+
+	runloop.start();
+	element.formBindings.forEach( updateModel );
+	runloop.end();
+}
+
+function updateModel ( binding ) {
+	binding.model.set( binding.resetValue );
+}
+
+var DOMEvent = function DOMEvent ( name, owner ) {
+	if ( name.indexOf( '*' ) !== -1 ) {
+		fatal( ("Only component proxy-events may contain \"*\" wildcards, <" + (owner.name) + " on-" + name + "=\"...\"/> is not valid") );
+	}
+
+	this.name = name;
+	this.owner = owner;
+	this.handler = null;
+};
+
+DOMEvent.prototype.listen = function listen ( directive ) {
+	var node = this.owner.node;
+	var name = this.name;
+
+	// this is probably a custom event fired from a decorator or manually
+	if ( !( ("on" + name) in node ) ) { return; }
+
+	this.owner.on( name, this.handler = function ( event ) {
+		return directive.fire({
+			node: node,
+			original: event,
+			event: event,
+			name: name
+		});
+	});
+};
+
+DOMEvent.prototype.unlisten = function unlisten () {
+	if ( this.handler ) { this.owner.off( this.name, this.handler ); }
+};
+
+var CustomEvent = function CustomEvent ( eventPlugin, owner, name ) {
+	this.eventPlugin = eventPlugin;
+	this.owner = owner;
+	this.name = name;
+	this.handler = null;
+};
+
+CustomEvent.prototype.listen = function listen ( directive ) {
+		var this$1 = this;
+
+	var node = this.owner.node;
+
+	this.handler = this.eventPlugin( node, function ( event ) {
+			if ( event === void 0 ) event = {};
+
+		if ( event.original ) { event.event = event.original; }
+		else { event.original = event.event; }
+
+		event.name = this$1.name;
+		event.node = event.node || node;
+		return directive.fire( event );
+	});
+};
+
+CustomEvent.prototype.unlisten = function unlisten () {
+	this.handler.teardown();
+};
+
+var RactiveEvent = function RactiveEvent ( component, name ) {
+	this.component = component;
+	this.name = name;
+	this.handler = null;
+};
+
+RactiveEvent.prototype.listen = function listen ( directive ) {
+	var ractive = this.component.instance;
+
+	this.handler = ractive.on( this.name, function () {
+			var args = [], len = arguments.length;
+			while ( len-- ) args[ len ] = arguments[ len ];
+
+		// watch for reproxy
+		if ( args[0] instanceof Context ) {
+			var ctx = args.shift();
+			ctx.component = ractive;
+			directive.fire( ctx, args );
+		} else {
+			directive.fire( {}, args );
+		}
+
+		// cancel bubbling
+		return false;
+	});
+};
+
+RactiveEvent.prototype.unlisten = function unlisten () {
+	this.handler.cancel();
+};
+
+var specialPattern = /^(event|arguments|@node|@event|@context)(\..+)?$/;
+var dollarArgsPattern = /^\$(\d+)(\..+)?$/;
+
+var EventDirective = function EventDirective ( options ) {
+	var this$1 = this;
+
+	this.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );
+	this.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment, true );
+	this.template = options.template;
+	this.parentFragment = options.parentFragment;
+	this.ractive = options.parentFragment.ractive;
+	//const delegate = this.delegate = this.ractive.delegate && options.parentFragment.delegate;
+	this.events = [];
+
+	if ( this.element.type === COMPONENT || this.element.type === ANCHOR ) {
+		this.template.n.forEach( function (n) {
+			this$1.events.push( new RactiveEvent( this$1.element, n ) );
+		});
+	} else {
+		// make sure the delegate element has a storag object
+		//if ( delegate && !delegate.delegates ) delegate.delegates = {};
+
+		this.template.n.forEach( function (n) {
+			var fn = findInViewHierarchy( 'events', this$1.ractive, n );
+			if ( fn ) {
+				this$1.events.push( new CustomEvent( fn, this$1.element, n ) );
+			} else {
+				this$1.events.push( new DOMEvent( n, this$1.element ) );
+			}
+		});
+	}
+
+	// method calls
+	this.models = null;
+};
+
+EventDirective.prototype.bind = function bind () {
+	addToArray( ( this.element.events || ( this.element.events = [] ) ), this );
+
+	setupArgsFn( this, this.template );
+	if ( !this.fn ) { this.action = this.template.f; }
+};
+
+EventDirective.prototype.destroyed = function destroyed () {
+	this.events.forEach( function (e) { return e.unlisten(); } );
+};
+
+EventDirective.prototype.fire = function fire ( event, args ) {
+		var this$1 = this;
+		if ( args === void 0 ) args = [];
+
+	var context = this.element.getContext( event );
+
+	if ( this.fn ) {
+		var values = [];
+
+		var models = resolveArgs( this, this.template, this.parentFragment, {
+			specialRef: function specialRef ( ref ) {
+				var specialMatch = specialPattern.exec( ref );
+				if ( specialMatch ) {
+					// on-click="foo(event.node)"
+					return {
+						special: specialMatch[1],
+						keys: specialMatch[2] ? splitKeypath( specialMatch[2].substr(1) ) : []
+					};
+				}
+
+				var dollarMatch = dollarArgsPattern.exec( ref );
+				if ( dollarMatch ) {
+					// on-click="foo($1)"
+					return {
+						special: 'arguments',
+						keys: [ dollarMatch[1] - 1 ].concat( dollarMatch[2] ? splitKeypath( dollarMatch[2].substr( 1 ) ) : [] )
+					};
+				}
+			}
+		});
+
+		if ( models ) {
+			models.forEach( function (model) {
+				if ( !model ) { return values.push( undefined ); }
+
+				if ( model.special ) {
+					var which = model.special;
+					var obj;
+
+					if ( which === '@node' ) {
+						obj = this$1.element.node;
+					} else if ( which === '@event' ) {
+						obj = event && event.event;
+					} else if ( which === 'event' ) {
+						warnOnceIfDebug( "The event reference available to event directives is deprecated and should be replaced with @context and @event" );
+						obj = context;
+					} else if ( which === '@context' ) {
+						obj = context;
+					} else {
+						obj = args;
+					}
+
+					var keys = model.keys.slice();
+
+					while ( obj && keys.length ) { obj = obj[ keys.shift() ]; }
+					return values.push( obj );
+				}
+
+				if ( model.wrapper ) {
+					return values.push( model.wrapperValue );
+				}
+
+				values.push( model.get() );
+			});
+		}
+
+		// make event available as `this.event`
+		var ractive = this.ractive;
+		var oldEvent = ractive.event;
+
+		ractive.event = context;
+		var returned = this.fn.apply( ractive, values );
+		var result = returned.pop();
+
+		// Auto prevent and stop if return is explicitly false
+		if ( result === false ) {
+			var original = event ? event.original : undefined;
+			if ( original ) {
+				original.preventDefault && original.preventDefault();
+				original.stopPropagation && original.stopPropagation();
+			} else {
+				warnOnceIfDebug( ("handler '" + (this.template.n.join( ' ' )) + "' returned false, but there is no event available to cancel") );
+			}
+		}
+
+		// watch for proxy events
+		else if ( !returned.length && Array.isArray( result ) && typeof result[0] === 'string' ) {
+			result = fireEvent( this.ractive, result.shift(), context, result );
+		}
+
+		ractive.event = oldEvent;
+
+		return result;
+	}
+
+	else {
+		return fireEvent( this.ractive, this.action, context, args);
+	}
+};
+
+EventDirective.prototype.handleChange = function handleChange () {};
+
+EventDirective.prototype.render = function render () {
+		var this$1 = this;
+
+	// render events after everything else, so they fire after bindings
+	runloop.scheduleTask( function () { return this$1.events.forEach( function (e) { return e.listen( this$1 ); }, true ); } );
+};
+
+EventDirective.prototype.toString = function toString () { return ''; };
+
+EventDirective.prototype.unbind = function unbind () {
+	removeFromArray( this.element.events, this );
+};
+
+EventDirective.prototype.unrender = function unrender () {
+	this.events.forEach( function (e) { return e.unlisten(); } );
+};
+
+EventDirective.prototype.update = noop;
+
+function progressiveText ( item, target, occupants, text ) {
+	if ( occupants ) {
+		var n = occupants[0];
+		if ( n && n.nodeType === 3 ) {
+			var idx = n.nodeValue.indexOf( text );
+			occupants.shift();
+
+			if ( idx === 0 ) {
+				if ( n.nodeValue.length !== text.length ) {
+					occupants.unshift( n.splitText( text.length ) );
+				}
+			} else {
+				n.nodeValue = text;
+			}
+		} else {
+			n = item.node = doc.createTextNode( text );
+			if ( occupants[0] ) {
+				target.insertBefore( n, occupants[0] );
+			} else {
+				target.appendChild( n );
+			}
+		}
+
+		item.node = n;
+	} else {
+		if ( !item.node ) { item.node = doc.createTextNode( text ); }
+		target.appendChild( item.node );
+	}
+}
+
+var Mustache = (function (Item$$1) {
+	function Mustache ( options ) {
+		Item$$1.call( this, options );
+
+		this.parentFragment = options.parentFragment;
+		this.template = options.template;
+		this.index = options.index;
+		if ( options.owner ) { this.parent = options.owner; }
+
+		this.isStatic = !!options.template.s;
+
+		this.model = null;
+		this.dirty = false;
+	}
+
+	if ( Item$$1 ) Mustache.__proto__ = Item$$1;
+	Mustache.prototype = Object.create( Item$$1 && Item$$1.prototype );
+	Mustache.prototype.constructor = Mustache;
+
+	Mustache.prototype.bind = function bind () {
+		// yield mustaches should resolve in container context
+		var start = this.containerFragment || this.parentFragment;
+		// try to find a model for this view
+		var model = resolve$1( start, this.template );
+
+		if ( model ) {
+			var value = model.get();
+
+			if ( this.isStatic ) {
+				this.model = { get: function () { return value; } };
+				return;
+			}
+
+			model.register( this );
+			this.model = model;
+		}
+	};
+
+	Mustache.prototype.handleChange = function handleChange () {
+		this.bubble();
+	};
+
+	Mustache.prototype.rebind = function rebind ( next, previous, safe ) {
+		next = rebindMatch( this.template, next, previous, this.parentFragment );
+		if ( next === this.model ) { return false; }
+
+		if ( this.model ) {
+			this.model.unregister( this );
+		}
+		if ( next ) { next.addShuffleRegister( this, 'mark' ); }
+		this.model = next;
+		if ( !safe ) { this.handleChange(); }
+		return true;
+	};
+
+	Mustache.prototype.unbind = function unbind () {
+		if ( !this.isStatic ) {
+			this.model && this.model.unregister( this );
+			this.model = undefined;
+		}
+	};
+
+	return Mustache;
+}(Item));
+
+var MustacheContainer = (function (ContainerItem$$1) {
+	function MustacheContainer ( options ) {
+		ContainerItem$$1.call( this, options );
+	}
+
+	if ( ContainerItem$$1 ) MustacheContainer.__proto__ = ContainerItem$$1;
+	MustacheContainer.prototype = Object.create( ContainerItem$$1 && ContainerItem$$1.prototype );
+	MustacheContainer.prototype.constructor = MustacheContainer;
+
+	return MustacheContainer;
+}(ContainerItem));
+var proto$3 = MustacheContainer.prototype;
+var mustache = Mustache.prototype;
+proto$3.bind = mustache.bind;
+proto$3.handleChange = mustache.handleChange;
+proto$3.rebind = mustache.rebind;
+proto$3.unbind = mustache.unbind;
+
+var Interpolator = (function (Mustache$$1) {
+	function Interpolator () {
+		Mustache$$1.apply(this, arguments);
+	}
+
+	if ( Mustache$$1 ) Interpolator.__proto__ = Mustache$$1;
+	Interpolator.prototype = Object.create( Mustache$$1 && Mustache$$1.prototype );
+	Interpolator.prototype.constructor = Interpolator;
+
+	Interpolator.prototype.bubble = function bubble () {
+		if ( this.owner ) { this.owner.bubble(); }
+		Mustache$$1.prototype.bubble.call(this);
+	};
+
+	Interpolator.prototype.detach = function detach () {
+		return detachNode( this.node );
+	};
+
+	Interpolator.prototype.firstNode = function firstNode () {
+		return this.node;
+	};
+
+	Interpolator.prototype.getString = function getString () {
+		return this.model ? safeToStringValue( this.model.get() ) : '';
+	};
+
+	Interpolator.prototype.render = function render ( target, occupants ) {
+		if ( inAttributes() ) { return; }
+		var value = this.getString();
+
+		this.rendered = true;
+
+		progressiveText( this, target, occupants, value );
+	};
+
+	Interpolator.prototype.toString = function toString ( escape ) {
+		var string = this.getString();
+		return escape ? escapeHtml( string ) : string;
+	};
+
+	Interpolator.prototype.unrender = function unrender ( shouldDestroy ) {
+		if ( shouldDestroy ) { this.detach(); }
+		this.rendered = false;
+	};
+
+	Interpolator.prototype.update = function update () {
+		if ( this.dirty ) {
+			this.dirty = false;
+			if ( this.rendered ) {
+				this.node.data = this.getString();
+			}
+		}
+	};
+
+	Interpolator.prototype.valueOf = function valueOf () {
+		return this.model ? this.model.get() : undefined;
+	};
+
+	return Interpolator;
+}(Mustache));
+
+var Input = (function (Element$$1) {
+	function Input () {
+		Element$$1.apply(this, arguments);
+	}
+
+	if ( Element$$1 ) Input.__proto__ = Element$$1;
+	Input.prototype = Object.create( Element$$1 && Element$$1.prototype );
+	Input.prototype.constructor = Input;
+
+	Input.prototype.render = function render ( target, occupants ) {
+		Element$$1.prototype.render.call( this, target, occupants );
+		this.node.defaultValue = this.node.value;
+	};
+	Input.prototype.compare = function compare ( value, attrValue ) {
+		var comparator = this.getAttribute( 'value-comparator' );
+		if ( comparator ) {
+			if ( typeof comparator === 'function' ) {
+				return comparator( value, attrValue );
+			}
+			if (value && attrValue) {
+				return value[comparator] == attrValue[comparator];
+			}
+		}
+		return value == attrValue;
+	};
+
+	return Input;
+}(Element));
+
+// simple JSON parser, without the restrictions of JSON parse
+// (i.e. having to double-quote keys).
+//
+// If passed a hash of values as the second argument, ${placeholders}
+// will be replaced with those values
+
+var specials$1 = {
+	true: true,
+	false: false,
+	null: null,
+	undefined: undefined
+};
+
+var specialsPattern = new RegExp( '^(?:' + Object.keys( specials$1 ).join( '|' ) + ')' );
+var numberPattern$1 = /^(?:[+-]?)(?:(?:(?:0|[1-9]\d*)?\.\d+)|(?:(?:0|[1-9]\d*)\.)|(?:0|[1-9]\d*))(?:[eE][+-]?\d+)?/;
+var placeholderPattern = /\$\{([^\}]+)\}/g;
+var placeholderAtStartPattern = /^\$\{([^\}]+)\}/;
+var onlyWhitespace$1 = /^\s*$/;
+
+var JsonParser = Parser.extend({
+	init: function init ( str, options ) {
+		this.values = options.values;
+		this.allowWhitespace();
+	},
+
+	postProcess: function postProcess ( result ) {
+		if ( result.length !== 1 || !onlyWhitespace$1.test( this.leftover ) ) {
+			return null;
+		}
+
+		return { value: result[0].v };
+	},
+
+	converters: [
+		function getPlaceholder ( parser ) {
+			if ( !parser.values ) { return null; }
+
+			var placeholder = parser.matchPattern( placeholderAtStartPattern );
+
+			if ( placeholder && ( parser.values.hasOwnProperty( placeholder ) ) ) {
+				return { v: parser.values[ placeholder ] };
+			}
+		},
+
+		function getSpecial ( parser ) {
+			var special = parser.matchPattern( specialsPattern );
+			if ( special ) { return { v: specials$1[ special ] }; }
+		},
+
+		function getNumber ( parser ) {
+			var number = parser.matchPattern( numberPattern$1 );
+			if ( number ) { return { v: +number }; }
+		},
+
+		function getString ( parser ) {
+			var stringLiteral = readStringLiteral( parser );
+			var values = parser.values;
+
+			if ( stringLiteral && values ) {
+				return {
+					v: stringLiteral.v.replace( placeholderPattern, function ( match, $1 ) { return ( $1 in values ? values[ $1 ] : $1 ); } )
+				};
+			}
+
+			return stringLiteral;
+		},
+
+		function getObject ( parser ) {
+			if ( !parser.matchString( '{' ) ) { return null; }
+
+			var result = {};
+
+			parser.allowWhitespace();
+
+			if ( parser.matchString( '}' ) ) {
+				return { v: result };
+			}
+
+			var pair;
+			while ( pair = getKeyValuePair( parser ) ) {
+				result[ pair.key ] = pair.value;
+
+				parser.allowWhitespace();
+
+				if ( parser.matchString( '}' ) ) {
+					return { v: result };
+				}
+
+				if ( !parser.matchString( ',' ) ) {
+					return null;
+				}
+			}
+
+			return null;
+		},
+
+		function getArray ( parser ) {
+			if ( !parser.matchString( '[' ) ) { return null; }
+
+			var result = [];
+
+			parser.allowWhitespace();
+
+			if ( parser.matchString( ']' ) ) {
+				return { v: result };
+			}
+
+			var valueToken;
+			while ( valueToken = parser.read() ) {
+				result.push( valueToken.v );
+
+				parser.allowWhitespace();
+
+				if ( parser.matchString( ']' ) ) {
+					return { v: result };
+				}
+
+				if ( !parser.matchString( ',' ) ) {
+					return null;
+				}
+
+				parser.allowWhitespace();
+			}
+
+			return null;
+		}
+	]
+});
+
+function getKeyValuePair ( parser ) {
+	parser.allowWhitespace();
+
+	var key = readKey( parser );
+
+	if ( !key ) { return null; }
+
+	var pair = { key: key };
+
+	parser.allowWhitespace();
+	if ( !parser.matchString( ':' ) ) {
+		return null;
+	}
+	parser.allowWhitespace();
+
+	var valueToken = parser.read();
+
+	if ( !valueToken ) { return null; }
+
+	pair.value = valueToken.v;
+	return pair;
+}
+
+var parseJSON = function ( str, values ) {
+	var parser = new JsonParser( str, { values: values });
+	return parser.result;
+};
+
+var Mapping = (function (Item$$1) {
+	function Mapping ( options ) {
+		Item$$1.call( this, options );
+
+		this.name = options.template.n;
+
+		this.owner = options.owner || options.parentFragment.owner || options.element || findElement( options.parentFragment );
+		this.element = options.element || (this.owner.attributeByName ? this.owner : findElement( options.parentFragment ) );
+		this.parentFragment = this.element.parentFragment; // shared
+		this.ractive = this.parentFragment.ractive;
+
+		this.element.attributeByName[ this.name ] = this;
+
+		this.value = options.template.f;
+	}
+
+	if ( Item$$1 ) Mapping.__proto__ = Item$$1;
+	Mapping.prototype = Object.create( Item$$1 && Item$$1.prototype );
+	Mapping.prototype.constructor = Mapping;
+
+	Mapping.prototype.bind = function bind () {
+		var template = this.template.f;
+		var viewmodel = this.element.instance.viewmodel;
+
+		if ( template === 0 ) {
+			// empty attributes are `true`
+			viewmodel.joinKey( this.name ).set( true );
+		}
+
+		else if ( typeof template === 'string' ) {
+			var parsed = parseJSON( template );
+			viewmodel.joinKey( this.name ).set( parsed ? parsed.value : template );
+		}
+
+		else if ( Array.isArray( template ) ) {
+			createMapping( this, true );
+		}
+	};
+
+	Mapping.prototype.render = function render () {};
+
+	Mapping.prototype.unbind = function unbind () {
+		if ( this.model ) { this.model.unregister( this ); }
+		if ( this.boundFragment ) { this.boundFragment.unbind(); }
+
+		if ( this.element.bound ) {
+			if ( this.link.target === this.model ) { this.link.owner.unlink(); }
+		}
+	};
+
+	Mapping.prototype.unrender = function unrender () {};
+
+	Mapping.prototype.update = function update () {
+		if ( this.dirty ) {
+			this.dirty = false;
+			if ( this.boundFragment ) { this.boundFragment.update(); }
+		}
+	};
+
+	return Mapping;
+}(Item));
+
+function createMapping ( item ) {
+	var template = item.template.f;
+	var viewmodel = item.element.instance.viewmodel;
+	var childData = viewmodel.value;
+
+	if ( template.length === 1 && template[0].t === INTERPOLATOR ) {
+		var model = resolve$1( item.parentFragment, template[0] );
+		var val = model.get( false );
+
+		// if the interpolator is not static
+		if ( !template[0].s ) {
+			item.model = model;
+			item.link = viewmodel.createLink( item.name, model, template[0].r, { mapping: true } );
+
+			// initialize parent side of the mapping from child data
+			if ( val === undefined && !model.isReadonly && item.name in childData ) {
+				model.set( childData[ item.name ] );
+			}
+		}
+
+		// copy non-object, non-computed vals through
+		else if ( typeof val !== 'object' || template[0].x ) {
+			viewmodel.joinKey( splitKeypath( item.name ) ).set( val );
+		}
+
+		// warn about trying to copy an object
+		else {
+			warnIfDebug( ("Cannot copy non-computed object value from static mapping '" + (item.name) + "'") );
+		}
+	}
+
+	else {
+		item.boundFragment = new Fragment({
+			owner: item,
+			template: template
+		}).bind();
+
+		item.model = viewmodel.joinKey( splitKeypath( item.name ) );
+		item.model.set( item.boundFragment.valueOf() );
+
+		// item is a *bit* of a hack
+		item.boundFragment.bubble = function () {
+			Fragment.prototype.bubble.call( item.boundFragment );
+			// defer this to avoid mucking around model deps if there happens to be an expression involved
+			runloop.scheduleTask(function () {
+				item.boundFragment.update();
+				item.model.set( item.boundFragment.valueOf() );
+			});
+		};
+	}
+}
+
+var Option = (function (Element$$1) {
+	function Option ( options ) {
+		var template = options.template;
+		if ( !template.a ) { template.a = {}; }
+
+		// If the value attribute is missing, use the element's content,
+		// as long as it isn't disabled
+		if ( template.a.value === undefined && !( 'disabled' in template.a ) ) {
+			template.a.value = template.f || '';
+		}
+
+		Element$$1.call( this, options );
+
+		this.select = findElement( this.parent || this.parentFragment, false, 'select' );
+	}
+
+	if ( Element$$1 ) Option.__proto__ = Element$$1;
+	Option.prototype = Object.create( Element$$1 && Element$$1.prototype );
+	Option.prototype.constructor = Option;
+
+	Option.prototype.bind = function bind () {
+		if ( !this.select ) {
+			Element$$1.prototype.bind.call(this);
+			return;
+		}
+
+		// If the select has a value, it overrides the `selected` attribute on
+		// this option - so we delete the attribute
+		var selectedAttribute = this.attributeByName.selected;
+		if ( selectedAttribute && this.select.getAttribute( 'value' ) !== undefined ) {
+			var index = this.attributes.indexOf( selectedAttribute );
+			this.attributes.splice( index, 1 );
+			delete this.attributeByName.selected;
+		}
+
+		Element$$1.prototype.bind.call(this);
+		this.select.options.push( this );
+	};
+
+	Option.prototype.bubble = function bubble () {
+		// if we're using content as value, may need to update here
+		var value = this.getAttribute( 'value' );
+		if ( this.node && this.node.value !== value ) {
+			this.node._ractive.value = value;
+		}
+		Element$$1.prototype.bubble.call(this);
+	};
+
+	Option.prototype.getAttribute = function getAttribute ( name ) {
+		var attribute = this.attributeByName[ name ];
+		return attribute ? attribute.getValue() : name === 'value' && this.fragment ? this.fragment.valueOf() : undefined;
+	};
+
+	Option.prototype.isSelected = function isSelected () {
+		var this$1 = this;
+
+		var optionValue = this.getAttribute( 'value' );
+
+		if ( optionValue === undefined || !this.select ) {
+			return false;
+		}
+
+		var selectValue = this.select.getAttribute( 'value' );
+
+		if ( this.select.compare( selectValue, optionValue ) ) {
+			return true;
+		}
+
+		if ( this.select.getAttribute( 'multiple' ) && Array.isArray( selectValue ) ) {
+			var i = selectValue.length;
+			while ( i-- ) {
+				if ( this$1.select.compare( selectValue[i], optionValue ) ) {
+					return true;
+				}
+			}
+		}
+	};
+
+	Option.prototype.render = function render ( target, occupants ) {
+		Element$$1.prototype.render.call( this, target, occupants );
+
+		if ( !this.attributeByName.value ) {
+			this.node._ractive.value = this.getAttribute( 'value' );
+		}
+	};
+
+	Option.prototype.unbind = function unbind () {
+		Element$$1.prototype.unbind.call(this);
+
+		if ( this.select ) {
+			removeFromArray( this.select.options, this );
+		}
+	};
+
+	return Option;
+}(Element));
+
+function getPartialTemplate ( ractive, name, parentFragment ) {
+	// If the partial in instance or view heirarchy instances, great
+	var partial = getPartialFromRegistry( ractive, name, parentFragment || {} );
+	if ( partial ) { return partial; }
+
+	// Does it exist on the page as a script tag?
+	partial = parser.fromId( name, { noThrow: true } );
+	if ( partial ) {
+		// parse and register to this ractive instance
+		var parsed = parser.parseFor( partial, ractive );
+
+		// register extra partials on the ractive instance if they don't already exist
+		if ( parsed.p ) { fillGaps( ractive.partials, parsed.p ); }
+
+		// register (and return main partial if there are others in the template)
+		return ractive.partials[ name ] = parsed.t;
+	}
+}
+
+function getPartialFromRegistry ( ractive, name, parentFragment ) {
+	// if there was an instance up-hierarchy, cool
+	var partial = findParentPartial( name, parentFragment.owner );
+	if ( partial ) { return partial; }
+
+	// find first instance in the ractive or view hierarchy that has this partial
+	var instance = findInstance( 'partials', ractive, name );
+
+	if ( !instance ) { return; }
+
+	partial = instance.partials[ name ];
+
+	// partial is a function?
+	var fn;
+	if ( typeof partial === 'function' ) {
+		fn = partial.bind( instance );
+		fn.isOwner = instance.partials.hasOwnProperty(name);
+		partial = fn.call( ractive, parser );
+	}
+
+	if ( !partial && partial !== '' ) {
+		warnIfDebug( noRegistryFunctionReturn, name, 'partial', 'partial', { ractive: ractive });
+		return;
+	}
+
+	// If this was added manually to the registry,
+	// but hasn't been parsed, parse it now
+	if ( !parser.isParsed( partial ) ) {
+		// use the parseOptions of the ractive instance on which it was found
+		var parsed = parser.parseFor( partial, instance );
+
+		// Partials cannot contain nested partials!
+		// TODO add a test for this
+		if ( parsed.p ) {
+			warnIfDebug( 'Partials ({{>%s}}) cannot contain nested inline partials', name, { ractive: ractive });
+		}
+
+		// if fn, use instance to store result, otherwise needs to go
+		// in the correct point in prototype chain on instance or constructor
+		var target = fn ? instance : findOwner( instance, name );
+
+		// may be a template with partials, which need to be registered and main template extracted
+		target.partials[ name ] = partial = parsed.t;
+	}
+
+	// store for reset
+	if ( fn ) { partial._fn = fn; }
+
+	return partial.v ? partial.t : partial;
+}
+
+function findOwner ( ractive, key ) {
+	return ractive.partials.hasOwnProperty( key )
+		? ractive
+		: findConstructor( ractive.constructor, key);
+}
+
+function findConstructor ( constructor, key ) {
+	if ( !constructor ) { return; }
+	return constructor.partials.hasOwnProperty( key )
+		? constructor
+		: findConstructor( constructor.Parent, key );
+}
+
+function findParentPartial( name, parent ) {
+	if ( parent ) {
+		if ( parent.template && parent.template.p && parent.template.p[name] ) {
+			return parent.template.p[name];
+		} else if ( parent.parentFragment && parent.parentFragment.owner ) {
+			return findParentPartial( name, parent.parentFragment.owner );
+		}
+	}
+}
+
+var Partial = (function (MustacheContainer$$1) {
+	function Partial ( options ) {
+		MustacheContainer$$1.call( this, options );
+
+		this.yielder = options.template.t === YIELDER;
+
+		if ( this.yielder ) {
+			this.container = options.parentFragment.ractive;
+			this.component = this.container.component;
+
+			this.containerFragment = options.parentFragment;
+			this.parentFragment = this.component.parentFragment;
+
+			// {{yield}} is equivalent to {{yield content}}
+			if ( !options.template.r && !options.template.rx && !options.template.x ) { options.template.r = 'content'; }
+		}
+	}
+
+	if ( MustacheContainer$$1 ) Partial.__proto__ = MustacheContainer$$1;
+	Partial.prototype = Object.create( MustacheContainer$$1 && MustacheContainer$$1.prototype );
+	Partial.prototype.constructor = Partial;
+
+	Partial.prototype.bind = function bind () {
+		var this$1 = this;
+
+		// keep track of the reference name for future resets
+		this.refName = this.template.r;
+
+		// name matches take priority over expressions
+		var template = this.refName ? getPartialTemplate( this.ractive, this.refName, this.parentFragment ) || null : null;
+		var templateObj;
+
+		if ( template ) {
+			this.named = true;
+			this.setTemplate( this.template.r, template );
+		}
+
+		if ( !template ) {
+			MustacheContainer$$1.prototype.bind.call(this);
+			if ( ( templateObj = this.model.get() ) && typeof templateObj === 'object' && ( typeof templateObj.template === 'string' || Array.isArray( templateObj.t ) ) ) {
+				if ( templateObj.template ) {
+					this.source = templateObj.template;
+					templateObj = parsePartial( this.template.r, templateObj.template, this.ractive );
+				} else {
+					this.source = templateObj.t;
+				}
+				this.setTemplate( this.template.r, templateObj.t );
+			} else if ( typeof this.model.get() !== 'string' && this.refName ) {
+				this.setTemplate( this.refName, template );
+			} else {
+				this.setTemplate( this.model.get() );
+			}
+		}
+
+		var options = {
+			owner: this,
+			template: this.partialTemplate
+		};
+
+		if ( this.template.c ) {
+			options.template = [{ t: SECTION, n: SECTION_WITH, f: options.template }];
+			for ( var k in this$1.template.c ) {
+				options.template[0][k] = this$1.template.c[k];
+			}
+		}
+
+		if ( this.yielder ) {
+			options.ractive = this.container.parent;
+		}
+
+		this.fragment = new Fragment(options);
+		if ( this.template.z ) {
+			this.fragment.aliases = resolveAliases( this.template.z, this.yielder ? this.containerFragment : this.parentFragment );
+		}
+		this.fragment.bind();
+	};
+
+	Partial.prototype.bubble = function bubble () {
+		if ( this.yielder && !this.dirty ) {
+			this.containerFragment.bubble();
+			this.dirty = true;
+		} else {
+			MustacheContainer$$1.prototype.bubble.call(this);
+		}
+	};
+
+	Partial.prototype.findNextNode = function findNextNode () {
+		return this.yielder ? this.containerFragment.findNextNode( this ) : MustacheContainer$$1.prototype.findNextNode.call(this);
+	};
+
+	Partial.prototype.forceResetTemplate = function forceResetTemplate () {
+		var this$1 = this;
+
+		this.partialTemplate = undefined;
+
+		// on reset, check for the reference name first
+		if ( this.refName ) {
+			this.partialTemplate = getPartialTemplate( this.ractive, this.refName, this.parentFragment );
+		}
+
+		// then look for the resolved name
+		if ( !this.partialTemplate ) {
+			this.partialTemplate = getPartialTemplate( this.ractive, this.name, this.parentFragment );
+		}
+
+		if ( !this.partialTemplate ) {
+			warnOnceIfDebug( ("Could not find template for partial '" + (this.name) + "'") );
+			this.partialTemplate = [];
+		}
+
+		if ( this.inAttribute ) {
+			doInAttributes( function () { return this$1.fragment.resetTemplate( this$1.partialTemplate ); } );
+		} else {
+			this.fragment.resetTemplate( this.partialTemplate );
+		}
+
+		this.bubble();
+	};
+
+	Partial.prototype.render = function render ( target, occupants ) {
+		return this.fragment.render( target, occupants );
+	};
+
+	Partial.prototype.setTemplate = function setTemplate ( name, template ) {
+		this.name = name;
+
+		if ( !template && template !== null ) { template = getPartialTemplate( this.ractive, name, this.parentFragment ); }
+
+		if ( !template ) {
+			warnOnceIfDebug( ("Could not find template for partial '" + name + "'") );
+		}
+
+		this.partialTemplate = template || [];
+	};
+
+	Partial.prototype.unbind = function unbind () {
+		MustacheContainer$$1.prototype.unbind.call(this);
+		this.fragment.aliases = {};
+		this.fragment.unbind();
+	};
+
+	Partial.prototype.unrender = function unrender ( shouldDestroy ) {
+		this.fragment.unrender( shouldDestroy );
+	};
+
+	Partial.prototype.update = function update () {
+		var template;
+
+		if ( this.dirty ) {
+			this.dirty = false;
+
+			if ( !this.named ) {
+				if ( this.model ) {
+					template = this.model.get();
+				}
+
+				if ( template && typeof template === 'string' && template !== this.name ) {
+					this.setTemplate( template );
+					this.fragment.resetTemplate( this.partialTemplate );
+				} else if ( template && typeof template === 'object' && ( typeof template.template === 'string' || Array.isArray( template.t ) ) ) {
+					if ( template.t !== this.source && template.template !== this.source ) {
+						if ( template.template ) {
+							this.source = template.template;
+							template = parsePartial( this.name, template.template, this.ractive );
+						} else {
+							this.source = template.t;
+						}
+						this.setTemplate( this.name, template.t );
+						this.fragment.resetTemplate( this.partialTemplate );
+					}
+				}
+			}
+
+			this.fragment.update();
+		}
+	};
+
+	return Partial;
+}(MustacheContainer));
+
+function parsePartial( name, partial, ractive ) {
+	var parsed;
+
+	try {
+		parsed = parser.parse( partial, parser.getParseOptions( ractive ) );
+	} catch (e) {
+		warnIfDebug( ("Could not parse partial from expression '" + name + "'\n" + (e.message)) );
+	}
+
+	return parsed || { t: [] };
+}
+
+var RepeatedFragment = function RepeatedFragment ( options ) {
+	this.parent = options.owner.parentFragment;
+
+	// bit of a hack, so reference resolution works without another
+	// layer of indirection
+	this.parentFragment = this;
+	this.owner = options.owner;
+	this.ractive = this.parent.ractive;
+	this.delegate = this.ractive.delegate !== false && ( this.parent.delegate || findDelegate( findElement( options.owner ) ) );
+	// delegation disabled by directive
+	if ( this.delegate && this.delegate.delegate === false ) { this.delegate = false; }
+	// let the element know it's a delegate handler
+	if ( this.delegate ) { this.delegate.delegate = this.delegate; }
+
+	// encapsulated styles should be inherited until they get applied by an element
+	this.cssIds = 'cssIds' in options ? options.cssIds : ( this.parent ? this.parent.cssIds : null );
+
+	this.context = null;
+	this.rendered = false;
+	this.iterations = [];
+
+	this.template = options.template;
+
+	this.indexRef = options.indexRef;
+	this.keyRef = options.keyRef;
+
+	this.pendingNewIndices = null;
+	this.previousIterations = null;
+
+	// track array versus object so updates of type rest
+	this.isArray = false;
+};
+
+RepeatedFragment.prototype.bind = function bind$$1 ( context ) {
+		var this$1 = this;
+
+	this.context = context;
+	var value = context.get();
+
+	// {{#each array}}...
+	if ( this.isArray = Array.isArray( value ) ) {
+		// we can't use map, because of sparse arrays
+		this.iterations = [];
+		var max = value.length;
+		for ( var i = 0; i < max; i += 1 ) {
+			this$1.iterations[i] = this$1.createIteration( i, i );
+		}
+	}
+
+	// {{#each object}}...
+	else if ( isObject( value ) ) {
+		this.isArray = false;
+
+		// TODO this is a dreadful hack. There must be a neater way
+		if ( this.indexRef ) {
+			var refs = this.indexRef.split( ',' );
+			this.keyRef = refs[0];
+			this.indexRef = refs[1];
+		}
+
+		this.iterations = Object.keys( value ).map( function ( key, index ) {
+			return this$1.createIteration( key, index );
+		});
+	}
+
+	return this;
+};
+
+RepeatedFragment.prototype.bubble = function bubble ( index ) {
+	if  ( !this.bubbled ) { this.bubbled = []; }
+	this.bubbled.push( index );
+
+	this.owner.bubble();
+};
+
+RepeatedFragment.prototype.createIteration = function createIteration ( key, index ) {
+	var fragment = new Fragment({
+		owner: this,
+		template: this.template
+	});
+
+	fragment.key = key;
+	fragment.index = index;
+	fragment.isIteration = true;
+	fragment.delegate = this.delegate;
+
+	var model = this.context.joinKey( key );
+
+	// set up an iteration alias if there is one
+	if ( this.owner.template.z ) {
+		fragment.aliases = {};
+		fragment.aliases[ this.owner.template.z[0].n ] = model;
+	}
+
+	return fragment.bind( model );
+};
+
+RepeatedFragment.prototype.destroyed = function destroyed$1 () {
+	this.iterations.forEach( destroyed );
+};
+
+RepeatedFragment.prototype.detach = function detach () {
+	var docFrag = createDocumentFragment();
+	this.iterations.forEach( function (fragment) { return docFrag.appendChild( fragment.detach() ); } );
+	return docFrag;
+};
+
+RepeatedFragment.prototype.find = function find ( selector, options ) {
+	return findMap( this.iterations, function (i) { return i.find( selector, options ); } );
+};
+
+RepeatedFragment.prototype.findAll = function findAll ( selector, options ) {
+	return this.iterations.forEach( function (i) { return i.findAll( selector, options ); } );
+};
+
+RepeatedFragment.prototype.findComponent = function findComponent ( name, options ) {
+	return findMap( this.iterations, function (i) { return i.findComponent( name, options ); } );
+};
+
+RepeatedFragment.prototype.findAllComponents = function findAllComponents ( name, options ) {
+	return this.iterations.forEach( function (i) { return i.findAllComponents( name, options ); } );
+};
+
+RepeatedFragment.prototype.findNextNode = function findNextNode ( iteration ) {
+		var this$1 = this;
+
+	if ( iteration.index < this.iterations.length - 1 ) {
+		for ( var i = iteration.index + 1; i < this.iterations.length; i++ ) {
+			var node = this$1.iterations[ i ].firstNode( true );
+			if ( node ) { return node; }
+		}
+	}
+
+	return this.owner.findNextNode();
+};
+
+RepeatedFragment.prototype.firstNode = function firstNode ( skipParent ) {
+	return this.iterations[0] ? this.iterations[0].firstNode( skipParent ) : null;
+};
+
+RepeatedFragment.prototype.rebind = function rebind ( next ) {
+		var this$1 = this;
+
+	this.context = next;
+	this.iterations.forEach( function (fragment) {
+		var model = next ? next.joinKey( fragment.key ) : undefined;
+		fragment.context = model;
+		if ( this$1.owner.template.z ) {
+			fragment.aliases = {};
+			fragment.aliases[ this$1.owner.template.z[0].n ] = model;
+		}
+	});
+};
+
+RepeatedFragment.prototype.render = function render$$1 ( target, occupants ) {
+	// TODO use docFrag.cloneNode...
+
+	var xs = this.iterations;
+	if ( xs ) {
+		var len = xs.length;
+		for ( var i = 0; i < len; i++ ) {
+			xs[i].render( target, occupants );
+		}
+	}
+
+	this.rendered = true;
+};
+
+RepeatedFragment.prototype.shuffle = function shuffle ( newIndices ) {
+		var this$1 = this;
+
+	if ( !this.pendingNewIndices ) { this.previousIterations = this.iterations.slice(); }
+
+	if ( !this.pendingNewIndices ) { this.pendingNewIndices = []; }
+
+	this.pendingNewIndices.push( newIndices );
+
+	var iterations = [];
+
+	newIndices.forEach( function ( newIndex, oldIndex ) {
+		if ( newIndex === -1 ) { return; }
+
+		var fragment = this$1.iterations[ oldIndex ];
+		iterations[ newIndex ] = fragment;
+
+		if ( newIndex !== oldIndex && fragment ) { fragment.dirty = true; }
+	});
+
+	this.iterations = iterations;
+
+	this.bubble();
+};
+
+RepeatedFragment.prototype.shuffled = function shuffled$1 () {
+	this.iterations.forEach( shuffled );
+};
+
+RepeatedFragment.prototype.toString = function toString$1$$1 ( escape ) {
+	return this.iterations ?
+		this.iterations.map( escape ? toEscapedString : toString$1 ).join( '' ) :
+		'';
+};
+
+RepeatedFragment.prototype.unbind = function unbind$1 () {
+	this.iterations.forEach( unbind );
+	return this;
+};
+
+RepeatedFragment.prototype.unrender = function unrender$1 ( shouldDestroy ) {
+	this.iterations.forEach( shouldDestroy ? unrenderAndDestroy : unrender );
+	if ( this.pendingNewIndices && this.previousIterations ) {
+		this.previousIterations.forEach( function (fragment) {
+			if ( fragment.rendered ) { shouldDestroy ? unrenderAndDestroy( fragment ) : unrender( fragment ); }
+		});
+	}
+	this.rendered = false;
+};
+
+// TODO smart update
+RepeatedFragment.prototype.update = function update$1 () {
+		var this$1 = this;
+
+	// skip dirty check, since this is basically just a facade
+
+	if ( this.pendingNewIndices ) {
+		this.bubbled.length = 0;
+		this.updatePostShuffle();
+		return;
+	}
+
+	if ( this.updating ) { return; }
+	this.updating = true;
+
+	var value = this.context.get();
+	var wasArray = this.isArray;
+
+	var toRemove;
+	var oldKeys;
+	var reset = true;
+	var i;
+
+	if ( this.isArray = Array.isArray( value ) ) {
+		if ( wasArray ) {
+			reset = false;
+			if ( this.iterations.length > value.length ) {
+				toRemove = this.iterations.splice( value.length );
+			}
+		}
+	} else if ( isObject( value ) && !wasArray ) {
+		reset = false;
+		toRemove = [];
+		oldKeys = {};
+		i = this.iterations.length;
+
+		while ( i-- ) {
+			var fragment$1 = this$1.iterations[i];
+			if ( fragment$1.key in value ) {
+				oldKeys[ fragment$1.key ] = true;
+			} else {
+				this$1.iterations.splice( i, 1 );
+				toRemove.push( fragment$1 );
+			}
+		}
+	}
+
+	if ( reset ) {
+		toRemove = this.iterations;
+		this.iterations = [];
+	}
+
+	if ( toRemove ) {
+		toRemove.forEach( function (fragment) {
+			fragment.unbind();
+			fragment.unrender( true );
+		});
+	}
+
+	// update the remaining ones
+	if ( !reset && this.isArray && this.bubbled && this.bubbled.length ) {
+		this.bubbled.forEach( function (i) { return this$1.iterations[i] && this$1.iterations[i].update(); } );
+	} else {
+		this.iterations.forEach( update );
+	}
+
+	if ( this.bubbled ) { this.bubbled.length = 0; }
+
+	// add new iterations
+	var newLength = Array.isArray( value ) ?
+		value.length :
+		isObject( value ) ?
+			Object.keys( value ).length :
+			0;
+
+	var docFrag;
+	var fragment;
+
+	if ( newLength > this.iterations.length ) {
+		docFrag = this.rendered ? createDocumentFragment() : null;
+		i = this.iterations.length;
+
+		if ( Array.isArray( value ) ) {
+			while ( i < value.length ) {
+				fragment = this$1.createIteration( i, i );
+
+				this$1.iterations.push( fragment );
+				if ( this$1.rendered ) { fragment.render( docFrag ); }
+
+				i += 1;
+			}
+		}
+
+		else if ( isObject( value ) ) {
+			// TODO this is a dreadful hack. There must be a neater way
+			if ( this.indexRef && !this.keyRef ) {
+				var refs = this.indexRef.split( ',' );
+				this.keyRef = refs[0];
+				this.indexRef = refs[1];
+			}
+
+			Object.keys( value ).forEach( function (key) {
+				if ( !oldKeys || !( key in oldKeys ) ) {
+					fragment = this$1.createIteration( key, i );
+
+					this$1.iterations.push( fragment );
+					if ( this$1.rendered ) { fragment.render( docFrag ); }
+
+					i += 1;
+				}
+			});
+		}
+
+		if ( this.rendered ) {
+			var parentNode = this.parent.findParentNode();
+			var anchor = this.parent.findNextNode( this.owner );
+
+			parentNode.insertBefore( docFrag, anchor );
+		}
+	}
+
+	this.updating = false;
+};
+
+RepeatedFragment.prototype.updatePostShuffle = function updatePostShuffle () {
+		var this$1 = this;
+
+	var newIndices = this.pendingNewIndices[ 0 ];
+
+	// map first shuffle through
+	this.pendingNewIndices.slice( 1 ).forEach( function (indices) {
+		newIndices.forEach( function ( newIndex, oldIndex ) {
+			newIndices[ oldIndex ] = indices[ newIndex ];
+		});
+	});
+
+	// This algorithm (for detaching incorrectly-ordered fragments from the DOM and
+	// storing them in a document fragment for later reinsertion) seems a bit hokey,
+	// but it seems to work for now
+	var len = this.context.get().length;
+	var oldLen = this.previousIterations.length;
+	var removed = {};
+	var i;
+
+	newIndices.forEach( function ( newIndex, oldIndex ) {
+		var fragment = this$1.previousIterations[ oldIndex ];
+		this$1.previousIterations[ oldIndex ] = null;
+
+		if ( newIndex === -1 ) {
+			removed[ oldIndex ] = fragment;
+		} else if ( fragment.index !== newIndex ) {
+			var model = this$1.context.joinKey( newIndex );
+			fragment.index = fragment.key = newIndex;
+			fragment.context = model;
+			if ( this$1.owner.template.z ) {
+				fragment.aliases = {};
+				fragment.aliases[ this$1.owner.template.z[0].n ] = model;
+			}
+		}
+	});
+
+	// if the array was spliced outside of ractive, sometimes there are leftover fragments not in the newIndices
+	this.previousIterations.forEach( function ( frag, i ) {
+		if ( frag ) { removed[ i ] = frag; }
+	});
+
+	// create new/move existing iterations
+	var docFrag = this.rendered ? createDocumentFragment() : null;
+	var parentNode = this.rendered ? this.parent.findParentNode() : null;
+
+	var contiguous = 'startIndex' in newIndices;
+	i = contiguous ? newIndices.startIndex : 0;
+
+	for ( i; i < len; i++ ) {
+		var frag = this$1.iterations[i];
+
+		if ( frag && contiguous ) {
+			// attach any built-up iterations
+			if ( this$1.rendered ) {
+				if ( removed[i] ) { docFrag.appendChild( removed[i].detach() ); }
+				if ( docFrag.childNodes.length  ) { parentNode.insertBefore( docFrag, frag.firstNode() ); }
+			}
+			continue;
+		}
+
+		if ( !frag ) { this$1.iterations[i] = this$1.createIteration( i, i ); }
+
+		if ( this$1.rendered ) {
+			if ( removed[i] ) { docFrag.appendChild( removed[i].detach() ); }
+
+			if ( frag ) { docFrag.appendChild( frag.detach() ); }
+			else {
+				this$1.iterations[i].render( docFrag );
+			}
+		}
+	}
+
+	// append any leftovers
+	if ( this.rendered ) {
+		for ( i = len; i < oldLen; i++ ) {
+			if ( removed[i] ) { docFrag.appendChild( removed[i].detach() ); }
+		}
+
+		if ( docFrag.childNodes.length ) {
+			parentNode.insertBefore( docFrag, this.owner.findNextNode() );
+		}
+	}
+
+	// trigger removal on old nodes
+	Object.keys( removed ).forEach( function (k) { return removed[k].unbind().unrender( true ); } );
+
+	this.iterations.forEach( update );
+
+	this.pendingNewIndices = null;
+
+	this.shuffled();
+};
+
+// find the topmost delegate
+function findDelegate ( start ) {
+	var el = start;
+	var delegate = start;
+
+	while ( el ) {
+		if ( el.delegate ) { delegate = el; }
+		el = el.parent;
+	}
+
+	return delegate;
+}
+
+function isEmpty ( value ) {
+	return !value ||
+	       ( Array.isArray( value ) && value.length === 0 ) ||
+		   ( isObject( value ) && Object.keys( value ).length === 0 );
+}
+
+function getType ( value, hasIndexRef ) {
+	if ( hasIndexRef || Array.isArray( value ) ) { return SECTION_EACH; }
+	if ( isObject( value ) || typeof value === 'function' ) { return SECTION_IF_WITH; }
+	if ( value === undefined ) { return null; }
+	return SECTION_IF;
+}
+
+var Section = (function (MustacheContainer$$1) {
+	function Section ( options ) {
+		MustacheContainer$$1.call( this, options );
+
+		this.sectionType = options.template.n || null;
+		this.templateSectionType = this.sectionType;
+		this.subordinate = options.template.l === 1;
+		this.fragment = null;
+	}
+
+	if ( MustacheContainer$$1 ) Section.__proto__ = MustacheContainer$$1;
+	Section.prototype = Object.create( MustacheContainer$$1 && MustacheContainer$$1.prototype );
+	Section.prototype.constructor = Section;
+
+	Section.prototype.bind = function bind () {
+		MustacheContainer$$1.prototype.bind.call(this);
+
+		if ( this.subordinate ) {
+			this.sibling = this.parentFragment.items[ this.parentFragment.items.indexOf( this ) - 1 ];
+			this.sibling.nextSibling = this;
+		}
+
+		// if we managed to bind, we need to create children
+		if ( this.model ) {
+			this.dirty = true;
+			this.update();
+		} else if ( this.sectionType && this.sectionType === SECTION_UNLESS && ( !this.sibling || !this.sibling.isTruthy() ) ) {
+			this.fragment = new Fragment({
+				owner: this,
+				template: this.template.f
+			}).bind();
+		}
+	};
+
+	Section.prototype.detach = function detach () {
+		var frag = this.fragment || this.detached;
+		return frag ? frag.detach() : MustacheContainer$$1.prototype.detach.call(this);
+	};
+
+	Section.prototype.isTruthy = function isTruthy () {
+		if ( this.subordinate && this.sibling.isTruthy() ) { return true; }
+		var value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();
+		return !!value && ( this.templateSectionType === SECTION_IF_WITH || !isEmpty( value ) );
+	};
+
+	Section.prototype.rebind = function rebind ( next, previous, safe ) {
+		if ( MustacheContainer$$1.prototype.rebind.call( this, next, previous, safe ) ) {
+			if ( this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ) {
+				this.fragment.rebind( next );
+			}
+		}
+	};
+
+	Section.prototype.render = function render ( target, occupants ) {
+		this.rendered = true;
+		if ( this.fragment ) { this.fragment.render( target, occupants ); }
+	};
+
+	Section.prototype.shuffle = function shuffle ( newIndices ) {
+		if ( this.fragment && this.sectionType === SECTION_EACH ) {
+			this.fragment.shuffle( newIndices );
+		}
+	};
+
+	Section.prototype.unbind = function unbind () {
+		MustacheContainer$$1.prototype.unbind.call(this);
+		if ( this.fragment ) { this.fragment.unbind(); }
+	};
+
+	Section.prototype.unrender = function unrender ( shouldDestroy ) {
+		if ( this.rendered && this.fragment ) { this.fragment.unrender( shouldDestroy ); }
+		this.rendered = false;
+	};
+
+	Section.prototype.update = function update () {
+		var this$1 = this;
+
+		if ( !this.dirty ) { return; }
+
+		if ( this.fragment && this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ) {
+			this.fragment.context = this.model;
+		}
+
+		if ( !this.model && this.sectionType !== SECTION_UNLESS ) { return; }
+
+		this.dirty = false;
+
+		var value = !this.model ? undefined : this.model.isRoot ? this.model.value : this.model.get();
+		var siblingFalsey = !this.subordinate || !this.sibling.isTruthy();
+		var lastType = this.sectionType;
+
+		// watch for switching section types
+		if ( this.sectionType === null || this.templateSectionType === null ) { this.sectionType = getType( value, this.template.i ); }
+		if ( lastType && lastType !== this.sectionType && this.fragment ) {
+			if ( this.rendered ) {
+				this.fragment.unbind().unrender( true );
+			}
+
+			this.fragment = null;
+		}
+
+		var newFragment;
+
+		var fragmentShouldExist = this.sectionType === SECTION_EACH || // each always gets a fragment, which may have no iterations
+		                            this.sectionType === SECTION_WITH || // with (partial context) always gets a fragment
+		                            ( siblingFalsey && ( this.sectionType === SECTION_UNLESS ? !this.isTruthy() : this.isTruthy() ) ); // if, unless, and if-with depend on siblings and the condition
+
+		if ( fragmentShouldExist ) {
+			if ( !this.fragment ) { this.fragment = this.detached; }
+
+			if ( this.fragment ) {
+				// check for detached fragment
+				if ( this.detached ) {
+					attach( this, this.fragment );
+					this.detached = false;
+					this.rendered = true;
+				}
+
+				this.fragment.update();
+			} else {
+				if ( this.sectionType === SECTION_EACH ) {
+					newFragment = new RepeatedFragment({
+						owner: this,
+						template: this.template.f,
+						indexRef: this.template.i
+					}).bind( this.model );
+				} else {
+					// only with and if-with provide context - if and unless do not
+					var context = this.sectionType !== SECTION_IF && this.sectionType !== SECTION_UNLESS ? this.model : null;
+					newFragment = new Fragment({
+						owner: this,
+						template: this.template.f
+					}).bind( context );
+				}
+			}
+		} else {
+			if ( this.fragment && this.rendered ) {
+				if ( keep !== true ) {
+					this.fragment.unbind().unrender( true );
+				} else {
+					this.unrender( false );
+					this.detached = this.fragment;
+					runloop.scheduleTask( function () { return this$1.detach(); } );
+				}
+			} else if ( this.fragment ) {
+				this.fragment.unbind();
+			}
+
+			this.fragment = null;
+		}
+
+		if ( newFragment ) {
+			if ( this.rendered ) {
+				attach( this, newFragment );
+			}
+
+			this.fragment = newFragment;
+		}
+
+		if ( this.nextSibling ) {
+			this.nextSibling.dirty = true;
+			this.nextSibling.update();
+		}
+	};
+
+	return Section;
+}(MustacheContainer));
+
+function attach ( section, fragment ) {
+	var anchor = section.parentFragment.findNextNode( section );
+
+	if ( anchor ) {
+		var docFrag = createDocumentFragment();
+		fragment.render( docFrag );
+
+		anchor.parentNode.insertBefore( docFrag, anchor );
+	} else {
+		fragment.render( section.parentFragment.findParentNode() );
+	}
+}
+
+var Select = (function (Element$$1) {
+	function Select ( options ) {
+		Element$$1.call( this, options );
+		this.options = [];
+	}
+
+	if ( Element$$1 ) Select.__proto__ = Element$$1;
+	Select.prototype = Object.create( Element$$1 && Element$$1.prototype );
+	Select.prototype.constructor = Select;
+
+	Select.prototype.foundNode = function foundNode ( node ) {
+		if ( this.binding ) {
+			var selectedOptions = getSelectedOptions( node );
+
+			if ( selectedOptions.length > 0 ) {
+				this.selectedOptions = selectedOptions;
+			}
+		}
+	};
+
+	Select.prototype.render = function render ( target, occupants ) {
+		Element$$1.prototype.render.call( this, target, occupants );
+		this.sync();
+
+		var node = this.node;
+
+		var i = node.options.length;
+		while ( i-- ) {
+			node.options[i].defaultSelected = node.options[i].selected;
+		}
+
+		this.rendered = true;
+	};
+
+	Select.prototype.sync = function sync () {
+		var this$1 = this;
+
+		var selectNode = this.node;
+
+		if ( !selectNode ) { return; }
+
+		var options = toArray( selectNode.options );
+
+		if ( this.selectedOptions ) {
+			options.forEach( function (o) {
+				if ( this$1.selectedOptions.indexOf( o ) >= 0 ) { o.selected = true; }
+				else { o.selected = false; }
+			});
+			this.binding.setFromNode( selectNode );
+			delete this.selectedOptions;
+			return;
+		}
+
+		var selectValue = this.getAttribute( 'value' );
+		var isMultiple = this.getAttribute( 'multiple' );
+		var array = isMultiple && Array.isArray( selectValue );
+
+		// If the <select> has a specified value, that should override
+		// these options
+		if ( selectValue !== undefined ) {
+			var optionWasSelected;
+
+			options.forEach( function (o) {
+				var optionValue = o._ractive ? o._ractive.value : o.value;
+				var shouldSelect = isMultiple ?
+					array && this$1.valueContains( selectValue, optionValue ) :
+					this$1.compare( selectValue, optionValue );
+
+				if ( shouldSelect ) {
+					optionWasSelected = true;
+				}
+
+				o.selected = shouldSelect;
+			});
+
+			if ( !optionWasSelected && !isMultiple ) {
+				if ( this.binding ) {
+					this.binding.forceUpdate();
+				}
+			}
+		}
+
+		// Otherwise the value should be initialised according to which
+		// <option> element is selected, if twoway binding is in effect
+		else if ( this.binding ) {
+			this.binding.forceUpdate();
+		}
+	};
+	Select.prototype.valueContains = function valueContains ( selectValue, optionValue ) {
+		var this$1 = this;
+
+		var i = selectValue.length;
+		while ( i-- ) {
+			if ( this$1.compare( optionValue, selectValue[i] ) ) { return true; }
+		}
+	};
+	Select.prototype.compare = function compare (optionValue, selectValue) {
+		var comparator = this.getAttribute( 'value-comparator' );
+		if ( comparator ) {
+			if (typeof comparator === 'function') {
+				return comparator( selectValue, optionValue );
+			}
+			if ( selectValue && optionValue ) {
+				return selectValue[comparator] == optionValue[comparator];
+			}
+		}
+		return selectValue == optionValue;
+	};
+	Select.prototype.update = function update () {
+		var dirty = this.dirty;
+		Element$$1.prototype.update.call(this);
+		if ( dirty ) {
+			this.sync();
+		}
+	};
+
+	return Select;
+}(Element));
+
+var Textarea = (function (Input$$1) {
+	function Textarea( options ) {
+		var template = options.template;
+
+		options.deferContent = true;
+
+		Input$$1.call( this, options );
+
+		// check for single interpolator binding
+		if ( !this.attributeByName.value ) {
+			if ( template.f && isBindable( { template: template } ) ) {
+				( this.attributes || ( this.attributes = [] ) ).push( createItem( {
+					owner: this,
+					template: { t: ATTRIBUTE, f: template.f, n: 'value' },
+					parentFragment: this.parentFragment
+				} ) );
+			} else {
+				this.fragment = new Fragment({ owner: this, cssIds: null, template: template.f });
+			}
+		}
+	}
+
+	if ( Input$$1 ) Textarea.__proto__ = Input$$1;
+	Textarea.prototype = Object.create( Input$$1 && Input$$1.prototype );
+	Textarea.prototype.constructor = Textarea;
+
+	Textarea.prototype.bubble = function bubble () {
+		var this$1 = this;
+
+		if ( !this.dirty ) {
+			this.dirty = true;
+
+			if ( this.rendered && !this.binding && this.fragment ) {
+				runloop.scheduleTask( function () {
+					this$1.dirty = false;
+					this$1.node.value = this$1.fragment.toString();
+				});
+			}
+
+			this.parentFragment.bubble(); // default behaviour
+		}
+	};
+
+	return Textarea;
+}(Input));
+
+var Text = (function (Item$$1) {
+	function Text ( options ) {
+		Item$$1.call( this, options );
+		this.type = TEXT;
+	}
+
+	if ( Item$$1 ) Text.__proto__ = Item$$1;
+	Text.prototype = Object.create( Item$$1 && Item$$1.prototype );
+	Text.prototype.constructor = Text;
+
+	Text.prototype.detach = function detach () {
+		return detachNode( this.node );
+	};
+
+	Text.prototype.firstNode = function firstNode () {
+		return this.node;
+	};
+
+	Text.prototype.render = function render ( target, occupants ) {
+		if ( inAttributes() ) { return; }
+		this.rendered = true;
+
+		progressiveText( this, target, occupants, this.template );
+	};
+
+	Text.prototype.toString = function toString ( escape ) {
+		return escape ? escapeHtml( this.template ) : this.template;
+	};
+
+	Text.prototype.unrender = function unrender ( shouldDestroy ) {
+		if ( this.rendered && shouldDestroy ) { this.detach(); }
+		this.rendered = false;
+	};
+
+	Text.prototype.valueOf = function valueOf () {
+		return this.template;
+	};
+
+	return Text;
+}(Item));
+
+var proto$4 = Text.prototype;
+proto$4.bind = proto$4.unbind = proto$4.update = noop;
+
+var prefix;
+
+if ( !isClient ) {
+	prefix = null;
+} else {
+	var prefixCache = {};
+	var testStyle = createElement( 'div' ).style;
+
+	// technically this also normalizes on hyphenated styles as well
+	prefix = function ( prop ) {
+		if ( !prefixCache[ prop ] ) {
+			var name = hyphenateCamel( prop );
+
+			if ( testStyle[ prop ] !== undefined ) {
+				prefixCache[ prop ] = name;
+			}
+
+			else {
+				// test vendors...
+				var i = vendors.length;
+				while ( i-- ) {
+					var vendor = "-" + (vendors[i]) + "-" + name;
+					if ( testStyle[ vendor ] !== undefined ) {
+						prefixCache[ prop ] = vendor;
+						break;
+					}
+				}
+			}
+		}
+
+		return prefixCache[ prop ];
+	};
+}
+
+var prefix$1 = prefix;
+
+var visible;
+var hidden = 'hidden';
+
+if ( doc ) {
+	var prefix$2;
+
+	if ( hidden in doc ) {
+		prefix$2 = '';
+	} else {
+		var i$1 = vendors.length;
+		while ( i$1-- ) {
+			var vendor = vendors[i$1];
+			hidden = vendor + 'Hidden';
+
+			if ( hidden in doc ) {
+				prefix$2 = vendor;
+				break;
+			}
+		}
+	}
+
+	if ( prefix$2 !== undefined ) {
+		doc.addEventListener( prefix$2 + 'visibilitychange', onChange );
+		onChange();
+	} else {
+		// gah, we're in an old browser
+		if ( 'onfocusout' in doc ) {
+			doc.addEventListener( 'focusout', onHide );
+			doc.addEventListener( 'focusin', onShow );
+		}
+
+		else {
+			win.addEventListener( 'pagehide', onHide );
+			win.addEventListener( 'blur', onHide );
+
+			win.addEventListener( 'pageshow', onShow );
+			win.addEventListener( 'focus', onShow );
+		}
+
+		visible = true; // until proven otherwise. Not ideal but hey
+	}
+}
+
+function onChange () {
+	visible = !doc[ hidden ];
+}
+
+function onHide () {
+	visible = false;
+}
+
+function onShow () {
+	visible = true;
+}
+
+var vendorPattern = new RegExp( '^(?:' + vendors.join( '|' ) + ')([A-Z])' );
+
+var hyphenate = function ( str ) {
+	if ( !str ) { return ''; } // edge case
+
+	if ( vendorPattern.test( str ) ) { str = '-' + str; }
+
+	return str.replace( /[A-Z]/g, function (match) { return '-' + match.toLowerCase(); } );
+};
+
+var createTransitions;
+
+if ( !isClient ) {
+	createTransitions = null;
+} else {
+	var testStyle$1 = createElement( 'div' ).style;
+	var linear$1 = function (x) { return x; };
+
+	var canUseCssTransitions = {};
+	var cannotUseCssTransitions = {};
+
+	// determine some facts about our environment
+	var TRANSITION$1;
+	var TRANSITIONEND;
+	var CSS_TRANSITIONS_ENABLED;
+	var TRANSITION_DURATION;
+	var TRANSITION_PROPERTY;
+	var TRANSITION_TIMING_FUNCTION;
+
+	if ( testStyle$1.transition !== undefined ) {
+		TRANSITION$1 = 'transition';
+		TRANSITIONEND = 'transitionend';
+		CSS_TRANSITIONS_ENABLED = true;
+	} else if ( testStyle$1.webkitTransition !== undefined ) {
+		TRANSITION$1 = 'webkitTransition';
+		TRANSITIONEND = 'webkitTransitionEnd';
+		CSS_TRANSITIONS_ENABLED = true;
+	} else {
+		CSS_TRANSITIONS_ENABLED = false;
+	}
+
+	if ( TRANSITION$1 ) {
+		TRANSITION_DURATION = TRANSITION$1 + 'Duration';
+		TRANSITION_PROPERTY = TRANSITION$1 + 'Property';
+		TRANSITION_TIMING_FUNCTION = TRANSITION$1 + 'TimingFunction';
+	}
+
+	createTransitions = function ( t, to, options, changedProperties, resolve ) {
+
+		// Wait a beat (otherwise the target styles will be applied immediately)
+		// TODO use a fastdom-style mechanism?
+		setTimeout( function () {
+			var jsTransitionsComplete;
+			var cssTransitionsComplete;
+			var cssTimeout; // eslint-disable-line prefer-const
+
+			function transitionDone () { clearTimeout( cssTimeout ); }
+
+			function checkComplete () {
+				if ( jsTransitionsComplete && cssTransitionsComplete ) {
+					t.unregisterCompleteHandler( transitionDone );
+					// will changes to events and fire have an unexpected consequence here?
+					t.ractive.fire( t.name + ':end', t.node, t.isIntro );
+					resolve();
+				}
+			}
+
+			// this is used to keep track of which elements can use CSS to animate
+			// which properties
+			var hashPrefix = ( t.node.namespaceURI || '' ) + t.node.tagName;
+
+			// need to reset transition properties
+			var style = t.node.style;
+			var previous = {
+				property: style[ TRANSITION_PROPERTY ],
+				timing: style[ TRANSITION_TIMING_FUNCTION ],
+				duration: style[ TRANSITION_DURATION ]
+			};
+
+			function transitionEndHandler ( event ) {
+				var index = changedProperties.indexOf( event.propertyName );
+
+				if ( index !== -1 ) {
+					changedProperties.splice( index, 1 );
+				}
+
+				if ( changedProperties.length ) {
+					// still transitioning...
+					return;
+				}
+
+				clearTimeout( cssTimeout );
+				cssTransitionsDone();
+			}
+
+			function cssTransitionsDone () {
+				style[ TRANSITION_PROPERTY ] = previous.property;
+				style[ TRANSITION_TIMING_FUNCTION ] = previous.duration;
+				style[ TRANSITION_DURATION ] = previous.timing;
+
+				t.node.removeEventListener( TRANSITIONEND, transitionEndHandler, false );
+
+				cssTransitionsComplete = true;
+				checkComplete();
+			}
+
+			t.node.addEventListener( TRANSITIONEND, transitionEndHandler, false );
+
+			// safety net in case transitionend never fires
+			cssTimeout = setTimeout( function () {
+				changedProperties = [];
+				cssTransitionsDone();
+			}, options.duration + ( options.delay || 0 ) + 50 );
+			t.registerCompleteHandler( transitionDone );
+
+			style[ TRANSITION_PROPERTY ] = changedProperties.join( ',' );
+			var easingName = hyphenate( options.easing || 'linear' );
+			style[ TRANSITION_TIMING_FUNCTION ] = easingName;
+			var cssTiming = style[ TRANSITION_TIMING_FUNCTION ] === easingName;
+			style[ TRANSITION_DURATION ] = ( options.duration / 1000 ) + 's';
+
+			setTimeout( function () {
+				var i = changedProperties.length;
+				var hash;
+				var originalValue = null;
+				var index;
+				var propertiesToTransitionInJs = [];
+				var prop;
+				var suffix;
+				var interpolator;
+
+				while ( i-- ) {
+					prop = changedProperties[i];
+					hash = hashPrefix + prop;
+
+					if ( cssTiming && CSS_TRANSITIONS_ENABLED && !cannotUseCssTransitions[ hash ] ) {
+						var initial = style[ prop ];
+						style[ prop ] = to[ prop ];
+
+						// If we're not sure if CSS transitions are supported for
+						// this tag/property combo, find out now
+						if ( !( hash in canUseCssTransitions ) ) {
+							originalValue = t.getStyle( prop );
+
+							// if this property is transitionable in this browser,
+							// the current style will be different from the target style
+							canUseCssTransitions[ hash ] = ( t.getStyle( prop ) != to[ prop ] );
+							cannotUseCssTransitions[ hash ] = !canUseCssTransitions[ hash ];
+
+							// Reset, if we're going to use timers after all
+							if ( cannotUseCssTransitions[ hash ] ) {
+								style[ prop ] = initial;
+							}
+						}
+					}
+
+					if ( !cssTiming || !CSS_TRANSITIONS_ENABLED || cannotUseCssTransitions[ hash ] ) {
+						// we need to fall back to timer-based stuff
+						if ( originalValue === null ) { originalValue = t.getStyle( prop ); }
+
+						// need to remove this from changedProperties, otherwise transitionEndHandler
+						// will get confused
+						index = changedProperties.indexOf( prop );
+						if ( index === -1 ) {
+							warnIfDebug( 'Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!', { node: t.node });
+						} else {
+							changedProperties.splice( index, 1 );
+						}
+
+						// TODO Determine whether this property is animatable at all
+
+						suffix = /[^\d]*$/.exec( originalValue )[0];
+						interpolator = interpolate( parseFloat( originalValue ), parseFloat( to[ prop ] ) );
+
+						// ...then kick off a timer-based transition
+						if ( interpolator ) {
+							propertiesToTransitionInJs.push({
+								name: prop,
+								interpolator: interpolator,
+								suffix: suffix
+							});
+						} else {
+							style[ prop ] = to[ prop ];
+						}
+
+						originalValue = null;
+					}
+				}
+
+				// javascript transitions
+				if ( propertiesToTransitionInJs.length ) {
+					var easing;
+
+					if ( typeof options.easing === 'string' ) {
+						easing = t.ractive.easing[ options.easing ];
+
+						if ( !easing ) {
+							warnOnceIfDebug( missingPlugin( options.easing, 'easing' ) );
+							easing = linear$1;
+						}
+					} else if ( typeof options.easing === 'function' ) {
+						easing = options.easing;
+					} else {
+						easing = linear$1;
+					}
+
+					new Ticker({
+						duration: options.duration,
+						easing: easing,
+						step: function step ( pos ) {
+							var i = propertiesToTransitionInJs.length;
+							while ( i-- ) {
+								var prop = propertiesToTransitionInJs[i];
+								style[ prop.name ] = prop.interpolator( pos ) + prop.suffix;
+							}
+						},
+						complete: function complete () {
+							jsTransitionsComplete = true;
+							checkComplete();
+						}
+					});
+				} else {
+					jsTransitionsComplete = true;
+				}
+
+				if ( changedProperties.length ) {
+					style[ TRANSITION_PROPERTY ] = changedProperties.join( ',' );
+				} else {
+					style[ TRANSITION_PROPERTY ] = 'none';
+
+					// We need to cancel the transitionEndHandler, and deal with
+					// the fact that it will never fire
+					t.node.removeEventListener( TRANSITIONEND, transitionEndHandler, false );
+					cssTransitionsComplete = true;
+					checkComplete();
+				}
+			}, 0 );
+		}, options.delay || 0 );
+	};
+}
+
+var createTransitions$1 = createTransitions;
+
+var getComputedStyle = win && win.getComputedStyle;
+var resolved = Promise.resolve();
+
+var names = {
+	t0: 'intro-outro',
+	t1: 'intro',
+	t2: 'outro'
+};
+
+var Transition = function Transition ( options ) {
+	this.owner = options.owner || options.parentFragment.owner || findElement( options.parentFragment );
+	this.element = this.owner.attributeByName ? this.owner : findElement( options.parentFragment );
+	this.ractive = this.owner.ractive;
+	this.template = options.template;
+	this.parentFragment = options.parentFragment;
+	this.options = options;
+	this.onComplete = [];
+};
+
+Transition.prototype.animateStyle = function animateStyle ( style, value, options ) {
+		var this$1 = this;
+
+	if ( arguments.length === 4 ) {
+		throw new Error( 't.animateStyle() returns a promise - use .then() instead of passing a callback' );
+	}
+
+	// Special case - page isn't visible. Don't animate anything, because
+	// that way you'll never get CSS transitionend events
+	if ( !visible ) {
+		this.setStyle( style, value );
+		return resolved;
+	}
+
+	var to;
+
+	if ( typeof style === 'string' ) {
+		to = {};
+		to[ style ] = value;
+	} else {
+		to = style;
+
+		// shuffle arguments
+		options = value;
+	}
+
+	return new Promise( function (fulfil) {
+		// Edge case - if duration is zero, set style synchronously and complete
+		if ( !options.duration ) {
+			this$1.setStyle( to );
+			fulfil();
+			return;
+		}
+
+		// Get a list of the properties we're animating
+		var propertyNames = Object.keys( to );
+		var changedProperties = [];
+
+		// Store the current styles
+		var computedStyle = getComputedStyle( this$1.node );
+
+		var i = propertyNames.length;
+		while ( i-- ) {
+			var prop = propertyNames[i];
+			var name = prefix$1( prop );
+
+			var current = computedStyle[ prefix$1( prop ) ];
+
+			// record the starting points
+			var init = this$1.node.style[name];
+			if ( !( name in this$1.originals ) ) { this$1.originals[ name ] = this$1.node.style[ name ]; }
+			this$1.node.style[ name ] = to[ prop ];
+			this$1.targets[ name ] = this$1.node.style[ name ];
+			this$1.node.style[ name ] = init;
+
+			// we need to know if we're actually changing anything
+			if ( current != to[ prop ] ) { // use != instead of !==, so we can compare strings with numbers
+				changedProperties.push( name );
+
+				// if we happened to prefix, make sure there is a properly prefixed value
+				to[ name ] = to[ prop ];
+
+				// make the computed style explicit, so we can animate where
+				// e.g. height='auto'
+				this$1.node.style[ name ] = current;
+			}
+		}
+
+		// If we're not actually changing anything, the transitionend event
+		// will never fire! So we complete early
+		if ( !changedProperties.length ) {
+			fulfil();
+			return;
+		}
+
+		createTransitions$1( this$1, to, options, changedProperties, fulfil );
+	});
+};
+
+Transition.prototype.bind = function bind () {
+	var options = this.options;
+	var type = options.template && options.template.v;
+	if ( type ) {
+		if ( type === 't0' || type === 't1' ) { this.element.intro = this; }
+		if ( type === 't0' || type === 't2' ) { this.element.outro = this; }
+		this.eventName = names[ type ];
+	}
+
+	var ractive = this.owner.ractive;
+
+	this.name = options.name || options.template.n;
+
+	if ( options.params ) {
+		this.params = options.params;
+	}
+
+	if ( typeof this.name === 'function' ) {
+		this._fn = this.name;
+		this.name = this._fn.name;
+	} else {
+		this._fn = findInViewHierarchy( 'transitions', ractive, this.name );
+	}
+
+	if ( !this._fn ) {
+		warnOnceIfDebug( missingPlugin( this.name, 'transition' ), { ractive: ractive });
+	}
+
+	setupArgsFn( this, options.template );
+};
+
+Transition.prototype.getParams = function getParams () {
+	if ( this.params ) { return this.params; }
+
+	// get expression args if supplied
+	if ( this.fn ) {
+		var values = resolveArgs( this, this.template, this.parentFragment ).map( function (model) {
+			if ( !model ) { return undefined; }
+
+			return model.get();
+		});
+		return this.fn.apply( this.ractive, values );
+	}
+};
+
+Transition.prototype.getStyle = function getStyle ( props ) {
+	var computedStyle = getComputedStyle( this.node );
+
+	if ( typeof props === 'string' ) {
+		return computedStyle[ prefix$1( props ) ];
+	}
+
+	if ( !Array.isArray( props ) ) {
+		throw new Error( 'Transition$getStyle must be passed a string, or an array of strings representing CSS properties' );
+	}
+
+	var styles = {};
+
+	var i = props.length;
+	while ( i-- ) {
+		var prop = props[i];
+		var value = computedStyle[ prefix$1( prop ) ];
+
+		if ( value === '0px' ) { value = 0; }
+		styles[ prop ] = value;
+	}
+
+	return styles;
+};
+
+Transition.prototype.processParams = function processParams ( params, defaults ) {
+	if ( typeof params === 'number' ) {
+		params = { duration: params };
+	}
+
+	else if ( typeof params === 'string' ) {
+		if ( params === 'slow' ) {
+			params = { duration: 600 };
+		} else if ( params === 'fast' ) {
+			params = { duration: 200 };
+		} else {
+			params = { duration: 400 };
+		}
+	} else if ( !params ) {
+		params = {};
+	}
+
+	return Object.assign( {}, defaults, params );
+};
+
+Transition.prototype.registerCompleteHandler = function registerCompleteHandler ( fn ) {
+	addToArray( this.onComplete, fn );
+};
+
+Transition.prototype.setStyle = function setStyle ( style, value ) {
+		var this$1 = this;
+
+	if ( typeof style === 'string' ) {
+		var name = prefix$1(  style );
+		if ( !this.originals.hasOwnProperty( name ) ) { this.originals[ name ] = this.node.style[ name ]; }
+		this.node.style[ name ] = value;
+		this.targets[ name ] = this.node.style[ name ];
+	}
+
+	else {
+		var prop;
+		for ( prop in style ) {
+			if ( style.hasOwnProperty( prop ) ) {
+				this$1.setStyle( prop, style[ prop ] );
+			}
+		}
+	}
+
+	return this;
+};
+
+Transition.prototype.shouldFire = function shouldFire ( type ) {
+	if ( !this.ractive.transitionsEnabled ) { return false; }
+
+	// check for noIntro and noOutro cases, which only apply when the owner ractive is rendering and unrendering, respectively
+	if ( type === 'intro' && this.ractive.rendering && nearestProp( 'noIntro', this.ractive, true ) ) { return false; }
+	if ( type === 'outro' && this.ractive.unrendering && nearestProp( 'noOutro', this.ractive, false ) ) { return false; }
+
+	var params = this.getParams(); // this is an array, the params object should be the first member
+	// if there's not a parent element, this can't be nested, so roll on
+	if ( !this.element.parent ) { return true; }
+
+	// if there is a local param, it takes precedent
+	if ( params && params[0] && isObject(params[0]) && 'nested' in params[0] ) {
+		if ( params[0].nested !== false ) { return true; }
+	} else { // use the nearest instance setting
+		// find the nearest instance that actually has a nested setting
+		if ( nearestProp( 'nestedTransitions', this.ractive ) !== false ) { return true; }
+	}
+
+	// check to see if this is actually a nested transition
+	var el = this.element.parent;
+	while ( el ) {
+		if ( el[type] && el[type].starting ) { return false; }
+		el = el.parent;
+	}
+
+	return true;
+};
+
+Transition.prototype.start = function start () {
+		var this$1 = this;
+
+	var node = this.node = this.element.node;
+	var originals = this.originals = {};  //= node.getAttribute( 'style' );
+	var targets = this.targets = {};
+
+	var completed;
+	var args = this.getParams();
+
+	// create t.complete() - we don't want this on the prototype,
+	// because we don't want `this` silliness when passing it as
+	// an argument
+	this.complete = function (noReset) {
+		this$1.starting = false;
+		if ( completed ) {
+			return;
+		}
+
+		this$1.onComplete.forEach( function (fn) { return fn(); } );
+		if ( !noReset && this$1.isIntro ) {
+			for ( var k in targets ) {
+				if ( node.style[ k ] === targets[ k ] ) { node.style[ k ] = originals[ k ]; }
+			}
+		}
+
+		this$1._manager.remove( this$1 );
+
+		completed = true;
+	};
+
+	// If the transition function doesn't exist, abort
+	if ( !this._fn ) {
+		this.complete();
+		return;
+	}
+
+	var promise = this._fn.apply( this.ractive, [ this ].concat( args ) );
+	if ( promise ) { promise.then( this.complete ); }
+};
+
+Transition.prototype.toString = function toString () { return ''; };
+
+Transition.prototype.unbind = function unbind () {
+	if ( !this.element.attributes.unbinding ) {
+		var type = this.options && this.options.template && this.options.template.v;
+		if ( type === 't0' || type === 't1' ) { this.element.intro = null; }
+		if ( type === 't0' || type === 't2' ) { this.element.outro = null; }
+	}
+};
+
+Transition.prototype.unregisterCompleteHandler = function unregisterCompleteHandler ( fn ) {
+	removeFromArray( this.onComplete, fn );
+};
+
+var proto$5 = Transition.prototype;
+proto$5.destroyed = proto$5.render = proto$5.unrender = proto$5.update = noop;
+
+function nearestProp ( prop, ractive, rendering ) {
+	var instance = ractive;
+	while ( instance ) {
+		if ( instance.hasOwnProperty( prop ) && ( rendering === undefined || rendering ? instance.rendering : instance.unrendering ) ) { return instance[ prop ]; }
+		instance = instance.component && instance.component.ractive;
+	}
+
+	return ractive[ prop ];
+}
+
+var elementCache = {};
+
+var ieBug;
+var ieBlacklist;
+
+try {
+	createElement( 'table' ).innerHTML = 'foo';
+} catch ( err ) {
+	ieBug = true;
+
+	ieBlacklist = {
+		TABLE:  [ '<table class="x">', '</table>' ],
+		THEAD:  [ '<table><thead class="x">', '</thead></table>' ],
+		TBODY:  [ '<table><tbody class="x">', '</tbody></table>' ],
+		TR:     [ '<table><tr class="x">', '</tr></table>' ],
+		SELECT: [ '<select class="x">', '</select>' ]
+	};
+}
+
+var insertHtml = function ( html$$1, node ) {
+	var nodes = [];
+
+	// render 0 and false
+	if ( html$$1 == null || html$$1 === '' ) { return nodes; }
+
+	var container;
+	var wrapper;
+	var selectedOption;
+
+	if ( ieBug && ( wrapper = ieBlacklist[ node.tagName ] ) ) {
+		container = element( 'DIV' );
+		container.innerHTML = wrapper[0] + html$$1 + wrapper[1];
+		container = container.querySelector( '.x' );
+
+		if ( container.tagName === 'SELECT' ) {
+			selectedOption = container.options[ container.selectedIndex ];
+		}
+	}
+
+	else if ( node.namespaceURI === svg$1 ) {
+		container = element( 'DIV' );
+		container.innerHTML = '<svg class="x">' + html$$1 + '</svg>';
+		container = container.querySelector( '.x' );
+	}
+
+	else if ( node.tagName === 'TEXTAREA' ) {
+		container = createElement( 'div' );
+
+		if ( typeof container.textContent !== 'undefined' ) {
+			container.textContent = html$$1;
+		} else {
+			container.innerHTML = html$$1;
+		}
+	}
+
+	else {
+		container = element( node.tagName );
+		container.innerHTML = html$$1;
+
+		if ( container.tagName === 'SELECT' ) {
+			selectedOption = container.options[ container.selectedIndex ];
+		}
+	}
+
+	var child;
+	while ( child = container.firstChild ) {
+		nodes.push( child );
+		container.removeChild( child );
+	}
+
+	// This is really annoying. Extracting <option> nodes from the
+	// temporary container <select> causes the remaining ones to
+	// become selected. So now we have to deselect them. IE8, you
+	// amaze me. You really do
+	// ...and now Chrome too
+	var i;
+	if ( node.tagName === 'SELECT' ) {
+		i = nodes.length;
+		while ( i-- ) {
+			if ( nodes[i] !== selectedOption ) {
+				nodes[i].selected = false;
+			}
+		}
+	}
+
+	return nodes;
+};
+
+function element ( tagName ) {
+	return elementCache[ tagName ] || ( elementCache[ tagName ] = createElement( tagName ) );
+}
+
+var Triple = (function (Mustache$$1) {
+	function Triple ( options ) {
+		Mustache$$1.call( this, options );
+	}
+
+	if ( Mustache$$1 ) Triple.__proto__ = Mustache$$1;
+	Triple.prototype = Object.create( Mustache$$1 && Mustache$$1.prototype );
+	Triple.prototype.constructor = Triple;
+
+	Triple.prototype.detach = function detach () {
+		var docFrag = createDocumentFragment();
+		if ( this.nodes ) { this.nodes.forEach( function (node) { return docFrag.appendChild( node ); } ); }
+		return docFrag;
+	};
+
+	Triple.prototype.find = function find ( selector ) {
+		var this$1 = this;
+
+		var len = this.nodes.length;
+		var i;
+
+		for ( i = 0; i < len; i += 1 ) {
+			var node = this$1.nodes[i];
+
+			if ( node.nodeType !== 1 ) { continue; }
+
+			if ( matches( node, selector ) ) { return node; }
+
+			var queryResult = node.querySelector( selector );
+			if ( queryResult ) { return queryResult; }
+		}
+
+		return null;
+	};
+
+	Triple.prototype.findAll = function findAll ( selector, options ) {
+		var this$1 = this;
+
+		var result = options.result;
+		var len = this.nodes.length;
+		var i;
+
+		for ( i = 0; i < len; i += 1 ) {
+			var node = this$1.nodes[i];
+
+			if ( node.nodeType !== 1 ) { continue; }
+
+			if ( matches( node, selector ) ) { result.push( node ); }
+
+			var queryAllResult = node.querySelectorAll( selector );
+			if ( queryAllResult ) {
+				result.push.apply( result, queryAllResult );
+			}
+		}
+	};
+
+	Triple.prototype.findComponent = function findComponent () {
+		return null;
+	};
+
+	Triple.prototype.firstNode = function firstNode () {
+		return this.rendered && this.nodes[0];
+	};
+
+	Triple.prototype.render = function render ( target, occupants ) {
+		var this$1 = this;
+
+		var parentNode = this.parentFragment.findParentNode();
+
+		if ( !this.nodes ) {
+			var html = this.model ? this.model.get() : '';
+			this.nodes = insertHtml( html, this.parentFragment.findParentNode(), target );
+		}
+
+		var nodes = this.nodes;
+		var anchor = this.parentFragment.findNextNode( this );
+
+		// progressive enhancement
+		if ( occupants ) {
+			var i = -1;
+			var next;
+
+			// start with the first node that should be rendered
+			while ( occupants.length && ( next = this.nodes[ i + 1 ] ) ) {
+				var n = (void 0);
+				// look through the occupants until a matching node is found
+				while ( n = occupants.shift() ) {
+					var t = n.nodeType;
+
+					if ( t === next.nodeType && ( ( t === 1 && n.outerHTML === next.outerHTML ) || ( ( t === 3 || t === 8 ) && n.nodeValue === next.nodeValue ) ) ) {
+						this$1.nodes.splice( ++i, 1, n ); // replace the generated node with the existing one
+						break;
+					} else {
+						target.removeChild( n ); // remove the non-matching existing node
+					}
+				}
+			}
+
+			if ( i >= 0 ) {
+				// update the list of remaining nodes to attach, excluding any that were replaced by existing nodes
+				nodes = this.nodes.slice( i );
+			}
+
+			// update the anchor to be the next occupant
+			if ( occupants.length ) { anchor = occupants[0]; }
+		}
+
+		// attach any remainging nodes to the parent
+		if ( nodes.length ) {
+			var frag = createDocumentFragment();
+			nodes.forEach( function (n) { return frag.appendChild( n ); } );
+
+			if ( anchor ) {
+				anchor.parentNode.insertBefore( frag, anchor );
+			} else {
+				parentNode.appendChild( frag );
+			}
+		}
+
+		this.rendered = true;
+	};
+
+	Triple.prototype.toString = function toString () {
+		var value = this.model && this.model.get();
+		value = value != null ? '' + value : '';
+
+		return inAttribute() ? decodeCharacterReferences( value ) : value;
+	};
+
+	Triple.prototype.unrender = function unrender () {
+		if ( this.nodes ) { this.nodes.forEach( function (node) {
+			// defer detachment until all relevant outros are done
+			runloop.detachWhenReady( { node: node, detach: function detach() { detachNode( node ); } } );
+		}); }
+		this.rendered = false;
+		this.nodes = null;
+	};
+
+	Triple.prototype.update = function update () {
+		if ( this.rendered && this.dirty ) {
+			this.dirty = false;
+
+			this.unrender();
+			this.render();
+		} else {
+			// make sure to reset the dirty flag even if not rendered
+			this.dirty = false;
+		}
+	};
+
+	return Triple;
+}(Mustache));
+
+// finds the component constructor in the registry or view hierarchy registries
+function getComponentConstructor ( ractive, name ) {
+	var instance = findInstance( 'components', ractive, name );
+	var Component;
+
+	if ( instance ) {
+		Component = instance.components[ name ];
+
+		// best test we have for not Ractive.extend
+		if ( Component && !Component.Parent ) {
+			// function option, execute and store for reset
+			var fn = Component.bind( instance );
+			fn.isOwner = instance.components.hasOwnProperty( name );
+			Component = fn();
+
+			if ( !Component ) {
+				warnIfDebug( noRegistryFunctionReturn, name, 'component', 'component', { ractive: ractive });
+				return;
+			}
+
+			if ( typeof Component === 'string' ) {
+				// allow string lookup
+				Component = getComponentConstructor( ractive, Component );
+			}
+
+			Component._fn = fn;
+			instance.components[ name ] = Component;
+		}
+	}
+
+	return Component;
+}
+
+//import Yielder from './Yielder';
+var constructors = {};
+constructors[ ALIAS ] = Alias;
+constructors[ ANCHOR ] = Component;
+constructors[ DOCTYPE ] = Doctype;
+constructors[ INTERPOLATOR ] = Interpolator;
+constructors[ PARTIAL ] = Partial;
+constructors[ SECTION ] = Section;
+constructors[ TRIPLE ] = Triple;
+constructors[ YIELDER ] = Partial;
+
+constructors[ ATTRIBUTE ] = Attribute;
+constructors[ BINDING_FLAG ] = BindingFlag;
+constructors[ DECORATOR ] = Decorator;
+constructors[ EVENT ] = EventDirective;
+constructors[ TRANSITION ] = Transition;
+
+var specialElements = {
+	doctype: Doctype,
+	form: Form,
+	input: Input,
+	option: Option,
+	select: Select,
+	textarea: Textarea
+};
+
+function createItem ( options ) {
+	if ( typeof options.template === 'string' ) {
+		return new Text( options );
+	}
+
+	if ( options.template.t === ELEMENT ) {
+		// could be component or element
+		var ComponentConstructor = getComponentConstructor( options.parentFragment.ractive, options.template.e );
+		if ( ComponentConstructor ) {
+			return new Component( options, ComponentConstructor );
+		}
+
+		var tagName = options.template.e.toLowerCase();
+
+		var ElementConstructor = specialElements[ tagName ] || Element;
+		return new ElementConstructor( options );
+	}
+
+	var Item;
+
+	// component mappings are a special case of attribute
+	if ( options.template.t === ATTRIBUTE ) {
+		var el = options.owner;
+		if ( !el || ( el.type !== ANCHOR && el.type !== COMPONENT && el.type !== ELEMENT ) ) {
+			el = findElement( options.parentFragment );
+		}
+		options.element = el;
+
+		Item = el.type === COMPONENT || el.type === ANCHOR ? Mapping : Attribute;
+	} else {
+		Item = constructors[ options.template.t ];
+	}
+
+	if ( !Item ) { throw new Error( ("Unrecognised item type " + (options.template.t)) ); }
+
+	return new Item( options );
+}
+
+// TODO all this code needs to die
+function processItems ( items, values, guid, counter ) {
+	if ( counter === void 0 ) counter = 0;
+
+	return items.map( function (item) {
+		if ( item.type === TEXT ) {
+			return item.template;
+		}
+
+		if ( item.fragment ) {
+			if ( item.fragment.iterations ) {
+				return item.fragment.iterations.map( function (fragment) {
+					return processItems( fragment.items, values, guid, counter );
+				}).join( '' );
+			} else {
+				return processItems( item.fragment.items, values, guid, counter );
+			}
+		}
+
+		var placeholderId = guid + "-" + (counter++);
+		var model = item.model || item.newModel;
+
+		values[ placeholderId ] = model ?
+			model.wrapper ?
+				model.wrapperValue :
+				model.get() :
+			undefined;
+
+		return '${' + placeholderId + '}';
+	}).join( '' );
+}
+
+function unrenderAndDestroy$1 ( item ) {
+	item.unrender( true );
+}
+
+var Fragment = function Fragment ( options ) {
+	this.owner = options.owner; // The item that owns this fragment - an element, section, partial, or attribute
+
+	this.isRoot = !options.owner.parentFragment;
+	this.parent = this.isRoot ? null : this.owner.parentFragment;
+	this.ractive = options.ractive || ( this.isRoot ? options.owner : this.parent.ractive );
+
+	this.componentParent = ( this.isRoot && this.ractive.component ) ? this.ractive.component.parentFragment : null;
+	this.delegate = ( this.parent ? this.parent.delegate : ( this.componentParent && this.componentParent.delegate ) ) ||
+		( this.owner.containerFragment && this.owner.containerFragment.delegate );
+
+	this.context = null;
+	this.rendered = false;
+
+	// encapsulated styles should be inherited until they get applied by an element
+	this.cssIds = 'cssIds' in options ? options.cssIds : ( this.parent ? this.parent.cssIds : null );
+
+	this.dirty = false;
+	this.dirtyValue = true; // used for attribute values
+
+	this.template = options.template || [];
+	this.createItems();
+};
+
+Fragment.prototype.bind = function bind$1 ( context ) {
+	this.context = context;
+	this.items.forEach( bind );
+	this.bound = true;
+
+	// in rare cases, a forced resolution (or similar) will cause the
+	// fragment to be dirty before it's even finished binding. In those
+	// cases we update immediately
+	if ( this.dirty ) { this.update(); }
+
+	return this;
+};
+
+Fragment.prototype.bubble = function bubble () {
+	this.dirtyValue = true;
+
+	if ( !this.dirty ) {
+		this.dirty = true;
+
+		if ( this.isRoot ) { // TODO encapsulate 'is component root, but not overall root' check?
+			if ( this.ractive.component ) {
+				this.ractive.component.bubble();
+			} else if ( this.bound ) {
+				runloop.addFragment( this );
+			}
+		} else {
+			this.owner.bubble( this.index );
+		}
+	}
+};
+
+Fragment.prototype.createItems = function createItems () {
+		var this$1 = this;
+
+	// this is a hot code path
+	var max = this.template.length;
+	this.items = [];
+	for ( var i = 0; i < max; i++ ) {
+		this$1.items[i] = createItem({ parentFragment: this$1, template: this$1.template[i], index: i });
+	}
+};
+
+Fragment.prototype.destroyed = function destroyed$1 () {
+	this.items.forEach( destroyed );
+};
+
+Fragment.prototype.detach = function detach () {
+	var docFrag = createDocumentFragment();
+	var xs = this.items;
+	var len = xs.length;
+	for ( var i = 0; i < len; i++ ) {
+		docFrag.appendChild( xs[i].detach() );
+	}
+	return docFrag;
+};
+
+Fragment.prototype.find = function find ( selector, options ) {
+	return findMap( this.items, function (i) { return i.find( selector, options ); } );
+};
+
+Fragment.prototype.findAll = function findAll ( selector, options ) {
+	if ( this.items ) {
+		this.items.forEach( function (i) { return i.findAll && i.findAll( selector, options ); } );
+	}
+};
+
+Fragment.prototype.findComponent = function findComponent ( name, options ) {
+	return findMap( this.items, function (i) { return i.findComponent( name, options ); } );
+};
+
+Fragment.prototype.findAllComponents = function findAllComponents ( name, options ) {
+	if ( this.items ) {
+		this.items.forEach( function (i) { return i.findAllComponents && i.findAllComponents( name, options ); } );
+	}
+};
+
+Fragment.prototype.findContext = function findContext () {
+	var fragment = this;
+	while ( fragment && !fragment.context ) { fragment = fragment.parent; }
+	if ( !fragment ) { return this.ractive.viewmodel; }
+	else { return fragment.context; }
+};
+
+Fragment.prototype.findNextNode = function findNextNode ( item ) {
+		var this$1 = this;
+
+	// search for the next node going forward
+	if ( item ) {
+		for ( var i = item.index + 1; i < this.items.length; i++ ) {
+			if ( !this$1.items[ i ] ) { continue; }
+
+			var node = this$1.items[ i ].firstNode( true );
+			if ( node ) { return node; }
+		}
+	}
+
+	// if this is the root fragment, and there are no more items,
+	// it means we're at the end...
+	if ( this.isRoot ) {
+		if ( this.ractive.component ) {
+			return this.ractive.component.parentFragment.findNextNode( this.ractive.component );
+		}
+
+		// TODO possible edge case with other content
+		// appended to this.ractive.el?
+		return null;
+	}
+
+	if ( this.parent ) { return this.owner.findNextNode( this ); } // the argument is in case the parent is a RepeatedFragment
+};
+
+Fragment.prototype.findParentNode = function findParentNode () {
+	var fragment = this;
+
+	do {
+		if ( fragment.owner.type === ELEMENT ) {
+			return fragment.owner.node;
+		}
+
+		if ( fragment.isRoot && !fragment.ractive.component ) { // TODO encapsulate check
+			return fragment.ractive.el;
+		}
+
+		if ( fragment.owner.type === YIELDER ) {
+			fragment = fragment.owner.containerFragment;
+		} else {
+			fragment = fragment.componentParent || fragment.parent; // TODO ugh
+		}
+	} while ( fragment );
+
+	throw new Error( 'Could not find parent node' ); // TODO link to issue tracker
+};
+
+Fragment.prototype.findRepeatingFragment = function findRepeatingFragment () {
+	var fragment = this;
+	// TODO better check than fragment.parent.iterations
+	while ( ( fragment.parent || fragment.componentParent ) && !fragment.isIteration ) {
+		fragment = fragment.parent || fragment.componentParent;
+	}
+
+	return fragment;
+};
+
+Fragment.prototype.firstNode = function firstNode ( skipParent ) {
+	var node = findMap( this.items, function (i) { return i.firstNode( true ); } );
+	if ( node ) { return node; }
+	if ( skipParent ) { return null; }
+
+	return this.parent.findNextNode( this.owner );
+};
+
+Fragment.prototype.rebind = function rebind ( next ) {
+	this.context = next;
+};
+
+Fragment.prototype.render = function render$$1 ( target, occupants ) {
+	if ( this.rendered ) { throw new Error( 'Fragment is already rendered!' ); }
+	this.rendered = true;
+
+	var xs = this.items;
+	var len = xs.length;
+	for ( var i = 0; i < len; i++ ) {
+		xs[i].render( target, occupants );
+	}
+};
+
+Fragment.prototype.resetTemplate = function resetTemplate ( template ) {
+	var wasBound = this.bound;
+	var wasRendered = this.rendered;
+
+	// TODO ensure transitions are disabled globally during reset
+
+	if ( wasBound ) {
+		if ( wasRendered ) { this.unrender( true ); }
+		this.unbind();
+	}
+
+	this.template = template;
+	this.createItems();
+
+	if ( wasBound ) {
+		this.bind( this.context );
+
+		if ( wasRendered ) {
+			var parentNode = this.findParentNode();
+			var anchor = this.findNextNode();
+
+			if ( anchor ) {
+				var docFrag = createDocumentFragment();
+				this.render( docFrag );
+				parentNode.insertBefore( docFrag, anchor );
+			} else {
+				this.render( parentNode );
+			}
+		}
+	}
+};
+
+Fragment.prototype.shuffled = function shuffled$1 () {
+	this.items.forEach( shuffled );
+};
+
+Fragment.prototype.toString = function toString$1$$1 ( escape ) {
+	return this.items.map( escape ? toEscapedString : toString$1 ).join( '' );
+};
+
+Fragment.prototype.unbind = function unbind$1 () {
+	this.context = null;
+	this.items.forEach( unbind );
+	this.bound = false;
+
+	return this;
+};
+
+Fragment.prototype.unrender = function unrender$1 ( shouldDestroy ) {
+	this.items.forEach( shouldDestroy ? unrenderAndDestroy$1 : unrender );
+	this.rendered = false;
+};
+
+Fragment.prototype.update = function update$1 () {
+	if ( this.dirty ) {
+		if ( !this.updating ) {
+			this.dirty = false;
+			this.updating = true;
+			this.items.forEach( update );
+			this.updating = false;
+		} else if ( this.isRoot ) {
+			runloop.addFragmentToRoot( this );
+		}
+	}
+};
+
+Fragment.prototype.valueOf = function valueOf () {
+	if ( this.items.length === 1 ) {
+		return this.items[0].valueOf();
+	}
+
+	if ( this.dirtyValue ) {
+		var values = {};
+		var source = processItems( this.items, values, this.ractive._guid );
+		var parsed = parseJSON( source, values );
+
+		this.value = parsed ?
+			parsed.value :
+			this.toString();
+
+		this.dirtyValue = false;
+	}
+
+	return this.value;
+};
+
+Fragment.prototype.getContext = getContext;
+
+function getChildQueue ( queue, ractive ) {
+	return queue[ ractive._guid ] || ( queue[ ractive._guid ] = [] );
+}
+
+function fire ( hookQueue, ractive ) {
+	var childQueue = getChildQueue( hookQueue.queue, ractive );
+
+	hookQueue.hook.fire( ractive );
+
+	// queue is "live" because components can end up being
+	// added while hooks fire on parents that modify data values.
+	while ( childQueue.length ) {
+		fire( hookQueue, childQueue.shift() );
+	}
+
+	delete hookQueue.queue[ ractive._guid ];
+}
+
+var HookQueue = function HookQueue ( event ) {
+	this.hook = new Hook( event );
+	this.inProcess = {};
+	this.queue = {};
+};
+
+HookQueue.prototype.begin = function begin ( ractive ) {
+	this.inProcess[ ractive._guid ] = true;
+};
+
+HookQueue.prototype.end = function end ( ractive ) {
+	var parent = ractive.parent;
+
+	// If this is *isn't* a child of a component that's in process,
+	// it should call methods or fire at this point
+	if ( !parent || !this.inProcess[ parent._guid ] ) {
+		fire( this, ractive );
+	}
+	// elsewise, handoff to parent to fire when ready
+	else {
+		getChildQueue( this.queue, parent ).push( ractive );
+	}
+
+	delete this.inProcess[ ractive._guid ];
+};
+
+var configHook = new Hook( 'config' );
+var initHook = new HookQueue( 'init' );
+
+function initialise ( ractive, userOptions, options ) {
+	Object.keys( ractive.viewmodel.computations ).forEach( function (key) {
+		var computation = ractive.viewmodel.computations[ key ];
+
+		if ( ractive.viewmodel.value.hasOwnProperty( key ) ) {
+			computation.set( ractive.viewmodel.value[ key ] );
+		}
+	});
+
+	// set up event subscribers
+	subscribe( ractive, userOptions, 'on' );
+
+	// init config from Parent and options
+	config.init( ractive.constructor, ractive, userOptions );
+
+	configHook.fire( ractive );
+
+	// general config done, set up observers
+	subscribe( ractive, userOptions, 'observe' );
+
+	initHook.begin( ractive );
+
+	var fragment = ractive.fragment = createFragment( ractive, options );
+	if ( fragment ) { fragment.bind( ractive.viewmodel ); }
+
+	initHook.end( ractive );
+
+	if ( fragment ) {
+		// render automatically ( if `el` is specified )
+		var el = getElement( ractive.el || ractive.target );
+		if ( el ) {
+			var promise = ractive.render( el, ractive.append );
+
+			if ( Ractive.DEBUG_PROMISES ) {
+				promise.catch( function (err) {
+					warnOnceIfDebug( 'Promise debugging is enabled, to help solve errors that happen asynchronously. Some browsers will log unhandled promise rejections, in which case you can safely disable promise debugging:\n  Ractive.DEBUG_PROMISES = false;' );
+					warnIfDebug( 'An error happened during rendering', { ractive: ractive });
+					logIfDebug( err );
+
+					throw err;
+				});
+			}
+		}
+	}
+}
+
+function createFragment ( ractive, options ) {
+	if ( options === void 0 ) options = {};
+
+	if ( ractive.template ) {
+		var cssIds;
+
+		if ( options.cssIds || ractive.cssId ) {
+			cssIds = options.cssIds ? options.cssIds.slice() : [];
+
+			if ( ractive.cssId ) {
+				cssIds.push( ractive.cssId );
+			}
+		}
+
+		return new Fragment({
+			owner: ractive,
+			template: ractive.template,
+			cssIds: cssIds
+		});
+	}
+}
+
+function subscribe ( instance, options, type ) {
+	var subs = ( instance.constructor[ ("_" + type) ] || [] ).concat( toPairs( options[ type ] || [] ) );
+	var single = type === 'on' ? 'once' : (type + "Once");
+
+	subs.forEach( function (ref) {
+		var target = ref[0];
+		var config$$1 = ref[1];
+
+		if ( typeof config$$1 === 'function' ) {
+			instance[type]( target, config$$1 );
+		} else if ( typeof config$$1 === 'object' && typeof config$$1.handler === 'function' ) {
+			instance[ config$$1.once ? single : type ]( target, config$$1.handler, config$$1 );
+		}
+	});
+}
+
+var renderHook = new Hook( 'render' );
+var completeHook = new Hook( 'complete' );
+
+function render$1 ( ractive, target, anchor, occupants ) {
+	// set a flag to let any transitions know that this instance is currently rendering
+	ractive.rendering = true;
+
+	var promise = runloop.start( ractive, true );
+	runloop.scheduleTask( function () { return renderHook.fire( ractive ); }, true );
+
+	if ( ractive.fragment.rendered ) {
+		throw new Error( 'You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first' );
+	}
+
+	if ( ractive.destroyed ) {
+		ractive.destroyed = false;
+		ractive.fragment = createFragment( ractive ).bind( ractive.viewmodel );
+	}
+
+	anchor = getElement( anchor ) || ractive.anchor;
+
+	ractive.el = ractive.target = target;
+	ractive.anchor = anchor;
+
+	// ensure encapsulated CSS is up-to-date
+	if ( ractive.cssId ) { applyCSS(); }
+
+	if ( target ) {
+		( target.__ractive_instances__ || ( target.__ractive_instances__ = [] ) ).push( ractive );
+
+		if ( anchor ) {
+			var docFrag = doc.createDocumentFragment();
+			ractive.fragment.render( docFrag );
+			target.insertBefore( docFrag, anchor );
+		} else {
+			ractive.fragment.render( target, occupants );
+		}
+	}
+
+	runloop.end();
+	ractive.rendering = false;
+
+	return promise.then( function () {
+		if (ractive.torndown) { return; }
+
+		completeHook.fire( ractive );
+	});
+}
+
+function Ractive$render ( target, anchor ) {
+	if ( this.torndown ) {
+		warnIfDebug( 'ractive.render() was called on a Ractive instance that was already torn down' );
+		return Promise.resolve();
+	}
+
+	target = getElement( target ) || this.el;
+
+	if ( !this.append && target ) {
+		// Teardown any existing instances *before* trying to set up the new one -
+		// avoids certain weird bugs
+		var others = target.__ractive_instances__;
+		if ( others ) { others.forEach( teardown ); }
+
+		// make sure we are the only occupants
+		if ( !this.enhance ) {
+			target.innerHTML = ''; // TODO is this quicker than removeChild? Initial research inconclusive
+		}
+	}
+
+	var occupants = this.enhance ? toArray( target.childNodes ) : null;
+	var promise = render$1( this, target, anchor, occupants );
+
+	if ( occupants ) {
+		while ( occupants.length ) { target.removeChild( occupants.pop() ); }
+	}
+
+	return promise;
+}
+
+var shouldRerender = [ 'template', 'partials', 'components', 'decorators', 'events' ];
+
+var completeHook$1 = new Hook( 'complete' );
+var resetHook = new Hook( 'reset' );
+var renderHook$1 = new Hook( 'render' );
+var unrenderHook = new Hook( 'unrender' );
+
+function Ractive$reset ( data ) {
+	data = data || {};
+
+	if ( typeof data !== 'object' ) {
+		throw new Error( 'The reset method takes either no arguments, or an object containing new data' );
+	}
+
+	// TEMP need to tidy this up
+	data = dataConfigurator.init( this.constructor, this, { data: data });
+
+	var promise = runloop.start( this, true );
+
+	// If the root object is wrapped, try and use the wrapper's reset value
+	var wrapper = this.viewmodel.wrapper;
+	if ( wrapper && wrapper.reset ) {
+		if ( wrapper.reset( data ) === false ) {
+			// reset was rejected, we need to replace the object
+			this.viewmodel.set( data );
+		}
+	} else {
+		this.viewmodel.set( data );
+	}
+
+	// reset config items and track if need to rerender
+	var changes = config.reset( this );
+	var rerender;
+
+	var i = changes.length;
+	while ( i-- ) {
+		if ( shouldRerender.indexOf( changes[i] ) > -1 ) {
+			rerender = true;
+			break;
+		}
+	}
+
+	if ( rerender ) {
+		unrenderHook.fire( this );
+		this.fragment.resetTemplate( this.template );
+		renderHook$1.fire( this );
+		completeHook$1.fire( this );
+	}
+
+	runloop.end();
+
+	resetHook.fire( this, data );
+
+	return promise;
+}
+
+function collect( source, name, attr, dest ) {
+	source.forEach( function (item) {
+		// queue to rerender if the item is a partial and the current name matches
+		if ( item.type === PARTIAL && ( item.refName ===  name || item.name === name ) ) {
+			item.inAttribute = attr;
+			dest.push( item );
+			return; // go no further
+		}
+
+		// if it has a fragment, process its items
+		if ( item.fragment ) {
+			collect( item.fragment.iterations || item.fragment.items, name, attr, dest );
+		}
+
+		// or if it is itself a fragment, process its items
+		else if ( Array.isArray( item.items ) ) {
+			collect( item.items, name, attr, dest );
+		}
+
+		// or if it is a component, step in and process its items
+		else if ( item.type === COMPONENT && item.instance ) {
+			// ...unless the partial is shadowed
+			if ( item.instance.partials[ name ] ) { return; }
+			collect( item.instance.fragment.items, name, attr, dest );
+		}
+
+		// if the item is an element, process its attributes too
+		if ( item.type === ELEMENT ) {
+			if ( Array.isArray( item.attributes ) ) {
+				collect( item.attributes, name, true, dest );
+			}
+		}
+	});
+}
+
+function forceResetTemplate ( partial ) {
+	partial.forceResetTemplate();
+}
+
+var resetPartial = function ( name, partial ) {
+	var collection = [];
+	collect( this.fragment.items, name, false, collection );
+
+	var promise = runloop.start( this, true );
+
+	this.partials[ name ] = partial;
+	collection.forEach( forceResetTemplate );
+
+	runloop.end();
+
+	return promise;
+};
+
+// TODO should resetTemplate be asynchronous? i.e. should it be a case
+// of outro, update template, intro? I reckon probably not, since that
+// could be achieved with unrender-resetTemplate-render. Also, it should
+// conceptually be similar to resetPartial, which couldn't be async
+
+function Ractive$resetTemplate ( template ) {
+	templateConfigurator.init( null, this, { template: template });
+
+	var transitionsEnabled = this.transitionsEnabled;
+	this.transitionsEnabled = false;
+
+	// Is this is a component, we need to set the `shouldDestroy`
+	// flag, otherwise it will assume by default that a parent node
+	// will be detached, and therefore it doesn't need to bother
+	// detaching its own nodes
+	var component = this.component;
+	if ( component ) { component.shouldDestroy = true; }
+	this.unrender();
+	if ( component ) { component.shouldDestroy = false; }
+
+	var promise = runloop.start();
+
+	// remove existing fragment and create new one
+	this.fragment.unbind().unrender( true );
+
+	this.fragment = new Fragment({
+		template: this.template,
+		root: this,
+		owner: this
+	});
+
+	var docFrag = createDocumentFragment();
+	this.fragment.bind( this.viewmodel ).render( docFrag );
+
+	// if this is a component, its el may not be valid, so find a
+	// target based on the component container
+	if ( component && !component.external ) {
+		this.fragment.findParentNode().insertBefore( docFrag, component.findNextNode() );
+	} else {
+		this.el.insertBefore( docFrag, this.anchor );
+	}
+
+	runloop.end();
+
+	this.transitionsEnabled = transitionsEnabled;
+
+	return promise;
+}
+
+var reverse = makeArrayMethod( 'reverse' ).path;
+
+function Ractive$set ( keypath, value, options ) {
+	var ractive = this;
+
+	var opts = typeof keypath === 'object' ? value : options;
+
+	return set( ractive, build( ractive, keypath, value, opts && opts.isolated ), opts );
+}
+
+var shift = makeArrayMethod( 'shift' ).path;
+
+var sort = makeArrayMethod( 'sort' ).path;
+
+var splice = makeArrayMethod( 'splice' ).path;
+
+function Ractive$subtract ( keypath, d, options ) {
+	var num = typeof d === 'number' ? -d : -1;
+	var opts = typeof d === 'object' ? d : options;
+	return add( this, keypath, num, opts );
+}
+
+function Ractive$toggle ( keypath, options ) {
+	if ( typeof keypath !== 'string' ) {
+		throw new TypeError( badArguments );
+	}
+
+	return set( this, gather( this, keypath, null, options && options.isolated ).map( function (m) { return [ m, !m.get() ]; } ), options );
+}
+
+function Ractive$toCSS() {
+	var cssIds = [ this.cssId ].concat( this.findAllComponents().map( function (c) { return c.cssId; } ) );
+	var uniqueCssIds = Object.keys(cssIds.reduce( function ( ids, id ) { return (ids[id] = true, ids); }, {}));
+	return getCSS( uniqueCssIds );
+}
+
+function Ractive$toHTML () {
+	return this.fragment.toString( true );
+}
+
+function toText () {
+	return this.fragment.toString( false );
+}
+
+function Ractive$transition ( name, node, params ) {
+
+	if ( node instanceof HTMLElement ) {
+		// good to go
+	}
+	else if ( isObject( node ) ) {
+		// omitted, use event node
+		params = node;
+	}
+
+	// if we allow query selector, then it won't work
+	// simple params like "fast"
+
+	// else if ( typeof node === 'string' ) {
+	// 	// query selector
+	// 	node = this.find( node )
+	// }
+
+	node = node || this.event.node;
+
+	if ( !node || !node._ractive ) {
+		fatal( ("No node was supplied for transition " + name) );
+	}
+
+	params = params || {};
+	var owner = node._ractive.proxy;
+	var transition = new Transition({ owner: owner, parentFragment: owner.parentFragment, name: name, params: params });
+	transition.bind();
+
+	var promise = runloop.start( this, true );
+	runloop.registerTransition( transition );
+	runloop.end();
+
+	promise.then( function () { return transition.unbind(); } );
+	return promise;
+}
+
+function unlink( here ) {
+	var promise = runloop.start();
+	this.viewmodel.joinAll( splitKeypath( here ), { lastLink: false } ).unlink();
+	runloop.end();
+	return promise;
+}
+
+var unrenderHook$1 = new Hook( 'unrender' );
+
+function Ractive$unrender () {
+	if ( !this.fragment.rendered ) {
+		warnIfDebug( 'ractive.unrender() was called on a Ractive instance that was not rendered' );
+		return Promise.resolve();
+	}
+
+	this.unrendering = true;
+	var promise = runloop.start( this, true );
+
+	// If this is a component, and the component isn't marked for destruction,
+	// don't detach nodes from the DOM unnecessarily
+	var shouldDestroy = !this.component || ( this.component.anchor || {} ).shouldDestroy || this.component.shouldDestroy || this.shouldDestroy;
+	this.fragment.unrender( shouldDestroy );
+	if ( shouldDestroy ) { this.destroyed = true; }
+
+	removeFromArray( this.el.__ractive_instances__, this );
+
+	unrenderHook$1.fire( this );
+
+	runloop.end();
+	this.unrendering = false;
+
+	return promise;
+}
+
+var unshift = makeArrayMethod( 'unshift' ).path;
+
+function Ractive$updateModel ( keypath, cascade ) {
+	var promise = runloop.start( this, true );
+
+	if ( !keypath ) {
+		this.viewmodel.updateFromBindings( true );
+	} else {
+		this.viewmodel.joinAll( splitKeypath( keypath ) ).updateFromBindings( cascade !== false );
+	}
+
+	runloop.end();
+
+	return promise;
+}
+
+var proto = {
+	add: Ractive$add,
+	animate: Ractive$animate,
+	attachChild: attachChild,
+	detach: Ractive$detach,
+	detachChild: detachChild,
+	find: Ractive$find,
+	findAll: Ractive$findAll,
+	findAllComponents: Ractive$findAllComponents,
+	findComponent: Ractive$findComponent,
+	findContainer: Ractive$findContainer,
+	findParent: Ractive$findParent,
+	fire: Ractive$fire,
+	get: Ractive$get,
+	getContext: getContext$1,
+	getNodeInfo: getNodeInfo$$1,
+	insert: Ractive$insert,
+	link: link,
+	observe: observe,
+	observeOnce: observeOnce,
+	off: Ractive$off,
+	on: Ractive$on,
+	once: Ractive$once,
+	pop: pop,
+	push: push,
+	readLink: readLink,
+	render: Ractive$render,
+	reset: Ractive$reset,
+	resetPartial: resetPartial,
+	resetTemplate: Ractive$resetTemplate,
+	reverse: reverse,
+	set: Ractive$set,
+	shift: shift,
+	sort: sort,
+	splice: splice,
+	subtract: Ractive$subtract,
+	teardown: Ractive$teardown,
+	toggle: Ractive$toggle,
+	toCSS: Ractive$toCSS,
+	toCss: Ractive$toCSS,
+	toHTML: Ractive$toHTML,
+	toHtml: Ractive$toHTML,
+	toText: toText,
+	transition: Ractive$transition,
+	unlink: unlink,
+	unrender: Ractive$unrender,
+	unshift: unshift,
+	update: Ractive$update,
+	updateModel: Ractive$updateModel
+};
+
+Object.defineProperty( proto, 'target', {
+	get: function get() { return this.el; }
+});
+
+function isInstance ( object ) {
+	return object && object instanceof this;
+}
+
+var callsSuper = /super\s*\(|\.call\s*\(\s*this/;
+
+function extend () {
+	var options = [], len = arguments.length;
+	while ( len-- ) options[ len ] = arguments[ len ];
+
+	if( !options.length ) {
+		return extendOne( this );
+	} else {
+		return options.reduce( extendOne, this );
+	}
+}
+
+function extendWith ( Class, options ) {
+	if ( options === void 0 ) options = {};
+
+	return extendOne( this, options, Class );
+}
+
+function extendOne ( Parent, options, Target ) {
+	if ( options === void 0 ) options = {};
+
+	var proto;
+	var Child = typeof Target === 'function' && Target;
+
+	if ( options.prototype instanceof Ractive ) {
+		throw new Error( "Ractive no longer supports multiple inheritance." );
+	}
+
+	if ( Child ) {
+		if ( !( Child.prototype instanceof Parent ) ) {
+			throw new Error( "Only classes that inherit the appropriate prototype may be used with extend" );
+		}
+		if ( !callsSuper.test( Child.toString() ) ) {
+			throw new Error( "Only classes that call super in their constructor may be used with extend" );
+		}
+
+		proto = Child.prototype;
+	} else {
+		Child = function ( options ) {
+			if ( !( this instanceof Child ) ) { return new Child( options ); }
+
+			construct( this, options || {} );
+			initialise( this, options || {}, {} );
+		};
+
+		proto = Object.create( Parent.prototype );
+		proto.constructor = Child;
+
+		Child.prototype = proto;
+	}
+
+	// Static properties
+	Object.defineProperties( Child, {
+		// alias prototype as defaults
+		defaults: { value: proto },
+
+		// extendable
+		extend: { value: extend, writable: true, configurable: true },
+		extendClass: { value: extendWith, writable: true, configurable: true },
+
+		Parent: { value: Parent },
+		Ractive: { value: Ractive },
+
+		isInstance: { value: isInstance }
+	});
+
+	// extend configuration
+	config.extend( Parent, proto, options );
+
+	// store event and observer registries on the constructor when extending
+	Child._on = ( Parent._on || [] ).concat( toPairs( options.on ) );
+	Child._observe = ( Parent._observe || [] ).concat( toPairs( options.observe ) );
+
+	// attribute defs are not inherited, but they need to be stored
+	if ( options.attributes ) {
+		var attrs;
+
+		// allow an array of optional props or an object with arrays for optional and required props
+		if ( Array.isArray( options.attributes ) ) {
+			attrs = { optional: options.attributes, required: [] };
+		} else {
+			attrs = options.attributes;
+		}
+
+		// make sure the requisite keys actually store arrays
+		if ( !Array.isArray( attrs.required ) ) { attrs.required = []; }
+		if ( !Array.isArray( attrs.optional ) ) { attrs.optional = []; }
+
+		Child.attributes = attrs;
+	}
+
+	dataConfigurator.extend( Parent, proto, options );
+
+	if ( options.computed ) {
+		proto.computed = Object.assign( Object.create( Parent.prototype.computed ), options.computed );
+	}
+
+	return Child;
+}
+
+function joinKeys () {
+	var keys = [], len = arguments.length;
+	while ( len-- ) keys[ len ] = arguments[ len ];
+
+	return keys.map( escapeKey ).join( '.' );
+}
+
+function splitKeypath$1 ( keypath ) {
+	return splitKeypath( keypath ).map( unescapeKey );
+}
+
+function findPlugin(name, type, instance) {
+	return findInViewHierarchy(type, instance, name);
+}
+
+function Ractive ( options ) {
+	if ( !( this instanceof Ractive ) ) { return new Ractive( options ); }
+
+	construct( this, options || {} );
+	initialise( this, options || {}, {} );
+}
+
+// check to see if we're being asked to force Ractive as a global for some weird environments
+if ( win && !win.Ractive ) {
+	var opts = '';
+	var script = document.currentScript || document.querySelector( 'script[data-ractive-options]' );
+
+	if ( script ) { opts = script.getAttribute( 'data-ractive-options' ) || ''; }
+
+	if ( ~opts.indexOf( 'ForceGlobal' ) ) { win.Ractive = Ractive; }
+}
+
+Object.assign( Ractive.prototype, proto, defaults );
+Ractive.prototype.constructor = Ractive;
+
+// alias prototype as `defaults`
+Ractive.defaults = Ractive.prototype;
+
+// share defaults with the parser
+shared.defaults = Ractive.defaults;
+shared.Ractive = Ractive;
+
+// static properties
+Object.defineProperties( Ractive, {
+
+	// debug flag
+	DEBUG:            { writable: true, value: true },
+	DEBUG_PROMISES:   { writable: true, value: true },
+
+	// static methods:
+	extend:           { value: extend },
+	extendWith:       { value: extendWith },
+	escapeKey:        { value: escapeKey },
+	getContext:       { value: getContext$2 },
+	getNodeInfo:      { value: getNodeInfo$1 },
+	isInstance:       { value: isInstance },
+	joinKeys:         { value: joinKeys },
+	parse:            { value: parse },
+	splitKeypath:     { value: splitKeypath$1 },
+	unescapeKey:      { value: unescapeKey },
+	getCSS:           { value: getCSS },
+	normaliseKeypath: { value: normalise },
+	findPlugin:       { value: findPlugin },
+	evalObjectString: { value: parseJSON },
+
+	// support
+	enhance:          { writable: true, value: false },
+	svg:              { value: svg },
+
+	// version
+	VERSION:          { value: '0.9.3' },
+
+	// plugins
+	adaptors:         { writable: true, value: {} },
+	components:       { writable: true, value: {} },
+	decorators:       { writable: true, value: {} },
+	easing:           { writable: true, value: easing },
+	events:           { writable: true, value: {} },
+	interpolators:    { writable: true, value: interpolators },
+	partials:         { writable: true, value: {} },
+	transitions:      { writable: true, value: {} },
+
+	// for getting the source Ractive lib from a constructor
+	Ractive:          { value: Ractive }
+});
+
+return Ractive;
+
+})));
+//# sourceMappingURL=ractive.js.map
+</script> 
+  <script>// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+// This is CodeMirror (http://codemirror.net), a code editor
+// implemented in JavaScript on top of the browser's DOM.
+//
+// You can find some technical background for some of the code below
+// at http://marijnhaverbeke.nl/blog/#cm-internals .
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global.CodeMirror = factory());
+}(this, (function () { 'use strict';
+
+// Kludges for bugs and behavior differences that can't be feature
+// detected are enabled based on userAgent etc sniffing.
+var userAgent = navigator.userAgent
+var platform = navigator.platform
+
+var gecko = /gecko\/\d/i.test(userAgent)
+var ie_upto10 = /MSIE \d/.test(userAgent)
+var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent)
+var edge = /Edge\/(\d+)/.exec(userAgent)
+var ie = ie_upto10 || ie_11up || edge
+var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1])
+var webkit = !edge && /WebKit\//.test(userAgent)
+var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent)
+var chrome = !edge && /Chrome\//.test(userAgent)
+var presto = /Opera\//.test(userAgent)
+var safari = /Apple Computer/.test(navigator.vendor)
+var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent)
+var phantom = /PhantomJS/.test(userAgent)
+
+var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent)
+var android = /Android/.test(userAgent)
+// This is woefully incomplete. Suggestions for alternative methods welcome.
+var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent)
+var mac = ios || /Mac/.test(platform)
+var chromeOS = /\bCrOS\b/.test(userAgent)
+var windows = /win/i.test(platform)
+
+var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/)
+if (presto_version) { presto_version = Number(presto_version[1]) }
+if (presto_version && presto_version >= 15) { presto = false; webkit = true }
+// Some browsers use the wrong event properties to signal cmd/ctrl on OS X
+var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11))
+var captureRightClick = gecko || (ie && ie_version >= 9)
+
+function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") }
+
+var rmClass = function(node, cls) {
+  var current = node.className
+  var match = classTest(cls).exec(current)
+  if (match) {
+    var after = current.slice(match.index + match[0].length)
+    node.className = current.slice(0, match.index) + (after ? match[1] + after : "")
+  }
+}
+
+function removeChildren(e) {
+  for (var count = e.childNodes.length; count > 0; --count)
+    { e.removeChild(e.firstChild) }
+  return e
+}
+
+function removeChildrenAndAdd(parent, e) {
+  return removeChildren(parent).appendChild(e)
+}
+
+function elt(tag, content, className, style) {
+  var e = document.createElement(tag)
+  if (className) { e.className = className }
+  if (style) { e.style.cssText = style }
+  if (typeof content == "string") { e.appendChild(document.createTextNode(content)) }
+  else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]) } }
+  return e
+}
+// wrapper for elt, which removes the elt from the accessibility tree
+function eltP(tag, content, className, style) {
+  var e = elt(tag, content, className, style)
+  e.setAttribute("role", "presentation")
+  return e
+}
+
+var range
+if (document.createRange) { range = function(node, start, end, endNode) {
+  var r = document.createRange()
+  r.setEnd(endNode || node, end)
+  r.setStart(node, start)
+  return r
+} }
+else { range = function(node, start, end) {
+  var r = document.body.createTextRange()
+  try { r.moveToElementText(node.parentNode) }
+  catch(e) { return r }
+  r.collapse(true)
+  r.moveEnd("character", end)
+  r.moveStart("character", start)
+  return r
+} }
+
+function contains(parent, child) {
+  if (child.nodeType == 3) // Android browser always returns false when child is a textnode
+    { child = child.parentNode }
+  if (parent.contains)
+    { return parent.contains(child) }
+  do {
+    if (child.nodeType == 11) { child = child.host }
+    if (child == parent) { return true }
+  } while (child = child.parentNode)
+}
+
+function activeElt() {
+  // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement.
+  // IE < 10 will throw when accessed while the page is loading or in an iframe.
+  // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.
+  var activeElement
+  try {
+    activeElement = document.activeElement
+  } catch(e) {
+    activeElement = document.body || null
+  }
+  while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)
+    { activeElement = activeElement.shadowRoot.activeElement }
+  return activeElement
+}
+
+function addClass(node, cls) {
+  var current = node.className
+  if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls }
+}
+function joinClasses(a, b) {
+  var as = a.split(" ")
+  for (var i = 0; i < as.length; i++)
+    { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i] } }
+  return b
+}
+
+var selectInput = function(node) { node.select() }
+if (ios) // Mobile Safari apparently has a bug where select() is broken.
+  { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length } }
+else if (ie) // Suppress mysterious IE10 errors
+  { selectInput = function(node) { try { node.select() } catch(_e) {} } }
+
+function bind(f) {
+  var args = Array.prototype.slice.call(arguments, 1)
+  return function(){return f.apply(null, args)}
+}
+
+function copyObj(obj, target, overwrite) {
+  if (!target) { target = {} }
+  for (var prop in obj)
+    { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))
+      { target[prop] = obj[prop] } }
+  return target
+}
+
+// Counts the column offset in a string, taking tabs into account.
+// Used mostly to find indentation.
+function countColumn(string, end, tabSize, startIndex, startValue) {
+  if (end == null) {
+    end = string.search(/[^\s\u00a0]/)
+    if (end == -1) { end = string.length }
+  }
+  for (var i = startIndex || 0, n = startValue || 0;;) {
+    var nextTab = string.indexOf("\t", i)
+    if (nextTab < 0 || nextTab >= end)
+      { return n + (end - i) }
+    n += nextTab - i
+    n += tabSize - (n % tabSize)
+    i = nextTab + 1
+  }
+}
+
+var Delayed = function() {this.id = null};
+Delayed.prototype.set = function (ms, f) {
+  clearTimeout(this.id)
+  this.id = setTimeout(f, ms)
+};
+
+function indexOf(array, elt) {
+  for (var i = 0; i < array.length; ++i)
+    { if (array[i] == elt) { return i } }
+  return -1
+}
+
+// Number of pixels added to scroller and sizer to hide scrollbar
+var scrollerGap = 30
+
+// Returned or thrown by various protocols to signal 'I'm not
+// handling this'.
+var Pass = {toString: function(){return "CodeMirror.Pass"}}
+
+// Reused option objects for setSelection & friends
+var sel_dontScroll = {scroll: false};
+var sel_mouse = {origin: "*mouse"};
+var sel_move = {origin: "+move"};
+// The inverse of countColumn -- find the offset that corresponds to
+// a particular column.
+function findColumn(string, goal, tabSize) {
+  for (var pos = 0, col = 0;;) {
+    var nextTab = string.indexOf("\t", pos)
+    if (nextTab == -1) { nextTab = string.length }
+    var skipped = nextTab - pos
+    if (nextTab == string.length || col + skipped >= goal)
+      { return pos + Math.min(skipped, goal - col) }
+    col += nextTab - pos
+    col += tabSize - (col % tabSize)
+    pos = nextTab + 1
+    if (col >= goal) { return pos }
+  }
+}
+
+var spaceStrs = [""]
+function spaceStr(n) {
+  while (spaceStrs.length <= n)
+    { spaceStrs.push(lst(spaceStrs) + " ") }
+  return spaceStrs[n]
+}
+
+function lst(arr) { return arr[arr.length-1] }
+
+function map(array, f) {
+  var out = []
+  for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i) }
+  return out
+}
+
+function insertSorted(array, value, score) {
+  var pos = 0, priority = score(value)
+  while (pos < array.length && score(array[pos]) <= priority) { pos++ }
+  array.splice(pos, 0, value)
+}
+
+function nothing() {}
+
+function createObj(base, props) {
+  var inst
+  if (Object.create) {
+    inst = Object.create(base)
+  } else {
+    nothing.prototype = base
+    inst = new nothing()
+  }
+  if (props) { copyObj(props, inst) }
+  return inst
+}
+
+var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/
+function isWordCharBasic(ch) {
+  return /\w/.test(ch) || ch > "\x80" &&
+    (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))
+}
+function isWordChar(ch, helper) {
+  if (!helper) { return isWordCharBasic(ch) }
+  if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true }
+  return helper.test(ch)
+}
+
+function isEmpty(obj) {
+  for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }
+  return true
+}
+
+// Extending unicode characters. A series of a non-extending char +
+// any number of extending chars is treated as a single unit as far
+// as editing and measuring is concerned. This is not fully correct,
+// since some scripts/fonts/browsers also treat other configurations
+// of code points as a group.
+var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/
+function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }
+
+// Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.
+function skipExtendingChars(str, pos, dir) {
+  while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir }
+  return pos
+}
+
+// Returns the value from the range [`from`; `to`] that satisfies
+// `pred` and is closest to `from`. Assumes that at least `to`
+// satisfies `pred`. Supports `from` being greater than `to`.
+function findFirst(pred, from, to) {
+  // At any point we are certain `to` satisfies `pred`, don't know
+  // whether `from` does.
+  var dir = from > to ? -1 : 1
+  for (;;) {
+    if (from == to) { return from }
+    var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF)
+    if (mid == from) { return pred(mid) ? from : to }
+    if (pred(mid)) { to = mid }
+    else { from = mid + dir }
+  }
+}
+
+// The display handles the DOM integration, both for input reading
+// and content drawing. It holds references to DOM nodes and
+// display-related state.
+
+function Display(place, doc, input) {
+  var d = this
+  this.input = input
+
+  // Covers bottom-right square when both scrollbars are present.
+  d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler")
+  d.scrollbarFiller.setAttribute("cm-not-content", "true")
+  // Covers bottom of gutter when coverGutterNextToScrollbar is on
+  // and h scrollbar is present.
+  d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler")
+  d.gutterFiller.setAttribute("cm-not-content", "true")
+  // Will contain the actual code, positioned to cover the viewport.
+  d.lineDiv = eltP("div", null, "CodeMirror-code")
+  // Elements are added to these to represent selection and cursors.
+  d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1")
+  d.cursorDiv = elt("div", null, "CodeMirror-cursors")
+  // A visibility: hidden element used to find the size of things.
+  d.measure = elt("div", null, "CodeMirror-measure")
+  // When lines outside of the viewport are measured, they are drawn in this.
+  d.lineMeasure = elt("div", null, "CodeMirror-measure")
+  // Wraps everything that needs to exist inside the vertically-padded coordinate system
+  d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],
+                    null, "position: relative; outline: none")
+  var lines = eltP("div", [d.lineSpace], "CodeMirror-lines")
+  // Moved around its parent to cover visible view.
+  d.mover = elt("div", [lines], null, "position: relative")
+  // Set to the height of the document, allowing scrolling.
+  d.sizer = elt("div", [d.mover], "CodeMirror-sizer")
+  d.sizerWidth = null
+  // Behavior of elts with overflow: auto and padding is
+  // inconsistent across browsers. This is used to ensure the
+  // scrollable area is big enough.
+  d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;")
+  // Will contain the gutters, if any.
+  d.gutters = elt("div", null, "CodeMirror-gutters")
+  d.lineGutter = null
+  // Actual scrollable element.
+  d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll")
+  d.scroller.setAttribute("tabIndex", "-1")
+  // The element in which the editor lives.
+  d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror")
+
+  // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
+  if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0 }
+  if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true }
+
+  if (place) {
+    if (place.appendChild) { place.appendChild(d.wrapper) }
+    else { place(d.wrapper) }
+  }
+
+  // Current rendered range (may be bigger than the view window).
+  d.viewFrom = d.viewTo = doc.first
+  d.reportedViewFrom = d.reportedViewTo = doc.first
+  // Information about the rendered lines.
+  d.view = []
+  d.renderedView = null
+  // Holds info about a single rendered line when it was rendered
+  // for measurement, while not in view.
+  d.externalMeasured = null
+  // Empty space (in pixels) above the view
+  d.viewOffset = 0
+  d.lastWrapHeight = d.lastWrapWidth = 0
+  d.updateLineNumbers = null
+
+  d.nativeBarWidth = d.barHeight = d.barWidth = 0
+  d.scrollbarsClipped = false
+
+  // Used to only resize the line number gutter when necessary (when
+  // the amount of lines crosses a boundary that makes its width change)
+  d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null
+  // Set to true when a non-horizontal-scrolling line widget is
+  // added. As an optimization, line widget aligning is skipped when
+  // this is false.
+  d.alignWidgets = false
+
+  d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null
+
+  // Tracks the maximum line length so that the horizontal scrollbar
+  // can be kept static when scrolling.
+  d.maxLine = null
+  d.maxLineLength = 0
+  d.maxLineChanged = false
+
+  // Used for measuring wheel scrolling granularity
+  d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null
+
+  // True when shift is held down.
+  d.shift = false
+
+  // Used to track whether anything happened since the context menu
+  // was opened.
+  d.selForContextMenu = null
+
+  d.activeTouch = null
+
+  input.init(d)
+}
+
+// Find the line object corresponding to the given line number.
+function getLine(doc, n) {
+  n -= doc.first
+  if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") }
+  var chunk = doc
+  while (!chunk.lines) {
+    for (var i = 0;; ++i) {
+      var child = chunk.children[i], sz = child.chunkSize()
+      if (n < sz) { chunk = child; break }
+      n -= sz
+    }
+  }
+  return chunk.lines[n]
+}
+
+// Get the part of a document between two positions, as an array of
+// strings.
+function getBetween(doc, start, end) {
+  var out = [], n = start.line
+  doc.iter(start.line, end.line + 1, function (line) {
+    var text = line.text
+    if (n == end.line) { text = text.slice(0, end.ch) }
+    if (n == start.line) { text = text.slice(start.ch) }
+    out.push(text)
+    ++n
+  })
+  return out
+}
+// Get the lines between from and to, as array of strings.
+function getLines(doc, from, to) {
+  var out = []
+  doc.iter(from, to, function (line) { out.push(line.text) }) // iter aborts when callback returns truthy value
+  return out
+}
+
+// Update the height of a line, propagating the height change
+// upwards to parent nodes.
+function updateLineHeight(line, height) {
+  var diff = height - line.height
+  if (diff) { for (var n = line; n; n = n.parent) { n.height += diff } }
+}
+
+// Given a line object, find its line number by walking up through
+// its parent links.
+function lineNo(line) {
+  if (line.parent == null) { return null }
+  var cur = line.parent, no = indexOf(cur.lines, line)
+  for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
+    for (var i = 0;; ++i) {
+      if (chunk.children[i] == cur) { break }
+      no += chunk.children[i].chunkSize()
+    }
+  }
+  return no + cur.first
+}
+
+// Find the line at the given vertical position, using the height
+// information in the document tree.
+function lineAtHeight(chunk, h) {
+  var n = chunk.first
+  outer: do {
+    for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {
+      var child = chunk.children[i$1], ch = child.height
+      if (h < ch) { chunk = child; continue outer }
+      h -= ch
+      n += child.chunkSize()
+    }
+    return n
+  } while (!chunk.lines)
+  var i = 0
+  for (; i < chunk.lines.length; ++i) {
+    var line = chunk.lines[i], lh = line.height
+    if (h < lh) { break }
+    h -= lh
+  }
+  return n + i
+}
+
+function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}
+
+function lineNumberFor(options, i) {
+  return String(options.lineNumberFormatter(i + options.firstLineNumber))
+}
+
+// A Pos instance represents a position within the text.
+function Pos(line, ch, sticky) {
+  if ( sticky === void 0 ) sticky = null;
+
+  if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }
+  this.line = line
+  this.ch = ch
+  this.sticky = sticky
+}
+
+// Compare two positions, return 0 if they are the same, a negative
+// number when a is less, and a positive number otherwise.
+function cmp(a, b) { return a.line - b.line || a.ch - b.ch }
+
+function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }
+
+function copyPos(x) {return Pos(x.line, x.ch)}
+function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }
+function minPos(a, b) { return cmp(a, b) < 0 ? a : b }
+
+// Most of the external API clips given positions to make sure they
+// actually exist within the document.
+function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}
+function clipPos(doc, pos) {
+  if (pos.line < doc.first) { return Pos(doc.first, 0) }
+  var last = doc.first + doc.size - 1
+  if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }
+  return clipToLen(pos, getLine(doc, pos.line).text.length)
+}
+function clipToLen(pos, linelen) {
+  var ch = pos.ch
+  if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }
+  else if (ch < 0) { return Pos(pos.line, 0) }
+  else { return pos }
+}
+function clipPosArray(doc, array) {
+  var out = []
+  for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]) }
+  return out
+}
+
+// Optimize some code when these features are not used.
+var sawReadOnlySpans = false;
+var sawCollapsedSpans = false;
+function seeReadOnlySpans() {
+  sawReadOnlySpans = true
+}
+
+function seeCollapsedSpans() {
+  sawCollapsedSpans = true
+}
+
+// TEXTMARKER SPANS
+
+function MarkedSpan(marker, from, to) {
+  this.marker = marker
+  this.from = from; this.to = to
+}
+
+// Search an array of spans for a span matching the given marker.
+function getMarkedSpanFor(spans, marker) {
+  if (spans) { for (var i = 0; i < spans.length; ++i) {
+    var span = spans[i]
+    if (span.marker == marker) { return span }
+  } }
+}
+// Remove a span from an array, returning undefined if no spans are
+// left (we don't store arrays for lines without spans).
+function removeMarkedSpan(spans, span) {
+  var r
+  for (var i = 0; i < spans.length; ++i)
+    { if (spans[i] != span) { (r || (r = [])).push(spans[i]) } }
+  return r
+}
+// Add a span to a line.
+function addMarkedSpan(line, span) {
+  line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]
+  span.marker.attachLine(line)
+}
+
+// Used for the algorithm that adjusts markers for a change in the
+// document. These functions cut an array of spans at a given
+// character position, returning an array of remaining chunks (or
+// undefined if nothing remains).
+function markedSpansBefore(old, startCh, isInsert) {
+  var nw
+  if (old) { for (var i = 0; i < old.length; ++i) {
+    var span = old[i], marker = span.marker
+    var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh)
+    if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) {
+      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)
+      ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to))
+    }
+  } }
+  return nw
+}
+function markedSpansAfter(old, endCh, isInsert) {
+  var nw
+  if (old) { for (var i = 0; i < old.length; ++i) {
+    var span = old[i], marker = span.marker
+    var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh)
+    if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) {
+      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)
+      ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,
+                                            span.to == null ? null : span.to - endCh))
+    }
+  } }
+  return nw
+}
+
+// Given a change object, compute the new set of marker spans that
+// cover the line in which the change took place. Removes spans
+// entirely within the change, reconnects spans belonging to the
+// same marker that appear on both sides of the change, and cuts off
+// spans partially within the change. Returns an array of span
+// arrays with one element for each line in (after) the change.
+function stretchSpansOverChange(doc, change) {
+  if (change.full) { return null }
+  var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans
+  var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans
+  if (!oldFirst && !oldLast) { return null }
+
+  var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0
+  // Get the spans that 'stick out' on both sides
+  var first = markedSpansBefore(oldFirst, startCh, isInsert)
+  var last = markedSpansAfter(oldLast, endCh, isInsert)
+
+  // Next, merge those two ends
+  var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0)
+  if (first) {
+    // Fix up .to properties of first
+    for (var i = 0; i < first.length; ++i) {
+      var span = first[i]
+      if (span.to == null) {
+        var found = getMarkedSpanFor(last, span.marker)
+        if (!found) { span.to = startCh }
+        else if (sameLine) { span.to = found.to == null ? null : found.to + offset }
+      }
+    }
+  }
+  if (last) {
+    // Fix up .from in last (or move them into first in case of sameLine)
+    for (var i$1 = 0; i$1 < last.length; ++i$1) {
+      var span$1 = last[i$1]
+      if (span$1.to != null) { span$1.to += offset }
+      if (span$1.from == null) {
+        var found$1 = getMarkedSpanFor(first, span$1.marker)
+        if (!found$1) {
+          span$1.from = offset
+          if (sameLine) { (first || (first = [])).push(span$1) }
+        }
+      } else {
+        span$1.from += offset
+        if (sameLine) { (first || (first = [])).push(span$1) }
+      }
+    }
+  }
+  // Make sure we didn't create any zero-length spans
+  if (first) { first = clearEmptySpans(first) }
+  if (last && last != first) { last = clearEmptySpans(last) }
+
+  var newMarkers = [first]
+  if (!sameLine) {
+    // Fill gap with whole-line-spans
+    var gap = change.text.length - 2, gapMarkers
+    if (gap > 0 && first)
+      { for (var i$2 = 0; i$2 < first.length; ++i$2)
+        { if (first[i$2].to == null)
+          { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)) } } }
+    for (var i$3 = 0; i$3 < gap; ++i$3)
+      { newMarkers.push(gapMarkers) }
+    newMarkers.push(last)
+  }
+  return newMarkers
+}
+
+// Remove spans that are empty and don't have a clearWhenEmpty
+// option of false.
+function clearEmptySpans(spans) {
+  for (var i = 0; i < spans.length; ++i) {
+    var span = spans[i]
+    if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)
+      { spans.splice(i--, 1) }
+  }
+  if (!spans.length) { return null }
+  return spans
+}
+
+// Used to 'clip' out readOnly ranges when making a change.
+function removeReadOnlyRanges(doc, from, to) {
+  var markers = null
+  doc.iter(from.line, to.line + 1, function (line) {
+    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+      var mark = line.markedSpans[i].marker
+      if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
+        { (markers || (markers = [])).push(mark) }
+    } }
+  })
+  if (!markers) { return null }
+  var parts = [{from: from, to: to}]
+  for (var i = 0; i < markers.length; ++i) {
+    var mk = markers[i], m = mk.find(0)
+    for (var j = 0; j < parts.length; ++j) {
+      var p = parts[j]
+      if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }
+      var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to)
+      if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)
+        { newParts.push({from: p.from, to: m.from}) }
+      if (dto > 0 || !mk.inclusiveRight && !dto)
+        { newParts.push({from: m.to, to: p.to}) }
+      parts.splice.apply(parts, newParts)
+      j += newParts.length - 3
+    }
+  }
+  return parts
+}
+
+// Connect or disconnect spans from a line.
+function detachMarkedSpans(line) {
+  var spans = line.markedSpans
+  if (!spans) { return }
+  for (var i = 0; i < spans.length; ++i)
+    { spans[i].marker.detachLine(line) }
+  line.markedSpans = null
+}
+function attachMarkedSpans(line, spans) {
+  if (!spans) { return }
+  for (var i = 0; i < spans.length; ++i)
+    { spans[i].marker.attachLine(line) }
+  line.markedSpans = spans
+}
+
+// Helpers used when computing which overlapping collapsed span
+// counts as the larger one.
+function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }
+function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }
+
+// Returns a number indicating which of two overlapping collapsed
+// spans is larger (and thus includes the other). Falls back to
+// comparing ids when the spans cover exactly the same range.
+function compareCollapsedMarkers(a, b) {
+  var lenDiff = a.lines.length - b.lines.length
+  if (lenDiff != 0) { return lenDiff }
+  var aPos = a.find(), bPos = b.find()
+  var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b)
+  if (fromCmp) { return -fromCmp }
+  var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b)
+  if (toCmp) { return toCmp }
+  return b.id - a.id
+}
+
+// Find out whether a line ends or starts in a collapsed span. If
+// so, return the marker for that span.
+function collapsedSpanAtSide(line, start) {
+  var sps = sawCollapsedSpans && line.markedSpans, found
+  if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
+    sp = sps[i]
+    if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&
+        (!found || compareCollapsedMarkers(found, sp.marker) < 0))
+      { found = sp.marker }
+  } }
+  return found
+}
+function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }
+function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }
+
+// Test whether there exists a collapsed span that partially
+// overlaps (covers the start or end, but not both) of a new span.
+// Such overlap is not allowed.
+function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
+  var line = getLine(doc, lineNo)
+  var sps = sawCollapsedSpans && line.markedSpans
+  if (sps) { for (var i = 0; i < sps.length; ++i) {
+    var sp = sps[i]
+    if (!sp.marker.collapsed) { continue }
+    var found = sp.marker.find(0)
+    var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker)
+    var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker)
+    if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }
+    if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||
+        fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))
+      { return true }
+  } }
+}
+
+// A visual line is a line as drawn on the screen. Folding, for
+// example, can cause multiple logical lines to appear on the same
+// visual line. This finds the start of the visual line that the
+// given line is part of (usually that is the line itself).
+function visualLine(line) {
+  var merged
+  while (merged = collapsedSpanAtStart(line))
+    { line = merged.find(-1, true).line }
+  return line
+}
+
+function visualLineEnd(line) {
+  var merged
+  while (merged = collapsedSpanAtEnd(line))
+    { line = merged.find(1, true).line }
+  return line
+}
+
+// Returns an array of logical lines that continue the visual line
+// started by the argument, or undefined if there are no such lines.
+function visualLineContinued(line) {
+  var merged, lines
+  while (merged = collapsedSpanAtEnd(line)) {
+    line = merged.find(1, true).line
+    ;(lines || (lines = [])).push(line)
+  }
+  return lines
+}
+
+// Get the line number of the start of the visual line that the
+// given line number is part of.
+function visualLineNo(doc, lineN) {
+  var line = getLine(doc, lineN), vis = visualLine(line)
+  if (line == vis) { return lineN }
+  return lineNo(vis)
+}
+
+// Get the line number of the start of the next visual line after
+// the given line.
+function visualLineEndNo(doc, lineN) {
+  if (lineN > doc.lastLine()) { return lineN }
+  var line = getLine(doc, lineN), merged
+  if (!lineIsHidden(doc, line)) { return lineN }
+  while (merged = collapsedSpanAtEnd(line))
+    { line = merged.find(1, true).line }
+  return lineNo(line) + 1
+}
+
+// Compute whether a line is hidden. Lines count as hidden when they
+// are part of a visual line that starts with another line, or when
+// they are entirely covered by collapsed, non-widget span.
+function lineIsHidden(doc, line) {
+  var sps = sawCollapsedSpans && line.markedSpans
+  if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
+    sp = sps[i]
+    if (!sp.marker.collapsed) { continue }
+    if (sp.from == null) { return true }
+    if (sp.marker.widgetNode) { continue }
+    if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
+      { return true }
+  } }
+}
+function lineIsHiddenInner(doc, line, span) {
+  if (span.to == null) {
+    var end = span.marker.find(1, true)
+    return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))
+  }
+  if (span.marker.inclusiveRight && span.to == line.text.length)
+    { return true }
+  for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {
+    sp = line.markedSpans[i]
+    if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&
+        (sp.to == null || sp.to != span.from) &&
+        (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
+        lineIsHiddenInner(doc, line, sp)) { return true }
+  }
+}
+
+// Find the height above the given line.
+function heightAtLine(lineObj) {
+  lineObj = visualLine(lineObj)
+
+  var h = 0, chunk = lineObj.parent
+  for (var i = 0; i < chunk.lines.length; ++i) {
+    var line = chunk.lines[i]
+    if (line == lineObj) { break }
+    else { h += line.height }
+  }
+  for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {
+    for (var i$1 = 0; i$1 < p.children.length; ++i$1) {
+      var cur = p.children[i$1]
+      if (cur == chunk) { break }
+      else { h += cur.height }
+    }
+  }
+  return h
+}
+
+// Compute the character length of a line, taking into account
+// collapsed ranges (see markText) that might hide parts, and join
+// other lines onto it.
+function lineLength(line) {
+  if (line.height == 0) { return 0 }
+  var len = line.text.length, merged, cur = line
+  while (merged = collapsedSpanAtStart(cur)) {
+    var found = merged.find(0, true)
+    cur = found.from.line
+    len += found.from.ch - found.to.ch
+  }
+  cur = line
+  while (merged = collapsedSpanAtEnd(cur)) {
+    var found$1 = merged.find(0, true)
+    len -= cur.text.length - found$1.from.ch
+    cur = found$1.to.line
+    len += cur.text.length - found$1.to.ch
+  }
+  return len
+}
+
+// Find the longest line in the document.
+function findMaxLine(cm) {
+  var d = cm.display, doc = cm.doc
+  d.maxLine = getLine(doc, doc.first)
+  d.maxLineLength = lineLength(d.maxLine)
+  d.maxLineChanged = true
+  doc.iter(function (line) {
+    var len = lineLength(line)
+    if (len > d.maxLineLength) {
+      d.maxLineLength = len
+      d.maxLine = line
+    }
+  })
+}
+
+// BIDI HELPERS
+
+function iterateBidiSections(order, from, to, f) {
+  if (!order) { return f(from, to, "ltr", 0) }
+  var found = false
+  for (var i = 0; i < order.length; ++i) {
+    var part = order[i]
+    if (part.from < to && part.to > from || from == to && part.to == from) {
+      f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i)
+      found = true
+    }
+  }
+  if (!found) { f(from, to, "ltr") }
+}
+
+var bidiOther = null
+function getBidiPartAt(order, ch, sticky) {
+  var found
+  bidiOther = null
+  for (var i = 0; i < order.length; ++i) {
+    var cur = order[i]
+    if (cur.from < ch && cur.to > ch) { return i }
+    if (cur.to == ch) {
+      if (cur.from != cur.to && sticky == "before") { found = i }
+      else { bidiOther = i }
+    }
+    if (cur.from == ch) {
+      if (cur.from != cur.to && sticky != "before") { found = i }
+      else { bidiOther = i }
+    }
+  }
+  return found != null ? found : bidiOther
+}
+
+// Bidirectional ordering algorithm
+// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
+// that this (partially) implements.
+
+// One-char codes used for character types:
+// L (L):   Left-to-Right
+// R (R):   Right-to-Left
+// r (AL):  Right-to-Left Arabic
+// 1 (EN):  European Number
+// + (ES):  European Number Separator
+// % (ET):  European Number Terminator
+// n (AN):  Arabic Number
+// , (CS):  Common Number Separator
+// m (NSM): Non-Spacing Mark
+// b (BN):  Boundary Neutral
+// s (B):   Paragraph Separator
+// t (S):   Segment Separator
+// w (WS):  Whitespace
+// N (ON):  Other Neutrals
+
+// Returns null if characters are ordered as they appear
+// (left-to-right), or an array of sections ({from, to, level}
+// objects) in the order in which they occur visually.
+var bidiOrdering = (function() {
+  // Character types for codepoints 0 to 0xff
+  var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"
+  // Character types for codepoints 0x600 to 0x6f9
+  var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"
+  function charType(code) {
+    if (code <= 0xf7) { return lowTypes.charAt(code) }
+    else if (0x590 <= code && code <= 0x5f4) { return "R" }
+    else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }
+    else if (0x6ee <= code && code <= 0x8ac) { return "r" }
+    else if (0x2000 <= code && code <= 0x200b) { return "w" }
+    else if (code == 0x200c) { return "b" }
+    else { return "L" }
+  }
+
+  var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/
+  var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/
+
+  function BidiSpan(level, from, to) {
+    this.level = level
+    this.from = from; this.to = to
+  }
+
+  return function(str, direction) {
+    var outerType = direction == "ltr" ? "L" : "R"
+
+    if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false }
+    var len = str.length, types = []
+    for (var i = 0; i < len; ++i)
+      { types.push(charType(str.charCodeAt(i))) }
+
+    // W1. Examine each non-spacing mark (NSM) in the level run, and
+    // change the type of the NSM to the type of the previous
+    // character. If the NSM is at the start of the level run, it will
+    // get the type of sor.
+    for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {
+      var type = types[i$1]
+      if (type == "m") { types[i$1] = prev }
+      else { prev = type }
+    }
+
+    // W2. Search backwards from each instance of a European number
+    // until the first strong type (R, L, AL, or sor) is found. If an
+    // AL is found, change the type of the European number to Arabic
+    // number.
+    // W3. Change all ALs to R.
+    for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {
+      var type$1 = types[i$2]
+      if (type$1 == "1" && cur == "r") { types[i$2] = "n" }
+      else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R" } }
+    }
+
+    // W4. A single European separator between two European numbers
+    // changes to a European number. A single common separator between
+    // two numbers of the same type changes to that type.
+    for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {
+      var type$2 = types[i$3]
+      if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1" }
+      else if (type$2 == "," && prev$1 == types[i$3+1] &&
+               (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1 }
+      prev$1 = type$2
+    }
+
+    // W5. A sequence of European terminators adjacent to European
+    // numbers changes to all European numbers.
+    // W6. Otherwise, separators and terminators change to Other
+    // Neutral.
+    for (var i$4 = 0; i$4 < len; ++i$4) {
+      var type$3 = types[i$4]
+      if (type$3 == ",") { types[i$4] = "N" }
+      else if (type$3 == "%") {
+        var end = (void 0)
+        for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {}
+        var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"
+        for (var j = i$4; j < end; ++j) { types[j] = replace }
+        i$4 = end - 1
+      }
+    }
+
+    // W7. Search backwards from each instance of a European number
+    // until the first strong type (R, L, or sor) is found. If an L is
+    // found, then change the type of the European number to L.
+    for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {
+      var type$4 = types[i$5]
+      if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L" }
+      else if (isStrong.test(type$4)) { cur$1 = type$4 }
+    }
+
+    // N1. A sequence of neutrals takes the direction of the
+    // surrounding strong text if the text on both sides has the same
+    // direction. European and Arabic numbers act as if they were R in
+    // terms of their influence on neutrals. Start-of-level-run (sor)
+    // and end-of-level-run (eor) are used at level run boundaries.
+    // N2. Any remaining neutrals take the embedding direction.
+    for (var i$6 = 0; i$6 < len; ++i$6) {
+      if (isNeutral.test(types[i$6])) {
+        var end$1 = (void 0)
+        for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}
+        var before = (i$6 ? types[i$6-1] : outerType) == "L"
+        var after = (end$1 < len ? types[end$1] : outerType) == "L"
+        var replace$1 = before == after ? (before ? "L" : "R") : outerType
+        for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1 }
+        i$6 = end$1 - 1
+      }
+    }
+
+    // Here we depart from the documented algorithm, in order to avoid
+    // building up an actual levels array. Since there are only three
+    // levels (0, 1, 2) in an implementation that doesn't take
+    // explicit embedding into account, we can build up the order on
+    // the fly, without following the level-based algorithm.
+    var order = [], m
+    for (var i$7 = 0; i$7 < len;) {
+      if (countsAsLeft.test(types[i$7])) {
+        var start = i$7
+        for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}
+        order.push(new BidiSpan(0, start, i$7))
+      } else {
+        var pos = i$7, at = order.length
+        for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {}
+        for (var j$2 = pos; j$2 < i$7;) {
+          if (countsAsNum.test(types[j$2])) {
+            if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)) }
+            var nstart = j$2
+            for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}
+            order.splice(at, 0, new BidiSpan(2, nstart, j$2))
+            pos = j$2
+          } else { ++j$2 }
+        }
+        if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)) }
+      }
+    }
+    if (direction == "ltr") {
+      if (order[0].level == 1 && (m = str.match(/^\s+/))) {
+        order[0].from = m[0].length
+        order.unshift(new BidiSpan(0, 0, m[0].length))
+      }
+      if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
+        lst(order).to -= m[0].length
+        order.push(new BidiSpan(0, len - m[0].length, len))
+      }
+    }
+
+    return direction == "rtl" ? order.reverse() : order
+  }
+})()
+
+// Get the bidi ordering for the given line (and cache it). Returns
+// false for lines that are fully left-to-right, and an array of
+// BidiSpan objects otherwise.
+function getOrder(line, direction) {
+  var order = line.order
+  if (order == null) { order = line.order = bidiOrdering(line.text, direction) }
+  return order
+}
+
+// EVENT HANDLING
+
+// Lightweight event framework. on/off also work on DOM nodes,
+// registering native DOM handlers.
+
+var noHandlers = []
+
+var on = function(emitter, type, f) {
+  if (emitter.addEventListener) {
+    emitter.addEventListener(type, f, false)
+  } else if (emitter.attachEvent) {
+    emitter.attachEvent("on" + type, f)
+  } else {
+    var map = emitter._handlers || (emitter._handlers = {})
+    map[type] = (map[type] || noHandlers).concat(f)
+  }
+}
+
+function getHandlers(emitter, type) {
+  return emitter._handlers && emitter._handlers[type] || noHandlers
+}
+
+function off(emitter, type, f) {
+  if (emitter.removeEventListener) {
+    emitter.removeEventListener(type, f, false)
+  } else if (emitter.detachEvent) {
+    emitter.detachEvent("on" + type, f)
+  } else {
+    var map = emitter._handlers, arr = map && map[type]
+    if (arr) {
+      var index = indexOf(arr, f)
+      if (index > -1)
+        { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)) }
+    }
+  }
+}
+
+function signal(emitter, type /*, values...*/) {
+  var handlers = getHandlers(emitter, type)
+  if (!handlers.length) { return }
+  var args = Array.prototype.slice.call(arguments, 2)
+  for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args) }
+}
+
+// The DOM events that CodeMirror handles can be overridden by
+// registering a (non-DOM) handler on the editor for the event name,
+// and preventDefault-ing the event in that handler.
+function signalDOMEvent(cm, e, override) {
+  if (typeof e == "string")
+    { e = {type: e, preventDefault: function() { this.defaultPrevented = true }} }
+  signal(cm, override || e.type, cm, e)
+  return e_defaultPrevented(e) || e.codemirrorIgnore
+}
+
+function signalCursorActivity(cm) {
+  var arr = cm._handlers && cm._handlers.cursorActivity
+  if (!arr) { return }
+  var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = [])
+  for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)
+    { set.push(arr[i]) } }
+}
+
+function hasHandler(emitter, type) {
+  return getHandlers(emitter, type).length > 0
+}
+
+// Add on and off methods to a constructor's prototype, to make
+// registering events on such objects more convenient.
+function eventMixin(ctor) {
+  ctor.prototype.on = function(type, f) {on(this, type, f)}
+  ctor.prototype.off = function(type, f) {off(this, type, f)}
+}
+
+// Due to the fact that we still support jurassic IE versions, some
+// compatibility wrappers are needed.
+
+function e_preventDefault(e) {
+  if (e.preventDefault) { e.preventDefault() }
+  else { e.returnValue = false }
+}
+function e_stopPropagation(e) {
+  if (e.stopPropagation) { e.stopPropagation() }
+  else { e.cancelBubble = true }
+}
+function e_defaultPrevented(e) {
+  return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false
+}
+function e_stop(e) {e_preventDefault(e); e_stopPropagation(e)}
+
+function e_target(e) {return e.target || e.srcElement}
+function e_button(e) {
+  var b = e.which
+  if (b == null) {
+    if (e.button & 1) { b = 1 }
+    else if (e.button & 2) { b = 3 }
+    else if (e.button & 4) { b = 2 }
+  }
+  if (mac && e.ctrlKey && b == 1) { b = 3 }
+  return b
+}
+
+// Detect drag-and-drop
+var dragAndDrop = function() {
+  // There is *some* kind of drag-and-drop support in IE6-8, but I
+  // couldn't get it to work yet.
+  if (ie && ie_version < 9) { return false }
+  var div = elt('div')
+  return "draggable" in div || "dragDrop" in div
+}()
+
+var zwspSupported
+function zeroWidthElement(measure) {
+  if (zwspSupported == null) {
+    var test = elt("span", "\u200b")
+    removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]))
+    if (measure.firstChild.offsetHeight != 0)
+      { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8) }
+  }
+  var node = zwspSupported ? elt("span", "\u200b") :
+    elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px")
+  node.setAttribute("cm-text", "")
+  return node
+}
+
+// Feature-detect IE's crummy client rect reporting for bidi text
+var badBidiRects
+function hasBadBidiRects(measure) {
+  if (badBidiRects != null) { return badBidiRects }
+  var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA"))
+  var r0 = range(txt, 0, 1).getBoundingClientRect()
+  var r1 = range(txt, 1, 2).getBoundingClientRect()
+  removeChildren(measure)
+  if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)
+  return badBidiRects = (r1.right - r0.right < 3)
+}
+
+// See if "".split is the broken IE version, if so, provide an
+// alternative way to split lines.
+var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) {
+  var pos = 0, result = [], l = string.length
+  while (pos <= l) {
+    var nl = string.indexOf("\n", pos)
+    if (nl == -1) { nl = string.length }
+    var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl)
+    var rt = line.indexOf("\r")
+    if (rt != -1) {
+      result.push(line.slice(0, rt))
+      pos += rt + 1
+    } else {
+      result.push(line)
+      pos = nl + 1
+    }
+  }
+  return result
+} : function (string) { return string.split(/\r\n?|\n/); }
+
+var hasSelection = window.getSelection ? function (te) {
+  try { return te.selectionStart != te.selectionEnd }
+  catch(e) { return false }
+} : function (te) {
+  var range
+  try {range = te.ownerDocument.selection.createRange()}
+  catch(e) {}
+  if (!range || range.parentElement() != te) { return false }
+  return range.compareEndPoints("StartToEnd", range) != 0
+}
+
+var hasCopyEvent = (function () {
+  var e = elt("div")
+  if ("oncopy" in e) { return true }
+  e.setAttribute("oncopy", "return;")
+  return typeof e.oncopy == "function"
+})()
+
+var badZoomedRects = null
+function hasBadZoomedRects(measure) {
+  if (badZoomedRects != null) { return badZoomedRects }
+  var node = removeChildrenAndAdd(measure, elt("span", "x"))
+  var normal = node.getBoundingClientRect()
+  var fromRange = range(node, 0, 1).getBoundingClientRect()
+  return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1
+}
+
+var modes = {};
+var mimeModes = {};
+// Extra arguments are stored as the mode's dependencies, which is
+// used by (legacy) mechanisms like loadmode.js to automatically
+// load a mode. (Preferred mechanism is the require/define calls.)
+function defineMode(name, mode) {
+  if (arguments.length > 2)
+    { mode.dependencies = Array.prototype.slice.call(arguments, 2) }
+  modes[name] = mode
+}
+
+function defineMIME(mime, spec) {
+  mimeModes[mime] = spec
+}
+
+// Given a MIME type, a {name, ...options} config object, or a name
+// string, return a mode config object.
+function resolveMode(spec) {
+  if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
+    spec = mimeModes[spec]
+  } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
+    var found = mimeModes[spec.name]
+    if (typeof found == "string") { found = {name: found} }
+    spec = createObj(found, spec)
+    spec.name = found.name
+  } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
+    return resolveMode("application/xml")
+  } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) {
+    return resolveMode("application/json")
+  }
+  if (typeof spec == "string") { return {name: spec} }
+  else { return spec || {name: "null"} }
+}
+
+// Given a mode spec (anything that resolveMode accepts), find and
+// initialize an actual mode object.
+function getMode(options, spec) {
+  spec = resolveMode(spec)
+  var mfactory = modes[spec.name]
+  if (!mfactory) { return getMode(options, "text/plain") }
+  var modeObj = mfactory(options, spec)
+  if (modeExtensions.hasOwnProperty(spec.name)) {
+    var exts = modeExtensions[spec.name]
+    for (var prop in exts) {
+      if (!exts.hasOwnProperty(prop)) { continue }
+      if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop] }
+      modeObj[prop] = exts[prop]
+    }
+  }
+  modeObj.name = spec.name
+  if (spec.helperType) { modeObj.helperType = spec.helperType }
+  if (spec.modeProps) { for (var prop$1 in spec.modeProps)
+    { modeObj[prop$1] = spec.modeProps[prop$1] } }
+
+  return modeObj
+}
+
+// This can be used to attach properties to mode objects from
+// outside the actual mode definition.
+var modeExtensions = {}
+function extendMode(mode, properties) {
+  var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {})
+  copyObj(properties, exts)
+}
+
+function copyState(mode, state) {
+  if (state === true) { return state }
+  if (mode.copyState) { return mode.copyState(state) }
+  var nstate = {}
+  for (var n in state) {
+    var val = state[n]
+    if (val instanceof Array) { val = val.concat([]) }
+    nstate[n] = val
+  }
+  return nstate
+}
+
+// Given a mode and a state (for that mode), find the inner mode and
+// state at the position that the state refers to.
+function innerMode(mode, state) {
+  var info
+  while (mode.innerMode) {
+    info = mode.innerMode(state)
+    if (!info || info.mode == mode) { break }
+    state = info.state
+    mode = info.mode
+  }
+  return info || {mode: mode, state: state}
+}
+
+function startState(mode, a1, a2) {
+  return mode.startState ? mode.startState(a1, a2) : true
+}
+
+// STRING STREAM
+
+// Fed to the mode parsers, provides helper functions to make
+// parsers more succinct.
+
+var StringStream = function(string, tabSize, lineOracle) {
+  this.pos = this.start = 0
+  this.string = string
+  this.tabSize = tabSize || 8
+  this.lastColumnPos = this.lastColumnValue = 0
+  this.lineStart = 0
+  this.lineOracle = lineOracle
+};
+
+StringStream.prototype.eol = function () {return this.pos >= this.string.length};
+StringStream.prototype.sol = function () {return this.pos == this.lineStart};
+StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};
+StringStream.prototype.next = function () {
+  if (this.pos < this.string.length)
+    { return this.string.charAt(this.pos++) }
+};
+StringStream.prototype.eat = function (match) {
+  var ch = this.string.charAt(this.pos)
+  var ok
+  if (typeof match == "string") { ok = ch == match }
+  else { ok = ch && (match.test ? match.test(ch) : match(ch)) }
+  if (ok) {++this.pos; return ch}
+};
+StringStream.prototype.eatWhile = function (match) {
+  var start = this.pos
+  while (this.eat(match)){}
+  return this.pos > start
+};
+StringStream.prototype.eatSpace = function () {
+    var this$1 = this;
+
+  var start = this.pos
+  while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos }
+  return this.pos > start
+};
+StringStream.prototype.skipToEnd = function () {this.pos = this.string.length};
+StringStream.prototype.skipTo = function (ch) {
+  var found = this.string.indexOf(ch, this.pos)
+  if (found > -1) {this.pos = found; return true}
+};
+StringStream.prototype.backUp = function (n) {this.pos -= n};
+StringStream.prototype.column = function () {
+  if (this.lastColumnPos < this.start) {
+    this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue)
+    this.lastColumnPos = this.start
+  }
+  return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+};
+StringStream.prototype.indentation = function () {
+  return countColumn(this.string, null, this.tabSize) -
+    (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+};
+StringStream.prototype.match = function (pattern, consume, caseInsensitive) {
+  if (typeof pattern == "string") {
+    var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; }
+    var substr = this.string.substr(this.pos, pattern.length)
+    if (cased(substr) == cased(pattern)) {
+      if (consume !== false) { this.pos += pattern.length }
+      return true
+    }
+  } else {
+    var match = this.string.slice(this.pos).match(pattern)
+    if (match && match.index > 0) { return null }
+    if (match && consume !== false) { this.pos += match[0].length }
+    return match
+  }
+};
+StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};
+StringStream.prototype.hideFirstChars = function (n, inner) {
+  this.lineStart += n
+  try { return inner() }
+  finally { this.lineStart -= n }
+};
+StringStream.prototype.lookAhead = function (n) {
+  var oracle = this.lineOracle
+  return oracle && oracle.lookAhead(n)
+};
+StringStream.prototype.baseToken = function () {
+  var oracle = this.lineOracle
+  return oracle && oracle.baseToken(this.pos)
+};
+
+var SavedContext = function(state, lookAhead) {
+  this.state = state
+  this.lookAhead = lookAhead
+};
+
+var Context = function(doc, state, line, lookAhead) {
+  this.state = state
+  this.doc = doc
+  this.line = line
+  this.maxLookAhead = lookAhead || 0
+  this.baseTokens = null
+  this.baseTokenPos = 1
+};
+
+Context.prototype.lookAhead = function (n) {
+  var line = this.doc.getLine(this.line + n)
+  if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n }
+  return line
+};
+
+Context.prototype.baseToken = function (n) {
+    var this$1 = this;
+
+  if (!this.baseTokens) { return null }
+  while (this.baseTokens[this.baseTokenPos] <= n)
+    { this$1.baseTokenPos += 2 }
+  var type = this.baseTokens[this.baseTokenPos + 1]
+  return {type: type && type.replace(/( |^)overlay .*/, ""),
+          size: this.baseTokens[this.baseTokenPos] - n}
+};
+
+Context.prototype.nextLine = function () {
+  this.line++
+  if (this.maxLookAhead > 0) { this.maxLookAhead-- }
+};
+
+Context.fromSaved = function (doc, saved, line) {
+  if (saved instanceof SavedContext)
+    { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }
+  else
+    { return new Context(doc, copyState(doc.mode, saved), line) }
+};
+
+Context.prototype.save = function (copy) {
+  var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state
+  return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state
+};
+
+
+// Compute a style array (an array starting with a mode generation
+// -- for invalidation -- followed by pairs of end positions and
+// style strings), which is used to highlight the tokens on the
+// line.
+function highlightLine(cm, line, context, forceToEnd) {
+  // A styles array always starts with a number identifying the
+  // mode/overlays that it is based on (for easy invalidation).
+  var st = [cm.state.modeGen], lineClasses = {}
+  // Compute the base array of styles
+  runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },
+          lineClasses, forceToEnd)
+  var state = context.state
+
+  // Run overlays, adjust style array.
+  var loop = function ( o ) {
+    context.baseTokens = st
+    var overlay = cm.state.overlays[o], i = 1, at = 0
+    context.state = true
+    runMode(cm, line.text, overlay.mode, context, function (end, style) {
+      var start = i
+      // Ensure there's a token end at the current position, and that i points at it
+      while (at < end) {
+        var i_end = st[i]
+        if (i_end > end)
+          { st.splice(i, 1, end, st[i+1], i_end) }
+        i += 2
+        at = Math.min(end, i_end)
+      }
+      if (!style) { return }
+      if (overlay.opaque) {
+        st.splice(start, i - start, end, "overlay " + style)
+        i = start + 2
+      } else {
+        for (; start < i; start += 2) {
+          var cur = st[start+1]
+          st[start+1] = (cur ? cur + " " : "") + "overlay " + style
+        }
+      }
+    }, lineClasses)
+    context.state = state
+    context.baseTokens = null
+    context.baseTokenPos = 1
+  };
+
+  for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );
+
+  return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}
+}
+
+function getLineStyles(cm, line, updateFrontier) {
+  if (!line.styles || line.styles[0] != cm.state.modeGen) {
+    var context = getContextBefore(cm, lineNo(line))
+    var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state)
+    var result = highlightLine(cm, line, context)
+    if (resetState) { context.state = resetState }
+    line.stateAfter = context.save(!resetState)
+    line.styles = result.styles
+    if (result.classes) { line.styleClasses = result.classes }
+    else if (line.styleClasses) { line.styleClasses = null }
+    if (updateFrontier === cm.doc.highlightFrontier)
+      { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier) }
+  }
+  return line.styles
+}
+
+function getContextBefore(cm, n, precise) {
+  var doc = cm.doc, display = cm.display
+  if (!doc.mode.startState) { return new Context(doc, true, n) }
+  var start = findStartLine(cm, n, precise)
+  var saved = start > doc.first && getLine(doc, start - 1).stateAfter
+  var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start)
+
+  doc.iter(start, n, function (line) {
+    processLine(cm, line.text, context)
+    var pos = context.line
+    line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null
+    context.nextLine()
+  })
+  if (precise) { doc.modeFrontier = context.line }
+  return context
+}
+
+// Lightweight form of highlight -- proceed over this line and
+// update state, but don't save a style array. Used for lines that
+// aren't currently visible.
+function processLine(cm, text, context, startAt) {
+  var mode = cm.doc.mode
+  var stream = new StringStream(text, cm.options.tabSize, context)
+  stream.start = stream.pos = startAt || 0
+  if (text == "") { callBlankLine(mode, context.state) }
+  while (!stream.eol()) {
+    readToken(mode, stream, context.state)
+    stream.start = stream.pos
+  }
+}
+
+function callBlankLine(mode, state) {
+  if (mode.blankLine) { return mode.blankLine(state) }
+  if (!mode.innerMode) { return }
+  var inner = innerMode(mode, state)
+  if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }
+}
+
+function readToken(mode, stream, state, inner) {
+  for (var i = 0; i < 10; i++) {
+    if (inner) { inner[0] = innerMode(mode, state).mode }
+    var style = mode.token(stream, state)
+    if (stream.pos > stream.start) { return style }
+  }
+  throw new Error("Mode " + mode.name + " failed to advance stream.")
+}
+
+var Token = function(stream, type, state) {
+  this.start = stream.start; this.end = stream.pos
+  this.string = stream.current()
+  this.type = type || null
+  this.state = state
+};
+
+// Utility for getTokenAt and getLineTokens
+function takeToken(cm, pos, precise, asArray) {
+  var doc = cm.doc, mode = doc.mode, style
+  pos = clipPos(doc, pos)
+  var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise)
+  var stream = new StringStream(line.text, cm.options.tabSize, context), tokens
+  if (asArray) { tokens = [] }
+  while ((asArray || stream.pos < pos.ch) && !stream.eol()) {
+    stream.start = stream.pos
+    style = readToken(mode, stream, context.state)
+    if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))) }
+  }
+  return asArray ? tokens : new Token(stream, style, context.state)
+}
+
+function extractLineClasses(type, output) {
+  if (type) { for (;;) {
+    var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/)
+    if (!lineClass) { break }
+    type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length)
+    var prop = lineClass[1] ? "bgClass" : "textClass"
+    if (output[prop] == null)
+      { output[prop] = lineClass[2] }
+    else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop]))
+      { output[prop] += " " + lineClass[2] }
+  } }
+  return type
+}
+
+// Run the given mode's parser over a line, calling f for each token.
+function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {
+  var flattenSpans = mode.flattenSpans
+  if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans }
+  var curStart = 0, curStyle = null
+  var stream = new StringStream(text, cm.options.tabSize, context), style
+  var inner = cm.options.addModeClass && [null]
+  if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses) }
+  while (!stream.eol()) {
+    if (stream.pos > cm.options.maxHighlightLength) {
+      flattenSpans = false
+      if (forceToEnd) { processLine(cm, text, context, stream.pos) }
+      stream.pos = text.length
+      style = null
+    } else {
+      style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses)
+    }
+    if (inner) {
+      var mName = inner[0].name
+      if (mName) { style = "m-" + (style ? mName + " " + style : mName) }
+    }
+    if (!flattenSpans || curStyle != style) {
+      while (curStart < stream.start) {
+        curStart = Math.min(stream.start, curStart + 5000)
+        f(curStart, curStyle)
+      }
+      curStyle = style
+    }
+    stream.start = stream.pos
+  }
+  while (curStart < stream.pos) {
+    // Webkit seems to refuse to render text nodes longer than 57444
+    // characters, and returns inaccurate measurements in nodes
+    // starting around 5000 chars.
+    var pos = Math.min(stream.pos, curStart + 5000)
+    f(pos, curStyle)
+    curStart = pos
+  }
+}
+
+// Finds the line to start with when starting a parse. Tries to
+// find a line with a stateAfter, so that it can start with a
+// valid state. If that fails, it returns the line with the
+// smallest indentation, which tends to need the least context to
+// parse correctly.
+function findStartLine(cm, n, precise) {
+  var minindent, minline, doc = cm.doc
+  var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100)
+  for (var search = n; search > lim; --search) {
+    if (search <= doc.first) { return doc.first }
+    var line = getLine(doc, search - 1), after = line.stateAfter
+    if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))
+      { return search }
+    var indented = countColumn(line.text, null, cm.options.tabSize)
+    if (minline == null || minindent > indented) {
+      minline = search - 1
+      minindent = indented
+    }
+  }
+  return minline
+}
+
+function retreatFrontier(doc, n) {
+  doc.modeFrontier = Math.min(doc.modeFrontier, n)
+  if (doc.highlightFrontier < n - 10) { return }
+  var start = doc.first
+  for (var line = n - 1; line > start; line--) {
+    var saved = getLine(doc, line).stateAfter
+    // change is on 3
+    // state on line 1 looked ahead 2 -- so saw 3
+    // test 1 + 2 < 3 should cover this
+    if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {
+      start = line + 1
+      break
+    }
+  }
+  doc.highlightFrontier = Math.min(doc.highlightFrontier, start)
+}
+
+// LINE DATA STRUCTURE
+
+// Line objects. These hold state related to a line, including
+// highlighting info (the styles array).
+var Line = function(text, markedSpans, estimateHeight) {
+  this.text = text
+  attachMarkedSpans(this, markedSpans)
+  this.height = estimateHeight ? estimateHeight(this) : 1
+};
+
+Line.prototype.lineNo = function () { return lineNo(this) };
+eventMixin(Line)
+
+// Change the content (text, markers) of a line. Automatically
+// invalidates cached information and tries to re-estimate the
+// line's height.
+function updateLine(line, text, markedSpans, estimateHeight) {
+  line.text = text
+  if (line.stateAfter) { line.stateAfter = null }
+  if (line.styles) { line.styles = null }
+  if (line.order != null) { line.order = null }
+  detachMarkedSpans(line)
+  attachMarkedSpans(line, markedSpans)
+  var estHeight = estimateHeight ? estimateHeight(line) : 1
+  if (estHeight != line.height) { updateLineHeight(line, estHeight) }
+}
+
+// Detach a line from the document tree and its markers.
+function cleanUpLine(line) {
+  line.parent = null
+  detachMarkedSpans(line)
+}
+
+// Convert a style as returned by a mode (either null, or a string
+// containing one or more styles) to a CSS style. This is cached,
+// and also looks for line-wide styles.
+var styleToClassCache = {};
+var styleToClassCacheWithMode = {};
+function interpretTokenStyle(style, options) {
+  if (!style || /^\s*$/.test(style)) { return null }
+  var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache
+  return cache[style] ||
+    (cache[style] = style.replace(/\S+/g, "cm-$&"))
+}
+
+// Render the DOM representation of the text of a line. Also builds
+// up a 'line map', which points at the DOM nodes that represent
+// specific stretches of text, and is used by the measuring code.
+// The returned object contains the DOM node, this map, and
+// information about line-wide styles that were set by the mode.
+function buildLineContent(cm, lineView) {
+  // The padding-right forces the element to have a 'border', which
+  // is needed on Webkit to be able to get line-level bounding
+  // rectangles for it (in measureChar).
+  var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null)
+  var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content,
+                 col: 0, pos: 0, cm: cm,
+                 trailingSpace: false,
+                 splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")}
+  lineView.measure = {}
+
+  // Iterate over the logical lines that make up this visual line.
+  for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {
+    var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0)
+    builder.pos = 0
+    builder.addToken = buildToken
+    // Optionally wire in some hacks into the token-rendering
+    // algorithm, to deal with browser quirks.
+    if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))
+      { builder.addToken = buildTokenBadBidi(builder.addToken, order) }
+    builder.map = []
+    var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line)
+    insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate))
+    if (line.styleClasses) {
+      if (line.styleClasses.bgClass)
+        { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || "") }
+      if (line.styleClasses.textClass)
+        { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || "") }
+    }
+
+    // Ensure at least a single node is present, for measuring.
+    if (builder.map.length == 0)
+      { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))) }
+
+    // Store the map and a cache object for the current logical line
+    if (i == 0) {
+      lineView.measure.map = builder.map
+      lineView.measure.cache = {}
+    } else {
+      ;(lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)
+      ;(lineView.measure.caches || (lineView.measure.caches = [])).push({})
+    }
+  }
+
+  // See issue #2901
+  if (webkit) {
+    var last = builder.content.lastChild
+    if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab")))
+      { builder.content.className = "cm-tab-wrap-hack" }
+  }
+
+  signal(cm, "renderLine", cm, lineView.line, builder.pre)
+  if (builder.pre.className)
+    { builder.textClass = joinClasses(builder.pre.className, builder.textClass || "") }
+
+  return builder
+}
+
+function defaultSpecialCharPlaceholder(ch) {
+  var token = elt("span", "\u2022", "cm-invalidchar")
+  token.title = "\\u" + ch.charCodeAt(0).toString(16)
+  token.setAttribute("aria-label", token.title)
+  return token
+}
+
+// Build up the DOM representation for a single token, and add it to
+// the line map. Takes care to render special characters separately.
+function buildToken(builder, text, style, startStyle, endStyle, title, css) {
+  if (!text) { return }
+  var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text
+  var special = builder.cm.state.specialChars, mustWrap = false
+  var content
+  if (!special.test(text)) {
+    builder.col += text.length
+    content = document.createTextNode(displayText)
+    builder.map.push(builder.pos, builder.pos + text.length, content)
+    if (ie && ie_version < 9) { mustWrap = true }
+    builder.pos += text.length
+  } else {
+    content = document.createDocumentFragment()
+    var pos = 0
+    while (true) {
+      special.lastIndex = pos
+      var m = special.exec(text)
+      var skipped = m ? m.index - pos : text.length - pos
+      if (skipped) {
+        var txt = document.createTextNode(displayText.slice(pos, pos + skipped))
+        if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])) }
+        else { content.appendChild(txt) }
+        builder.map.push(builder.pos, builder.pos + skipped, txt)
+        builder.col += skipped
+        builder.pos += skipped
+      }
+      if (!m) { break }
+      pos += skipped + 1
+      var txt$1 = (void 0)
+      if (m[0] == "\t") {
+        var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize
+        txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"))
+        txt$1.setAttribute("role", "presentation")
+        txt$1.setAttribute("cm-text", "\t")
+        builder.col += tabWidth
+      } else if (m[0] == "\r" || m[0] == "\n") {
+        txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar"))
+        txt$1.setAttribute("cm-text", m[0])
+        builder.col += 1
+      } else {
+        txt$1 = builder.cm.options.specialCharPlaceholder(m[0])
+        txt$1.setAttribute("cm-text", m[0])
+        if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])) }
+        else { content.appendChild(txt$1) }
+        builder.col += 1
+      }
+      builder.map.push(builder.pos, builder.pos + 1, txt$1)
+      builder.pos++
+    }
+  }
+  builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32
+  if (style || startStyle || endStyle || mustWrap || css) {
+    var fullStyle = style || ""
+    if (startStyle) { fullStyle += startStyle }
+    if (endStyle) { fullStyle += endStyle }
+    var token = elt("span", [content], fullStyle, css)
+    if (title) { token.title = title }
+    return builder.content.appendChild(token)
+  }
+  builder.content.appendChild(content)
+}
+
+function splitSpaces(text, trailingBefore) {
+  if (text.length > 1 && !/  /.test(text)) { return text }
+  var spaceBefore = trailingBefore, result = ""
+  for (var i = 0; i < text.length; i++) {
+    var ch = text.charAt(i)
+    if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))
+      { ch = "\u00a0" }
+    result += ch
+    spaceBefore = ch == " "
+  }
+  return result
+}
+
+// Work around nonsense dimensions being reported for stretches of
+// right-to-left text.
+function buildTokenBadBidi(inner, order) {
+  return function (builder, text, style, startStyle, endStyle, title, css) {
+    style = style ? style + " cm-force-border" : "cm-force-border"
+    var start = builder.pos, end = start + text.length
+    for (;;) {
+      // Find the part that overlaps with the start of this text
+      var part = (void 0)
+      for (var i = 0; i < order.length; i++) {
+        part = order[i]
+        if (part.to > start && part.from <= start) { break }
+      }
+      if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) }
+      inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css)
+      startStyle = null
+      text = text.slice(part.to - start)
+      start = part.to
+    }
+  }
+}
+
+function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
+  var widget = !ignoreWidget && marker.widgetNode
+  if (widget) { builder.map.push(builder.pos, builder.pos + size, widget) }
+  if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {
+    if (!widget)
+      { widget = builder.content.appendChild(document.createElement("span")) }
+    widget.setAttribute("cm-marker", marker.id)
+  }
+  if (widget) {
+    builder.cm.display.input.setUneditable(widget)
+    builder.content.appendChild(widget)
+  }
+  builder.pos += size
+  builder.trailingSpace = false
+}
+
+// Outputs a number of spans to make up a line, taking highlighting
+// and marked text into account.
+function insertLineContent(line, builder, styles) {
+  var spans = line.markedSpans, allText = line.text, at = 0
+  if (!spans) {
+    for (var i$1 = 1; i$1 < styles.length; i$1+=2)
+      { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)) }
+    return
+  }
+
+  var len = allText.length, pos = 0, i = 1, text = "", style, css
+  var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed
+  for (;;) {
+    if (nextChange == pos) { // Update current marker set
+      spanStyle = spanEndStyle = spanStartStyle = title = css = ""
+      collapsed = null; nextChange = Infinity
+      var foundBookmarks = [], endStyles = (void 0)
+      for (var j = 0; j < spans.length; ++j) {
+        var sp = spans[j], m = sp.marker
+        if (m.type == "bookmark" && sp.from == pos && m.widgetNode) {
+          foundBookmarks.push(m)
+        } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {
+          if (sp.to != null && sp.to != pos && nextChange > sp.to) {
+            nextChange = sp.to
+            spanEndStyle = ""
+          }
+          if (m.className) { spanStyle += " " + m.className }
+          if (m.css) { css = (css ? css + ";" : "") + m.css }
+          if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle }
+          if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to) }
+          if (m.title && !title) { title = m.title }
+          if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))
+            { collapsed = sp }
+        } else if (sp.from > pos && nextChange > sp.from) {
+          nextChange = sp.from
+        }
+      }
+      if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)
+        { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1] } } }
+
+      if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)
+        { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]) } }
+      if (collapsed && (collapsed.from || 0) == pos) {
+        buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,
+                           collapsed.marker, collapsed.from == null)
+        if (collapsed.to == null) { return }
+        if (collapsed.to == pos) { collapsed = false }
+      }
+    }
+    if (pos >= len) { break }
+
+    var upto = Math.min(len, nextChange)
+    while (true) {
+      if (text) {
+        var end = pos + text.length
+        if (!collapsed) {
+          var tokenText = end > upto ? text.slice(0, upto - pos) : text
+          builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
+                           spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css)
+        }
+        if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}
+        pos = end
+        spanStartStyle = ""
+      }
+      text = allText.slice(at, at = styles[i++])
+      style = interpretTokenStyle(styles[i++], builder.cm.options)
+    }
+  }
+}
+
+
+// These objects are used to represent the visible (currently drawn)
+// part of the document. A LineView may correspond to multiple
+// logical lines, if those are connected by collapsed ranges.
+function LineView(doc, line, lineN) {
+  // The starting line
+  this.line = line
+  // Continuing lines, if any
+  this.rest = visualLineContinued(line)
+  // Number of logical lines in this visual line
+  this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1
+  this.node = this.text = null
+  this.hidden = lineIsHidden(doc, line)
+}
+
+// Create a range of LineView objects for the given lines.
+function buildViewArray(cm, from, to) {
+  var array = [], nextPos
+  for (var pos = from; pos < to; pos = nextPos) {
+    var view = new LineView(cm.doc, getLine(cm.doc, pos), pos)
+    nextPos = pos + view.size
+    array.push(view)
+  }
+  return array
+}
+
+var operationGroup = null
+
+function pushOperation(op) {
+  if (operationGroup) {
+    operationGroup.ops.push(op)
+  } else {
+    op.ownsGroup = operationGroup = {
+      ops: [op],
+      delayedCallbacks: []
+    }
+  }
+}
+
+function fireCallbacksForOps(group) {
+  // Calls delayed callbacks and cursorActivity handlers until no
+  // new ones appear
+  var callbacks = group.delayedCallbacks, i = 0
+  do {
+    for (; i < callbacks.length; i++)
+      { callbacks[i].call(null) }
+    for (var j = 0; j < group.ops.length; j++) {
+      var op = group.ops[j]
+      if (op.cursorActivityHandlers)
+        { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)
+          { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm) } }
+    }
+  } while (i < callbacks.length)
+}
+
+function finishOperation(op, endCb) {
+  var group = op.ownsGroup
+  if (!group) { return }
+
+  try { fireCallbacksForOps(group) }
+  finally {
+    operationGroup = null
+    endCb(group)
+  }
+}
+
+var orphanDelayedCallbacks = null
+
+// Often, we want to signal events at a point where we are in the
+// middle of some work, but don't want the handler to start calling
+// other methods on the editor, which might be in an inconsistent
+// state or simply not expect any other events to happen.
+// signalLater looks whether there are any handlers, and schedules
+// them to be executed when the last operation ends, or, if no
+// operation is active, when a timeout fires.
+function signalLater(emitter, type /*, values...*/) {
+  var arr = getHandlers(emitter, type)
+  if (!arr.length) { return }
+  var args = Array.prototype.slice.call(arguments, 2), list
+  if (operationGroup) {
+    list = operationGroup.delayedCallbacks
+  } else if (orphanDelayedCallbacks) {
+    list = orphanDelayedCallbacks
+  } else {
+    list = orphanDelayedCallbacks = []
+    setTimeout(fireOrphanDelayed, 0)
+  }
+  var loop = function ( i ) {
+    list.push(function () { return arr[i].apply(null, args); })
+  };
+
+  for (var i = 0; i < arr.length; ++i)
+    loop( i );
+}
+
+function fireOrphanDelayed() {
+  var delayed = orphanDelayedCallbacks
+  orphanDelayedCallbacks = null
+  for (var i = 0; i < delayed.length; ++i) { delayed[i]() }
+}
+
+// When an aspect of a line changes, a string is added to
+// lineView.changes. This updates the relevant part of the line's
+// DOM structure.
+function updateLineForChanges(cm, lineView, lineN, dims) {
+  for (var j = 0; j < lineView.changes.length; j++) {
+    var type = lineView.changes[j]
+    if (type == "text") { updateLineText(cm, lineView) }
+    else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims) }
+    else if (type == "class") { updateLineClasses(cm, lineView) }
+    else if (type == "widget") { updateLineWidgets(cm, lineView, dims) }
+  }
+  lineView.changes = null
+}
+
+// Lines with gutter elements, widgets or a background class need to
+// be wrapped, and have the extra elements added to the wrapper div
+function ensureLineWrapped(lineView) {
+  if (lineView.node == lineView.text) {
+    lineView.node = elt("div", null, null, "position: relative")
+    if (lineView.text.parentNode)
+      { lineView.text.parentNode.replaceChild(lineView.node, lineView.text) }
+    lineView.node.appendChild(lineView.text)
+    if (ie && ie_version < 8) { lineView.node.style.zIndex = 2 }
+  }
+  return lineView.node
+}
+
+function updateLineBackground(cm, lineView) {
+  var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass
+  if (cls) { cls += " CodeMirror-linebackground" }
+  if (lineView.background) {
+    if (cls) { lineView.background.className = cls }
+    else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null }
+  } else if (cls) {
+    var wrap = ensureLineWrapped(lineView)
+    lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild)
+    cm.display.input.setUneditable(lineView.background)
+  }
+}
+
+// Wrapper around buildLineContent which will reuse the structure
+// in display.externalMeasured when possible.
+function getLineContent(cm, lineView) {
+  var ext = cm.display.externalMeasured
+  if (ext && ext.line == lineView.line) {
+    cm.display.externalMeasured = null
+    lineView.measure = ext.measure
+    return ext.built
+  }
+  return buildLineContent(cm, lineView)
+}
+
+// Redraw the line's text. Interacts with the background and text
+// classes because the mode may output tokens that influence these
+// classes.
+function updateLineText(cm, lineView) {
+  var cls = lineView.text.className
+  var built = getLineContent(cm, lineView)
+  if (lineView.text == lineView.node) { lineView.node = built.pre }
+  lineView.text.parentNode.replaceChild(built.pre, lineView.text)
+  lineView.text = built.pre
+  if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
+    lineView.bgClass = built.bgClass
+    lineView.textClass = built.textClass
+    updateLineClasses(cm, lineView)
+  } else if (cls) {
+    lineView.text.className = cls
+  }
+}
+
+function updateLineClasses(cm, lineView) {
+  updateLineBackground(cm, lineView)
+  if (lineView.line.wrapClass)
+    { ensureLineWrapped(lineView).className = lineView.line.wrapClass }
+  else if (lineView.node != lineView.text)
+    { lineView.node.className = "" }
+  var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass
+  lineView.text.className = textClass || ""
+}
+
+function updateLineGutter(cm, lineView, lineN, dims) {
+  if (lineView.gutter) {
+    lineView.node.removeChild(lineView.gutter)
+    lineView.gutter = null
+  }
+  if (lineView.gutterBackground) {
+    lineView.node.removeChild(lineView.gutterBackground)
+    lineView.gutterBackground = null
+  }
+  if (lineView.line.gutterClass) {
+    var wrap = ensureLineWrapped(lineView)
+    lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass,
+                                    ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px"))
+    cm.display.input.setUneditable(lineView.gutterBackground)
+    wrap.insertBefore(lineView.gutterBackground, lineView.text)
+  }
+  var markers = lineView.line.gutterMarkers
+  if (cm.options.lineNumbers || markers) {
+    var wrap$1 = ensureLineWrapped(lineView)
+    var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"))
+    cm.display.input.setUneditable(gutterWrap)
+    wrap$1.insertBefore(gutterWrap, lineView.text)
+    if (lineView.line.gutterClass)
+      { gutterWrap.className += " " + lineView.line.gutterClass }
+    if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
+      { lineView.lineNumber = gutterWrap.appendChild(
+        elt("div", lineNumberFor(cm.options, lineN),
+            "CodeMirror-linenumber CodeMirror-gutter-elt",
+            ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))) }
+    if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) {
+      var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]
+      if (found)
+        { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt",
+                                   ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))) }
+    } }
+  }
+}
+
+function updateLineWidgets(cm, lineView, dims) {
+  if (lineView.alignable) { lineView.alignable = null }
+  for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {
+    next = node.nextSibling
+    if (node.className == "CodeMirror-linewidget")
+      { lineView.node.removeChild(node) }
+  }
+  insertLineWidgets(cm, lineView, dims)
+}
+
+// Build a line's DOM representation from scratch
+function buildLineElement(cm, lineView, lineN, dims) {
+  var built = getLineContent(cm, lineView)
+  lineView.text = lineView.node = built.pre
+  if (built.bgClass) { lineView.bgClass = built.bgClass }
+  if (built.textClass) { lineView.textClass = built.textClass }
+
+  updateLineClasses(cm, lineView)
+  updateLineGutter(cm, lineView, lineN, dims)
+  insertLineWidgets(cm, lineView, dims)
+  return lineView.node
+}
+
+// A lineView may contain multiple logical lines (when merged by
+// collapsed spans). The widgets for all of them need to be drawn.
+function insertLineWidgets(cm, lineView, dims) {
+  insertLineWidgetsFor(cm, lineView.line, lineView, dims, true)
+  if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+    { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false) } }
+}
+
+function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
+  if (!line.widgets) { return }
+  var wrap = ensureLineWrapped(lineView)
+  for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
+    var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget")
+    if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true") }
+    positionLineWidget(widget, node, lineView, dims)
+    cm.display.input.setUneditable(node)
+    if (allowAbove && widget.above)
+      { wrap.insertBefore(node, lineView.gutter || lineView.text) }
+    else
+      { wrap.appendChild(node) }
+    signalLater(widget, "redraw")
+  }
+}
+
+function positionLineWidget(widget, node, lineView, dims) {
+  if (widget.noHScroll) {
+    ;(lineView.alignable || (lineView.alignable = [])).push(node)
+    var width = dims.wrapperWidth
+    node.style.left = dims.fixedPos + "px"
+    if (!widget.coverGutter) {
+      width -= dims.gutterTotalWidth
+      node.style.paddingLeft = dims.gutterTotalWidth + "px"
+    }
+    node.style.width = width + "px"
+  }
+  if (widget.coverGutter) {
+    node.style.zIndex = 5
+    node.style.position = "relative"
+    if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px" }
+  }
+}
+
+function widgetHeight(widget) {
+  if (widget.height != null) { return widget.height }
+  var cm = widget.doc.cm
+  if (!cm) { return 0 }
+  if (!contains(document.body, widget.node)) {
+    var parentStyle = "position: relative;"
+    if (widget.coverGutter)
+      { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;" }
+    if (widget.noHScroll)
+      { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;" }
+    removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle))
+  }
+  return widget.height = widget.node.parentNode.offsetHeight
+}
+
+// Return true when the given mouse event happened in a widget
+function eventInWidget(display, e) {
+  for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
+    if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") ||
+        (n.parentNode == display.sizer && n != display.mover))
+      { return true }
+  }
+}
+
+// POSITION MEASUREMENT
+
+function paddingTop(display) {return display.lineSpace.offsetTop}
+function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}
+function paddingH(display) {
+  if (display.cachedPaddingH) { return display.cachedPaddingH }
+  var e = removeChildrenAndAdd(display.measure, elt("pre", "x"))
+  var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle
+  var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}
+  if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data }
+  return data
+}
+
+function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }
+function displayWidth(cm) {
+  return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth
+}
+function displayHeight(cm) {
+  return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight
+}
+
+// Ensure the lineView.wrapping.heights array is populated. This is
+// an array of bottom offsets for the lines that make up a drawn
+// line. When lineWrapping is on, there might be more than one
+// height.
+function ensureLineHeights(cm, lineView, rect) {
+  var wrapping = cm.options.lineWrapping
+  var curWidth = wrapping && displayWidth(cm)
+  if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
+    var heights = lineView.measure.heights = []
+    if (wrapping) {
+      lineView.measure.width = curWidth
+      var rects = lineView.text.firstChild.getClientRects()
+      for (var i = 0; i < rects.length - 1; i++) {
+        var cur = rects[i], next = rects[i + 1]
+        if (Math.abs(cur.bottom - next.bottom) > 2)
+          { heights.push((cur.bottom + next.top) / 2 - rect.top) }
+      }
+    }
+    heights.push(rect.bottom - rect.top)
+  }
+}
+
+// Find a line map (mapping character offsets to text nodes) and a
+// measurement cache for the given line number. (A line view might
+// contain multiple lines when collapsed ranges are present.)
+function mapFromLineView(lineView, line, lineN) {
+  if (lineView.line == line)
+    { return {map: lineView.measure.map, cache: lineView.measure.cache} }
+  for (var i = 0; i < lineView.rest.length; i++)
+    { if (lineView.rest[i] == line)
+      { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }
+  for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)
+    { if (lineNo(lineView.rest[i$1]) > lineN)
+      { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }
+}
+
+// Render a line into the hidden node display.externalMeasured. Used
+// when measurement is needed for a line that's not in the viewport.
+function updateExternalMeasurement(cm, line) {
+  line = visualLine(line)
+  var lineN = lineNo(line)
+  var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN)
+  view.lineN = lineN
+  var built = view.built = buildLineContent(cm, view)
+  view.text = built.pre
+  removeChildrenAndAdd(cm.display.lineMeasure, built.pre)
+  return view
+}
+
+// Get a {top, bottom, left, right} box (in line-local coordinates)
+// for a given character.
+function measureChar(cm, line, ch, bias) {
+  return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)
+}
+
+// Find a line view that corresponds to the given line number.
+function findViewForLine(cm, lineN) {
+  if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)
+    { return cm.display.view[findViewIndex(cm, lineN)] }
+  var ext = cm.display.externalMeasured
+  if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)
+    { return ext }
+}
+
+// Measurement can be split in two steps, the set-up work that
+// applies to the whole line, and the measurement of the actual
+// character. Functions like coordsChar, that need to do a lot of
+// measurements in a row, can thus ensure that the set-up work is
+// only done once.
+function prepareMeasureForLine(cm, line) {
+  var lineN = lineNo(line)
+  var view = findViewForLine(cm, lineN)
+  if (view && !view.text) {
+    view = null
+  } else if (view && view.changes) {
+    updateLineForChanges(cm, view, lineN, getDimensions(cm))
+    cm.curOp.forceUpdate = true
+  }
+  if (!view)
+    { view = updateExternalMeasurement(cm, line) }
+
+  var info = mapFromLineView(view, line, lineN)
+  return {
+    line: line, view: view, rect: null,
+    map: info.map, cache: info.cache, before: info.before,
+    hasHeights: false
+  }
+}
+
+// Given a prepared measurement object, measures the position of an
+// actual character (or fetches it from the cache).
+function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
+  if (prepared.before) { ch = -1 }
+  var key = ch + (bias || ""), found
+  if (prepared.cache.hasOwnProperty(key)) {
+    found = prepared.cache[key]
+  } else {
+    if (!prepared.rect)
+      { prepared.rect = prepared.view.text.getBoundingClientRect() }
+    if (!prepared.hasHeights) {
+      ensureLineHeights(cm, prepared.view, prepared.rect)
+      prepared.hasHeights = true
+    }
+    found = measureCharInner(cm, prepared, ch, bias)
+    if (!found.bogus) { prepared.cache[key] = found }
+  }
+  return {left: found.left, right: found.right,
+          top: varHeight ? found.rtop : found.top,
+          bottom: varHeight ? found.rbottom : found.bottom}
+}
+
+var nullRect = {left: 0, right: 0, top: 0, bottom: 0}
+
+function nodeAndOffsetInLineMap(map, ch, bias) {
+  var node, start, end, collapse, mStart, mEnd
+  // First, search the line map for the text node corresponding to,
+  // or closest to, the target character.
+  for (var i = 0; i < map.length; i += 3) {
+    mStart = map[i]
+    mEnd = map[i + 1]
+    if (ch < mStart) {
+      start = 0; end = 1
+      collapse = "left"
+    } else if (ch < mEnd) {
+      start = ch - mStart
+      end = start + 1
+    } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {
+      end = mEnd - mStart
+      start = end - 1
+      if (ch >= mEnd) { collapse = "right" }
+    }
+    if (start != null) {
+      node = map[i + 2]
+      if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
+        { collapse = bias }
+      if (bias == "left" && start == 0)
+        { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {
+          node = map[(i -= 3) + 2]
+          collapse = "left"
+        } }
+      if (bias == "right" && start == mEnd - mStart)
+        { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {
+          node = map[(i += 3) + 2]
+          collapse = "right"
+        } }
+      break
+    }
+  }
+  return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}
+}
+
+function getUsefulRect(rects, bias) {
+  var rect = nullRect
+  if (bias == "left") { for (var i = 0; i < rects.length; i++) {
+    if ((rect = rects[i]).left != rect.right) { break }
+  } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {
+    if ((rect = rects[i$1]).left != rect.right) { break }
+  } }
+  return rect
+}
+
+function measureCharInner(cm, prepared, ch, bias) {
+  var place = nodeAndOffsetInLineMap(prepared.map, ch, bias)
+  var node = place.node, start = place.start, end = place.end, collapse = place.collapse
+
+  var rect
+  if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
+    for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned
+      while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start }
+      while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end }
+      if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)
+        { rect = node.parentNode.getBoundingClientRect() }
+      else
+        { rect = getUsefulRect(range(node, start, end).getClientRects(), bias) }
+      if (rect.left || rect.right || start == 0) { break }
+      end = start
+      start = start - 1
+      collapse = "right"
+    }
+    if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect) }
+  } else { // If it is a widget, simply get the box for the whole widget.
+    if (start > 0) { collapse = bias = "right" }
+    var rects
+    if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)
+      { rect = rects[bias == "right" ? rects.length - 1 : 0] }
+    else
+      { rect = node.getBoundingClientRect() }
+  }
+  if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {
+    var rSpan = node.parentNode.getClientRects()[0]
+    if (rSpan)
+      { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom} }
+    else
+      { rect = nullRect }
+  }
+
+  var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top
+  var mid = (rtop + rbot) / 2
+  var heights = prepared.view.measure.heights
+  var i = 0
+  for (; i < heights.length - 1; i++)
+    { if (mid < heights[i]) { break } }
+  var top = i ? heights[i - 1] : 0, bot = heights[i]
+  var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
+                right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
+                top: top, bottom: bot}
+  if (!rect.left && !rect.right) { result.bogus = true }
+  if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot }
+
+  return result
+}
+
+// Work around problem with bounding client rects on ranges being
+// returned incorrectly when zoomed on IE10 and below.
+function maybeUpdateRectForZooming(measure, rect) {
+  if (!window.screen || screen.logicalXDPI == null ||
+      screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))
+    { return rect }
+  var scaleX = screen.logicalXDPI / screen.deviceXDPI
+  var scaleY = screen.logicalYDPI / screen.deviceYDPI
+  return {left: rect.left * scaleX, right: rect.right * scaleX,
+          top: rect.top * scaleY, bottom: rect.bottom * scaleY}
+}
+
+function clearLineMeasurementCacheFor(lineView) {
+  if (lineView.measure) {
+    lineView.measure.cache = {}
+    lineView.measure.heights = null
+    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+      { lineView.measure.caches[i] = {} } }
+  }
+}
+
+function clearLineMeasurementCache(cm) {
+  cm.display.externalMeasure = null
+  removeChildren(cm.display.lineMeasure)
+  for (var i = 0; i < cm.display.view.length; i++)
+    { clearLineMeasurementCacheFor(cm.display.view[i]) }
+}
+
+function clearCaches(cm) {
+  clearLineMeasurementCache(cm)
+  cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null
+  if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true }
+  cm.display.lineNumChars = null
+}
+
+function pageScrollX() {
+  // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206
+  // which causes page_Offset and bounding client rects to use
+  // different reference viewports and invalidate our calculations.
+  if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }
+  return window.pageXOffset || (document.documentElement || document.body).scrollLeft
+}
+function pageScrollY() {
+  if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }
+  return window.pageYOffset || (document.documentElement || document.body).scrollTop
+}
+
+function widgetTopHeight(lineObj) {
+  var height = 0
+  if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)
+    { height += widgetHeight(lineObj.widgets[i]) } } }
+  return height
+}
+
+// Converts a {top, bottom, left, right} box from line-local
+// coordinates into another coordinate system. Context may be one of
+// "line", "div" (display.lineDiv), "local"./null (editor), "window",
+// or "page".
+function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {
+  if (!includeWidgets) {
+    var height = widgetTopHeight(lineObj)
+    rect.top += height; rect.bottom += height
+  }
+  if (context == "line") { return rect }
+  if (!context) { context = "local" }
+  var yOff = heightAtLine(lineObj)
+  if (context == "local") { yOff += paddingTop(cm.display) }
+  else { yOff -= cm.display.viewOffset }
+  if (context == "page" || context == "window") {
+    var lOff = cm.display.lineSpace.getBoundingClientRect()
+    yOff += lOff.top + (context == "window" ? 0 : pageScrollY())
+    var xOff = lOff.left + (context == "window" ? 0 : pageScrollX())
+    rect.left += xOff; rect.right += xOff
+  }
+  rect.top += yOff; rect.bottom += yOff
+  return rect
+}
+
+// Coverts a box from "div" coords to another coordinate system.
+// Context may be "window", "page", "div", or "local"./null.
+function fromCoordSystem(cm, coords, context) {
+  if (context == "div") { return coords }
+  var left = coords.left, top = coords.top
+  // First move into "page" coordinate system
+  if (context == "page") {
+    left -= pageScrollX()
+    top -= pageScrollY()
+  } else if (context == "local" || !context) {
+    var localBox = cm.display.sizer.getBoundingClientRect()
+    left += localBox.left
+    top += localBox.top
+  }
+
+  var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect()
+  return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}
+}
+
+function charCoords(cm, pos, context, lineObj, bias) {
+  if (!lineObj) { lineObj = getLine(cm.doc, pos.line) }
+  return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)
+}
+
+// Returns a box for a given cursor position, which may have an
+// 'other' property containing the position of the secondary cursor
+// on a bidi boundary.
+// A cursor Pos(line, char, "before") is on the same visual line as `char - 1`
+// and after `char - 1` in writing order of `char - 1`
+// A cursor Pos(line, char, "after") is on the same visual line as `char`
+// and before `char` in writing order of `char`
+// Examples (upper-case letters are RTL, lower-case are LTR):
+//     Pos(0, 1, ...)
+//     before   after
+// ab     a|b     a|b
+// aB     a|B     aB|
+// Ab     |Ab     A|b
+// AB     B|A     B|A
+// Every position after the last character on a line is considered to stick
+// to the last character on the line.
+function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {
+  lineObj = lineObj || getLine(cm.doc, pos.line)
+  if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj) }
+  function get(ch, right) {
+    var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight)
+    if (right) { m.left = m.right; } else { m.right = m.left }
+    return intoCoordSystem(cm, lineObj, m, context)
+  }
+  var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky
+  if (ch >= lineObj.text.length) {
+    ch = lineObj.text.length
+    sticky = "before"
+  } else if (ch <= 0) {
+    ch = 0
+    sticky = "after"
+  }
+  if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") }
+
+  function getBidi(ch, partPos, invert) {
+    var part = order[partPos], right = part.level == 1
+    return get(invert ? ch - 1 : ch, right != invert)
+  }
+  var partPos = getBidiPartAt(order, ch, sticky)
+  var other = bidiOther
+  var val = getBidi(ch, partPos, sticky == "before")
+  if (other != null) { val.other = getBidi(ch, other, sticky != "before") }
+  return val
+}
+
+// Used to cheaply estimate the coordinates for a position. Used for
+// intermediate scroll updates.
+function estimateCoords(cm, pos) {
+  var left = 0
+  pos = clipPos(cm.doc, pos)
+  if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch }
+  var lineObj = getLine(cm.doc, pos.line)
+  var top = heightAtLine(lineObj) + paddingTop(cm.display)
+  return {left: left, right: left, top: top, bottom: top + lineObj.height}
+}
+
+// Positions returned by coordsChar contain some extra information.
+// xRel is the relative x position of the input coordinates compared
+// to the found position (so xRel > 0 means the coordinates are to
+// the right of the character position, for example). When outside
+// is true, that means the coordinates lie outside the line's
+// vertical range.
+function PosWithInfo(line, ch, sticky, outside, xRel) {
+  var pos = Pos(line, ch, sticky)
+  pos.xRel = xRel
+  if (outside) { pos.outside = true }
+  return pos
+}
+
+// Compute the character position closest to the given coordinates.
+// Input must be lineSpace-local ("div" coordinate system).
+function coordsChar(cm, x, y) {
+  var doc = cm.doc
+  y += cm.display.viewOffset
+  if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) }
+  var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1
+  if (lineN > last)
+    { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) }
+  if (x < 0) { x = 0 }
+
+  var lineObj = getLine(doc, lineN)
+  for (;;) {
+    var found = coordsCharInner(cm, lineObj, lineN, x, y)
+    var merged = collapsedSpanAtEnd(lineObj)
+    var mergedPos = merged && merged.find(0, true)
+    if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))
+      { lineN = lineNo(lineObj = mergedPos.to.line) }
+    else
+      { return found }
+  }
+}
+
+function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {
+  y -= widgetTopHeight(lineObj)
+  var end = lineObj.text.length
+  var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0)
+  end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end)
+  return {begin: begin, end: end}
+}
+
+function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {
+  if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj) }
+  var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top
+  return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)
+}
+
+// Returns true if the given side of a box is after the given
+// coordinates, in top-to-bottom, left-to-right order.
+function boxIsAfter(box, x, y, left) {
+  return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x
+}
+
+function coordsCharInner(cm, lineObj, lineNo, x, y) {
+  // Move y into line-local coordinate space
+  y -= heightAtLine(lineObj)
+  var preparedMeasure = prepareMeasureForLine(cm, lineObj)
+  // When directly calling `measureCharPrepared`, we have to adjust
+  // for the widgets at this line.
+  var widgetHeight = widgetTopHeight(lineObj)
+  var begin = 0, end = lineObj.text.length, ltr = true
+
+  var order = getOrder(lineObj, cm.doc.direction)
+  // If the line isn't plain left-to-right text, first figure out
+  // which bidi section the coordinates fall into.
+  if (order) {
+    var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)
+                 (cm, lineObj, lineNo, preparedMeasure, order, x, y)
+    ltr = part.level != 1
+    // The awkward -1 offsets are needed because findFirst (called
+    // on these below) will treat its first bound as inclusive,
+    // second as exclusive, but we want to actually address the
+    // characters in the part's range
+    begin = ltr ? part.from : part.to - 1
+    end = ltr ? part.to : part.from - 1
+  }
+
+  // A binary search to find the first character whose bounding box
+  // starts after the coordinates. If we run across any whose box wrap
+  // the coordinates, store that.
+  var chAround = null, boxAround = null
+  var ch = findFirst(function (ch) {
+    var box = measureCharPrepared(cm, preparedMeasure, ch)
+    box.top += widgetHeight; box.bottom += widgetHeight
+    if (!boxIsAfter(box, x, y, false)) { return false }
+    if (box.top <= y && box.left <= x) {
+      chAround = ch
+      boxAround = box
+    }
+    return true
+  }, begin, end)
+
+  var baseX, sticky, outside = false
+  // If a box around the coordinates was found, use that
+  if (boxAround) {
+    // Distinguish coordinates nearer to the left or right side of the box
+    var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr
+    ch = chAround + (atStart ? 0 : 1)
+    sticky = atStart ? "after" : "before"
+    baseX = atLeft ? boxAround.left : boxAround.right
+  } else {
+    // (Adjust for extended bound, if necessary.)
+    if (!ltr && (ch == end || ch == begin)) { ch++ }
+    // To determine which side to associate with, get the box to the
+    // left of the character and compare it's vertical position to the
+    // coordinates
+    sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" :
+      (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?
+      "after" : "before"
+    // Now get accurate coordinates for this place, in order to get a
+    // base X position
+    var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), "line", lineObj, preparedMeasure)
+    baseX = coords.left
+    outside = y < coords.top || y >= coords.bottom
+  }
+
+  ch = skipExtendingChars(lineObj.text, ch, 1)
+  return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)
+}
+
+function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {
+  // Bidi parts are sorted left-to-right, and in a non-line-wrapping
+  // situation, we can take this ordering to correspond to the visual
+  // ordering. This finds the first part whose end is after the given
+  // coordinates.
+  var index = findFirst(function (i) {
+    var part = order[i], ltr = part.level != 1
+    return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? "before" : "after"),
+                                   "line", lineObj, preparedMeasure), x, y, true)
+  }, 0, order.length - 1)
+  var part = order[index]
+  // If this isn't the first part, the part's start is also after
+  // the coordinates, and the coordinates aren't on the same line as
+  // that start, move one part back.
+  if (index > 0) {
+    var ltr = part.level != 1
+    var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? "after" : "before"),
+                             "line", lineObj, preparedMeasure)
+    if (boxIsAfter(start, x, y, true) && start.top > y)
+      { part = order[index - 1] }
+  }
+  return part
+}
+
+function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {
+  // In a wrapped line, rtl text on wrapping boundaries can do things
+  // that don't correspond to the ordering in our `order` array at
+  // all, so a binary search doesn't work, and we want to return a
+  // part that only spans one line so that the binary search in
+  // coordsCharInner is safe. As such, we first find the extent of the
+  // wrapped line, and then do a flat search in which we discard any
+  // spans that aren't on the line.
+  var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);
+  var begin = ref.begin;
+  var end = ref.end;
+  if (/\s/.test(lineObj.text.charAt(end - 1))) { end-- }
+  var part = null, closestDist = null
+  for (var i = 0; i < order.length; i++) {
+    var p = order[i]
+    if (p.from >= end || p.to <= begin) { continue }
+    var ltr = p.level != 1
+    var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right
+    // Weigh against spans ending before this, so that they are only
+    // picked if nothing ends after
+    var dist = endX < x ? x - endX + 1e9 : endX - x
+    if (!part || closestDist > dist) {
+      part = p
+      closestDist = dist
+    }
+  }
+  if (!part) { part = order[order.length - 1] }
+  // Clip the part to the wrapped line.
+  if (part.from < begin) { part = {from: begin, to: part.to, level: part.level} }
+  if (part.to > end) { part = {from: part.from, to: end, level: part.level} }
+  return part
+}
+
+var measureText
+// Compute the default text height.
+function textHeight(display) {
+  if (display.cachedTextHeight != null) { return display.cachedTextHeight }
+  if (measureText == null) {
+    measureText = elt("pre")
+    // Measure a bunch of lines, for browsers that compute
+    // fractional heights.
+    for (var i = 0; i < 49; ++i) {
+      measureText.appendChild(document.createTextNode("x"))
+      measureText.appendChild(elt("br"))
+    }
+    measureText.appendChild(document.createTextNode("x"))
+  }
+  removeChildrenAndAdd(display.measure, measureText)
+  var height = measureText.offsetHeight / 50
+  if (height > 3) { display.cachedTextHeight = height }
+  removeChildren(display.measure)
+  return height || 1
+}
+
+// Compute the default character width.
+function charWidth(display) {
+  if (display.cachedCharWidth != null) { return display.cachedCharWidth }
+  var anchor = elt("span", "xxxxxxxxxx")
+  var pre = elt("pre", [anchor])
+  removeChildrenAndAdd(display.measure, pre)
+  var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10
+  if (width > 2) { display.cachedCharWidth = width }
+  return width || 10
+}
+
+// Do a bulk-read of the DOM positions and sizes needed to draw the
+// view, so that we don't interleave reading and writing to the DOM.
+function getDimensions(cm) {
+  var d = cm.display, left = {}, width = {}
+  var gutterLeft = d.gutters.clientLeft
+  for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
+    left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft
+    width[cm.options.gutters[i]] = n.clientWidth
+  }
+  return {fixedPos: compensateForHScroll(d),
+          gutterTotalWidth: d.gutters.offsetWidth,
+          gutterLeft: left,
+          gutterWidth: width,
+          wrapperWidth: d.wrapper.clientWidth}
+}
+
+// Computes display.scroller.scrollLeft + display.gutters.offsetWidth,
+// but using getBoundingClientRect to get a sub-pixel-accurate
+// result.
+function compensateForHScroll(display) {
+  return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left
+}
+
+// Returns a function that estimates the height of a line, to use as
+// first approximation until the line becomes visible (and is thus
+// properly measurable).
+function estimateHeight(cm) {
+  var th = textHeight(cm.display), wrapping = cm.options.lineWrapping
+  var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3)
+  return function (line) {
+    if (lineIsHidden(cm.doc, line)) { return 0 }
+
+    var widgetsHeight = 0
+    if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {
+      if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height }
+    } }
+
+    if (wrapping)
+      { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }
+    else
+      { return widgetsHeight + th }
+  }
+}
+
+function estimateLineHeights(cm) {
+  var doc = cm.doc, est = estimateHeight(cm)
+  doc.iter(function (line) {
+    var estHeight = est(line)
+    if (estHeight != line.height) { updateLineHeight(line, estHeight) }
+  })
+}
+
+// Given a mouse event, find the corresponding position. If liberal
+// is false, it checks whether a gutter or scrollbar was clicked,
+// and returns null if it was. forRect is used by rectangular
+// selections, and tries to estimate a character position even for
+// coordinates beyond the right of the text.
+function posFromMouse(cm, e, liberal, forRect) {
+  var display = cm.display
+  if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null }
+
+  var x, y, space = display.lineSpace.getBoundingClientRect()
+  // Fails unpredictably on IE[67] when mouse is dragged around quickly.
+  try { x = e.clientX - space.left; y = e.clientY - space.top }
+  catch (e) { return null }
+  var coords = coordsChar(cm, x, y), line
+  if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {
+    var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length
+    coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff))
+  }
+  return coords
+}
+
+// Find the view element corresponding to a given line. Return null
+// when the line isn't visible.
+function findViewIndex(cm, n) {
+  if (n >= cm.display.viewTo) { return null }
+  n -= cm.display.viewFrom
+  if (n < 0) { return null }
+  var view = cm.display.view
+  for (var i = 0; i < view.length; i++) {
+    n -= view[i].size
+    if (n < 0) { return i }
+  }
+}
+
+function updateSelection(cm) {
+  cm.display.input.showSelection(cm.display.input.prepareSelection())
+}
+
+function prepareSelection(cm, primary) {
+  if ( primary === void 0 ) primary = true;
+
+  var doc = cm.doc, result = {}
+  var curFragment = result.cursors = document.createDocumentFragment()
+  var selFragment = result.selection = document.createDocumentFragment()
+
+  for (var i = 0; i < doc.sel.ranges.length; i++) {
+    if (!primary && i == doc.sel.primIndex) { continue }
+    var range = doc.sel.ranges[i]
+    if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }
+    var collapsed = range.empty()
+    if (collapsed || cm.options.showCursorWhenSelecting)
+      { drawSelectionCursor(cm, range.head, curFragment) }
+    if (!collapsed)
+      { drawSelectionRange(cm, range, selFragment) }
+  }
+  return result
+}
+
+// Draws a cursor for the given range
+function drawSelectionCursor(cm, head, output) {
+  var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine)
+
+  var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"))
+  cursor.style.left = pos.left + "px"
+  cursor.style.top = pos.top + "px"
+  cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"
+
+  if (pos.other) {
+    // Secondary cursor, shown when on a 'jump' in bi-directional text
+    var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"))
+    otherCursor.style.display = ""
+    otherCursor.style.left = pos.other.left + "px"
+    otherCursor.style.top = pos.other.top + "px"
+    otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"
+  }
+}
+
+function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }
+
+// Draws the given range as a highlighted selection
+function drawSelectionRange(cm, range, output) {
+  var display = cm.display, doc = cm.doc
+  var fragment = document.createDocumentFragment()
+  var padding = paddingH(cm.display), leftSide = padding.left
+  var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right
+  var docLTR = doc.direction == "ltr"
+
+  function add(left, top, width, bottom) {
+    if (top < 0) { top = 0 }
+    top = Math.round(top)
+    bottom = Math.round(bottom)
+    fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n                             top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n                             height: " + (bottom - top) + "px")))
+  }
+
+  function drawForLine(line, fromArg, toArg) {
+    var lineObj = getLine(doc, line)
+    var lineLen = lineObj.text.length
+    var start, end
+    function coords(ch, bias) {
+      return charCoords(cm, Pos(line, ch), "div", lineObj, bias)
+    }
+
+    function wrapX(pos, dir, side) {
+      var extent = wrappedLineExtentChar(cm, lineObj, null, pos)
+      var prop = (dir == "ltr") == (side == "after") ? "left" : "right"
+      var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1)
+      return coords(ch, prop)[prop]
+    }
+
+    var order = getOrder(lineObj, doc.direction)
+    iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {
+      var ltr = dir == "ltr"
+      var fromPos = coords(from, ltr ? "left" : "right")
+      var toPos = coords(to - 1, ltr ? "right" : "left")
+
+      var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen
+      var first = i == 0, last = !order || i == order.length - 1
+      if (toPos.top - fromPos.top <= 3) { // Single line
+        var openLeft = (docLTR ? openStart : openEnd) && first
+        var openRight = (docLTR ? openEnd : openStart) && last
+        var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left
+        var right = openRight ? rightSide : (ltr ? toPos : fromPos).right
+        add(left, fromPos.top, right - left, fromPos.bottom)
+      } else { // Multiple lines
+        var topLeft, topRight, botLeft, botRight
+        if (ltr) {
+          topLeft = docLTR && openStart && first ? leftSide : fromPos.left
+          topRight = docLTR ? rightSide : wrapX(from, dir, "before")
+          botLeft = docLTR ? leftSide : wrapX(to, dir, "after")
+          botRight = docLTR && openEnd && last ? rightSide : toPos.right
+        } else {
+          topLeft = !docLTR ? leftSide : wrapX(from, dir, "before")
+          topRight = !docLTR && openStart && first ? rightSide : fromPos.right
+          botLeft = !docLTR && openEnd && last ? leftSide : toPos.left
+          botRight = !docLTR ? rightSide : wrapX(to, dir, "after")
+        }
+        add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom)
+        if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top) }
+        add(botLeft, toPos.top, botRight - botLeft, toPos.bottom)
+      }
+
+      if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos }
+      if (cmpCoords(toPos, start) < 0) { start = toPos }
+      if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos }
+      if (cmpCoords(toPos, end) < 0) { end = toPos }
+    })
+    return {start: start, end: end}
+  }
+
+  var sFrom = range.from(), sTo = range.to()
+  if (sFrom.line == sTo.line) {
+    drawForLine(sFrom.line, sFrom.ch, sTo.ch)
+  } else {
+    var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line)
+    var singleVLine = visualLine(fromLine) == visualLine(toLine)
+    var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end
+    var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start
+    if (singleVLine) {
+      if (leftEnd.top < rightStart.top - 2) {
+        add(leftEnd.right, leftEnd.top, null, leftEnd.bottom)
+        add(leftSide, rightStart.top, rightStart.left, rightStart.bottom)
+      } else {
+        add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom)
+      }
+    }
+    if (leftEnd.bottom < rightStart.top)
+      { add(leftSide, leftEnd.bottom, null, rightStart.top) }
+  }
+
+  output.appendChild(fragment)
+}
+
+// Cursor-blinking
+function restartBlink(cm) {
+  if (!cm.state.focused) { return }
+  var display = cm.display
+  clearInterval(display.blinker)
+  var on = true
+  display.cursorDiv.style.visibility = ""
+  if (cm.options.cursorBlinkRate > 0)
+    { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; },
+      cm.options.cursorBlinkRate) }
+  else if (cm.options.cursorBlinkRate < 0)
+    { display.cursorDiv.style.visibility = "hidden" }
+}
+
+function ensureFocus(cm) {
+  if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm) }
+}
+
+function delayBlurEvent(cm) {
+  cm.state.delayingBlurEvent = true
+  setTimeout(function () { if (cm.state.delayingBlurEvent) {
+    cm.state.delayingBlurEvent = false
+    onBlur(cm)
+  } }, 100)
+}
+
+function onFocus(cm, e) {
+  if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false }
+
+  if (cm.options.readOnly == "nocursor") { return }
+  if (!cm.state.focused) {
+    signal(cm, "focus", cm, e)
+    cm.state.focused = true
+    addClass(cm.display.wrapper, "CodeMirror-focused")
+    // This test prevents this from firing when a context
+    // menu is closed (since the input reset would kill the
+    // select-all detection hack)
+    if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
+      cm.display.input.reset()
+      if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20) } // Issue #1730
+    }
+    cm.display.input.receivedFocus()
+  }
+  restartBlink(cm)
+}
+function onBlur(cm, e) {
+  if (cm.state.delayingBlurEvent) { return }
+
+  if (cm.state.focused) {
+    signal(cm, "blur", cm, e)
+    cm.state.focused = false
+    rmClass(cm.display.wrapper, "CodeMirror-focused")
+  }
+  clearInterval(cm.display.blinker)
+  setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false } }, 150)
+}
+
+// Read the actual heights of the rendered lines, and update their
+// stored heights to match.
+function updateHeightsInViewport(cm) {
+  var display = cm.display
+  var prevBottom = display.lineDiv.offsetTop
+  for (var i = 0; i < display.view.length; i++) {
+    var cur = display.view[i], height = (void 0)
+    if (cur.hidden) { continue }
+    if (ie && ie_version < 8) {
+      var bot = cur.node.offsetTop + cur.node.offsetHeight
+      height = bot - prevBottom
+      prevBottom = bot
+    } else {
+      var box = cur.node.getBoundingClientRect()
+      height = box.bottom - box.top
+    }
+    var diff = cur.line.height - height
+    if (height < 2) { height = textHeight(display) }
+    if (diff > .005 || diff < -.005) {
+      updateLineHeight(cur.line, height)
+      updateWidgetHeight(cur.line)
+      if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)
+        { updateWidgetHeight(cur.rest[j]) } }
+    }
+  }
+}
+
+// Read and store the height of line widgets associated with the
+// given line.
+function updateWidgetHeight(line) {
+  if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {
+    var w = line.widgets[i], parent = w.node.parentNode
+    if (parent) { w.height = parent.offsetHeight }
+  } }
+}
+
+// Compute the lines that are visible in a given viewport (defaults
+// the the current scroll position). viewport may contain top,
+// height, and ensure (see op.scrollToPos) properties.
+function visibleLines(display, doc, viewport) {
+  var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop
+  top = Math.floor(top - paddingTop(display))
+  var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight
+
+  var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom)
+  // Ensure is a {from: {line, ch}, to: {line, ch}} object, and
+  // forces those lines into the viewport (if possible).
+  if (viewport && viewport.ensure) {
+    var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line
+    if (ensureFrom < from) {
+      from = ensureFrom
+      to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight)
+    } else if (Math.min(ensureTo, doc.lastLine()) >= to) {
+      from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight)
+      to = ensureTo
+    }
+  }
+  return {from: from, to: Math.max(to, from + 1)}
+}
+
+// Re-align line numbers and gutter marks to compensate for
+// horizontal scrolling.
+function alignHorizontally(cm) {
+  var display = cm.display, view = display.view
+  if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }
+  var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft
+  var gutterW = display.gutters.offsetWidth, left = comp + "px"
+  for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {
+    if (cm.options.fixedGutter) {
+      if (view[i].gutter)
+        { view[i].gutter.style.left = left }
+      if (view[i].gutterBackground)
+        { view[i].gutterBackground.style.left = left }
+    }
+    var align = view[i].alignable
+    if (align) { for (var j = 0; j < align.length; j++)
+      { align[j].style.left = left } }
+  } }
+  if (cm.options.fixedGutter)
+    { display.gutters.style.left = (comp + gutterW) + "px" }
+}
+
+// Used to ensure that the line number gutter is still the right
+// size for the current document size. Returns true when an update
+// is needed.
+function maybeUpdateLineNumberWidth(cm) {
+  if (!cm.options.lineNumbers) { return false }
+  var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display
+  if (last.length != display.lineNumChars) {
+    var test = display.measure.appendChild(elt("div", [elt("div", last)],
+                                               "CodeMirror-linenumber CodeMirror-gutter-elt"))
+    var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW
+    display.lineGutter.style.width = ""
+    display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1
+    display.lineNumWidth = display.lineNumInnerWidth + padding
+    display.lineNumChars = display.lineNumInnerWidth ? last.length : -1
+    display.lineGutter.style.width = display.lineNumWidth + "px"
+    updateGutterSpace(cm)
+    return true
+  }
+  return false
+}
+
+// SCROLLING THINGS INTO VIEW
+
+// If an editor sits on the top or bottom of the window, partially
+// scrolled out of view, this ensures that the cursor is visible.
+function maybeScrollWindow(cm, rect) {
+  if (signalDOMEvent(cm, "scrollCursorIntoView")) { return }
+
+  var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null
+  if (rect.top + box.top < 0) { doScroll = true }
+  else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false }
+  if (doScroll != null && !phantom) {
+    var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n                         top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n                         height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n                         left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;"))
+    cm.display.lineSpace.appendChild(scrollNode)
+    scrollNode.scrollIntoView(doScroll)
+    cm.display.lineSpace.removeChild(scrollNode)
+  }
+}
+
+// Scroll a given position into view (immediately), verifying that
+// it actually became visible (as line heights are accurately
+// measured, the position of something may 'drift' during drawing).
+function scrollPosIntoView(cm, pos, end, margin) {
+  if (margin == null) { margin = 0 }
+  var rect
+  if (!cm.options.lineWrapping && pos == end) {
+    // Set pos and end to the cursor positions around the character pos sticks to
+    // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch
+    // If pos == Pos(_, 0, "before"), pos and end are unchanged
+    pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos
+    end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos
+  }
+  for (var limit = 0; limit < 5; limit++) {
+    var changed = false
+    var coords = cursorCoords(cm, pos)
+    var endCoords = !end || end == pos ? coords : cursorCoords(cm, end)
+    rect = {left: Math.min(coords.left, endCoords.left),
+            top: Math.min(coords.top, endCoords.top) - margin,
+            right: Math.max(coords.left, endCoords.left),
+            bottom: Math.max(coords.bottom, endCoords.bottom) + margin}
+    var scrollPos = calculateScrollPos(cm, rect)
+    var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft
+    if (scrollPos.scrollTop != null) {
+      updateScrollTop(cm, scrollPos.scrollTop)
+      if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true }
+    }
+    if (scrollPos.scrollLeft != null) {
+      setScrollLeft(cm, scrollPos.scrollLeft)
+      if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true }
+    }
+    if (!changed) { break }
+  }
+  return rect
+}
+
+// Scroll a given set of coordinates into view (immediately).
+function scrollIntoView(cm, rect) {
+  var scrollPos = calculateScrollPos(cm, rect)
+  if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop) }
+  if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft) }
+}
+
+// Calculate a new scroll position needed to scroll the given
+// rectangle into view. Returns an object with scrollTop and
+// scrollLeft properties. When these are undefined, the
+// vertical/horizontal position does not need to be adjusted.
+function calculateScrollPos(cm, rect) {
+  var display = cm.display, snapMargin = textHeight(cm.display)
+  if (rect.top < 0) { rect.top = 0 }
+  var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop
+  var screen = displayHeight(cm), result = {}
+  if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen }
+  var docBottom = cm.doc.height + paddingVert(display)
+  var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin
+  if (rect.top < screentop) {
+    result.scrollTop = atTop ? 0 : rect.top
+  } else if (rect.bottom > screentop + screen) {
+    var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen)
+    if (newTop != screentop) { result.scrollTop = newTop }
+  }
+
+  var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft
+  var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0)
+  var tooWide = rect.right - rect.left > screenw
+  if (tooWide) { rect.right = rect.left + screenw }
+  if (rect.left < 10)
+    { result.scrollLeft = 0 }
+  else if (rect.left < screenleft)
+    { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)) }
+  else if (rect.right > screenw + screenleft - 3)
+    { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw }
+  return result
+}
+
+// Store a relative adjustment to the scroll position in the current
+// operation (to be applied when the operation finishes).
+function addToScrollTop(cm, top) {
+  if (top == null) { return }
+  resolveScrollToPos(cm)
+  cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top
+}
+
+// Make sure that at the end of the operation the current cursor is
+// shown.
+function ensureCursorVisible(cm) {
+  resolveScrollToPos(cm)
+  var cur = cm.getCursor()
+  cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin}
+}
+
+function scrollToCoords(cm, x, y) {
+  if (x != null || y != null) { resolveScrollToPos(cm) }
+  if (x != null) { cm.curOp.scrollLeft = x }
+  if (y != null) { cm.curOp.scrollTop = y }
+}
+
+function scrollToRange(cm, range) {
+  resolveScrollToPos(cm)
+  cm.curOp.scrollToPos = range
+}
+
+// When an operation has its scrollToPos property set, and another
+// scroll action is applied before the end of the operation, this
+// 'simulates' scrolling that position into view in a cheap way, so
+// that the effect of intermediate scroll commands is not ignored.
+function resolveScrollToPos(cm) {
+  var range = cm.curOp.scrollToPos
+  if (range) {
+    cm.curOp.scrollToPos = null
+    var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to)
+    scrollToCoordsRange(cm, from, to, range.margin)
+  }
+}
+
+function scrollToCoordsRange(cm, from, to, margin) {
+  var sPos = calculateScrollPos(cm, {
+    left: Math.min(from.left, to.left),
+    top: Math.min(from.top, to.top) - margin,
+    right: Math.max(from.right, to.right),
+    bottom: Math.max(from.bottom, to.bottom) + margin
+  })
+  scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop)
+}
+
+// Sync the scrollable area and scrollbars, ensure the viewport
+// covers the visible area.
+function updateScrollTop(cm, val) {
+  if (Math.abs(cm.doc.scrollTop - val) < 2) { return }
+  if (!gecko) { updateDisplaySimple(cm, {top: val}) }
+  setScrollTop(cm, val, true)
+  if (gecko) { updateDisplaySimple(cm) }
+  startWorker(cm, 100)
+}
+
+function setScrollTop(cm, val, forceScroll) {
+  val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val)
+  if (cm.display.scroller.scrollTop == val && !forceScroll) { return }
+  cm.doc.scrollTop = val
+  cm.display.scrollbars.setScrollTop(val)
+  if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val }
+}
+
+// Sync scroller and scrollbar, ensure the gutter elements are
+// aligned.
+function setScrollLeft(cm, val, isScroller, forceScroll) {
+  val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)
+  if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }
+  cm.doc.scrollLeft = val
+  alignHorizontally(cm)
+  if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val }
+  cm.display.scrollbars.setScrollLeft(val)
+}
+
+// SCROLLBARS
+
+// Prepare DOM reads needed to update the scrollbars. Done in one
+// shot to minimize update/measure roundtrips.
+function measureForScrollbars(cm) {
+  var d = cm.display, gutterW = d.gutters.offsetWidth
+  var docH = Math.round(cm.doc.height + paddingVert(cm.display))
+  return {
+    clientHeight: d.scroller.clientHeight,
+    viewHeight: d.wrapper.clientHeight,
+    scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,
+    viewWidth: d.wrapper.clientWidth,
+    barLeft: cm.options.fixedGutter ? gutterW : 0,
+    docHeight: docH,
+    scrollHeight: docH + scrollGap(cm) + d.barHeight,
+    nativeBarWidth: d.nativeBarWidth,
+    gutterWidth: gutterW
+  }
+}
+
+var NativeScrollbars = function(place, scroll, cm) {
+  this.cm = cm
+  var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar")
+  var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar")
+  place(vert); place(horiz)
+
+  on(vert, "scroll", function () {
+    if (vert.clientHeight) { scroll(vert.scrollTop, "vertical") }
+  })
+  on(horiz, "scroll", function () {
+    if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal") }
+  })
+
+  this.checkedZeroWidth = false
+  // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
+  if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px" }
+};
+
+NativeScrollbars.prototype.update = function (measure) {
+  var needsH = measure.scrollWidth > measure.clientWidth + 1
+  var needsV = measure.scrollHeight > measure.clientHeight + 1
+  var sWidth = measure.nativeBarWidth
+
+  if (needsV) {
+    this.vert.style.display = "block"
+    this.vert.style.bottom = needsH ? sWidth + "px" : "0"
+    var totalHeight = measure.viewHeight - (needsH ? sWidth : 0)
+    // A bug in IE8 can cause this value to be negative, so guard it.
+    this.vert.firstChild.style.height =
+      Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"
+  } else {
+    this.vert.style.display = ""
+    this.vert.firstChild.style.height = "0"
+  }
+
+  if (needsH) {
+    this.horiz.style.display = "block"
+    this.horiz.style.right = needsV ? sWidth + "px" : "0"
+    this.horiz.style.left = measure.barLeft + "px"
+    var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0)
+    this.horiz.firstChild.style.width =
+      Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"
+  } else {
+    this.horiz.style.display = ""
+    this.horiz.firstChild.style.width = "0"
+  }
+
+  if (!this.checkedZeroWidth && measure.clientHeight > 0) {
+    if (sWidth == 0) { this.zeroWidthHack() }
+    this.checkedZeroWidth = true
+  }
+
+  return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}
+};
+
+NativeScrollbars.prototype.setScrollLeft = function (pos) {
+  if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos }
+  if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz") }
+};
+
+NativeScrollbars.prototype.setScrollTop = function (pos) {
+  if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos }
+  if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert") }
+};
+
+NativeScrollbars.prototype.zeroWidthHack = function () {
+  var w = mac && !mac_geMountainLion ? "12px" : "18px"
+  this.horiz.style.height = this.vert.style.width = w
+  this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"
+  this.disableHoriz = new Delayed
+  this.disableVert = new Delayed
+};
+
+NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {
+  bar.style.pointerEvents = "auto"
+  function maybeDisable() {
+    // To find out whether the scrollbar is still visible, we
+    // check whether the element under the pixel in the bottom
+    // right corner of the scrollbar box is the scrollbar box
+    // itself (when the bar is still visible) or its filler child
+    // (when the bar is hidden). If it is still visible, we keep
+    // it enabled, if it's hidden, we disable pointer events.
+    var box = bar.getBoundingClientRect()
+    var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)
+        : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1)
+    if (elt != bar) { bar.style.pointerEvents = "none" }
+    else { delay.set(1000, maybeDisable) }
+  }
+  delay.set(1000, maybeDisable)
+};
+
+NativeScrollbars.prototype.clear = function () {
+  var parent = this.horiz.parentNode
+  parent.removeChild(this.horiz)
+  parent.removeChild(this.vert)
+};
+
+var NullScrollbars = function () {};
+
+NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };
+NullScrollbars.prototype.setScrollLeft = function () {};
+NullScrollbars.prototype.setScrollTop = function () {};
+NullScrollbars.prototype.clear = function () {};
+
+function updateScrollbars(cm, measure) {
+  if (!measure) { measure = measureForScrollbars(cm) }
+  var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight
+  updateScrollbarsInner(cm, measure)
+  for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
+    if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
+      { updateHeightsInViewport(cm) }
+    updateScrollbarsInner(cm, measureForScrollbars(cm))
+    startWidth = cm.display.barWidth; startHeight = cm.display.barHeight
+  }
+}
+
+// Re-synchronize the fake scrollbars with the actual size of the
+// content.
+function updateScrollbarsInner(cm, measure) {
+  var d = cm.display
+  var sizes = d.scrollbars.update(measure)
+
+  d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"
+  d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"
+  d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"
+
+  if (sizes.right && sizes.bottom) {
+    d.scrollbarFiller.style.display = "block"
+    d.scrollbarFiller.style.height = sizes.bottom + "px"
+    d.scrollbarFiller.style.width = sizes.right + "px"
+  } else { d.scrollbarFiller.style.display = "" }
+  if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
+    d.gutterFiller.style.display = "block"
+    d.gutterFiller.style.height = sizes.bottom + "px"
+    d.gutterFiller.style.width = measure.gutterWidth + "px"
+  } else { d.gutterFiller.style.display = "" }
+}
+
+var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}
+
+function initScrollbars(cm) {
+  if (cm.display.scrollbars) {
+    cm.display.scrollbars.clear()
+    if (cm.display.scrollbars.addClass)
+      { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass) }
+  }
+
+  cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {
+    cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller)
+    // Prevent clicks in the scrollbars from killing focus
+    on(node, "mousedown", function () {
+      if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0) }
+    })
+    node.setAttribute("cm-not-content", "true")
+  }, function (pos, axis) {
+    if (axis == "horizontal") { setScrollLeft(cm, pos) }
+    else { updateScrollTop(cm, pos) }
+  }, cm)
+  if (cm.display.scrollbars.addClass)
+    { addClass(cm.display.wrapper, cm.display.scrollbars.addClass) }
+}
+
+// Operations are used to wrap a series of changes to the editor
+// state in such a way that each change won't have to update the
+// cursor and display (which would be awkward, slow, and
+// error-prone). Instead, display updates are batched and then all
+// combined and executed at once.
+
+var nextOpId = 0
+// Start a new operation.
+function startOperation(cm) {
+  cm.curOp = {
+    cm: cm,
+    viewChanged: false,      // Flag that indicates that lines might need to be redrawn
+    startHeight: cm.doc.height, // Used to detect need to update scrollbar
+    forceUpdate: false,      // Used to force a redraw
+    updateInput: null,       // Whether to reset the input textarea
+    typing: false,           // Whether this reset should be careful to leave existing text (for compositing)
+    changeObjs: null,        // Accumulated changes, for firing change events
+    cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on
+    cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already
+    selectionChanged: false, // Whether the selection needs to be redrawn
+    updateMaxLine: false,    // Set when the widest line needs to be determined anew
+    scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
+    scrollToPos: null,       // Used to scroll to a specific position
+    focus: false,
+    id: ++nextOpId           // Unique ID
+  }
+  pushOperation(cm.curOp)
+}
+
+// Finish an operation, updating the display and signalling delayed events
+function endOperation(cm) {
+  var op = cm.curOp
+  finishOperation(op, function (group) {
+    for (var i = 0; i < group.ops.length; i++)
+      { group.ops[i].cm.curOp = null }
+    endOperations(group)
+  })
+}
+
+// The DOM updates done when an operation finishes are batched so
+// that the minimum number of relayouts are required.
+function endOperations(group) {
+  var ops = group.ops
+  for (var i = 0; i < ops.length; i++) // Read DOM
+    { endOperation_R1(ops[i]) }
+  for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)
+    { endOperation_W1(ops[i$1]) }
+  for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM
+    { endOperation_R2(ops[i$2]) }
+  for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)
+    { endOperation_W2(ops[i$3]) }
+  for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM
+    { endOperation_finish(ops[i$4]) }
+}
+
+function endOperation_R1(op) {
+  var cm = op.cm, display = cm.display
+  maybeClipScrollbars(cm)
+  if (op.updateMaxLine) { findMaxLine(cm) }
+
+  op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||
+    op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||
+                       op.scrollToPos.to.line >= display.viewTo) ||
+    display.maxLineChanged && cm.options.lineWrapping
+  op.update = op.mustUpdate &&
+    new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate)
+}
+
+function endOperation_W1(op) {
+  op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update)
+}
+
+function endOperation_R2(op) {
+  var cm = op.cm, display = cm.display
+  if (op.updatedDisplay) { updateHeightsInViewport(cm) }
+
+  op.barMeasure = measureForScrollbars(cm)
+
+  // If the max line changed since it was last measured, measure it,
+  // and ensure the document's width matches it.
+  // updateDisplay_W2 will use these properties to do the actual resizing
+  if (display.maxLineChanged && !cm.options.lineWrapping) {
+    op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3
+    cm.display.sizerWidth = op.adjustWidthTo
+    op.barMeasure.scrollWidth =
+      Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth)
+    op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm))
+  }
+
+  if (op.updatedDisplay || op.selectionChanged)
+    { op.preparedSelection = display.input.prepareSelection() }
+}
+
+function endOperation_W2(op) {
+  var cm = op.cm
+
+  if (op.adjustWidthTo != null) {
+    cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"
+    if (op.maxScrollLeft < cm.doc.scrollLeft)
+      { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true) }
+    cm.display.maxLineChanged = false
+  }
+
+  var takeFocus = op.focus && op.focus == activeElt()
+  if (op.preparedSelection)
+    { cm.display.input.showSelection(op.preparedSelection, takeFocus) }
+  if (op.updatedDisplay || op.startHeight != cm.doc.height)
+    { updateScrollbars(cm, op.barMeasure) }
+  if (op.updatedDisplay)
+    { setDocumentHeight(cm, op.barMeasure) }
+
+  if (op.selectionChanged) { restartBlink(cm) }
+
+  if (cm.state.focused && op.updateInput)
+    { cm.display.input.reset(op.typing) }
+  if (takeFocus) { ensureFocus(op.cm) }
+}
+
+function endOperation_finish(op) {
+  var cm = op.cm, display = cm.display, doc = cm.doc
+
+  if (op.updatedDisplay) { postUpdateDisplay(cm, op.update) }
+
+  // Abort mouse wheel delta measurement, when scrolling explicitly
+  if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))
+    { display.wheelStartX = display.wheelStartY = null }
+
+  // Propagate the scroll position to the actual DOM scroller
+  if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll) }
+
+  if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true) }
+  // If we need to scroll a specific position into view, do so.
+  if (op.scrollToPos) {
+    var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),
+                                 clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin)
+    maybeScrollWindow(cm, rect)
+  }
+
+  // Fire events for markers that are hidden/unidden by editing or
+  // undoing
+  var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers
+  if (hidden) { for (var i = 0; i < hidden.length; ++i)
+    { if (!hidden[i].lines.length) { signal(hidden[i], "hide") } } }
+  if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)
+    { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide") } } }
+
+  if (display.wrapper.offsetHeight)
+    { doc.scrollTop = cm.display.scroller.scrollTop }
+
+  // Fire change events, and delayed event handlers
+  if (op.changeObjs)
+    { signal(cm, "changes", cm, op.changeObjs) }
+  if (op.update)
+    { op.update.finish() }
+}
+
+// Run the given function in an operation
+function runInOp(cm, f) {
+  if (cm.curOp) { return f() }
+  startOperation(cm)
+  try { return f() }
+  finally { endOperation(cm) }
+}
+// Wraps a function in an operation. Returns the wrapped function.
+function operation(cm, f) {
+  return function() {
+    if (cm.curOp) { return f.apply(cm, arguments) }
+    startOperation(cm)
+    try { return f.apply(cm, arguments) }
+    finally { endOperation(cm) }
+  }
+}
+// Used to add methods to editor and doc instances, wrapping them in
+// operations.
+function methodOp(f) {
+  return function() {
+    if (this.curOp) { return f.apply(this, arguments) }
+    startOperation(this)
+    try { return f.apply(this, arguments) }
+    finally { endOperation(this) }
+  }
+}
+function docMethodOp(f) {
+  return function() {
+    var cm = this.cm
+    if (!cm || cm.curOp) { return f.apply(this, arguments) }
+    startOperation(cm)
+    try { return f.apply(this, arguments) }
+    finally { endOperation(cm) }
+  }
+}
+
+// Updates the display.view data structure for a given change to the
+// document. From and to are in pre-change coordinates. Lendiff is
+// the amount of lines added or subtracted by the change. This is
+// used for changes that span multiple lines, or change the way
+// lines are divided into visual lines. regLineChange (below)
+// registers single-line changes.
+function regChange(cm, from, to, lendiff) {
+  if (from == null) { from = cm.doc.first }
+  if (to == null) { to = cm.doc.first + cm.doc.size }
+  if (!lendiff) { lendiff = 0 }
+
+  var display = cm.display
+  if (lendiff && to < display.viewTo &&
+      (display.updateLineNumbers == null || display.updateLineNumbers > from))
+    { display.updateLineNumbers = from }
+
+  cm.curOp.viewChanged = true
+
+  if (from >= display.viewTo) { // Change after
+    if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
+      { resetView(cm) }
+  } else if (to <= display.viewFrom) { // Change before
+    if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
+      resetView(cm)
+    } else {
+      display.viewFrom += lendiff
+      display.viewTo += lendiff
+    }
+  } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
+    resetView(cm)
+  } else if (from <= display.viewFrom) { // Top overlap
+    var cut = viewCuttingPoint(cm, to, to + lendiff, 1)
+    if (cut) {
+      display.view = display.view.slice(cut.index)
+      display.viewFrom = cut.lineN
+      display.viewTo += lendiff
+    } else {
+      resetView(cm)
+    }
+  } else if (to >= display.viewTo) { // Bottom overlap
+    var cut$1 = viewCuttingPoint(cm, from, from, -1)
+    if (cut$1) {
+      display.view = display.view.slice(0, cut$1.index)
+      display.viewTo = cut$1.lineN
+    } else {
+      resetView(cm)
+    }
+  } else { // Gap in the middle
+    var cutTop = viewCuttingPoint(cm, from, from, -1)
+    var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1)
+    if (cutTop && cutBot) {
+      display.view = display.view.slice(0, cutTop.index)
+        .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
+        .concat(display.view.slice(cutBot.index))
+      display.viewTo += lendiff
+    } else {
+      resetView(cm)
+    }
+  }
+
+  var ext = display.externalMeasured
+  if (ext) {
+    if (to < ext.lineN)
+      { ext.lineN += lendiff }
+    else if (from < ext.lineN + ext.size)
+      { display.externalMeasured = null }
+  }
+}
+
+// Register a change to a single line. Type must be one of "text",
+// "gutter", "class", "widget"
+function regLineChange(cm, line, type) {
+  cm.curOp.viewChanged = true
+  var display = cm.display, ext = cm.display.externalMeasured
+  if (ext && line >= ext.lineN && line < ext.lineN + ext.size)
+    { display.externalMeasured = null }
+
+  if (line < display.viewFrom || line >= display.viewTo) { return }
+  var lineView = display.view[findViewIndex(cm, line)]
+  if (lineView.node == null) { return }
+  var arr = lineView.changes || (lineView.changes = [])
+  if (indexOf(arr, type) == -1) { arr.push(type) }
+}
+
+// Clear the view.
+function resetView(cm) {
+  cm.display.viewFrom = cm.display.viewTo = cm.doc.first
+  cm.display.view = []
+  cm.display.viewOffset = 0
+}
+
+function viewCuttingPoint(cm, oldN, newN, dir) {
+  var index = findViewIndex(cm, oldN), diff, view = cm.display.view
+  if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)
+    { return {index: index, lineN: newN} }
+  var n = cm.display.viewFrom
+  for (var i = 0; i < index; i++)
+    { n += view[i].size }
+  if (n != oldN) {
+    if (dir > 0) {
+      if (index == view.length - 1) { return null }
+      diff = (n + view[index].size) - oldN
+      index++
+    } else {
+      diff = n - oldN
+    }
+    oldN += diff; newN += diff
+  }
+  while (visualLineNo(cm.doc, newN) != newN) {
+    if (index == (dir < 0 ? 0 : view.length - 1)) { return null }
+    newN += dir * view[index - (dir < 0 ? 1 : 0)].size
+    index += dir
+  }
+  return {index: index, lineN: newN}
+}
+
+// Force the view to cover a given range, adding empty view element
+// or clipping off existing ones as needed.
+function adjustView(cm, from, to) {
+  var display = cm.display, view = display.view
+  if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {
+    display.view = buildViewArray(cm, from, to)
+    display.viewFrom = from
+  } else {
+    if (display.viewFrom > from)
+      { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view) }
+    else if (display.viewFrom < from)
+      { display.view = display.view.slice(findViewIndex(cm, from)) }
+    display.viewFrom = from
+    if (display.viewTo < to)
+      { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)) }
+    else if (display.viewTo > to)
+      { display.view = display.view.slice(0, findViewIndex(cm, to)) }
+  }
+  display.viewTo = to
+}
+
+// Count the number of lines in the view whose DOM representation is
+// out of date (or nonexistent).
+function countDirtyView(cm) {
+  var view = cm.display.view, dirty = 0
+  for (var i = 0; i < view.length; i++) {
+    var lineView = view[i]
+    if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty }
+  }
+  return dirty
+}
+
+// HIGHLIGHT WORKER
+
+function startWorker(cm, time) {
+  if (cm.doc.highlightFrontier < cm.display.viewTo)
+    { cm.state.highlight.set(time, bind(highlightWorker, cm)) }
+}
+
+function highlightWorker(cm) {
+  var doc = cm.doc
+  if (doc.highlightFrontier >= cm.display.viewTo) { return }
+  var end = +new Date + cm.options.workTime
+  var context = getContextBefore(cm, doc.highlightFrontier)
+  var changedLines = []
+
+  doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {
+    if (context.line >= cm.display.viewFrom) { // Visible
+      var oldStyles = line.styles
+      var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null
+      var highlighted = highlightLine(cm, line, context, true)
+      if (resetState) { context.state = resetState }
+      line.styles = highlighted.styles
+      var oldCls = line.styleClasses, newCls = highlighted.classes
+      if (newCls) { line.styleClasses = newCls }
+      else if (oldCls) { line.styleClasses = null }
+      var ischange = !oldStyles || oldStyles.length != line.styles.length ||
+        oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass)
+      for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i] }
+      if (ischange) { changedLines.push(context.line) }
+      line.stateAfter = context.save()
+      context.nextLine()
+    } else {
+      if (line.text.length <= cm.options.maxHighlightLength)
+        { processLine(cm, line.text, context) }
+      line.stateAfter = context.line % 5 == 0 ? context.save() : null
+      context.nextLine()
+    }
+    if (+new Date > end) {
+      startWorker(cm, cm.options.workDelay)
+      return true
+    }
+  })
+  doc.highlightFrontier = context.line
+  doc.modeFrontier = Math.max(doc.modeFrontier, context.line)
+  if (changedLines.length) { runInOp(cm, function () {
+    for (var i = 0; i < changedLines.length; i++)
+      { regLineChange(cm, changedLines[i], "text") }
+  }) }
+}
+
+// DISPLAY DRAWING
+
+var DisplayUpdate = function(cm, viewport, force) {
+  var display = cm.display
+
+  this.viewport = viewport
+  // Store some values that we'll need later (but don't want to force a relayout for)
+  this.visible = visibleLines(display, cm.doc, viewport)
+  this.editorIsHidden = !display.wrapper.offsetWidth
+  this.wrapperHeight = display.wrapper.clientHeight
+  this.wrapperWidth = display.wrapper.clientWidth
+  this.oldDisplayWidth = displayWidth(cm)
+  this.force = force
+  this.dims = getDimensions(cm)
+  this.events = []
+};
+
+DisplayUpdate.prototype.signal = function (emitter, type) {
+  if (hasHandler(emitter, type))
+    { this.events.push(arguments) }
+};
+DisplayUpdate.prototype.finish = function () {
+    var this$1 = this;
+
+  for (var i = 0; i < this.events.length; i++)
+    { signal.apply(null, this$1.events[i]) }
+};
+
+function maybeClipScrollbars(cm) {
+  var display = cm.display
+  if (!display.scrollbarsClipped && display.scroller.offsetWidth) {
+    display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth
+    display.heightForcer.style.height = scrollGap(cm) + "px"
+    display.sizer.style.marginBottom = -display.nativeBarWidth + "px"
+    display.sizer.style.borderRightWidth = scrollGap(cm) + "px"
+    display.scrollbarsClipped = true
+  }
+}
+
+function selectionSnapshot(cm) {
+  if (cm.hasFocus()) { return null }
+  var active = activeElt()
+  if (!active || !contains(cm.display.lineDiv, active)) { return null }
+  var result = {activeElt: active}
+  if (window.getSelection) {
+    var sel = window.getSelection()
+    if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {
+      result.anchorNode = sel.anchorNode
+      result.anchorOffset = sel.anchorOffset
+      result.focusNode = sel.focusNode
+      result.focusOffset = sel.focusOffset
+    }
+  }
+  return result
+}
+
+function restoreSelection(snapshot) {
+  if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }
+  snapshot.activeElt.focus()
+  if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {
+    var sel = window.getSelection(), range = document.createRange()
+    range.setEnd(snapshot.anchorNode, snapshot.anchorOffset)
+    range.collapse(false)
+    sel.removeAllRanges()
+    sel.addRange(range)
+    sel.extend(snapshot.focusNode, snapshot.focusOffset)
+  }
+}
+
+// Does the actual updating of the line display. Bails out
+// (returning false) when there is nothing to be done and forced is
+// false.
+function updateDisplayIfNeeded(cm, update) {
+  var display = cm.display, doc = cm.doc
+
+  if (update.editorIsHidden) {
+    resetView(cm)
+    return false
+  }
+
+  // Bail out if the visible area is already rendered and nothing changed.
+  if (!update.force &&
+      update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&
+      (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&
+      display.renderedView == display.view && countDirtyView(cm) == 0)
+    { return false }
+
+  if (maybeUpdateLineNumberWidth(cm)) {
+    resetView(cm)
+    update.dims = getDimensions(cm)
+  }
+
+  // Compute a suitable new viewport (from & to)
+  var end = doc.first + doc.size
+  var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first)
+  var to = Math.min(end, update.visible.to + cm.options.viewportMargin)
+  if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom) }
+  if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo) }
+  if (sawCollapsedSpans) {
+    from = visualLineNo(cm.doc, from)
+    to = visualLineEndNo(cm.doc, to)
+  }
+
+  var different = from != display.viewFrom || to != display.viewTo ||
+    display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth
+  adjustView(cm, from, to)
+
+  display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom))
+  // Position the mover div to align with the current scroll position
+  cm.display.mover.style.top = display.viewOffset + "px"
+
+  var toUpdate = countDirtyView(cm)
+  if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&
+      (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))
+    { return false }
+
+  // For big changes, we hide the enclosing element during the
+  // update, since that speeds up the operations on most browsers.
+  var selSnapshot = selectionSnapshot(cm)
+  if (toUpdate > 4) { display.lineDiv.style.display = "none" }
+  patchDisplay(cm, display.updateLineNumbers, update.dims)
+  if (toUpdate > 4) { display.lineDiv.style.display = "" }
+  display.renderedView = display.view
+  // There might have been a widget with a focused element that got
+  // hidden or updated, if so re-focus it.
+  restoreSelection(selSnapshot)
+
+  // Prevent selection and cursors from interfering with the scroll
+  // width and height.
+  removeChildren(display.cursorDiv)
+  removeChildren(display.selectionDiv)
+  display.gutters.style.height = display.sizer.style.minHeight = 0
+
+  if (different) {
+    display.lastWrapHeight = update.wrapperHeight
+    display.lastWrapWidth = update.wrapperWidth
+    startWorker(cm, 400)
+  }
+
+  display.updateLineNumbers = null
+
+  return true
+}
+
+function postUpdateDisplay(cm, update) {
+  var viewport = update.viewport
+
+  for (var first = true;; first = false) {
+    if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
+      // Clip forced viewport to actual scrollable area.
+      if (viewport && viewport.top != null)
+        { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)} }
+      // Updated line heights might result in the drawn area not
+      // actually covering the viewport. Keep looping until it does.
+      update.visible = visibleLines(cm.display, cm.doc, viewport)
+      if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)
+        { break }
+    }
+    if (!updateDisplayIfNeeded(cm, update)) { break }
+    updateHeightsInViewport(cm)
+    var barMeasure = measureForScrollbars(cm)
+    updateSelection(cm)
+    updateScrollbars(cm, barMeasure)
+    setDocumentHeight(cm, barMeasure)
+    update.force = false
+  }
+
+  update.signal(cm, "update", cm)
+  if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {
+    update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo)
+    cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo
+  }
+}
+
+function updateDisplaySimple(cm, viewport) {
+  var update = new DisplayUpdate(cm, viewport)
+  if (updateDisplayIfNeeded(cm, update)) {
+    updateHeightsInViewport(cm)
+    postUpdateDisplay(cm, update)
+    var barMeasure = measureForScrollbars(cm)
+    updateSelection(cm)
+    updateScrollbars(cm, barMeasure)
+    setDocumentHeight(cm, barMeasure)
+    update.finish()
+  }
+}
+
+// Sync the actual display DOM structure with display.view, removing
+// nodes for lines that are no longer in view, and creating the ones
+// that are not there yet, and updating the ones that are out of
+// date.
+function patchDisplay(cm, updateNumbersFrom, dims) {
+  var display = cm.display, lineNumbers = cm.options.lineNumbers
+  var container = display.lineDiv, cur = container.firstChild
+
+  function rm(node) {
+    var next = node.nextSibling
+    // Works around a throw-scroll bug in OS X Webkit
+    if (webkit && mac && cm.display.currentWheelTarget == node)
+      { node.style.display = "none" }
+    else
+      { node.parentNode.removeChild(node) }
+    return next
+  }
+
+  var view = display.view, lineN = display.viewFrom
+  // Loop over the elements in the view, syncing cur (the DOM nodes
+  // in display.lineDiv) with the view as we go.
+  for (var i = 0; i < view.length; i++) {
+    var lineView = view[i]
+    if (lineView.hidden) {
+    } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet
+      var node = buildLineElement(cm, lineView, lineN, dims)
+      container.insertBefore(node, cur)
+    } else { // Already drawn
+      while (cur != lineView.node) { cur = rm(cur) }
+      var updateNumber = lineNumbers && updateNumbersFrom != null &&
+        updateNumbersFrom <= lineN && lineView.lineNumber
+      if (lineView.changes) {
+        if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false }
+        updateLineForChanges(cm, lineView, lineN, dims)
+      }
+      if (updateNumber) {
+        removeChildren(lineView.lineNumber)
+        lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)))
+      }
+      cur = lineView.node.nextSibling
+    }
+    lineN += lineView.size
+  }
+  while (cur) { cur = rm(cur) }
+}
+
+function updateGutterSpace(cm) {
+  var width = cm.display.gutters.offsetWidth
+  cm.display.sizer.style.marginLeft = width + "px"
+}
+
+function setDocumentHeight(cm, measure) {
+  cm.display.sizer.style.minHeight = measure.docHeight + "px"
+  cm.display.heightForcer.style.top = measure.docHeight + "px"
+  cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"
+}
+
+// Rebuild the gutter elements, ensure the margin to the left of the
+// code matches their width.
+function updateGutters(cm) {
+  var gutters = cm.display.gutters, specs = cm.options.gutters
+  removeChildren(gutters)
+  var i = 0
+  for (; i < specs.length; ++i) {
+    var gutterClass = specs[i]
+    var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass))
+    if (gutterClass == "CodeMirror-linenumbers") {
+      cm.display.lineGutter = gElt
+      gElt.style.width = (cm.display.lineNumWidth || 1) + "px"
+    }
+  }
+  gutters.style.display = i ? "" : "none"
+  updateGutterSpace(cm)
+}
+
+// Make sure the gutters options contains the element
+// "CodeMirror-linenumbers" when the lineNumbers option is true.
+function setGuttersForLineNumbers(options) {
+  var found = indexOf(options.gutters, "CodeMirror-linenumbers")
+  if (found == -1 && options.lineNumbers) {
+    options.gutters = options.gutters.concat(["CodeMirror-linenumbers"])
+  } else if (found > -1 && !options.lineNumbers) {
+    options.gutters = options.gutters.slice(0)
+    options.gutters.splice(found, 1)
+  }
+}
+
+var wheelSamples = 0;
+var wheelPixelsPerUnit = null;
+// Fill in a browser-detected starting value on browsers where we
+// know one. These don't have to be accurate -- the result of them
+// being wrong would just be a slight flicker on the first wheel
+// scroll (if it is large enough).
+if (ie) { wheelPixelsPerUnit = -.53 }
+else if (gecko) { wheelPixelsPerUnit = 15 }
+else if (chrome) { wheelPixelsPerUnit = -.7 }
+else if (safari) { wheelPixelsPerUnit = -1/3 }
+
+function wheelEventDelta(e) {
+  var dx = e.wheelDeltaX, dy = e.wheelDeltaY
+  if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail }
+  if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail }
+  else if (dy == null) { dy = e.wheelDelta }
+  return {x: dx, y: dy}
+}
+function wheelEventPixels(e) {
+  var delta = wheelEventDelta(e)
+  delta.x *= wheelPixelsPerUnit
+  delta.y *= wheelPixelsPerUnit
+  return delta
+}
+
+function onScrollWheel(cm, e) {
+  var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y
+
+  var display = cm.display, scroll = display.scroller
+  // Quit if there's nothing to scroll here
+  var canScrollX = scroll.scrollWidth > scroll.clientWidth
+  var canScrollY = scroll.scrollHeight > scroll.clientHeight
+  if (!(dx && canScrollX || dy && canScrollY)) { return }
+
+  // Webkit browsers on OS X abort momentum scrolls when the target
+  // of the scroll event is removed from the scrollable element.
+  // This hack (see related code in patchDisplay) makes sure the
+  // element is kept around.
+  if (dy && mac && webkit) {
+    outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
+      for (var i = 0; i < view.length; i++) {
+        if (view[i].node == cur) {
+          cm.display.currentWheelTarget = cur
+          break outer
+        }
+      }
+    }
+  }
+
+  // On some browsers, horizontal scrolling will cause redraws to
+  // happen before the gutter has been realigned, causing it to
+  // wriggle around in a most unseemly way. When we have an
+  // estimated pixels/delta value, we just handle horizontal
+  // scrolling entirely here. It'll be slightly off from native, but
+  // better than glitching out.
+  if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {
+    if (dy && canScrollY)
+      { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)) }
+    setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit))
+    // Only prevent default scrolling if vertical scrolling is
+    // actually possible. Otherwise, it causes vertical scroll
+    // jitter on OSX trackpads when deltaX is small and deltaY
+    // is large (issue #3579)
+    if (!dy || (dy && canScrollY))
+      { e_preventDefault(e) }
+    display.wheelStartX = null // Abort measurement, if in progress
+    return
+  }
+
+  // 'Project' the visible viewport to cover the area that is being
+  // scrolled into view (if we know enough to estimate it).
+  if (dy && wheelPixelsPerUnit != null) {
+    var pixels = dy * wheelPixelsPerUnit
+    var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight
+    if (pixels < 0) { top = Math.max(0, top + pixels - 50) }
+    else { bot = Math.min(cm.doc.height, bot + pixels + 50) }
+    updateDisplaySimple(cm, {top: top, bottom: bot})
+  }
+
+  if (wheelSamples < 20) {
+    if (display.wheelStartX == null) {
+      display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop
+      display.wheelDX = dx; display.wheelDY = dy
+      setTimeout(function () {
+        if (display.wheelStartX == null) { return }
+        var movedX = scroll.scrollLeft - display.wheelStartX
+        var movedY = scroll.scrollTop - display.wheelStartY
+        var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
+          (movedX && display.wheelDX && movedX / display.wheelDX)
+        display.wheelStartX = display.wheelStartY = null
+        if (!sample) { return }
+        wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1)
+        ++wheelSamples
+      }, 200)
+    } else {
+      display.wheelDX += dx; display.wheelDY += dy
+    }
+  }
+}
+
+// Selection objects are immutable. A new one is created every time
+// the selection changes. A selection is one or more non-overlapping
+// (and non-touching) ranges, sorted, and an integer that indicates
+// which one is the primary selection (the one that's scrolled into
+// view, that getCursor returns, etc).
+var Selection = function(ranges, primIndex) {
+  this.ranges = ranges
+  this.primIndex = primIndex
+};
+
+Selection.prototype.primary = function () { return this.ranges[this.primIndex] };
+
+Selection.prototype.equals = function (other) {
+    var this$1 = this;
+
+  if (other == this) { return true }
+  if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }
+  for (var i = 0; i < this.ranges.length; i++) {
+    var here = this$1.ranges[i], there = other.ranges[i]
+    if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }
+  }
+  return true
+};
+
+Selection.prototype.deepCopy = function () {
+    var this$1 = this;
+
+  var out = []
+  for (var i = 0; i < this.ranges.length; i++)
+    { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)) }
+  return new Selection(out, this.primIndex)
+};
+
+Selection.prototype.somethingSelected = function () {
+    var this$1 = this;
+
+  for (var i = 0; i < this.ranges.length; i++)
+    { if (!this$1.ranges[i].empty()) { return true } }
+  return false
+};
+
+Selection.prototype.contains = function (pos, end) {
+    var this$1 = this;
+
+  if (!end) { end = pos }
+  for (var i = 0; i < this.ranges.length; i++) {
+    var range = this$1.ranges[i]
+    if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
+      { return i }
+  }
+  return -1
+};
+
+var Range = function(anchor, head) {
+  this.anchor = anchor; this.head = head
+};
+
+Range.prototype.from = function () { return minPos(this.anchor, this.head) };
+Range.prototype.to = function () { return maxPos(this.anchor, this.head) };
+Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };
+
+// Take an unsorted, potentially overlapping set of ranges, and
+// build a selection out of it. 'Consumes' ranges array (modifying
+// it).
+function normalizeSelection(ranges, primIndex) {
+  var prim = ranges[primIndex]
+  ranges.sort(function (a, b) { return cmp(a.from(), b.from()); })
+  primIndex = indexOf(ranges, prim)
+  for (var i = 1; i < ranges.length; i++) {
+    var cur = ranges[i], prev = ranges[i - 1]
+    if (cmp(prev.to(), cur.from()) >= 0) {
+      var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to())
+      var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head
+      if (i <= primIndex) { --primIndex }
+      ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to))
+    }
+  }
+  return new Selection(ranges, primIndex)
+}
+
+function simpleSelection(anchor, head) {
+  return new Selection([new Range(anchor, head || anchor)], 0)
+}
+
+// Compute the position of the end of a change (its 'to' property
+// refers to the pre-change end).
+function changeEnd(change) {
+  if (!change.text) { return change.to }
+  return Pos(change.from.line + change.text.length - 1,
+             lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))
+}
+
+// Adjust a position to refer to the post-change position of the
+// same text, or the end of the change if the change covers it.
+function adjustForChange(pos, change) {
+  if (cmp(pos, change.from) < 0) { return pos }
+  if (cmp(pos, change.to) <= 0) { return changeEnd(change) }
+
+  var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch
+  if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch }
+  return Pos(line, ch)
+}
+
+function computeSelAfterChange(doc, change) {
+  var out = []
+  for (var i = 0; i < doc.sel.ranges.length; i++) {
+    var range = doc.sel.ranges[i]
+    out.push(new Range(adjustForChange(range.anchor, change),
+                       adjustForChange(range.head, change)))
+  }
+  return normalizeSelection(out, doc.sel.primIndex)
+}
+
+function offsetPos(pos, old, nw) {
+  if (pos.line == old.line)
+    { return Pos(nw.line, pos.ch - old.ch + nw.ch) }
+  else
+    { return Pos(nw.line + (pos.line - old.line), pos.ch) }
+}
+
+// Used by replaceSelections to allow moving the selection to the
+// start or around the replaced test. Hint may be "start" or "around".
+function computeReplacedSel(doc, changes, hint) {
+  var out = []
+  var oldPrev = Pos(doc.first, 0), newPrev = oldPrev
+  for (var i = 0; i < changes.length; i++) {
+    var change = changes[i]
+    var from = offsetPos(change.from, oldPrev, newPrev)
+    var to = offsetPos(changeEnd(change), oldPrev, newPrev)
+    oldPrev = change.to
+    newPrev = to
+    if (hint == "around") {
+      var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0
+      out[i] = new Range(inv ? to : from, inv ? from : to)
+    } else {
+      out[i] = new Range(from, from)
+    }
+  }
+  return new Selection(out, doc.sel.primIndex)
+}
+
+// Used to get the editor into a consistent state again when options change.
+
+function loadMode(cm) {
+  cm.doc.mode = getMode(cm.options, cm.doc.modeOption)
+  resetModeState(cm)
+}
+
+function resetModeState(cm) {
+  cm.doc.iter(function (line) {
+    if (line.stateAfter) { line.stateAfter = null }
+    if (line.styles) { line.styles = null }
+  })
+  cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first
+  startWorker(cm, 100)
+  cm.state.modeGen++
+  if (cm.curOp) { regChange(cm) }
+}
+
+// DOCUMENT DATA STRUCTURE
+
+// By default, updates that start and end at the beginning of a line
+// are treated specially, in order to make the association of line
+// widgets and marker elements with the text behave more intuitive.
+function isWholeLineUpdate(doc, change) {
+  return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" &&
+    (!doc.cm || doc.cm.options.wholeLineUpdateBefore)
+}
+
+// Perform a change on the document data structure.
+function updateDoc(doc, change, markedSpans, estimateHeight) {
+  function spansFor(n) {return markedSpans ? markedSpans[n] : null}
+  function update(line, text, spans) {
+    updateLine(line, text, spans, estimateHeight)
+    signalLater(line, "change", line, change)
+  }
+  function linesFor(start, end) {
+    var result = []
+    for (var i = start; i < end; ++i)
+      { result.push(new Line(text[i], spansFor(i), estimateHeight)) }
+    return result
+  }
+
+  var from = change.from, to = change.to, text = change.text
+  var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line)
+  var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line
+
+  // Adjust the line structure
+  if (change.full) {
+    doc.insert(0, linesFor(0, text.length))
+    doc.remove(text.length, doc.size - text.length)
+  } else if (isWholeLineUpdate(doc, change)) {
+    // This is a whole-line replace. Treated specially to make
+    // sure line objects move the way they are supposed to.
+    var added = linesFor(0, text.length - 1)
+    update(lastLine, lastLine.text, lastSpans)
+    if (nlines) { doc.remove(from.line, nlines) }
+    if (added.length) { doc.insert(from.line, added) }
+  } else if (firstLine == lastLine) {
+    if (text.length == 1) {
+      update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans)
+    } else {
+      var added$1 = linesFor(1, text.length - 1)
+      added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight))
+      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0))
+      doc.insert(from.line + 1, added$1)
+    }
+  } else if (text.length == 1) {
+    update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0))
+    doc.remove(from.line + 1, nlines)
+  } else {
+    update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0))
+    update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans)
+    var added$2 = linesFor(1, text.length - 1)
+    if (nlines > 1) { doc.remove(from.line + 1, nlines - 1) }
+    doc.insert(from.line + 1, added$2)
+  }
+
+  signalLater(doc, "change", doc, change)
+}
+
+// Call f for all linked documents.
+function linkedDocs(doc, f, sharedHistOnly) {
+  function propagate(doc, skip, sharedHist) {
+    if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {
+      var rel = doc.linked[i]
+      if (rel.doc == skip) { continue }
+      var shared = sharedHist && rel.sharedHist
+      if (sharedHistOnly && !shared) { continue }
+      f(rel.doc, shared)
+      propagate(rel.doc, doc, shared)
+    } }
+  }
+  propagate(doc, null, true)
+}
+
+// Attach a document to an editor.
+function attachDoc(cm, doc) {
+  if (doc.cm) { throw new Error("This document is already in use.") }
+  cm.doc = doc
+  doc.cm = cm
+  estimateLineHeights(cm)
+  loadMode(cm)
+  setDirectionClass(cm)
+  if (!cm.options.lineWrapping) { findMaxLine(cm) }
+  cm.options.mode = doc.modeOption
+  regChange(cm)
+}
+
+function setDirectionClass(cm) {
+  ;(cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl")
+}
+
+function directionChanged(cm) {
+  runInOp(cm, function () {
+    setDirectionClass(cm)
+    regChange(cm)
+  })
+}
+
+function History(startGen) {
+  // Arrays of change events and selections. Doing something adds an
+  // event to done and clears undo. Undoing moves events from done
+  // to undone, redoing moves them in the other direction.
+  this.done = []; this.undone = []
+  this.undoDepth = Infinity
+  // Used to track when changes can be merged into a single undo
+  // event
+  this.lastModTime = this.lastSelTime = 0
+  this.lastOp = this.lastSelOp = null
+  this.lastOrigin = this.lastSelOrigin = null
+  // Used by the isClean() method
+  this.generation = this.maxGeneration = startGen || 1
+}
+
+// Create a history change event from an updateDoc-style change
+// object.
+function historyChangeFromChange(doc, change) {
+  var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}
+  attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1)
+  linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true)
+  return histChange
+}
+
+// Pop all selection events off the end of a history array. Stop at
+// a change event.
+function clearSelectionEvents(array) {
+  while (array.length) {
+    var last = lst(array)
+    if (last.ranges) { array.pop() }
+    else { break }
+  }
+}
+
+// Find the top change event in the history. Pop off selection
+// events that are in the way.
+function lastChangeEvent(hist, force) {
+  if (force) {
+    clearSelectionEvents(hist.done)
+    return lst(hist.done)
+  } else if (hist.done.length && !lst(hist.done).ranges) {
+    return lst(hist.done)
+  } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {
+    hist.done.pop()
+    return lst(hist.done)
+  }
+}
+
+// Register a change in the history. Merges changes that are within
+// a single operation, or are close together with an origin that
+// allows merging (starting with "+") into a single event.
+function addChangeToHistory(doc, change, selAfter, opId) {
+  var hist = doc.history
+  hist.undone.length = 0
+  var time = +new Date, cur
+  var last
+
+  if ((hist.lastOp == opId ||
+       hist.lastOrigin == change.origin && change.origin &&
+       ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) ||
+        change.origin.charAt(0) == "*")) &&
+      (cur = lastChangeEvent(hist, hist.lastOp == opId))) {
+    // Merge this change into the last event
+    last = lst(cur.changes)
+    if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {
+      // Optimized case for simple insertion -- don't want to add
+      // new changesets for every character typed
+      last.to = changeEnd(change)
+    } else {
+      // Add new sub-event
+      cur.changes.push(historyChangeFromChange(doc, change))
+    }
+  } else {
+    // Can not be merged, start a new event.
+    var before = lst(hist.done)
+    if (!before || !before.ranges)
+      { pushSelectionToHistory(doc.sel, hist.done) }
+    cur = {changes: [historyChangeFromChange(doc, change)],
+           generation: hist.generation}
+    hist.done.push(cur)
+    while (hist.done.length > hist.undoDepth) {
+      hist.done.shift()
+      if (!hist.done[0].ranges) { hist.done.shift() }
+    }
+  }
+  hist.done.push(selAfter)
+  hist.generation = ++hist.maxGeneration
+  hist.lastModTime = hist.lastSelTime = time
+  hist.lastOp = hist.lastSelOp = opId
+  hist.lastOrigin = hist.lastSelOrigin = change.origin
+
+  if (!last) { signal(doc, "historyAdded") }
+}
+
+function selectionEventCanBeMerged(doc, origin, prev, sel) {
+  var ch = origin.charAt(0)
+  return ch == "*" ||
+    ch == "+" &&
+    prev.ranges.length == sel.ranges.length &&
+    prev.somethingSelected() == sel.somethingSelected() &&
+    new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)
+}
+
+// Called whenever the selection changes, sets the new selection as
+// the pending selection in the history, and pushes the old pending
+// selection into the 'done' array when it was significantly
+// different (in number of selected ranges, emptiness, or time).
+function addSelectionToHistory(doc, sel, opId, options) {
+  var hist = doc.history, origin = options && options.origin
+
+  // A new event is started when the previous origin does not match
+  // the current, or the origins don't allow matching. Origins
+  // starting with * are always merged, those starting with + are
+  // merged when similar and close together in time.
+  if (opId == hist.lastSelOp ||
+      (origin && hist.lastSelOrigin == origin &&
+       (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||
+        selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))
+    { hist.done[hist.done.length - 1] = sel }
+  else
+    { pushSelectionToHistory(sel, hist.done) }
+
+  hist.lastSelTime = +new Date
+  hist.lastSelOrigin = origin
+  hist.lastSelOp = opId
+  if (options && options.clearRedo !== false)
+    { clearSelectionEvents(hist.undone) }
+}
+
+function pushSelectionToHistory(sel, dest) {
+  var top = lst(dest)
+  if (!(top && top.ranges && top.equals(sel)))
+    { dest.push(sel) }
+}
+
+// Used to store marked span information in the history.
+function attachLocalSpans(doc, change, from, to) {
+  var existing = change["spans_" + doc.id], n = 0
+  doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {
+    if (line.markedSpans)
+      { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans }
+    ++n
+  })
+}
+
+// When un/re-doing restores text containing marked spans, those
+// that have been explicitly cleared should not be restored.
+function removeClearedSpans(spans) {
+  if (!spans) { return null }
+  var out
+  for (var i = 0; i < spans.length; ++i) {
+    if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i) } }
+    else if (out) { out.push(spans[i]) }
+  }
+  return !out ? spans : out.length ? out : null
+}
+
+// Retrieve and filter the old marked spans stored in a change event.
+function getOldSpans(doc, change) {
+  var found = change["spans_" + doc.id]
+  if (!found) { return null }
+  var nw = []
+  for (var i = 0; i < change.text.length; ++i)
+    { nw.push(removeClearedSpans(found[i])) }
+  return nw
+}
+
+// Used for un/re-doing changes from the history. Combines the
+// result of computing the existing spans with the set of spans that
+// existed in the history (so that deleting around a span and then
+// undoing brings back the span).
+function mergeOldSpans(doc, change) {
+  var old = getOldSpans(doc, change)
+  var stretched = stretchSpansOverChange(doc, change)
+  if (!old) { return stretched }
+  if (!stretched) { return old }
+
+  for (var i = 0; i < old.length; ++i) {
+    var oldCur = old[i], stretchCur = stretched[i]
+    if (oldCur && stretchCur) {
+      spans: for (var j = 0; j < stretchCur.length; ++j) {
+        var span = stretchCur[j]
+        for (var k = 0; k < oldCur.length; ++k)
+          { if (oldCur[k].marker == span.marker) { continue spans } }
+        oldCur.push(span)
+      }
+    } else if (stretchCur) {
+      old[i] = stretchCur
+    }
+  }
+  return old
+}
+
+// Used both to provide a JSON-safe object in .getHistory, and, when
+// detaching a document, to split the history in two
+function copyHistoryArray(events, newGroup, instantiateSel) {
+  var copy = []
+  for (var i = 0; i < events.length; ++i) {
+    var event = events[i]
+    if (event.ranges) {
+      copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event)
+      continue
+    }
+    var changes = event.changes, newChanges = []
+    copy.push({changes: newChanges})
+    for (var j = 0; j < changes.length; ++j) {
+      var change = changes[j], m = (void 0)
+      newChanges.push({from: change.from, to: change.to, text: change.text})
+      if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) {
+        if (indexOf(newGroup, Number(m[1])) > -1) {
+          lst(newChanges)[prop] = change[prop]
+          delete change[prop]
+        }
+      } } }
+    }
+  }
+  return copy
+}
+
+// The 'scroll' parameter given to many of these indicated whether
+// the new cursor position should be scrolled into view after
+// modifying the selection.
+
+// If shift is held or the extend flag is set, extends a range to
+// include a given position (and optionally a second position).
+// Otherwise, simply returns the range between the given positions.
+// Used for cursor motion and such.
+function extendRange(range, head, other, extend) {
+  if (extend) {
+    var anchor = range.anchor
+    if (other) {
+      var posBefore = cmp(head, anchor) < 0
+      if (posBefore != (cmp(other, anchor) < 0)) {
+        anchor = head
+        head = other
+      } else if (posBefore != (cmp(head, other) < 0)) {
+        head = other
+      }
+    }
+    return new Range(anchor, head)
+  } else {
+    return new Range(other || head, head)
+  }
+}
+
+// Extend the primary selection range, discard the rest.
+function extendSelection(doc, head, other, options, extend) {
+  if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend) }
+  setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options)
+}
+
+// Extend all selections (pos is an array of selections with length
+// equal the number of selections)
+function extendSelections(doc, heads, options) {
+  var out = []
+  var extend = doc.cm && (doc.cm.display.shift || doc.extend)
+  for (var i = 0; i < doc.sel.ranges.length; i++)
+    { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend) }
+  var newSel = normalizeSelection(out, doc.sel.primIndex)
+  setSelection(doc, newSel, options)
+}
+
+// Updates a single range in the selection.
+function replaceOneSelection(doc, i, range, options) {
+  var ranges = doc.sel.ranges.slice(0)
+  ranges[i] = range
+  setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options)
+}
+
+// Reset the selection to a single range.
+function setSimpleSelection(doc, anchor, head, options) {
+  setSelection(doc, simpleSelection(anchor, head), options)
+}
+
+// Give beforeSelectionChange handlers a change to influence a
+// selection update.
+function filterSelectionChange(doc, sel, options) {
+  var obj = {
+    ranges: sel.ranges,
+    update: function(ranges) {
+      var this$1 = this;
+
+      this.ranges = []
+      for (var i = 0; i < ranges.length; i++)
+        { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),
+                                   clipPos(doc, ranges[i].head)) }
+    },
+    origin: options && options.origin
+  }
+  signal(doc, "beforeSelectionChange", doc, obj)
+  if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj) }
+  if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) }
+  else { return sel }
+}
+
+function setSelectionReplaceHistory(doc, sel, options) {
+  var done = doc.history.done, last = lst(done)
+  if (last && last.ranges) {
+    done[done.length - 1] = sel
+    setSelectionNoUndo(doc, sel, options)
+  } else {
+    setSelection(doc, sel, options)
+  }
+}
+
+// Set a new selection.
+function setSelection(doc, sel, options) {
+  setSelectionNoUndo(doc, sel, options)
+  addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options)
+}
+
+function setSelectionNoUndo(doc, sel, options) {
+  if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange"))
+    { sel = filterSelectionChange(doc, sel, options) }
+
+  var bias = options && options.bias ||
+    (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1)
+  setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true))
+
+  if (!(options && options.scroll === false) && doc.cm)
+    { ensureCursorVisible(doc.cm) }
+}
+
+function setSelectionInner(doc, sel) {
+  if (sel.equals(doc.sel)) { return }
+
+  doc.sel = sel
+
+  if (doc.cm) {
+    doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true
+    signalCursorActivity(doc.cm)
+  }
+  signalLater(doc, "cursorActivity", doc)
+}
+
+// Verify that the selection does not partially select any atomic
+// marked ranges.
+function reCheckSelection(doc) {
+  setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false))
+}
+
+// Return a selection that does not partially select any atomic
+// ranges.
+function skipAtomicInSelection(doc, sel, bias, mayClear) {
+  var out
+  for (var i = 0; i < sel.ranges.length; i++) {
+    var range = sel.ranges[i]
+    var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]
+    var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear)
+    var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear)
+    if (out || newAnchor != range.anchor || newHead != range.head) {
+      if (!out) { out = sel.ranges.slice(0, i) }
+      out[i] = new Range(newAnchor, newHead)
+    }
+  }
+  return out ? normalizeSelection(out, sel.primIndex) : sel
+}
+
+function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {
+  var line = getLine(doc, pos.line)
+  if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+    var sp = line.markedSpans[i], m = sp.marker
+    if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&
+        (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {
+      if (mayClear) {
+        signal(m, "beforeCursorEnter")
+        if (m.explicitlyCleared) {
+          if (!line.markedSpans) { break }
+          else {--i; continue}
+        }
+      }
+      if (!m.atomic) { continue }
+
+      if (oldPos) {
+        var near = m.find(dir < 0 ? 1 : -1), diff = (void 0)
+        if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)
+          { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null) }
+        if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))
+          { return skipAtomicInner(doc, near, pos, dir, mayClear) }
+      }
+
+      var far = m.find(dir < 0 ? -1 : 1)
+      if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)
+        { far = movePos(doc, far, dir, far.line == pos.line ? line : null) }
+      return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null
+    }
+  } }
+  return pos
+}
+
+// Ensure a given position is not inside an atomic range.
+function skipAtomic(doc, pos, oldPos, bias, mayClear) {
+  var dir = bias || 1
+  var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||
+      (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||
+      skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||
+      (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true))
+  if (!found) {
+    doc.cantEdit = true
+    return Pos(doc.first, 0)
+  }
+  return found
+}
+
+function movePos(doc, pos, dir, line) {
+  if (dir < 0 && pos.ch == 0) {
+    if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }
+    else { return null }
+  } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {
+    if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }
+    else { return null }
+  } else {
+    return new Pos(pos.line, pos.ch + dir)
+  }
+}
+
+function selectAll(cm) {
+  cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll)
+}
+
+// UPDATING
+
+// Allow "beforeChange" event handlers to influence a change
+function filterChange(doc, change, update) {
+  var obj = {
+    canceled: false,
+    from: change.from,
+    to: change.to,
+    text: change.text,
+    origin: change.origin,
+    cancel: function () { return obj.canceled = true; }
+  }
+  if (update) { obj.update = function (from, to, text, origin) {
+    if (from) { obj.from = clipPos(doc, from) }
+    if (to) { obj.to = clipPos(doc, to) }
+    if (text) { obj.text = text }
+    if (origin !== undefined) { obj.origin = origin }
+  } }
+  signal(doc, "beforeChange", doc, obj)
+  if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj) }
+
+  if (obj.canceled) { return null }
+  return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}
+}
+
+// Apply a change to a document, and add it to the document's
+// history, and propagating it to all linked documents.
+function makeChange(doc, change, ignoreReadOnly) {
+  if (doc.cm) {
+    if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }
+    if (doc.cm.state.suppressEdits) { return }
+  }
+
+  if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
+    change = filterChange(doc, change, true)
+    if (!change) { return }
+  }
+
+  // Possibly split or suppress the update based on the presence
+  // of read-only spans in its range.
+  var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to)
+  if (split) {
+    for (var i = split.length - 1; i >= 0; --i)
+      { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}) }
+  } else {
+    makeChangeInner(doc, change)
+  }
+}
+
+function makeChangeInner(doc, change) {
+  if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return }
+  var selAfter = computeSelAfterChange(doc, change)
+  addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN)
+
+  makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change))
+  var rebased = []
+
+  linkedDocs(doc, function (doc, sharedHist) {
+    if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+      rebaseHist(doc.history, change)
+      rebased.push(doc.history)
+    }
+    makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change))
+  })
+}
+
+// Revert a change stored in a document's history.
+function makeChangeFromHistory(doc, type, allowSelectionOnly) {
+  if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) { return }
+
+  var hist = doc.history, event, selAfter = doc.sel
+  var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done
+
+  // Verify that there is a useable event (so that ctrl-z won't
+  // needlessly clear selection events)
+  var i = 0
+  for (; i < source.length; i++) {
+    event = source[i]
+    if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)
+      { break }
+  }
+  if (i == source.length) { return }
+  hist.lastOrigin = hist.lastSelOrigin = null
+
+  for (;;) {
+    event = source.pop()
+    if (event.ranges) {
+      pushSelectionToHistory(event, dest)
+      if (allowSelectionOnly && !event.equals(doc.sel)) {
+        setSelection(doc, event, {clearRedo: false})
+        return
+      }
+      selAfter = event
+    }
+    else { break }
+  }
+
+  // Build up a reverse change object to add to the opposite history
+  // stack (redo when undoing, and vice versa).
+  var antiChanges = []
+  pushSelectionToHistory(selAfter, dest)
+  dest.push({changes: antiChanges, generation: hist.generation})
+  hist.generation = event.generation || ++hist.maxGeneration
+
+  var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")
+
+  var loop = function ( i ) {
+    var change = event.changes[i]
+    change.origin = type
+    if (filter && !filterChange(doc, change, false)) {
+      source.length = 0
+      return {}
+    }
+
+    antiChanges.push(historyChangeFromChange(doc, change))
+
+    var after = i ? computeSelAfterChange(doc, change) : lst(source)
+    makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change))
+    if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}) }
+    var rebased = []
+
+    // Propagate to the linked documents
+    linkedDocs(doc, function (doc, sharedHist) {
+      if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+        rebaseHist(doc.history, change)
+        rebased.push(doc.history)
+      }
+      makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change))
+    })
+  };
+
+  for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {
+    var returned = loop( i$1 );
+
+    if ( returned ) return returned.v;
+  }
+}
+
+// Sub-views need their line numbers shifted when text is added
+// above or below them in the parent document.
+function shiftDoc(doc, distance) {
+  if (distance == 0) { return }
+  doc.first += distance
+  doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(
+    Pos(range.anchor.line + distance, range.anchor.ch),
+    Pos(range.head.line + distance, range.head.ch)
+  ); }), doc.sel.primIndex)
+  if (doc.cm) {
+    regChange(doc.cm, doc.first, doc.first - distance, distance)
+    for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)
+      { regLineChange(doc.cm, l, "gutter") }
+  }
+}
+
+// More lower-level change function, handling only a single document
+// (not linked ones).
+function makeChangeSingleDoc(doc, change, selAfter, spans) {
+  if (doc.cm && !doc.cm.curOp)
+    { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }
+
+  if (change.to.line < doc.first) {
+    shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line))
+    return
+  }
+  if (change.from.line > doc.lastLine()) { return }
+
+  // Clip the change to the size of this doc
+  if (change.from.line < doc.first) {
+    var shift = change.text.length - 1 - (doc.first - change.from.line)
+    shiftDoc(doc, shift)
+    change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
+              text: [lst(change.text)], origin: change.origin}
+  }
+  var last = doc.lastLine()
+  if (change.to.line > last) {
+    change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
+              text: [change.text[0]], origin: change.origin}
+  }
+
+  change.removed = getBetween(doc, change.from, change.to)
+
+  if (!selAfter) { selAfter = computeSelAfterChange(doc, change) }
+  if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans) }
+  else { updateDoc(doc, change, spans) }
+  setSelectionNoUndo(doc, selAfter, sel_dontScroll)
+}
+
+// Handle the interaction of a change to a document with the editor
+// that this document is part of.
+function makeChangeSingleDocInEditor(cm, change, spans) {
+  var doc = cm.doc, display = cm.display, from = change.from, to = change.to
+
+  var recomputeMaxLength = false, checkWidthStart = from.line
+  if (!cm.options.lineWrapping) {
+    checkWidthStart = lineNo(visualLine(getLine(doc, from.line)))
+    doc.iter(checkWidthStart, to.line + 1, function (line) {
+      if (line == display.maxLine) {
+        recomputeMaxLength = true
+        return true
+      }
+    })
+  }
+
+  if (doc.sel.contains(change.from, change.to) > -1)
+    { signalCursorActivity(cm) }
+
+  updateDoc(doc, change, spans, estimateHeight(cm))
+
+  if (!cm.options.lineWrapping) {
+    doc.iter(checkWidthStart, from.line + change.text.length, function (line) {
+      var len = lineLength(line)
+      if (len > display.maxLineLength) {
+        display.maxLine = line
+        display.maxLineLength = len
+        display.maxLineChanged = true
+        recomputeMaxLength = false
+      }
+    })
+    if (recomputeMaxLength) { cm.curOp.updateMaxLine = true }
+  }
+
+  retreatFrontier(doc, from.line)
+  startWorker(cm, 400)
+
+  var lendiff = change.text.length - (to.line - from.line) - 1
+  // Remember that these lines changed, for updating the display
+  if (change.full)
+    { regChange(cm) }
+  else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))
+    { regLineChange(cm, from.line, "text") }
+  else
+    { regChange(cm, from.line, to.line + 1, lendiff) }
+
+  var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change")
+  if (changeHandler || changesHandler) {
+    var obj = {
+      from: from, to: to,
+      text: change.text,
+      removed: change.removed,
+      origin: change.origin
+    }
+    if (changeHandler) { signalLater(cm, "change", cm, obj) }
+    if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj) }
+  }
+  cm.display.selForContextMenu = null
+}
+
+function replaceRange(doc, code, from, to, origin) {
+  if (!to) { to = from }
+  if (cmp(to, from) < 0) { var assign;
+    (assign = [to, from], from = assign[0], to = assign[1], assign) }
+  if (typeof code == "string") { code = doc.splitLines(code) }
+  makeChange(doc, {from: from, to: to, text: code, origin: origin})
+}
+
+// Rebasing/resetting history to deal with externally-sourced changes
+
+function rebaseHistSelSingle(pos, from, to, diff) {
+  if (to < pos.line) {
+    pos.line += diff
+  } else if (from < pos.line) {
+    pos.line = from
+    pos.ch = 0
+  }
+}
+
+// Tries to rebase an array of history events given a change in the
+// document. If the change touches the same lines as the event, the
+// event, and everything 'behind' it, is discarded. If the change is
+// before the event, the event's positions are updated. Uses a
+// copy-on-write scheme for the positions, to avoid having to
+// reallocate them all on every rebase, but also avoid problems with
+// shared position objects being unsafely updated.
+function rebaseHistArray(array, from, to, diff) {
+  for (var i = 0; i < array.length; ++i) {
+    var sub = array[i], ok = true
+    if (sub.ranges) {
+      if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true }
+      for (var j = 0; j < sub.ranges.length; j++) {
+        rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff)
+        rebaseHistSelSingle(sub.ranges[j].head, from, to, diff)
+      }
+      continue
+    }
+    for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {
+      var cur = sub.changes[j$1]
+      if (to < cur.from.line) {
+        cur.from = Pos(cur.from.line + diff, cur.from.ch)
+        cur.to = Pos(cur.to.line + diff, cur.to.ch)
+      } else if (from <= cur.to.line) {
+        ok = false
+        break
+      }
+    }
+    if (!ok) {
+      array.splice(0, i + 1)
+      i = 0
+    }
+  }
+}
+
+function rebaseHist(hist, change) {
+  var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1
+  rebaseHistArray(hist.done, from, to, diff)
+  rebaseHistArray(hist.undone, from, to, diff)
+}
+
+// Utility for applying a change to a line by handle or number,
+// returning the number and optionally registering the line as
+// changed.
+function changeLine(doc, handle, changeType, op) {
+  var no = handle, line = handle
+  if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)) }
+  else { no = lineNo(handle) }
+  if (no == null) { return null }
+  if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType) }
+  return line
+}
+
+// The document is represented as a BTree consisting of leaves, with
+// chunk of lines in them, and branches, with up to ten leaves or
+// other branch nodes below them. The top node is always a branch
+// node, and is the document object itself (meaning it has
+// additional methods and properties).
+//
+// All nodes have parent links. The tree is used both to go from
+// line numbers to line objects, and to go from objects to numbers.
+// It also indexes by height, and is used to convert between height
+// and line object, and to find the total height of the document.
+//
+// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html
+
+function LeafChunk(lines) {
+  var this$1 = this;
+
+  this.lines = lines
+  this.parent = null
+  var height = 0
+  for (var i = 0; i < lines.length; ++i) {
+    lines[i].parent = this$1
+    height += lines[i].height
+  }
+  this.height = height
+}
+
+LeafChunk.prototype = {
+  chunkSize: function chunkSize() { return this.lines.length },
+
+  // Remove the n lines at offset 'at'.
+  removeInner: function removeInner(at, n) {
+    var this$1 = this;
+
+    for (var i = at, e = at + n; i < e; ++i) {
+      var line = this$1.lines[i]
+      this$1.height -= line.height
+      cleanUpLine(line)
+      signalLater(line, "delete")
+    }
+    this.lines.splice(at, n)
+  },
+
+  // Helper used to collapse a small branch into a single leaf.
+  collapse: function collapse(lines) {
+    lines.push.apply(lines, this.lines)
+  },
+
+  // Insert the given array of lines at offset 'at', count them as
+  // having the given height.
+  insertInner: function insertInner(at, lines, height) {
+    var this$1 = this;
+
+    this.height += height
+    this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at))
+    for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1 }
+  },
+
+  // Used to iterate over a part of the tree.
+  iterN: function iterN(at, n, op) {
+    var this$1 = this;
+
+    for (var e = at + n; at < e; ++at)
+      { if (op(this$1.lines[at])) { return true } }
+  }
+}
+
+function BranchChunk(children) {
+  var this$1 = this;
+
+  this.children = children
+  var size = 0, height = 0
+  for (var i = 0; i < children.length; ++i) {
+    var ch = children[i]
+    size += ch.chunkSize(); height += ch.height
+    ch.parent = this$1
+  }
+  this.size = size
+  this.height = height
+  this.parent = null
+}
+
+BranchChunk.prototype = {
+  chunkSize: function chunkSize() { return this.size },
+
+  removeInner: function removeInner(at, n) {
+    var this$1 = this;
+
+    this.size -= n
+    for (var i = 0; i < this.children.length; ++i) {
+      var child = this$1.children[i], sz = child.chunkSize()
+      if (at < sz) {
+        var rm = Math.min(n, sz - at), oldHeight = child.height
+        child.removeInner(at, rm)
+        this$1.height -= oldHeight - child.height
+        if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null }
+        if ((n -= rm) == 0) { break }
+        at = 0
+      } else { at -= sz }
+    }
+    // If the result is smaller than 25 lines, ensure that it is a
+    // single leaf node.
+    if (this.size - n < 25 &&
+        (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {
+      var lines = []
+      this.collapse(lines)
+      this.children = [new LeafChunk(lines)]
+      this.children[0].parent = this
+    }
+  },
+
+  collapse: function collapse(lines) {
+    var this$1 = this;
+
+    for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines) }
+  },
+
+  insertInner: function insertInner(at, lines, height) {
+    var this$1 = this;
+
+    this.size += lines.length
+    this.height += height
+    for (var i = 0; i < this.children.length; ++i) {
+      var child = this$1.children[i], sz = child.chunkSize()
+      if (at <= sz) {
+        child.insertInner(at, lines, height)
+        if (child.lines && child.lines.length > 50) {
+          // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.
+          // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.
+          var remaining = child.lines.length % 25 + 25
+          for (var pos = remaining; pos < child.lines.length;) {
+            var leaf = new LeafChunk(child.lines.slice(pos, pos += 25))
+            child.height -= leaf.height
+            this$1.children.splice(++i, 0, leaf)
+            leaf.parent = this$1
+          }
+          child.lines = child.lines.slice(0, remaining)
+          this$1.maybeSpill()
+        }
+        break
+      }
+      at -= sz
+    }
+  },
+
+  // When a node has grown, check whether it should be split.
+  maybeSpill: function maybeSpill() {
+    if (this.children.length <= 10) { return }
+    var me = this
+    do {
+      var spilled = me.children.splice(me.children.length - 5, 5)
+      var sibling = new BranchChunk(spilled)
+      if (!me.parent) { // Become the parent node
+        var copy = new BranchChunk(me.children)
+        copy.parent = me
+        me.children = [copy, sibling]
+        me = copy
+     } else {
+        me.size -= sibling.size
+        me.height -= sibling.height
+        var myIndex = indexOf(me.parent.children, me)
+        me.parent.children.splice(myIndex + 1, 0, sibling)
+      }
+      sibling.parent = me.parent
+    } while (me.children.length > 10)
+    me.parent.maybeSpill()
+  },
+
+  iterN: function iterN(at, n, op) {
+    var this$1 = this;
+
+    for (var i = 0; i < this.children.length; ++i) {
+      var child = this$1.children[i], sz = child.chunkSize()
+      if (at < sz) {
+        var used = Math.min(n, sz - at)
+        if (child.iterN(at, used, op)) { return true }
+        if ((n -= used) == 0) { break }
+        at = 0
+      } else { at -= sz }
+    }
+  }
+}
+
+// Line widgets are block elements displayed above or below a line.
+
+var LineWidget = function(doc, node, options) {
+  var this$1 = this;
+
+  if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))
+    { this$1[opt] = options[opt] } } }
+  this.doc = doc
+  this.node = node
+};
+
+LineWidget.prototype.clear = function () {
+    var this$1 = this;
+
+  var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line)
+  if (no == null || !ws) { return }
+  for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1) } }
+  if (!ws.length) { line.widgets = null }
+  var height = widgetHeight(this)
+  updateLineHeight(line, Math.max(0, line.height - height))
+  if (cm) {
+    runInOp(cm, function () {
+      adjustScrollWhenAboveVisible(cm, line, -height)
+      regLineChange(cm, no, "widget")
+    })
+    signalLater(cm, "lineWidgetCleared", cm, this, no)
+  }
+};
+
+LineWidget.prototype.changed = function () {
+    var this$1 = this;
+
+  var oldH = this.height, cm = this.doc.cm, line = this.line
+  this.height = null
+  var diff = widgetHeight(this) - oldH
+  if (!diff) { return }
+  updateLineHeight(line, line.height + diff)
+  if (cm) {
+    runInOp(cm, function () {
+      cm.curOp.forceUpdate = true
+      adjustScrollWhenAboveVisible(cm, line, diff)
+      signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line))
+    })
+  }
+};
+eventMixin(LineWidget)
+
+function adjustScrollWhenAboveVisible(cm, line, diff) {
+  if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))
+    { addToScrollTop(cm, diff) }
+}
+
+function addLineWidget(doc, handle, node, options) {
+  var widget = new LineWidget(doc, node, options)
+  var cm = doc.cm
+  if (cm && widget.noHScroll) { cm.display.alignWidgets = true }
+  changeLine(doc, handle, "widget", function (line) {
+    var widgets = line.widgets || (line.widgets = [])
+    if (widget.insertAt == null) { widgets.push(widget) }
+    else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget) }
+    widget.line = line
+    if (cm && !lineIsHidden(doc, line)) {
+      var aboveVisible = heightAtLine(line) < doc.scrollTop
+      updateLineHeight(line, line.height + widgetHeight(widget))
+      if (aboveVisible) { addToScrollTop(cm, widget.height) }
+      cm.curOp.forceUpdate = true
+    }
+    return true
+  })
+  signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle))
+  return widget
+}
+
+// TEXTMARKERS
+
+// Created with markText and setBookmark methods. A TextMarker is a
+// handle that can be used to clear or find a marked position in the
+// document. Line objects hold arrays (markedSpans) containing
+// {from, to, marker} object pointing to such marker objects, and
+// indicating that such a marker is present on that line. Multiple
+// lines may point to the same marker when it spans across lines.
+// The spans will have null for their from/to properties when the
+// marker continues beyond the start/end of the line. Markers have
+// links back to the lines they currently touch.
+
+// Collapsed markers have unique ids, in order to be able to order
+// them, which is needed for uniquely determining an outer marker
+// when they overlap (they may nest, but not partially overlap).
+var nextMarkerId = 0
+
+var TextMarker = function(doc, type) {
+  this.lines = []
+  this.type = type
+  this.doc = doc
+  this.id = ++nextMarkerId
+};
+
+// Clear the marker.
+TextMarker.prototype.clear = function () {
+    var this$1 = this;
+
+  if (this.explicitlyCleared) { return }
+  var cm = this.doc.cm, withOp = cm && !cm.curOp
+  if (withOp) { startOperation(cm) }
+  if (hasHandler(this, "clear")) {
+    var found = this.find()
+    if (found) { signalLater(this, "clear", found.from, found.to) }
+  }
+  var min = null, max = null
+  for (var i = 0; i < this.lines.length; ++i) {
+    var line = this$1.lines[i]
+    var span = getMarkedSpanFor(line.markedSpans, this$1)
+    if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), "text") }
+    else if (cm) {
+      if (span.to != null) { max = lineNo(line) }
+      if (span.from != null) { min = lineNo(line) }
+    }
+    line.markedSpans = removeMarkedSpan(line.markedSpans, span)
+    if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)
+      { updateLineHeight(line, textHeight(cm.display)) }
+  }
+  if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {
+    var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual)
+    if (len > cm.display.maxLineLength) {
+      cm.display.maxLine = visual
+      cm.display.maxLineLength = len
+      cm.display.maxLineChanged = true
+    }
+  } }
+
+  if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1) }
+  this.lines.length = 0
+  this.explicitlyCleared = true
+  if (this.atomic && this.doc.cantEdit) {
+    this.doc.cantEdit = false
+    if (cm) { reCheckSelection(cm.doc) }
+  }
+  if (cm) { signalLater(cm, "markerCleared", cm, this, min, max) }
+  if (withOp) { endOperation(cm) }
+  if (this.parent) { this.parent.clear() }
+};
+
+// Find the position of the marker in the document. Returns a {from,
+// to} object by default. Side can be passed to get a specific side
+// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the
+// Pos objects returned contain a line object, rather than a line
+// number (used to prevent looking up the same line twice).
+TextMarker.prototype.find = function (side, lineObj) {
+    var this$1 = this;
+
+  if (side == null && this.type == "bookmark") { side = 1 }
+  var from, to
+  for (var i = 0; i < this.lines.length; ++i) {
+    var line = this$1.lines[i]
+    var span = getMarkedSpanFor(line.markedSpans, this$1)
+    if (span.from != null) {
+      from = Pos(lineObj ? line : lineNo(line), span.from)
+      if (side == -1) { return from }
+    }
+    if (span.to != null) {
+      to = Pos(lineObj ? line : lineNo(line), span.to)
+      if (side == 1) { return to }
+    }
+  }
+  return from && {from: from, to: to}
+};
+
+// Signals that the marker's widget changed, and surrounding layout
+// should be recomputed.
+TextMarker.prototype.changed = function () {
+    var this$1 = this;
+
+  var pos = this.find(-1, true), widget = this, cm = this.doc.cm
+  if (!pos || !cm) { return }
+  runInOp(cm, function () {
+    var line = pos.line, lineN = lineNo(pos.line)
+    var view = findViewForLine(cm, lineN)
+    if (view) {
+      clearLineMeasurementCacheFor(view)
+      cm.curOp.selectionChanged = cm.curOp.forceUpdate = true
+    }
+    cm.curOp.updateMaxLine = true
+    if (!lineIsHidden(widget.doc, line) && widget.height != null) {
+      var oldHeight = widget.height
+      widget.height = null
+      var dHeight = widgetHeight(widget) - oldHeight
+      if (dHeight)
+        { updateLineHeight(line, line.height + dHeight) }
+    }
+    signalLater(cm, "markerChanged", cm, this$1)
+  })
+};
+
+TextMarker.prototype.attachLine = function (line) {
+  if (!this.lines.length && this.doc.cm) {
+    var op = this.doc.cm.curOp
+    if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
+      { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this) }
+  }
+  this.lines.push(line)
+};
+
+TextMarker.prototype.detachLine = function (line) {
+  this.lines.splice(indexOf(this.lines, line), 1)
+  if (!this.lines.length && this.doc.cm) {
+    var op = this.doc.cm.curOp
+    ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this)
+  }
+};
+eventMixin(TextMarker)
+
+// Create a marker, wire it up to the right lines, and
+function markText(doc, from, to, options, type) {
+  // Shared markers (across linked documents) are handled separately
+  // (markTextShared will call out to this again, once per
+  // document).
+  if (options && options.shared) { return markTextShared(doc, from, to, options, type) }
+  // Ensure we are in an operation.
+  if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }
+
+  var marker = new TextMarker(doc, type), diff = cmp(from, to)
+  if (options) { copyObj(options, marker, false) }
+  // Don't connect empty markers unless clearWhenEmpty is false
+  if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)
+    { return marker }
+  if (marker.replacedWith) {
+    // Showing up as a widget implies collapsed (widget replaces text)
+    marker.collapsed = true
+    marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget")
+    if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true") }
+    if (options.insertLeft) { marker.widgetNode.insertLeft = true }
+  }
+  if (marker.collapsed) {
+    if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||
+        from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))
+      { throw new Error("Inserting collapsed marker partially overlapping an existing one") }
+    seeCollapsedSpans()
+  }
+
+  if (marker.addToHistory)
+    { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN) }
+
+  var curLine = from.line, cm = doc.cm, updateMaxLine
+  doc.iter(curLine, to.line + 1, function (line) {
+    if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)
+      { updateMaxLine = true }
+    if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0) }
+    addMarkedSpan(line, new MarkedSpan(marker,
+                                       curLine == from.line ? from.ch : null,
+                                       curLine == to.line ? to.ch : null))
+    ++curLine
+  })
+  // lineIsHidden depends on the presence of the spans, so needs a second pass
+  if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {
+    if (lineIsHidden(doc, line)) { updateLineHeight(line, 0) }
+  }) }
+
+  if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }) }
+
+  if (marker.readOnly) {
+    seeReadOnlySpans()
+    if (doc.history.done.length || doc.history.undone.length)
+      { doc.clearHistory() }
+  }
+  if (marker.collapsed) {
+    marker.id = ++nextMarkerId
+    marker.atomic = true
+  }
+  if (cm) {
+    // Sync editor state
+    if (updateMaxLine) { cm.curOp.updateMaxLine = true }
+    if (marker.collapsed)
+      { regChange(cm, from.line, to.line + 1) }
+    else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css)
+      { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text") } }
+    if (marker.atomic) { reCheckSelection(cm.doc) }
+    signalLater(cm, "markerAdded", cm, marker)
+  }
+  return marker
+}
+
+// SHARED TEXTMARKERS
+
+// A shared marker spans multiple linked documents. It is
+// implemented as a meta-marker-object controlling multiple normal
+// markers.
+var SharedTextMarker = function(markers, primary) {
+  var this$1 = this;
+
+  this.markers = markers
+  this.primary = primary
+  for (var i = 0; i < markers.length; ++i)
+    { markers[i].parent = this$1 }
+};
+
+SharedTextMarker.prototype.clear = function () {
+    var this$1 = this;
+
+  if (this.explicitlyCleared) { return }
+  this.explicitlyCleared = true
+  for (var i = 0; i < this.markers.length; ++i)
+    { this$1.markers[i].clear() }
+  signalLater(this, "clear")
+};
+
+SharedTextMarker.prototype.find = function (side, lineObj) {
+  return this.primary.find(side, lineObj)
+};
+eventMixin(SharedTextMarker)
+
+function markTextShared(doc, from, to, options, type) {
+  options = copyObj(options)
+  options.shared = false
+  var markers = [markText(doc, from, to, options, type)], primary = markers[0]
+  var widget = options.widgetNode
+  linkedDocs(doc, function (doc) {
+    if (widget) { options.widgetNode = widget.cloneNode(true) }
+    markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type))
+    for (var i = 0; i < doc.linked.length; ++i)
+      { if (doc.linked[i].isParent) { return } }
+    primary = lst(markers)
+  })
+  return new SharedTextMarker(markers, primary)
+}
+
+function findSharedMarkers(doc) {
+  return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })
+}
+
+function copySharedMarkers(doc, markers) {
+  for (var i = 0; i < markers.length; i++) {
+    var marker = markers[i], pos = marker.find()
+    var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to)
+    if (cmp(mFrom, mTo)) {
+      var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type)
+      marker.markers.push(subMark)
+      subMark.parent = marker
+    }
+  }
+}
+
+function detachSharedMarkers(markers) {
+  var loop = function ( i ) {
+    var marker = markers[i], linked = [marker.primary.doc]
+    linkedDocs(marker.primary.doc, function (d) { return linked.push(d); })
+    for (var j = 0; j < marker.markers.length; j++) {
+      var subMarker = marker.markers[j]
+      if (indexOf(linked, subMarker.doc) == -1) {
+        subMarker.parent = null
+        marker.markers.splice(j--, 1)
+      }
+    }
+  };
+
+  for (var i = 0; i < markers.length; i++) loop( i );
+}
+
+var nextDocId = 0
+var Doc = function(text, mode, firstLine, lineSep, direction) {
+  if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }
+  if (firstLine == null) { firstLine = 0 }
+
+  BranchChunk.call(this, [new LeafChunk([new Line("", null)])])
+  this.first = firstLine
+  this.scrollTop = this.scrollLeft = 0
+  this.cantEdit = false
+  this.cleanGeneration = 1
+  this.modeFrontier = this.highlightFrontier = firstLine
+  var start = Pos(firstLine, 0)
+  this.sel = simpleSelection(start)
+  this.history = new History(null)
+  this.id = ++nextDocId
+  this.modeOption = mode
+  this.lineSep = lineSep
+  this.direction = (direction == "rtl") ? "rtl" : "ltr"
+  this.extend = false
+
+  if (typeof text == "string") { text = this.splitLines(text) }
+  updateDoc(this, {from: start, to: start, text: text})
+  setSelection(this, simpleSelection(start), sel_dontScroll)
+}
+
+Doc.prototype = createObj(BranchChunk.prototype, {
+  constructor: Doc,
+  // Iterate over the document. Supports two forms -- with only one
+  // argument, it calls that for each line in the document. With
+  // three, it iterates over the range given by the first two (with
+  // the second being non-inclusive).
+  iter: function(from, to, op) {
+    if (op) { this.iterN(from - this.first, to - from, op) }
+    else { this.iterN(this.first, this.first + this.size, from) }
+  },
+
+  // Non-public interface for adding and removing lines.
+  insert: function(at, lines) {
+    var height = 0
+    for (var i = 0; i < lines.length; ++i) { height += lines[i].height }
+    this.insertInner(at - this.first, lines, height)
+  },
+  remove: function(at, n) { this.removeInner(at - this.first, n) },
+
+  // From here, the methods are part of the public interface. Most
+  // are also available from CodeMirror (editor) instances.
+
+  getValue: function(lineSep) {
+    var lines = getLines(this, this.first, this.first + this.size)
+    if (lineSep === false) { return lines }
+    return lines.join(lineSep || this.lineSeparator())
+  },
+  setValue: docMethodOp(function(code) {
+    var top = Pos(this.first, 0), last = this.first + this.size - 1
+    makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
+                      text: this.splitLines(code), origin: "setValue", full: true}, true)
+    if (this.cm) { scrollToCoords(this.cm, 0, 0) }
+    setSelection(this, simpleSelection(top), sel_dontScroll)
+  }),
+  replaceRange: function(code, from, to, origin) {
+    from = clipPos(this, from)
+    to = to ? clipPos(this, to) : from
+    replaceRange(this, code, from, to, origin)
+  },
+  getRange: function(from, to, lineSep) {
+    var lines = getBetween(this, clipPos(this, from), clipPos(this, to))
+    if (lineSep === false) { return lines }
+    return lines.join(lineSep || this.lineSeparator())
+  },
+
+  getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},
+
+  getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},
+  getLineNumber: function(line) {return lineNo(line)},
+
+  getLineHandleVisualStart: function(line) {
+    if (typeof line == "number") { line = getLine(this, line) }
+    return visualLine(line)
+  },
+
+  lineCount: function() {return this.size},
+  firstLine: function() {return this.first},
+  lastLine: function() {return this.first + this.size - 1},
+
+  clipPos: function(pos) {return clipPos(this, pos)},
+
+  getCursor: function(start) {
+    var range = this.sel.primary(), pos
+    if (start == null || start == "head") { pos = range.head }
+    else if (start == "anchor") { pos = range.anchor }
+    else if (start == "end" || start == "to" || start === false) { pos = range.to() }
+    else { pos = range.from() }
+    return pos
+  },
+  listSelections: function() { return this.sel.ranges },
+  somethingSelected: function() {return this.sel.somethingSelected()},
+
+  setCursor: docMethodOp(function(line, ch, options) {
+    setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options)
+  }),
+  setSelection: docMethodOp(function(anchor, head, options) {
+    setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options)
+  }),
+  extendSelection: docMethodOp(function(head, other, options) {
+    extendSelection(this, clipPos(this, head), other && clipPos(this, other), options)
+  }),
+  extendSelections: docMethodOp(function(heads, options) {
+    extendSelections(this, clipPosArray(this, heads), options)
+  }),
+  extendSelectionsBy: docMethodOp(function(f, options) {
+    var heads = map(this.sel.ranges, f)
+    extendSelections(this, clipPosArray(this, heads), options)
+  }),
+  setSelections: docMethodOp(function(ranges, primary, options) {
+    var this$1 = this;
+
+    if (!ranges.length) { return }
+    var out = []
+    for (var i = 0; i < ranges.length; i++)
+      { out[i] = new Range(clipPos(this$1, ranges[i].anchor),
+                         clipPos(this$1, ranges[i].head)) }
+    if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex) }
+    setSelection(this, normalizeSelection(out, primary), options)
+  }),
+  addSelection: docMethodOp(function(anchor, head, options) {
+    var ranges = this.sel.ranges.slice(0)
+    ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)))
+    setSelection(this, normalizeSelection(ranges, ranges.length - 1), options)
+  }),
+
+  getSelection: function(lineSep) {
+    var this$1 = this;
+
+    var ranges = this.sel.ranges, lines
+    for (var i = 0; i < ranges.length; i++) {
+      var sel = getBetween(this$1, ranges[i].from(), ranges[i].to())
+      lines = lines ? lines.concat(sel) : sel
+    }
+    if (lineSep === false) { return lines }
+    else { return lines.join(lineSep || this.lineSeparator()) }
+  },
+  getSelections: function(lineSep) {
+    var this$1 = this;
+
+    var parts = [], ranges = this.sel.ranges
+    for (var i = 0; i < ranges.length; i++) {
+      var sel = getBetween(this$1, ranges[i].from(), ranges[i].to())
+      if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()) }
+      parts[i] = sel
+    }
+    return parts
+  },
+  replaceSelection: function(code, collapse, origin) {
+    var dup = []
+    for (var i = 0; i < this.sel.ranges.length; i++)
+      { dup[i] = code }
+    this.replaceSelections(dup, collapse, origin || "+input")
+  },
+  replaceSelections: docMethodOp(function(code, collapse, origin) {
+    var this$1 = this;
+
+    var changes = [], sel = this.sel
+    for (var i = 0; i < sel.ranges.length; i++) {
+      var range = sel.ranges[i]
+      changes[i] = {from: range.from(), to: range.to(), text: this$1.splitLines(code[i]), origin: origin}
+    }
+    var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse)
+    for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)
+      { makeChange(this$1, changes[i$1]) }
+    if (newSel) { setSelectionReplaceHistory(this, newSel) }
+    else if (this.cm) { ensureCursorVisible(this.cm) }
+  }),
+  undo: docMethodOp(function() {makeChangeFromHistory(this, "undo")}),
+  redo: docMethodOp(function() {makeChangeFromHistory(this, "redo")}),
+  undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true)}),
+  redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true)}),
+
+  setExtending: function(val) {this.extend = val},
+  getExtending: function() {return this.extend},
+
+  historySize: function() {
+    var hist = this.history, done = 0, undone = 0
+    for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done } }
+    for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone } }
+    return {undo: done, redo: undone}
+  },
+  clearHistory: function() {this.history = new History(this.history.maxGeneration)},
+
+  markClean: function() {
+    this.cleanGeneration = this.changeGeneration(true)
+  },
+  changeGeneration: function(forceSplit) {
+    if (forceSplit)
+      { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null }
+    return this.history.generation
+  },
+  isClean: function (gen) {
+    return this.history.generation == (gen || this.cleanGeneration)
+  },
+
+  getHistory: function() {
+    return {done: copyHistoryArray(this.history.done),
+            undone: copyHistoryArray(this.history.undone)}
+  },
+  setHistory: function(histData) {
+    var hist = this.history = new History(this.history.maxGeneration)
+    hist.done = copyHistoryArray(histData.done.slice(0), null, true)
+    hist.undone = copyHistoryArray(histData.undone.slice(0), null, true)
+  },
+
+  setGutterMarker: docMethodOp(function(line, gutterID, value) {
+    return changeLine(this, line, "gutter", function (line) {
+      var markers = line.gutterMarkers || (line.gutterMarkers = {})
+      markers[gutterID] = value
+      if (!value && isEmpty(markers)) { line.gutterMarkers = null }
+      return true
+    })
+  }),
+
+  clearGutter: docMethodOp(function(gutterID) {
+    var this$1 = this;
+
+    this.iter(function (line) {
+      if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
+        changeLine(this$1, line, "gutter", function () {
+          line.gutterMarkers[gutterID] = null
+          if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null }
+          return true
+        })
+      }
+    })
+  }),
+
+  lineInfo: function(line) {
+    var n
+    if (typeof line == "number") {
+      if (!isLine(this, line)) { return null }
+      n = line
+      line = getLine(this, line)
+      if (!line) { return null }
+    } else {
+      n = lineNo(line)
+      if (n == null) { return null }
+    }
+    return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
+            textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
+            widgets: line.widgets}
+  },
+
+  addLineClass: docMethodOp(function(handle, where, cls) {
+    return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+      var prop = where == "text" ? "textClass"
+               : where == "background" ? "bgClass"
+               : where == "gutter" ? "gutterClass" : "wrapClass"
+      if (!line[prop]) { line[prop] = cls }
+      else if (classTest(cls).test(line[prop])) { return false }
+      else { line[prop] += " " + cls }
+      return true
+    })
+  }),
+  removeLineClass: docMethodOp(function(handle, where, cls) {
+    return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+      var prop = where == "text" ? "textClass"
+               : where == "background" ? "bgClass"
+               : where == "gutter" ? "gutterClass" : "wrapClass"
+      var cur = line[prop]
+      if (!cur) { return false }
+      else if (cls == null) { line[prop] = null }
+      else {
+        var found = cur.match(classTest(cls))
+        if (!found) { return false }
+        var end = found.index + found[0].length
+        line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null
+      }
+      return true
+    })
+  }),
+
+  addLineWidget: docMethodOp(function(handle, node, options) {
+    return addLineWidget(this, handle, node, options)
+  }),
+  removeLineWidget: function(widget) { widget.clear() },
+
+  markText: function(from, to, options) {
+    return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range")
+  },
+  setBookmark: function(pos, options) {
+    var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
+                    insertLeft: options && options.insertLeft,
+                    clearWhenEmpty: false, shared: options && options.shared,
+                    handleMouseEvents: options && options.handleMouseEvents}
+    pos = clipPos(this, pos)
+    return markText(this, pos, pos, realOpts, "bookmark")
+  },
+  findMarksAt: function(pos) {
+    pos = clipPos(this, pos)
+    var markers = [], spans = getLine(this, pos.line).markedSpans
+    if (spans) { for (var i = 0; i < spans.length; ++i) {
+      var span = spans[i]
+      if ((span.from == null || span.from <= pos.ch) &&
+          (span.to == null || span.to >= pos.ch))
+        { markers.push(span.marker.parent || span.marker) }
+    } }
+    return markers
+  },
+  findMarks: function(from, to, filter) {
+    from = clipPos(this, from); to = clipPos(this, to)
+    var found = [], lineNo = from.line
+    this.iter(from.line, to.line + 1, function (line) {
+      var spans = line.markedSpans
+      if (spans) { for (var i = 0; i < spans.length; i++) {
+        var span = spans[i]
+        if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||
+              span.from == null && lineNo != from.line ||
+              span.from != null && lineNo == to.line && span.from >= to.ch) &&
+            (!filter || filter(span.marker)))
+          { found.push(span.marker.parent || span.marker) }
+      } }
+      ++lineNo
+    })
+    return found
+  },
+  getAllMarks: function() {
+    var markers = []
+    this.iter(function (line) {
+      var sps = line.markedSpans
+      if (sps) { for (var i = 0; i < sps.length; ++i)
+        { if (sps[i].from != null) { markers.push(sps[i].marker) } } }
+    })
+    return markers
+  },
+
+  posFromIndex: function(off) {
+    var ch, lineNo = this.first, sepSize = this.lineSeparator().length
+    this.iter(function (line) {
+      var sz = line.text.length + sepSize
+      if (sz > off) { ch = off; return true }
+      off -= sz
+      ++lineNo
+    })
+    return clipPos(this, Pos(lineNo, ch))
+  },
+  indexFromPos: function (coords) {
+    coords = clipPos(this, coords)
+    var index = coords.ch
+    if (coords.line < this.first || coords.ch < 0) { return 0 }
+    var sepSize = this.lineSeparator().length
+    this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value
+      index += line.text.length + sepSize
+    })
+    return index
+  },
+
+  copy: function(copyHistory) {
+    var doc = new Doc(getLines(this, this.first, this.first + this.size),
+                      this.modeOption, this.first, this.lineSep, this.direction)
+    doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft
+    doc.sel = this.sel
+    doc.extend = false
+    if (copyHistory) {
+      doc.history.undoDepth = this.history.undoDepth
+      doc.setHistory(this.getHistory())
+    }
+    return doc
+  },
+
+  linkedDoc: function(options) {
+    if (!options) { options = {} }
+    var from = this.first, to = this.first + this.size
+    if (options.from != null && options.from > from) { from = options.from }
+    if (options.to != null && options.to < to) { to = options.to }
+    var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction)
+    if (options.sharedHist) { copy.history = this.history
+    ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist})
+    copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]
+    copySharedMarkers(copy, findSharedMarkers(this))
+    return copy
+  },
+  unlinkDoc: function(other) {
+    var this$1 = this;
+
+    if (other instanceof CodeMirror) { other = other.doc }
+    if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {
+      var link = this$1.linked[i]
+      if (link.doc != other) { continue }
+      this$1.linked.splice(i, 1)
+      other.unlinkDoc(this$1)
+      detachSharedMarkers(findSharedMarkers(this$1))
+      break
+    } }
+    // If the histories were shared, split them again
+    if (other.history == this.history) {
+      var splitIds = [other.id]
+      linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true)
+      other.history = new History(null)
+      other.history.done = copyHistoryArray(this.history.done, splitIds)
+      other.history.undone = copyHistoryArray(this.history.undone, splitIds)
+    }
+  },
+  iterLinkedDocs: function(f) {linkedDocs(this, f)},
+
+  getMode: function() {return this.mode},
+  getEditor: function() {return this.cm},
+
+  splitLines: function(str) {
+    if (this.lineSep) { return str.split(this.lineSep) }
+    return splitLinesAuto(str)
+  },
+  lineSeparator: function() { return this.lineSep || "\n" },
+
+  setDirection: docMethodOp(function (dir) {
+    if (dir != "rtl") { dir = "ltr" }
+    if (dir == this.direction) { return }
+    this.direction = dir
+    this.iter(function (line) { return line.order = null; })
+    if (this.cm) { directionChanged(this.cm) }
+  })
+})
+
+// Public alias.
+Doc.prototype.eachLine = Doc.prototype.iter
+
+// Kludge to work around strange IE behavior where it'll sometimes
+// re-fire a series of drag-related events right after the drop (#1551)
+var lastDrop = 0
+
+function onDrop(e) {
+  var cm = this
+  clearDragCursor(cm)
+  if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))
+    { return }
+  e_preventDefault(e)
+  if (ie) { lastDrop = +new Date }
+  var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files
+  if (!pos || cm.isReadOnly()) { return }
+  // Might be a file drop, in which case we simply extract the text
+  // and insert it.
+  if (files && files.length && window.FileReader && window.File) {
+    var n = files.length, text = Array(n), read = 0
+    var loadFile = function (file, i) {
+      if (cm.options.allowDropFileTypes &&
+          indexOf(cm.options.allowDropFileTypes, file.type) == -1)
+        { return }
+
+      var reader = new FileReader
+      reader.onload = operation(cm, function () {
+        var content = reader.result
+        if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = "" }
+        text[i] = content
+        if (++read == n) {
+          pos = clipPos(cm.doc, pos)
+          var change = {from: pos, to: pos,
+                        text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),
+                        origin: "paste"}
+          makeChange(cm.doc, change)
+          setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)))
+        }
+      })
+      reader.readAsText(file)
+    }
+    for (var i = 0; i < n; ++i) { loadFile(files[i], i) }
+  } else { // Normal drop
+    // Don't do a replace if the drop happened inside of the selected text.
+    if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {
+      cm.state.draggingText(e)
+      // Ensure the editor is re-focused
+      setTimeout(function () { return cm.display.input.focus(); }, 20)
+      return
+    }
+    try {
+      var text$1 = e.dataTransfer.getData("Text")
+      if (text$1) {
+        var selected
+        if (cm.state.draggingText && !cm.state.draggingText.copy)
+          { selected = cm.listSelections() }
+        setSelectionNoUndo(cm.doc, simpleSelection(pos, pos))
+        if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)
+          { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag") } }
+        cm.replaceSelection(text$1, "around", "paste")
+        cm.display.input.focus()
+      }
+    }
+    catch(e){}
+  }
+}
+
+function onDragStart(cm, e) {
+  if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }
+  if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }
+
+  e.dataTransfer.setData("Text", cm.getSelection())
+  e.dataTransfer.effectAllowed = "copyMove"
+
+  // Use dummy image instead of default browsers image.
+  // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
+  if (e.dataTransfer.setDragImage && !safari) {
+    var img = elt("img", null, null, "position: fixed; left: 0; top: 0;")
+    img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="
+    if (presto) {
+      img.width = img.height = 1
+      cm.display.wrapper.appendChild(img)
+      // Force a relayout, or Opera won't use our image for some obscure reason
+      img._top = img.offsetTop
+    }
+    e.dataTransfer.setDragImage(img, 0, 0)
+    if (presto) { img.parentNode.removeChild(img) }
+  }
+}
+
+function onDragOver(cm, e) {
+  var pos = posFromMouse(cm, e)
+  if (!pos) { return }
+  var frag = document.createDocumentFragment()
+  drawSelectionCursor(cm, pos, frag)
+  if (!cm.display.dragCursor) {
+    cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors")
+    cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv)
+  }
+  removeChildrenAndAdd(cm.display.dragCursor, frag)
+}
+
+function clearDragCursor(cm) {
+  if (cm.display.dragCursor) {
+    cm.display.lineSpace.removeChild(cm.display.dragCursor)
+    cm.display.dragCursor = null
+  }
+}
+
+// These must be handled carefully, because naively registering a
+// handler for each editor will cause the editors to never be
+// garbage collected.
+
+function forEachCodeMirror(f) {
+  if (!document.getElementsByClassName) { return }
+  var byClass = document.getElementsByClassName("CodeMirror")
+  for (var i = 0; i < byClass.length; i++) {
+    var cm = byClass[i].CodeMirror
+    if (cm) { f(cm) }
+  }
+}
+
+var globalsRegistered = false
+function ensureGlobalHandlers() {
+  if (globalsRegistered) { return }
+  registerGlobalHandlers()
+  globalsRegistered = true
+}
+function registerGlobalHandlers() {
+  // When the window resizes, we need to refresh active editors.
+  var resizeTimer
+  on(window, "resize", function () {
+    if (resizeTimer == null) { resizeTimer = setTimeout(function () {
+      resizeTimer = null
+      forEachCodeMirror(onResize)
+    }, 100) }
+  })
+  // When the window loses focus, we want to show the editor as blurred
+  on(window, "blur", function () { return forEachCodeMirror(onBlur); })
+}
+// Called when the window resizes
+function onResize(cm) {
+  var d = cm.display
+  if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth)
+    { return }
+  // Might be a text scaling operation, clear size caches.
+  d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null
+  d.scrollbarsClipped = false
+  cm.setSize()
+}
+
+var keyNames = {
+  3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
+  19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
+  36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
+  46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod",
+  106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete",
+  173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
+  221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
+  63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"
+}
+
+// Number keys
+for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i) }
+// Alphabetic keys
+for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1) }
+// Function keys
+for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2 }
+
+var keyMap = {}
+
+keyMap.basic = {
+  "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
+  "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
+  "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore",
+  "Tab": "defaultTab", "Shift-Tab": "indentAuto",
+  "Enter": "newlineAndIndent", "Insert": "toggleOverwrite",
+  "Esc": "singleSelection"
+}
+// Note that the save and find-related commands aren't defined by
+// default. User code or addons can define them. Unknown commands
+// are simply ignored.
+keyMap.pcDefault = {
+  "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
+  "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown",
+  "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
+  "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
+  "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
+  "Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
+  "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection",
+  fallthrough: "basic"
+}
+// Very basic readline/emacs-style bindings, which are standard on Mac.
+keyMap.emacsy = {
+  "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
+  "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
+  "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
+  "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars",
+  "Ctrl-O": "openLine"
+}
+keyMap.macDefault = {
+  "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
+  "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
+  "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore",
+  "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
+  "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
+  "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight",
+  "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd",
+  fallthrough: ["basic", "emacsy"]
+}
+keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault
+
+// KEYMAP DISPATCH
+
+function normalizeKeyName(name) {
+  var parts = name.split(/-(?!$)/)
+  name = parts[parts.length - 1]
+  var alt, ctrl, shift, cmd
+  for (var i = 0; i < parts.length - 1; i++) {
+    var mod = parts[i]
+    if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true }
+    else if (/^a(lt)?$/i.test(mod)) { alt = true }
+    else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true }
+    else if (/^s(hift)?$/i.test(mod)) { shift = true }
+    else { throw new Error("Unrecognized modifier name: " + mod) }
+  }
+  if (alt) { name = "Alt-" + name }
+  if (ctrl) { name = "Ctrl-" + name }
+  if (cmd) { name = "Cmd-" + name }
+  if (shift) { name = "Shift-" + name }
+  return name
+}
+
+// This is a kludge to keep keymaps mostly working as raw objects
+// (backwards compatibility) while at the same time support features
+// like normalization and multi-stroke key bindings. It compiles a
+// new normalized keymap, and then updates the old object to reflect
+// this.
+function normalizeKeyMap(keymap) {
+  var copy = {}
+  for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {
+    var value = keymap[keyname]
+    if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }
+    if (value == "...") { delete keymap[keyname]; continue }
+
+    var keys = map(keyname.split(" "), normalizeKeyName)
+    for (var i = 0; i < keys.length; i++) {
+      var val = (void 0), name = (void 0)
+      if (i == keys.length - 1) {
+        name = keys.join(" ")
+        val = value
+      } else {
+        name = keys.slice(0, i + 1).join(" ")
+        val = "..."
+      }
+      var prev = copy[name]
+      if (!prev) { copy[name] = val }
+      else if (prev != val) { throw new Error("Inconsistent bindings for " + name) }
+    }
+    delete keymap[keyname]
+  } }
+  for (var prop in copy) { keymap[prop] = copy[prop] }
+  return keymap
+}
+
+function lookupKey(key, map, handle, context) {
+  map = getKeyMap(map)
+  var found = map.call ? map.call(key, context) : map[key]
+  if (found === false) { return "nothing" }
+  if (found === "...") { return "multi" }
+  if (found != null && handle(found)) { return "handled" }
+
+  if (map.fallthrough) {
+    if (Object.prototype.toString.call(map.fallthrough) != "[object Array]")
+      { return lookupKey(key, map.fallthrough, handle, context) }
+    for (var i = 0; i < map.fallthrough.length; i++) {
+      var result = lookupKey(key, map.fallthrough[i], handle, context)
+      if (result) { return result }
+    }
+  }
+}
+
+// Modifier key presses don't count as 'real' key presses for the
+// purpose of keymap fallthrough.
+function isModifierKey(value) {
+  var name = typeof value == "string" ? value : keyNames[value.keyCode]
+  return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"
+}
+
+function addModifierNames(name, event, noShift) {
+  var base = name
+  if (event.altKey && base != "Alt") { name = "Alt-" + name }
+  if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name }
+  if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name }
+  if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name }
+  return name
+}
+
+// Look up the name of a key as indicated by an event object.
+function keyName(event, noShift) {
+  if (presto && event.keyCode == 34 && event["char"]) { return false }
+  var name = keyNames[event.keyCode]
+  if (name == null || event.altGraphKey) { return false }
+  return addModifierNames(name, event, noShift)
+}
+
+function getKeyMap(val) {
+  return typeof val == "string" ? keyMap[val] : val
+}
+
+// Helper for deleting text near the selection(s), used to implement
+// backspace, delete, and similar functionality.
+function deleteNearSelection(cm, compute) {
+  var ranges = cm.doc.sel.ranges, kill = []
+  // Build up a set of ranges to kill first, merging overlapping
+  // ranges.
+  for (var i = 0; i < ranges.length; i++) {
+    var toKill = compute(ranges[i])
+    while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {
+      var replaced = kill.pop()
+      if (cmp(replaced.from, toKill.from) < 0) {
+        toKill.from = replaced.from
+        break
+      }
+    }
+    kill.push(toKill)
+  }
+  // Next, remove those actual ranges.
+  runInOp(cm, function () {
+    for (var i = kill.length - 1; i >= 0; i--)
+      { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete") }
+    ensureCursorVisible(cm)
+  })
+}
+
+function moveCharLogically(line, ch, dir) {
+  var target = skipExtendingChars(line.text, ch + dir, dir)
+  return target < 0 || target > line.text.length ? null : target
+}
+
+function moveLogically(line, start, dir) {
+  var ch = moveCharLogically(line, start.ch, dir)
+  return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before")
+}
+
+function endOfLine(visually, cm, lineObj, lineNo, dir) {
+  if (visually) {
+    var order = getOrder(lineObj, cm.doc.direction)
+    if (order) {
+      var part = dir < 0 ? lst(order) : order[0]
+      var moveInStorageOrder = (dir < 0) == (part.level == 1)
+      var sticky = moveInStorageOrder ? "after" : "before"
+      var ch
+      // With a wrapped rtl chunk (possibly spanning multiple bidi parts),
+      // it could be that the last bidi part is not on the last visual line,
+      // since visual lines contain content order-consecutive chunks.
+      // Thus, in rtl, we are looking for the first (content-order) character
+      // in the rtl chunk that is on the last line (that is, the same line
+      // as the last (content-order) character).
+      if (part.level > 0 || cm.doc.direction == "rtl") {
+        var prep = prepareMeasureForLine(cm, lineObj)
+        ch = dir < 0 ? lineObj.text.length - 1 : 0
+        var targetTop = measureCharPrepared(cm, prep, ch).top
+        ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch)
+        if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1) }
+      } else { ch = dir < 0 ? part.to : part.from }
+      return new Pos(lineNo, ch, sticky)
+    }
+  }
+  return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after")
+}
+
+function moveVisually(cm, line, start, dir) {
+  var bidi = getOrder(line, cm.doc.direction)
+  if (!bidi) { return moveLogically(line, start, dir) }
+  if (start.ch >= line.text.length) {
+    start.ch = line.text.length
+    start.sticky = "before"
+  } else if (start.ch <= 0) {
+    start.ch = 0
+    start.sticky = "after"
+  }
+  var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos]
+  if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {
+    // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,
+    // nothing interesting happens.
+    return moveLogically(line, start, dir)
+  }
+
+  var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); }
+  var prep
+  var getWrappedLineExtent = function (ch) {
+    if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }
+    prep = prep || prepareMeasureForLine(cm, line)
+    return wrappedLineExtentChar(cm, line, prep, ch)
+  }
+  var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch)
+
+  if (cm.doc.direction == "rtl" || part.level == 1) {
+    var moveInStorageOrder = (part.level == 1) == (dir < 0)
+    var ch = mv(start, moveInStorageOrder ? 1 : -1)
+    if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {
+      // Case 2: We move within an rtl part or in an rtl editor on the same visual line
+      var sticky = moveInStorageOrder ? "before" : "after"
+      return new Pos(start.line, ch, sticky)
+    }
+  }
+
+  // Case 3: Could not move within this bidi part in this visual line, so leave
+  // the current bidi part
+
+  var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {
+    var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder
+      ? new Pos(start.line, mv(ch, 1), "before")
+      : new Pos(start.line, ch, "after"); }
+
+    for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {
+      var part = bidi[partPos]
+      var moveInStorageOrder = (dir > 0) == (part.level != 1)
+      var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1)
+      if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }
+      ch = moveInStorageOrder ? part.from : mv(part.to, -1)
+      if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }
+    }
+  }
+
+  // Case 3a: Look for other bidi parts on the same visual line
+  var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent)
+  if (res) { return res }
+
+  // Case 3b: Look for other bidi parts on the next visual line
+  var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1)
+  if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {
+    res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh))
+    if (res) { return res }
+  }
+
+  // Case 4: Nowhere to move
+  return null
+}
+
+// Commands are parameter-less actions that can be performed on an
+// editor, mostly used for keybindings.
+var commands = {
+  selectAll: selectAll,
+  singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); },
+  killLine: function (cm) { return deleteNearSelection(cm, function (range) {
+    if (range.empty()) {
+      var len = getLine(cm.doc, range.head.line).text.length
+      if (range.head.ch == len && range.head.line < cm.lastLine())
+        { return {from: range.head, to: Pos(range.head.line + 1, 0)} }
+      else
+        { return {from: range.head, to: Pos(range.head.line, len)} }
+    } else {
+      return {from: range.from(), to: range.to()}
+    }
+  }); },
+  deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+    from: Pos(range.from().line, 0),
+    to: clipPos(cm.doc, Pos(range.to().line + 1, 0))
+  }); }); },
+  delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+    from: Pos(range.from().line, 0), to: range.from()
+  }); }); },
+  delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {
+    var top = cm.charCoords(range.head, "div").top + 5
+    var leftPos = cm.coordsChar({left: 0, top: top}, "div")
+    return {from: leftPos, to: range.from()}
+  }); },
+  delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {
+    var top = cm.charCoords(range.head, "div").top + 5
+    var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")
+    return {from: range.from(), to: rightPos }
+  }); },
+  undo: function (cm) { return cm.undo(); },
+  redo: function (cm) { return cm.redo(); },
+  undoSelection: function (cm) { return cm.undoSelection(); },
+  redoSelection: function (cm) { return cm.redoSelection(); },
+  goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },
+  goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },
+  goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },
+    {origin: "+move", bias: 1}
+  ); },
+  goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },
+    {origin: "+move", bias: 1}
+  ); },
+  goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },
+    {origin: "+move", bias: -1}
+  ); },
+  goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {
+    var top = cm.cursorCoords(range.head, "div").top + 5
+    return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")
+  }, sel_move); },
+  goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {
+    var top = cm.cursorCoords(range.head, "div").top + 5
+    return cm.coordsChar({left: 0, top: top}, "div")
+  }, sel_move); },
+  goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {
+    var top = cm.cursorCoords(range.head, "div").top + 5
+    var pos = cm.coordsChar({left: 0, top: top}, "div")
+    if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) }
+    return pos
+  }, sel_move); },
+  goLineUp: function (cm) { return cm.moveV(-1, "line"); },
+  goLineDown: function (cm) { return cm.moveV(1, "line"); },
+  goPageUp: function (cm) { return cm.moveV(-1, "page"); },
+  goPageDown: function (cm) { return cm.moveV(1, "page"); },
+  goCharLeft: function (cm) { return cm.moveH(-1, "char"); },
+  goCharRight: function (cm) { return cm.moveH(1, "char"); },
+  goColumnLeft: function (cm) { return cm.moveH(-1, "column"); },
+  goColumnRight: function (cm) { return cm.moveH(1, "column"); },
+  goWordLeft: function (cm) { return cm.moveH(-1, "word"); },
+  goGroupRight: function (cm) { return cm.moveH(1, "group"); },
+  goGroupLeft: function (cm) { return cm.moveH(-1, "group"); },
+  goWordRight: function (cm) { return cm.moveH(1, "word"); },
+  delCharBefore: function (cm) { return cm.deleteH(-1, "char"); },
+  delCharAfter: function (cm) { return cm.deleteH(1, "char"); },
+  delWordBefore: function (cm) { return cm.deleteH(-1, "word"); },
+  delWordAfter: function (cm) { return cm.deleteH(1, "word"); },
+  delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); },
+  delGroupAfter: function (cm) { return cm.deleteH(1, "group"); },
+  indentAuto: function (cm) { return cm.indentSelection("smart"); },
+  indentMore: function (cm) { return cm.indentSelection("add"); },
+  indentLess: function (cm) { return cm.indentSelection("subtract"); },
+  insertTab: function (cm) { return cm.replaceSelection("\t"); },
+  insertSoftTab: function (cm) {
+    var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize
+    for (var i = 0; i < ranges.length; i++) {
+      var pos = ranges[i].from()
+      var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize)
+      spaces.push(spaceStr(tabSize - col % tabSize))
+    }
+    cm.replaceSelections(spaces)
+  },
+  defaultTab: function (cm) {
+    if (cm.somethingSelected()) { cm.indentSelection("add") }
+    else { cm.execCommand("insertTab") }
+  },
+  // Swap the two chars left and right of each selection's head.
+  // Move cursor behind the two swapped characters afterwards.
+  //
+  // Doesn't consider line feeds a character.
+  // Doesn't scan more than one line above to find a character.
+  // Doesn't do anything on an empty line.
+  // Doesn't do anything with non-empty selections.
+  transposeChars: function (cm) { return runInOp(cm, function () {
+    var ranges = cm.listSelections(), newSel = []
+    for (var i = 0; i < ranges.length; i++) {
+      if (!ranges[i].empty()) { continue }
+      var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text
+      if (line) {
+        if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1) }
+        if (cur.ch > 0) {
+          cur = new Pos(cur.line, cur.ch + 1)
+          cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),
+                          Pos(cur.line, cur.ch - 2), cur, "+transpose")
+        } else if (cur.line > cm.doc.first) {
+          var prev = getLine(cm.doc, cur.line - 1).text
+          if (prev) {
+            cur = new Pos(cur.line, 1)
+            cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +
+                            prev.charAt(prev.length - 1),
+                            Pos(cur.line - 1, prev.length - 1), cur, "+transpose")
+          }
+        }
+      }
+      newSel.push(new Range(cur, cur))
+    }
+    cm.setSelections(newSel)
+  }); },
+  newlineAndIndent: function (cm) { return runInOp(cm, function () {
+    var sels = cm.listSelections()
+    for (var i = sels.length - 1; i >= 0; i--)
+      { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input") }
+    sels = cm.listSelections()
+    for (var i$1 = 0; i$1 < sels.length; i$1++)
+      { cm.indentLine(sels[i$1].from().line, null, true) }
+    ensureCursorVisible(cm)
+  }); },
+  openLine: function (cm) { return cm.replaceSelection("\n", "start"); },
+  toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }
+}
+
+
+function lineStart(cm, lineN) {
+  var line = getLine(cm.doc, lineN)
+  var visual = visualLine(line)
+  if (visual != line) { lineN = lineNo(visual) }
+  return endOfLine(true, cm, visual, lineN, 1)
+}
+function lineEnd(cm, lineN) {
+  var line = getLine(cm.doc, lineN)
+  var visual = visualLineEnd(line)
+  if (visual != line) { lineN = lineNo(visual) }
+  return endOfLine(true, cm, line, lineN, -1)
+}
+function lineStartSmart(cm, pos) {
+  var start = lineStart(cm, pos.line)
+  var line = getLine(cm.doc, start.line)
+  var order = getOrder(line, cm.doc.direction)
+  if (!order || order[0].level == 0) {
+    var firstNonWS = Math.max(0, line.text.search(/\S/))
+    var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch
+    return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)
+  }
+  return start
+}
+
+// Run a handler that was bound to a key.
+function doHandleBinding(cm, bound, dropShift) {
+  if (typeof bound == "string") {
+    bound = commands[bound]
+    if (!bound) { return false }
+  }
+  // Ensure previous input has been read, so that the handler sees a
+  // consistent view of the document
+  cm.display.input.ensurePolled()
+  var prevShift = cm.display.shift, done = false
+  try {
+    if (cm.isReadOnly()) { cm.state.suppressEdits = true }
+    if (dropShift) { cm.display.shift = false }
+    done = bound(cm) != Pass
+  } finally {
+    cm.display.shift = prevShift
+    cm.state.suppressEdits = false
+  }
+  return done
+}
+
+function lookupKeyForEditor(cm, name, handle) {
+  for (var i = 0; i < cm.state.keyMaps.length; i++) {
+    var result = lookupKey(name, cm.state.keyMaps[i], handle, cm)
+    if (result) { return result }
+  }
+  return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))
+    || lookupKey(name, cm.options.keyMap, handle, cm)
+}
+
+// Note that, despite the name, this function is also used to check
+// for bound mouse clicks.
+
+var stopSeq = new Delayed
+
+function dispatchKey(cm, name, e, handle) {
+  var seq = cm.state.keySeq
+  if (seq) {
+    if (isModifierKey(name)) { return "handled" }
+    if (/\'$/.test(name))
+      { cm.state.keySeq = null }
+    else
+      { stopSeq.set(50, function () {
+        if (cm.state.keySeq == seq) {
+          cm.state.keySeq = null
+          cm.display.input.reset()
+        }
+      }) }
+    if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true }
+  }
+  return dispatchKeyInner(cm, name, e, handle)
+}
+
+function dispatchKeyInner(cm, name, e, handle) {
+  var result = lookupKeyForEditor(cm, name, handle)
+
+  if (result == "multi")
+    { cm.state.keySeq = name }
+  if (result == "handled")
+    { signalLater(cm, "keyHandled", cm, name, e) }
+
+  if (result == "handled" || result == "multi") {
+    e_preventDefault(e)
+    restartBlink(cm)
+  }
+
+  return !!result
+}
+
+// Handle a key from the keydown event.
+function handleKeyBinding(cm, e) {
+  var name = keyName(e, true)
+  if (!name) { return false }
+
+  if (e.shiftKey && !cm.state.keySeq) {
+    // First try to resolve full name (including 'Shift-'). Failing
+    // that, see if there is a cursor-motion command (starting with
+    // 'go') bound to the keyname without 'Shift-'.
+    return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); })
+        || dispatchKey(cm, name, e, function (b) {
+             if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
+               { return doHandleBinding(cm, b) }
+           })
+  } else {
+    return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })
+  }
+}
+
+// Handle a key from the keypress event
+function handleCharBinding(cm, e, ch) {
+  return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); })
+}
+
+var lastStoppedKey = null
+function onKeyDown(e) {
+  var cm = this
+  cm.curOp.focus = activeElt()
+  if (signalDOMEvent(cm, e)) { return }
+  // IE does strange things with escape.
+  if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false }
+  var code = e.keyCode
+  cm.display.shift = code == 16 || e.shiftKey
+  var handled = handleKeyBinding(cm, e)
+  if (presto) {
+    lastStoppedKey = handled ? code : null
+    // Opera has no cut event... we try to at least catch the key combo
+    if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
+      { cm.replaceSelection("", null, "cut") }
+  }
+
+  // Turn mouse into crosshair when Alt is held on Mac.
+  if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className))
+    { showCrossHair(cm) }
+}
+
+function showCrossHair(cm) {
+  var lineDiv = cm.display.lineDiv
+  addClass(lineDiv, "CodeMirror-crosshair")
+
+  function up(e) {
+    if (e.keyCode == 18 || !e.altKey) {
+      rmClass(lineDiv, "CodeMirror-crosshair")
+      off(document, "keyup", up)
+      off(document, "mouseover", up)
+    }
+  }
+  on(document, "keyup", up)
+  on(document, "mouseover", up)
+}
+
+function onKeyUp(e) {
+  if (e.keyCode == 16) { this.doc.sel.shift = false }
+  signalDOMEvent(this, e)
+}
+
+function onKeyPress(e) {
+  var cm = this
+  if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }
+  var keyCode = e.keyCode, charCode = e.charCode
+  if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}
+  if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }
+  var ch = String.fromCharCode(charCode == null ? keyCode : charCode)
+  // Some browsers fire keypress events for backspace
+  if (ch == "\x08") { return }
+  if (handleCharBinding(cm, e, ch)) { return }
+  cm.display.input.onKeyPress(e)
+}
+
+var DOUBLECLICK_DELAY = 400
+
+var PastClick = function(time, pos, button) {
+  this.time = time
+  this.pos = pos
+  this.button = button
+};
+
+PastClick.prototype.compare = function (time, pos, button) {
+  return this.time + DOUBLECLICK_DELAY > time &&
+    cmp(pos, this.pos) == 0 && button == this.button
+};
+
+var lastClick;
+var lastDoubleClick;
+function clickRepeat(pos, button) {
+  var now = +new Date
+  if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {
+    lastClick = lastDoubleClick = null
+    return "triple"
+  } else if (lastClick && lastClick.compare(now, pos, button)) {
+    lastDoubleClick = new PastClick(now, pos, button)
+    lastClick = null
+    return "double"
+  } else {
+    lastClick = new PastClick(now, pos, button)
+    lastDoubleClick = null
+    return "single"
+  }
+}
+
+// A mouse down can be a single click, double click, triple click,
+// start of selection drag, start of text drag, new cursor
+// (ctrl-click), rectangle drag (alt-drag), or xwin
+// middle-click-paste. Or it might be a click on something we should
+// not interfere with, such as a scrollbar or widget.
+function onMouseDown(e) {
+  var cm = this, display = cm.display
+  if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }
+  display.input.ensurePolled()
+  display.shift = e.shiftKey
+
+  if (eventInWidget(display, e)) {
+    if (!webkit) {
+      // Briefly turn off draggability, to allow widgets to do
+      // normal dragging things.
+      display.scroller.draggable = false
+      setTimeout(function () { return display.scroller.draggable = true; }, 100)
+    }
+    return
+  }
+  if (clickInGutter(cm, e)) { return }
+  var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single"
+  window.focus()
+
+  // #3261: make sure, that we're not starting a second selection
+  if (button == 1 && cm.state.selectingText)
+    { cm.state.selectingText(e) }
+
+  if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }
+
+  if (button == 1) {
+    if (pos) { leftButtonDown(cm, pos, repeat, e) }
+    else if (e_target(e) == display.scroller) { e_preventDefault(e) }
+  } else if (button == 2) {
+    if (pos) { extendSelection(cm.doc, pos) }
+    setTimeout(function () { return display.input.focus(); }, 20)
+  } else if (button == 3) {
+    if (captureRightClick) { onContextMenu(cm, e) }
+    else { delayBlurEvent(cm) }
+  }
+}
+
+function handleMappedButton(cm, button, pos, repeat, event) {
+  var name = "Click"
+  if (repeat == "double") { name = "Double" + name }
+  else if (repeat == "triple") { name = "Triple" + name }
+  name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name
+
+  return dispatchKey(cm,  addModifierNames(name, event), event, function (bound) {
+    if (typeof bound == "string") { bound = commands[bound] }
+    if (!bound) { return false }
+    var done = false
+    try {
+      if (cm.isReadOnly()) { cm.state.suppressEdits = true }
+      done = bound(cm, pos) != Pass
+    } finally {
+      cm.state.suppressEdits = false
+    }
+    return done
+  })
+}
+
+function configureMouse(cm, repeat, event) {
+  var option = cm.getOption("configureMouse")
+  var value = option ? option(cm, repeat, event) : {}
+  if (value.unit == null) {
+    var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey
+    value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"
+  }
+  if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey }
+  if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey }
+  if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey) }
+  return value
+}
+
+function leftButtonDown(cm, pos, repeat, event) {
+  if (ie) { setTimeout(bind(ensureFocus, cm), 0) }
+  else { cm.curOp.focus = activeElt() }
+
+  var behavior = configureMouse(cm, repeat, event)
+
+  var sel = cm.doc.sel, contained
+  if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&
+      repeat == "single" && (contained = sel.contains(pos)) > -1 &&
+      (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&
+      (cmp(contained.to(), pos) > 0 || pos.xRel < 0))
+    { leftButtonStartDrag(cm, event, pos, behavior) }
+  else
+    { leftButtonSelect(cm, event, pos, behavior) }
+}
+
+// Start a text drag. When it ends, see if any dragging actually
+// happen, and treat as a click if it didn't.
+function leftButtonStartDrag(cm, event, pos, behavior) {
+  var display = cm.display, moved = false
+  var dragEnd = operation(cm, function (e) {
+    if (webkit) { display.scroller.draggable = false }
+    cm.state.draggingText = false
+    off(document, "mouseup", dragEnd)
+    off(document, "mousemove", mouseMove)
+    off(display.scroller, "dragstart", dragStart)
+    off(display.scroller, "drop", dragEnd)
+    if (!moved) {
+      e_preventDefault(e)
+      if (!behavior.addNew)
+        { extendSelection(cm.doc, pos, null, null, behavior.extend) }
+      // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
+      if (webkit || ie && ie_version == 9)
+        { setTimeout(function () {document.body.focus(); display.input.focus()}, 20) }
+      else
+        { display.input.focus() }
+    }
+  })
+  var mouseMove = function(e2) {
+    moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10
+  }
+  var dragStart = function () { return moved = true; }
+  // Let the drag handler handle this.
+  if (webkit) { display.scroller.draggable = true }
+  cm.state.draggingText = dragEnd
+  dragEnd.copy = !behavior.moveOnDrag
+  // IE's approach to draggable
+  if (display.scroller.dragDrop) { display.scroller.dragDrop() }
+  on(document, "mouseup", dragEnd)
+  on(document, "mousemove", mouseMove)
+  on(display.scroller, "dragstart", dragStart)
+  on(display.scroller, "drop", dragEnd)
+
+  delayBlurEvent(cm)
+  setTimeout(function () { return display.input.focus(); }, 20)
+}
+
+function rangeForUnit(cm, pos, unit) {
+  if (unit == "char") { return new Range(pos, pos) }
+  if (unit == "word") { return cm.findWordAt(pos) }
+  if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }
+  var result = unit(cm, pos)
+  return new Range(result.from, result.to)
+}
+
+// Normal selection, as opposed to text dragging.
+function leftButtonSelect(cm, event, start, behavior) {
+  var display = cm.display, doc = cm.doc
+  e_preventDefault(event)
+
+  var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges
+  if (behavior.addNew && !behavior.extend) {
+    ourIndex = doc.sel.contains(start)
+    if (ourIndex > -1)
+      { ourRange = ranges[ourIndex] }
+    else
+      { ourRange = new Range(start, start) }
+  } else {
+    ourRange = doc.sel.primary()
+    ourIndex = doc.sel.primIndex
+  }
+
+  if (behavior.unit == "rectangle") {
+    if (!behavior.addNew) { ourRange = new Range(start, start) }
+    start = posFromMouse(cm, event, true, true)
+    ourIndex = -1
+  } else {
+    var range = rangeForUnit(cm, start, behavior.unit)
+    if (behavior.extend)
+      { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend) }
+    else
+      { ourRange = range }
+  }
+
+  if (!behavior.addNew) {
+    ourIndex = 0
+    setSelection(doc, new Selection([ourRange], 0), sel_mouse)
+    startSel = doc.sel
+  } else if (ourIndex == -1) {
+    ourIndex = ranges.length
+    setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex),
+                 {scroll: false, origin: "*mouse"})
+  } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) {
+    setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),
+                 {scroll: false, origin: "*mouse"})
+    startSel = doc.sel
+  } else {
+    replaceOneSelection(doc, ourIndex, ourRange, sel_mouse)
+  }
+
+  var lastPos = start
+  function extendTo(pos) {
+    if (cmp(lastPos, pos) == 0) { return }
+    lastPos = pos
+
+    if (behavior.unit == "rectangle") {
+      var ranges = [], tabSize = cm.options.tabSize
+      var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize)
+      var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize)
+      var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol)
+      for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));
+           line <= end; line++) {
+        var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize)
+        if (left == right)
+          { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))) }
+        else if (text.length > leftPos)
+          { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))) }
+      }
+      if (!ranges.length) { ranges.push(new Range(start, start)) }
+      setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),
+                   {origin: "*mouse", scroll: false})
+      cm.scrollIntoView(pos)
+    } else {
+      var oldRange = ourRange
+      var range = rangeForUnit(cm, pos, behavior.unit)
+      var anchor = oldRange.anchor, head
+      if (cmp(range.anchor, anchor) > 0) {
+        head = range.head
+        anchor = minPos(oldRange.from(), range.anchor)
+      } else {
+        head = range.anchor
+        anchor = maxPos(oldRange.to(), range.head)
+      }
+      var ranges$1 = startSel.ranges.slice(0)
+      ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head))
+      setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse)
+    }
+  }
+
+  var editorSize = display.wrapper.getBoundingClientRect()
+  // Used to ensure timeout re-tries don't fire when another extend
+  // happened in the meantime (clearTimeout isn't reliable -- at
+  // least on Chrome, the timeouts still happen even when cleared,
+  // if the clear happens after their scheduled firing time).
+  var counter = 0
+
+  function extend(e) {
+    var curCount = ++counter
+    var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle")
+    if (!cur) { return }
+    if (cmp(cur, lastPos) != 0) {
+      cm.curOp.focus = activeElt()
+      extendTo(cur)
+      var visible = visibleLines(display, doc)
+      if (cur.line >= visible.to || cur.line < visible.from)
+        { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e) }}), 150) }
+    } else {
+      var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0
+      if (outside) { setTimeout(operation(cm, function () {
+        if (counter != curCount) { return }
+        display.scroller.scrollTop += outside
+        extend(e)
+      }), 50) }
+    }
+  }
+
+  function done(e) {
+    cm.state.selectingText = false
+    counter = Infinity
+    e_preventDefault(e)
+    display.input.focus()
+    off(document, "mousemove", move)
+    off(document, "mouseup", up)
+    doc.history.lastSelOrigin = null
+  }
+
+  var move = operation(cm, function (e) {
+    if (!e_button(e)) { done(e) }
+    else { extend(e) }
+  })
+  var up = operation(cm, done)
+  cm.state.selectingText = up
+  on(document, "mousemove", move)
+  on(document, "mouseup", up)
+}
+
+// Used when mouse-selecting to adjust the anchor to the proper side
+// of a bidi jump depending on the visual position of the head.
+function bidiSimplify(cm, range) {
+  var anchor = range.anchor;
+  var head = range.head;
+  var anchorLine = getLine(cm.doc, anchor.line)
+  if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }
+  var order = getOrder(anchorLine)
+  if (!order) { return range }
+  var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index]
+  if (part.from != anchor.ch && part.to != anchor.ch) { return range }
+  var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1)
+  if (boundary == 0 || boundary == order.length) { return range }
+
+  // Compute the relative visual position of the head compared to the
+  // anchor (<0 is to the left, >0 to the right)
+  var leftSide
+  if (head.line != anchor.line) {
+    leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0
+  } else {
+    var headIndex = getBidiPartAt(order, head.ch, head.sticky)
+    var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1)
+    if (headIndex == boundary - 1 || headIndex == boundary)
+      { leftSide = dir < 0 }
+    else
+      { leftSide = dir > 0 }
+  }
+
+  var usePart = order[boundary + (leftSide ? -1 : 0)]
+  var from = leftSide == (usePart.level == 1)
+  var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before"
+  return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)
+}
+
+
+// Determines whether an event happened in the gutter, and fires the
+// handlers for the corresponding event.
+function gutterEvent(cm, e, type, prevent) {
+  var mX, mY
+  if (e.touches) {
+    mX = e.touches[0].clientX
+    mY = e.touches[0].clientY
+  } else {
+    try { mX = e.clientX; mY = e.clientY }
+    catch(e) { return false }
+  }
+  if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }
+  if (prevent) { e_preventDefault(e) }
+
+  var display = cm.display
+  var lineBox = display.lineDiv.getBoundingClientRect()
+
+  if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }
+  mY -= lineBox.top - display.viewOffset
+
+  for (var i = 0; i < cm.options.gutters.length; ++i) {
+    var g = display.gutters.childNodes[i]
+    if (g && g.getBoundingClientRect().right >= mX) {
+      var line = lineAtHeight(cm.doc, mY)
+      var gutter = cm.options.gutters[i]
+      signal(cm, type, cm, line, gutter, e)
+      return e_defaultPrevented(e)
+    }
+  }
+}
+
+function clickInGutter(cm, e) {
+  return gutterEvent(cm, e, "gutterClick", true)
+}
+
+// CONTEXT MENU HANDLING
+
+// To make the context menu work, we need to briefly unhide the
+// textarea (making it as unobtrusive as possible) to let the
+// right-click take effect on it.
+function onContextMenu(cm, e) {
+  if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }
+  if (signalDOMEvent(cm, e, "contextmenu")) { return }
+  cm.display.input.onContextMenu(e)
+}
+
+function contextMenuInGutter(cm, e) {
+  if (!hasHandler(cm, "gutterContextMenu")) { return false }
+  return gutterEvent(cm, e, "gutterContextMenu", false)
+}
+
+function themeChanged(cm) {
+  cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
+    cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-")
+  clearCaches(cm)
+}
+
+var Init = {toString: function(){return "CodeMirror.Init"}}
+
+var defaults = {}
+var optionHandlers = {}
+
+function defineOptions(CodeMirror) {
+  var optionHandlers = CodeMirror.optionHandlers
+
+  function option(name, deflt, handle, notOnInit) {
+    CodeMirror.defaults[name] = deflt
+    if (handle) { optionHandlers[name] =
+      notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old) }} : handle }
+  }
+
+  CodeMirror.defineOption = option
+
+  // Passed to option handlers when there is no old value.
+  CodeMirror.Init = Init
+
+  // These two are, on init, called from the constructor because they
+  // have to be initialized before the editor can start at all.
+  option("value", "", function (cm, val) { return cm.setValue(val); }, true)
+  option("mode", null, function (cm, val) {
+    cm.doc.modeOption = val
+    loadMode(cm)
+  }, true)
+
+  option("indentUnit", 2, loadMode, true)
+  option("indentWithTabs", false)
+  option("smartIndent", true)
+  option("tabSize", 4, function (cm) {
+    resetModeState(cm)
+    clearCaches(cm)
+    regChange(cm)
+  }, true)
+
+  option("lineSeparator", null, function (cm, val) {
+    cm.doc.lineSep = val
+    if (!val) { return }
+    var newBreaks = [], lineNo = cm.doc.first
+    cm.doc.iter(function (line) {
+      for (var pos = 0;;) {
+        var found = line.text.indexOf(val, pos)
+        if (found == -1) { break }
+        pos = found + val.length
+        newBreaks.push(Pos(lineNo, found))
+      }
+      lineNo++
+    })
+    for (var i = newBreaks.length - 1; i >= 0; i--)
+      { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)) }
+  })
+  option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g, function (cm, val, old) {
+    cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g")
+    if (old != Init) { cm.refresh() }
+  })
+  option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true)
+  option("electricChars", true)
+  option("inputStyle", mobile ? "contenteditable" : "textarea", function () {
+    throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME
+  }, true)
+  option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true)
+  option("rtlMoveVisually", !windows)
+  option("wholeLineUpdateBefore", true)
+
+  option("theme", "default", function (cm) {
+    themeChanged(cm)
+    guttersChanged(cm)
+  }, true)
+  option("keyMap", "default", function (cm, val, old) {
+    var next = getKeyMap(val)
+    var prev = old != Init && getKeyMap(old)
+    if (prev && prev.detach) { prev.detach(cm, next) }
+    if (next.attach) { next.attach(cm, prev || null) }
+  })
+  option("extraKeys", null)
+  option("configureMouse", null)
+
+  option("lineWrapping", false, wrappingChanged, true)
+  option("gutters", [], function (cm) {
+    setGuttersForLineNumbers(cm.options)
+    guttersChanged(cm)
+  }, true)
+  option("fixedGutter", true, function (cm, val) {
+    cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"
+    cm.refresh()
+  }, true)
+  option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true)
+  option("scrollbarStyle", "native", function (cm) {
+    initScrollbars(cm)
+    updateScrollbars(cm)
+    cm.display.scrollbars.setScrollTop(cm.doc.scrollTop)
+    cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft)
+  }, true)
+  option("lineNumbers", false, function (cm) {
+    setGuttersForLineNumbers(cm.options)
+    guttersChanged(cm)
+  }, true)
+  option("firstLineNumber", 1, guttersChanged, true)
+  option("lineNumberFormatter", function (integer) { return integer; }, guttersChanged, true)
+  option("showCursorWhenSelecting", false, updateSelection, true)
+
+  option("resetSelectionOnContextMenu", true)
+  option("lineWiseCopyCut", true)
+  option("pasteLinesPerSelection", true)
+
+  option("readOnly", false, function (cm, val) {
+    if (val == "nocursor") {
+      onBlur(cm)
+      cm.display.input.blur()
+    }
+    cm.display.input.readOnlyChanged(val)
+  })
+  option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset() }}, true)
+  option("dragDrop", true, dragDropChanged)
+  option("allowDropFileTypes", null)
+
+  option("cursorBlinkRate", 530)
+  option("cursorScrollMargin", 0)
+  option("cursorHeight", 1, updateSelection, true)
+  option("singleCursorHeightPerLine", true, updateSelection, true)
+  option("workTime", 100)
+  option("workDelay", 100)
+  option("flattenSpans", true, resetModeState, true)
+  option("addModeClass", false, resetModeState, true)
+  option("pollInterval", 100)
+  option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; })
+  option("historyEventDelay", 1250)
+  option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true)
+  option("maxHighlightLength", 10000, resetModeState, true)
+  option("moveInputWithCursor", true, function (cm, val) {
+    if (!val) { cm.display.input.resetPosition() }
+  })
+
+  option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; })
+  option("autofocus", null)
+  option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true)
+}
+
+function guttersChanged(cm) {
+  updateGutters(cm)
+  regChange(cm)
+  alignHorizontally(cm)
+}
+
+function dragDropChanged(cm, value, old) {
+  var wasOn = old && old != Init
+  if (!value != !wasOn) {
+    var funcs = cm.display.dragFunctions
+    var toggle = value ? on : off
+    toggle(cm.display.scroller, "dragstart", funcs.start)
+    toggle(cm.display.scroller, "dragenter", funcs.enter)
+    toggle(cm.display.scroller, "dragover", funcs.over)
+    toggle(cm.display.scroller, "dragleave", funcs.leave)
+    toggle(cm.display.scroller, "drop", funcs.drop)
+  }
+}
+
+function wrappingChanged(cm) {
+  if (cm.options.lineWrapping) {
+    addClass(cm.display.wrapper, "CodeMirror-wrap")
+    cm.display.sizer.style.minWidth = ""
+    cm.display.sizerWidth = null
+  } else {
+    rmClass(cm.display.wrapper, "CodeMirror-wrap")
+    findMaxLine(cm)
+  }
+  estimateLineHeights(cm)
+  regChange(cm)
+  clearCaches(cm)
+  setTimeout(function () { return updateScrollbars(cm); }, 100)
+}
+
+// A CodeMirror instance represents an editor. This is the object
+// that user code is usually dealing with.
+
+function CodeMirror(place, options) {
+  var this$1 = this;
+
+  if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }
+
+  this.options = options = options ? copyObj(options) : {}
+  // Determine effective options based on given values and defaults.
+  copyObj(defaults, options, false)
+  setGuttersForLineNumbers(options)
+
+  var doc = options.value
+  if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction) }
+  this.doc = doc
+
+  var input = new CodeMirror.inputStyles[options.inputStyle](this)
+  var display = this.display = new Display(place, doc, input)
+  display.wrapper.CodeMirror = this
+  updateGutters(this)
+  themeChanged(this)
+  if (options.lineWrapping)
+    { this.display.wrapper.className += " CodeMirror-wrap" }
+  initScrollbars(this)
+
+  this.state = {
+    keyMaps: [],  // stores maps added by addKeyMap
+    overlays: [], // highlighting overlays, as added by addOverlay
+    modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info
+    overwrite: false,
+    delayingBlurEvent: false,
+    focused: false,
+    suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
+    pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll
+    selectingText: false,
+    draggingText: false,
+    highlight: new Delayed(), // stores highlight worker timeout
+    keySeq: null,  // Unfinished key sequence
+    specialChars: null
+  }
+
+  if (options.autofocus && !mobile) { display.input.focus() }
+
+  // Override magic textarea content restore that IE sometimes does
+  // on our hidden textarea on reload
+  if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20) }
+
+  registerEventHandlers(this)
+  ensureGlobalHandlers()
+
+  startOperation(this)
+  this.curOp.forceUpdate = true
+  attachDoc(this, doc)
+
+  if ((options.autofocus && !mobile) || this.hasFocus())
+    { setTimeout(bind(onFocus, this), 20) }
+  else
+    { onBlur(this) }
+
+  for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))
+    { optionHandlers[opt](this$1, options[opt], Init) } }
+  maybeUpdateLineNumberWidth(this)
+  if (options.finishInit) { options.finishInit(this) }
+  for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1) }
+  endOperation(this)
+  // Suppress optimizelegibility in Webkit, since it breaks text
+  // measuring on line wrapping boundaries.
+  if (webkit && options.lineWrapping &&
+      getComputedStyle(display.lineDiv).textRendering == "optimizelegibility")
+    { display.lineDiv.style.textRendering = "auto" }
+}
+
+// The default configuration options.
+CodeMirror.defaults = defaults
+// Functions to run when options are changed.
+CodeMirror.optionHandlers = optionHandlers
+
+// Attach the necessary event handlers when initializing the editor
+function registerEventHandlers(cm) {
+  var d = cm.display
+  on(d.scroller, "mousedown", operation(cm, onMouseDown))
+  // Older IE's will not fire a second mousedown for a double click
+  if (ie && ie_version < 11)
+    { on(d.scroller, "dblclick", operation(cm, function (e) {
+      if (signalDOMEvent(cm, e)) { return }
+      var pos = posFromMouse(cm, e)
+      if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }
+      e_preventDefault(e)
+      var word = cm.findWordAt(pos)
+      extendSelection(cm.doc, word.anchor, word.head)
+    })) }
+  else
+    { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }) }
+  // Some browsers fire contextmenu *after* opening the menu, at
+  // which point we can't mess with it anymore. Context menu is
+  // handled in onMouseDown for these browsers.
+  if (!captureRightClick) { on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }) }
+
+  // Used to suppress mouse event handling when a touch happens
+  var touchFinished, prevTouch = {end: 0}
+  function finishTouch() {
+    if (d.activeTouch) {
+      touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000)
+      prevTouch = d.activeTouch
+      prevTouch.end = +new Date
+    }
+  }
+  function isMouseLikeTouchEvent(e) {
+    if (e.touches.length != 1) { return false }
+    var touch = e.touches[0]
+    return touch.radiusX <= 1 && touch.radiusY <= 1
+  }
+  function farAway(touch, other) {
+    if (other.left == null) { return true }
+    var dx = other.left - touch.left, dy = other.top - touch.top
+    return dx * dx + dy * dy > 20 * 20
+  }
+  on(d.scroller, "touchstart", function (e) {
+    if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {
+      d.input.ensurePolled()
+      clearTimeout(touchFinished)
+      var now = +new Date
+      d.activeTouch = {start: now, moved: false,
+                       prev: now - prevTouch.end <= 300 ? prevTouch : null}
+      if (e.touches.length == 1) {
+        d.activeTouch.left = e.touches[0].pageX
+        d.activeTouch.top = e.touches[0].pageY
+      }
+    }
+  })
+  on(d.scroller, "touchmove", function () {
+    if (d.activeTouch) { d.activeTouch.moved = true }
+  })
+  on(d.scroller, "touchend", function (e) {
+    var touch = d.activeTouch
+    if (touch && !eventInWidget(d, e) && touch.left != null &&
+        !touch.moved && new Date - touch.start < 300) {
+      var pos = cm.coordsChar(d.activeTouch, "page"), range
+      if (!touch.prev || farAway(touch, touch.prev)) // Single tap
+        { range = new Range(pos, pos) }
+      else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap
+        { range = cm.findWordAt(pos) }
+      else // Triple tap
+        { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }
+      cm.setSelection(range.anchor, range.head)
+      cm.focus()
+      e_preventDefault(e)
+    }
+    finishTouch()
+  })
+  on(d.scroller, "touchcancel", finishTouch)
+
+  // Sync scrolling between fake scrollbars and real scrollable
+  // area, ensure viewport is updated when scrolling.
+  on(d.scroller, "scroll", function () {
+    if (d.scroller.clientHeight) {
+      updateScrollTop(cm, d.scroller.scrollTop)
+      setScrollLeft(cm, d.scroller.scrollLeft, true)
+      signal(cm, "scroll", cm)
+    }
+  })
+
+  // Listen to wheel events in order to try and update the viewport on time.
+  on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); })
+  on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); })
+
+  // Prevent wrapper from ever scrolling
+  on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; })
+
+  d.dragFunctions = {
+    enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e) }},
+    over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e) }},
+    start: function (e) { return onDragStart(cm, e); },
+    drop: operation(cm, onDrop),
+    leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm) }}
+  }
+
+  var inp = d.input.getField()
+  on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); })
+  on(inp, "keydown", operation(cm, onKeyDown))
+  on(inp, "keypress", operation(cm, onKeyPress))
+  on(inp, "focus", function (e) { return onFocus(cm, e); })
+  on(inp, "blur", function (e) { return onBlur(cm, e); })
+}
+
+var initHooks = []
+CodeMirror.defineInitHook = function (f) { return initHooks.push(f); }
+
+// Indent the given line. The how parameter can be "smart",
+// "add"/null, "subtract", or "prev". When aggressive is false
+// (typically set to true for forced single-line indents), empty
+// lines are not indented, and places where the mode returns Pass
+// are left alone.
+function indentLine(cm, n, how, aggressive) {
+  var doc = cm.doc, state
+  if (how == null) { how = "add" }
+  if (how == "smart") {
+    // Fall back to "prev" when the mode doesn't have an indentation
+    // method.
+    if (!doc.mode.indent) { how = "prev" }
+    else { state = getContextBefore(cm, n).state }
+  }
+
+  var tabSize = cm.options.tabSize
+  var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize)
+  if (line.stateAfter) { line.stateAfter = null }
+  var curSpaceString = line.text.match(/^\s*/)[0], indentation
+  if (!aggressive && !/\S/.test(line.text)) {
+    indentation = 0
+    how = "not"
+  } else if (how == "smart") {
+    indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text)
+    if (indentation == Pass || indentation > 150) {
+      if (!aggressive) { return }
+      how = "prev"
+    }
+  }
+  if (how == "prev") {
+    if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize) }
+    else { indentation = 0 }
+  } else if (how == "add") {
+    indentation = curSpace + cm.options.indentUnit
+  } else if (how == "subtract") {
+    indentation = curSpace - cm.options.indentUnit
+  } else if (typeof how == "number") {
+    indentation = curSpace + how
+  }
+  indentation = Math.max(0, indentation)
+
+  var indentString = "", pos = 0
+  if (cm.options.indentWithTabs)
+    { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t"} }
+  if (pos < indentation) { indentString += spaceStr(indentation - pos) }
+
+  if (indentString != curSpaceString) {
+    replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input")
+    line.stateAfter = null
+    return true
+  } else {
+    // Ensure that, if the cursor was in the whitespace at the start
+    // of the line, it is moved to the end of that space.
+    for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {
+      var range = doc.sel.ranges[i$1]
+      if (range.head.line == n && range.head.ch < curSpaceString.length) {
+        var pos$1 = Pos(n, curSpaceString.length)
+        replaceOneSelection(doc, i$1, new Range(pos$1, pos$1))
+        break
+      }
+    }
+  }
+}
+
+// This will be set to a {lineWise: bool, text: [string]} object, so
+// that, when pasting, we know what kind of selections the copied
+// text was made out of.
+var lastCopied = null
+
+function setLastCopied(newLastCopied) {
+  lastCopied = newLastCopied
+}
+
+function applyTextInput(cm, inserted, deleted, sel, origin) {
+  var doc = cm.doc
+  cm.display.shift = false
+  if (!sel) { sel = doc.sel }
+
+  var paste = cm.state.pasteIncoming || origin == "paste"
+  var textLines = splitLinesAuto(inserted), multiPaste = null
+  // When pasing N lines into N selections, insert one line per selection
+  if (paste && sel.ranges.length > 1) {
+    if (lastCopied && lastCopied.text.join("\n") == inserted) {
+      if (sel.ranges.length % lastCopied.text.length == 0) {
+        multiPaste = []
+        for (var i = 0; i < lastCopied.text.length; i++)
+          { multiPaste.push(doc.splitLines(lastCopied.text[i])) }
+      }
+    } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {
+      multiPaste = map(textLines, function (l) { return [l]; })
+    }
+  }
+
+  var updateInput
+  // Normal behavior is to insert the new text into every selection
+  for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {
+    var range = sel.ranges[i$1]
+    var from = range.from(), to = range.to()
+    if (range.empty()) {
+      if (deleted && deleted > 0) // Handle deletion
+        { from = Pos(from.line, from.ch - deleted) }
+      else if (cm.state.overwrite && !paste) // Handle overwrite
+        { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)) }
+      else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted)
+        { from = to = Pos(from.line, 0) }
+    }
+    updateInput = cm.curOp.updateInput
+    var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,
+                       origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")}
+    makeChange(cm.doc, changeEvent)
+    signalLater(cm, "inputRead", cm, changeEvent)
+  }
+  if (inserted && !paste)
+    { triggerElectric(cm, inserted) }
+
+  ensureCursorVisible(cm)
+  cm.curOp.updateInput = updateInput
+  cm.curOp.typing = true
+  cm.state.pasteIncoming = cm.state.cutIncoming = false
+}
+
+function handlePaste(e, cm) {
+  var pasted = e.clipboardData && e.clipboardData.getData("Text")
+  if (pasted) {
+    e.preventDefault()
+    if (!cm.isReadOnly() && !cm.options.disableInput)
+      { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }) }
+    return true
+  }
+}
+
+function triggerElectric(cm, inserted) {
+  // When an 'electric' character is inserted, immediately trigger a reindent
+  if (!cm.options.electricChars || !cm.options.smartIndent) { return }
+  var sel = cm.doc.sel
+
+  for (var i = sel.ranges.length - 1; i >= 0; i--) {
+    var range = sel.ranges[i]
+    if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }
+    var mode = cm.getModeAt(range.head)
+    var indented = false
+    if (mode.electricChars) {
+      for (var j = 0; j < mode.electricChars.length; j++)
+        { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
+          indented = indentLine(cm, range.head.line, "smart")
+          break
+        } }
+    } else if (mode.electricInput) {
+      if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))
+        { indented = indentLine(cm, range.head.line, "smart") }
+    }
+    if (indented) { signalLater(cm, "electricInput", cm, range.head.line) }
+  }
+}
+
+function copyableRanges(cm) {
+  var text = [], ranges = []
+  for (var i = 0; i < cm.doc.sel.ranges.length; i++) {
+    var line = cm.doc.sel.ranges[i].head.line
+    var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}
+    ranges.push(lineRange)
+    text.push(cm.getRange(lineRange.anchor, lineRange.head))
+  }
+  return {text: text, ranges: ranges}
+}
+
+function disableBrowserMagic(field, spellcheck) {
+  field.setAttribute("autocorrect", "off")
+  field.setAttribute("autocapitalize", "off")
+  field.setAttribute("spellcheck", !!spellcheck)
+}
+
+function hiddenTextarea() {
+  var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none")
+  var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;")
+  // The textarea is kept positioned near the cursor to prevent the
+  // fact that it'll be scrolled into view on input from scrolling
+  // our fake cursor out of view. On webkit, when wrap=off, paste is
+  // very slow. So make the area wide instead.
+  if (webkit) { te.style.width = "1000px" }
+  else { te.setAttribute("wrap", "off") }
+  // If border: 0; -- iOS fails to open keyboard (issue #1287)
+  if (ios) { te.style.border = "1px solid black" }
+  disableBrowserMagic(te)
+  return div
+}
+
+// The publicly visible API. Note that methodOp(f) means
+// 'wrap f in an operation, performed on its `this` parameter'.
+
+// This is not the complete set of editor methods. Most of the
+// methods defined on the Doc type are also injected into
+// CodeMirror.prototype, for backwards compatibility and
+// convenience.
+
+function addEditorMethods(CodeMirror) {
+  var optionHandlers = CodeMirror.optionHandlers
+
+  var helpers = CodeMirror.helpers = {}
+
+  CodeMirror.prototype = {
+    constructor: CodeMirror,
+    focus: function(){window.focus(); this.display.input.focus()},
+
+    setOption: function(option, value) {
+      var options = this.options, old = options[option]
+      if (options[option] == value && option != "mode") { return }
+      options[option] = value
+      if (optionHandlers.hasOwnProperty(option))
+        { operation(this, optionHandlers[option])(this, value, old) }
+      signal(this, "optionChange", this, option)
+    },
+
+    getOption: function(option) {return this.options[option]},
+    getDoc: function() {return this.doc},
+
+    addKeyMap: function(map, bottom) {
+      this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map))
+    },
+    removeKeyMap: function(map) {
+      var maps = this.state.keyMaps
+      for (var i = 0; i < maps.length; ++i)
+        { if (maps[i] == map || maps[i].name == map) {
+          maps.splice(i, 1)
+          return true
+        } }
+    },
+
+    addOverlay: methodOp(function(spec, options) {
+      var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec)
+      if (mode.startState) { throw new Error("Overlays may not be stateful.") }
+      insertSorted(this.state.overlays,
+                   {mode: mode, modeSpec: spec, opaque: options && options.opaque,
+                    priority: (options && options.priority) || 0},
+                   function (overlay) { return overlay.priority; })
+      this.state.modeGen++
+      regChange(this)
+    }),
+    removeOverlay: methodOp(function(spec) {
+      var this$1 = this;
+
+      var overlays = this.state.overlays
+      for (var i = 0; i < overlays.length; ++i) {
+        var cur = overlays[i].modeSpec
+        if (cur == spec || typeof spec == "string" && cur.name == spec) {
+          overlays.splice(i, 1)
+          this$1.state.modeGen++
+          regChange(this$1)
+          return
+        }
+      }
+    }),
+
+    indentLine: methodOp(function(n, dir, aggressive) {
+      if (typeof dir != "string" && typeof dir != "number") {
+        if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev" }
+        else { dir = dir ? "add" : "subtract" }
+      }
+      if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive) }
+    }),
+    indentSelection: methodOp(function(how) {
+      var this$1 = this;
+
+      var ranges = this.doc.sel.ranges, end = -1
+      for (var i = 0; i < ranges.length; i++) {
+        var range = ranges[i]
+        if (!range.empty()) {
+          var from = range.from(), to = range.to()
+          var start = Math.max(end, from.line)
+          end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1
+          for (var j = start; j < end; ++j)
+            { indentLine(this$1, j, how) }
+          var newRanges = this$1.doc.sel.ranges
+          if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)
+            { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll) }
+        } else if (range.head.line > end) {
+          indentLine(this$1, range.head.line, how, true)
+          end = range.head.line
+          if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1) }
+        }
+      }
+    }),
+
+    // Fetch the parser token for a given character. Useful for hacks
+    // that want to inspect the mode state (say, for completion).
+    getTokenAt: function(pos, precise) {
+      return takeToken(this, pos, precise)
+    },
+
+    getLineTokens: function(line, precise) {
+      return takeToken(this, Pos(line), precise, true)
+    },
+
+    getTokenTypeAt: function(pos) {
+      pos = clipPos(this.doc, pos)
+      var styles = getLineStyles(this, getLine(this.doc, pos.line))
+      var before = 0, after = (styles.length - 1) / 2, ch = pos.ch
+      var type
+      if (ch == 0) { type = styles[2] }
+      else { for (;;) {
+        var mid = (before + after) >> 1
+        if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid }
+        else if (styles[mid * 2 + 1] < ch) { before = mid + 1 }
+        else { type = styles[mid * 2 + 2]; break }
+      } }
+      var cut = type ? type.indexOf("overlay ") : -1
+      return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)
+    },
+
+    getModeAt: function(pos) {
+      var mode = this.doc.mode
+      if (!mode.innerMode) { return mode }
+      return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode
+    },
+
+    getHelper: function(pos, type) {
+      return this.getHelpers(pos, type)[0]
+    },
+
+    getHelpers: function(pos, type) {
+      var this$1 = this;
+
+      var found = []
+      if (!helpers.hasOwnProperty(type)) { return found }
+      var help = helpers[type], mode = this.getModeAt(pos)
+      if (typeof mode[type] == "string") {
+        if (help[mode[type]]) { found.push(help[mode[type]]) }
+      } else if (mode[type]) {
+        for (var i = 0; i < mode[type].length; i++) {
+          var val = help[mode[type][i]]
+          if (val) { found.push(val) }
+        }
+      } else if (mode.helperType && help[mode.helperType]) {
+        found.push(help[mode.helperType])
+      } else if (help[mode.name]) {
+        found.push(help[mode.name])
+      }
+      for (var i$1 = 0; i$1 < help._global.length; i$1++) {
+        var cur = help._global[i$1]
+        if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)
+          { found.push(cur.val) }
+      }
+      return found
+    },
+
+    getStateAfter: function(line, precise) {
+      var doc = this.doc
+      line = clipLine(doc, line == null ? doc.first + doc.size - 1: line)
+      return getContextBefore(this, line + 1, precise).state
+    },
+
+    cursorCoords: function(start, mode) {
+      var pos, range = this.doc.sel.primary()
+      if (start == null) { pos = range.head }
+      else if (typeof start == "object") { pos = clipPos(this.doc, start) }
+      else { pos = start ? range.from() : range.to() }
+      return cursorCoords(this, pos, mode || "page")
+    },
+
+    charCoords: function(pos, mode) {
+      return charCoords(this, clipPos(this.doc, pos), mode || "page")
+    },
+
+    coordsChar: function(coords, mode) {
+      coords = fromCoordSystem(this, coords, mode || "page")
+      return coordsChar(this, coords.left, coords.top)
+    },
+
+    lineAtHeight: function(height, mode) {
+      height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top
+      return lineAtHeight(this.doc, height + this.display.viewOffset)
+    },
+    heightAtLine: function(line, mode, includeWidgets) {
+      var end = false, lineObj
+      if (typeof line == "number") {
+        var last = this.doc.first + this.doc.size - 1
+        if (line < this.doc.first) { line = this.doc.first }
+        else if (line > last) { line = last; end = true }
+        lineObj = getLine(this.doc, line)
+      } else {
+        lineObj = line
+      }
+      return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top +
+        (end ? this.doc.height - heightAtLine(lineObj) : 0)
+    },
+
+    defaultTextHeight: function() { return textHeight(this.display) },
+    defaultCharWidth: function() { return charWidth(this.display) },
+
+    getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},
+
+    addWidget: function(pos, node, scroll, vert, horiz) {
+      var display = this.display
+      pos = cursorCoords(this, clipPos(this.doc, pos))
+      var top = pos.bottom, left = pos.left
+      node.style.position = "absolute"
+      node.setAttribute("cm-ignore-events", "true")
+      this.display.input.setUneditable(node)
+      display.sizer.appendChild(node)
+      if (vert == "over") {
+        top = pos.top
+      } else if (vert == "above" || vert == "near") {
+        var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
+        hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth)
+        // Default to positioning above (if specified and possible); otherwise default to positioning below
+        if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
+          { top = pos.top - node.offsetHeight }
+        else if (pos.bottom + node.offsetHeight <= vspace)
+          { top = pos.bottom }
+        if (left + node.offsetWidth > hspace)
+          { left = hspace - node.offsetWidth }
+      }
+      node.style.top = top + "px"
+      node.style.left = node.style.right = ""
+      if (horiz == "right") {
+        left = display.sizer.clientWidth - node.offsetWidth
+        node.style.right = "0px"
+      } else {
+        if (horiz == "left") { left = 0 }
+        else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2 }
+        node.style.left = left + "px"
+      }
+      if (scroll)
+        { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}) }
+    },
+
+    triggerOnKeyDown: methodOp(onKeyDown),
+    triggerOnKeyPress: methodOp(onKeyPress),
+    triggerOnKeyUp: onKeyUp,
+    triggerOnMouseDown: methodOp(onMouseDown),
+
+    execCommand: function(cmd) {
+      if (commands.hasOwnProperty(cmd))
+        { return commands[cmd].call(null, this) }
+    },
+
+    triggerElectric: methodOp(function(text) { triggerElectric(this, text) }),
+
+    findPosH: function(from, amount, unit, visually) {
+      var this$1 = this;
+
+      var dir = 1
+      if (amount < 0) { dir = -1; amount = -amount }
+      var cur = clipPos(this.doc, from)
+      for (var i = 0; i < amount; ++i) {
+        cur = findPosH(this$1.doc, cur, dir, unit, visually)
+        if (cur.hitSide) { break }
+      }
+      return cur
+    },
+
+    moveH: methodOp(function(dir, unit) {
+      var this$1 = this;
+
+      this.extendSelectionsBy(function (range) {
+        if (this$1.display.shift || this$1.doc.extend || range.empty())
+          { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }
+        else
+          { return dir < 0 ? range.from() : range.to() }
+      }, sel_move)
+    }),
+
+    deleteH: methodOp(function(dir, unit) {
+      var sel = this.doc.sel, doc = this.doc
+      if (sel.somethingSelected())
+        { doc.replaceSelection("", null, "+delete") }
+      else
+        { deleteNearSelection(this, function (range) {
+          var other = findPosH(doc, range.head, dir, unit, false)
+          return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}
+        }) }
+    }),
+
+    findPosV: function(from, amount, unit, goalColumn) {
+      var this$1 = this;
+
+      var dir = 1, x = goalColumn
+      if (amount < 0) { dir = -1; amount = -amount }
+      var cur = clipPos(this.doc, from)
+      for (var i = 0; i < amount; ++i) {
+        var coords = cursorCoords(this$1, cur, "div")
+        if (x == null) { x = coords.left }
+        else { coords.left = x }
+        cur = findPosV(this$1, coords, dir, unit)
+        if (cur.hitSide) { break }
+      }
+      return cur
+    },
+
+    moveV: methodOp(function(dir, unit) {
+      var this$1 = this;
+
+      var doc = this.doc, goals = []
+      var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected()
+      doc.extendSelectionsBy(function (range) {
+        if (collapse)
+          { return dir < 0 ? range.from() : range.to() }
+        var headPos = cursorCoords(this$1, range.head, "div")
+        if (range.goalColumn != null) { headPos.left = range.goalColumn }
+        goals.push(headPos.left)
+        var pos = findPosV(this$1, headPos, dir, unit)
+        if (unit == "page" && range == doc.sel.primary())
+          { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top) }
+        return pos
+      }, sel_move)
+      if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)
+        { doc.sel.ranges[i].goalColumn = goals[i] } }
+    }),
+
+    // Find the word at the given position (as returned by coordsChar).
+    findWordAt: function(pos) {
+      var doc = this.doc, line = getLine(doc, pos.line).text
+      var start = pos.ch, end = pos.ch
+      if (line) {
+        var helper = this.getHelper(pos, "wordChars")
+        if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end }
+        var startChar = line.charAt(start)
+        var check = isWordChar(startChar, helper)
+          ? function (ch) { return isWordChar(ch, helper); }
+          : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); }
+          : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); }
+        while (start > 0 && check(line.charAt(start - 1))) { --start }
+        while (end < line.length && check(line.charAt(end))) { ++end }
+      }
+      return new Range(Pos(pos.line, start), Pos(pos.line, end))
+    },
+
+    toggleOverwrite: function(value) {
+      if (value != null && value == this.state.overwrite) { return }
+      if (this.state.overwrite = !this.state.overwrite)
+        { addClass(this.display.cursorDiv, "CodeMirror-overwrite") }
+      else
+        { rmClass(this.display.cursorDiv, "CodeMirror-overwrite") }
+
+      signal(this, "overwriteToggle", this, this.state.overwrite)
+    },
+    hasFocus: function() { return this.display.input.getField() == activeElt() },
+    isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },
+
+    scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y) }),
+    getScrollInfo: function() {
+      var scroller = this.display.scroller
+      return {left: scroller.scrollLeft, top: scroller.scrollTop,
+              height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,
+              width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,
+              clientHeight: displayHeight(this), clientWidth: displayWidth(this)}
+    },
+
+    scrollIntoView: methodOp(function(range, margin) {
+      if (range == null) {
+        range = {from: this.doc.sel.primary().head, to: null}
+        if (margin == null) { margin = this.options.cursorScrollMargin }
+      } else if (typeof range == "number") {
+        range = {from: Pos(range, 0), to: null}
+      } else if (range.from == null) {
+        range = {from: range, to: null}
+      }
+      if (!range.to) { range.to = range.from }
+      range.margin = margin || 0
+
+      if (range.from.line != null) {
+        scrollToRange(this, range)
+      } else {
+        scrollToCoordsRange(this, range.from, range.to, range.margin)
+      }
+    }),
+
+    setSize: methodOp(function(width, height) {
+      var this$1 = this;
+
+      var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; }
+      if (width != null) { this.display.wrapper.style.width = interpret(width) }
+      if (height != null) { this.display.wrapper.style.height = interpret(height) }
+      if (this.options.lineWrapping) { clearLineMeasurementCache(this) }
+      var lineNo = this.display.viewFrom
+      this.doc.iter(lineNo, this.display.viewTo, function (line) {
+        if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)
+          { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, "widget"); break } } }
+        ++lineNo
+      })
+      this.curOp.forceUpdate = true
+      signal(this, "refresh", this)
+    }),
+
+    operation: function(f){return runInOp(this, f)},
+    startOperation: function(){return startOperation(this)},
+    endOperation: function(){return endOperation(this)},
+
+    refresh: methodOp(function() {
+      var oldHeight = this.display.cachedTextHeight
+      regChange(this)
+      this.curOp.forceUpdate = true
+      clearCaches(this)
+      scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop)
+      updateGutterSpace(this)
+      if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)
+        { estimateLineHeights(this) }
+      signal(this, "refresh", this)
+    }),
+
+    swapDoc: methodOp(function(doc) {
+      var old = this.doc
+      old.cm = null
+      attachDoc(this, doc)
+      clearCaches(this)
+      this.display.input.reset()
+      scrollToCoords(this, doc.scrollLeft, doc.scrollTop)
+      this.curOp.forceScroll = true
+      signalLater(this, "swapDoc", this, old)
+      return old
+    }),
+
+    getInputField: function(){return this.display.input.getField()},
+    getWrapperElement: function(){return this.display.wrapper},
+    getScrollerElement: function(){return this.display.scroller},
+    getGutterElement: function(){return this.display.gutters}
+  }
+  eventMixin(CodeMirror)
+
+  CodeMirror.registerHelper = function(type, name, value) {
+    if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []} }
+    helpers[type][name] = value
+  }
+  CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {
+    CodeMirror.registerHelper(type, name, value)
+    helpers[type]._global.push({pred: predicate, val: value})
+  }
+}
+
+// Used for horizontal relative motion. Dir is -1 or 1 (left or
+// right), unit can be "char", "column" (like char, but doesn't
+// cross line boundaries), "word" (across next word), or "group" (to
+// the start of next group of word or non-word-non-whitespace
+// chars). The visually param controls whether, in right-to-left
+// text, direction 1 means to move towards the next index in the
+// string, or towards the character to the right of the current
+// position. The resulting position will have a hitSide=true
+// property if it reached the end of the document.
+function findPosH(doc, pos, dir, unit, visually) {
+  var oldPos = pos
+  var origDir = dir
+  var lineObj = getLine(doc, pos.line)
+  function findNextLine() {
+    var l = pos.line + dir
+    if (l < doc.first || l >= doc.first + doc.size) { return false }
+    pos = new Pos(l, pos.ch, pos.sticky)
+    return lineObj = getLine(doc, l)
+  }
+  function moveOnce(boundToLine) {
+    var next
+    if (visually) {
+      next = moveVisually(doc.cm, lineObj, pos, dir)
+    } else {
+      next = moveLogically(lineObj, pos, dir)
+    }
+    if (next == null) {
+      if (!boundToLine && findNextLine())
+        { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir) }
+      else
+        { return false }
+    } else {
+      pos = next
+    }
+    return true
+  }
+
+  if (unit == "char") {
+    moveOnce()
+  } else if (unit == "column") {
+    moveOnce(true)
+  } else if (unit == "word" || unit == "group") {
+    var sawType = null, group = unit == "group"
+    var helper = doc.cm && doc.cm.getHelper(pos, "wordChars")
+    for (var first = true;; first = false) {
+      if (dir < 0 && !moveOnce(!first)) { break }
+      var cur = lineObj.text.charAt(pos.ch) || "\n"
+      var type = isWordChar(cur, helper) ? "w"
+        : group && cur == "\n" ? "n"
+        : !group || /\s/.test(cur) ? null
+        : "p"
+      if (group && !first && !type) { type = "s" }
+      if (sawType && sawType != type) {
+        if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after"}
+        break
+      }
+
+      if (type) { sawType = type }
+      if (dir > 0 && !moveOnce(!first)) { break }
+    }
+  }
+  var result = skipAtomic(doc, pos, oldPos, origDir, true)
+  if (equalCursorPos(oldPos, result)) { result.hitSide = true }
+  return result
+}
+
+// For relative vertical movement. Dir may be -1 or 1. Unit can be
+// "page" or "line". The resulting position will have a hitSide=true
+// property if it reached the end of the document.
+function findPosV(cm, pos, dir, unit) {
+  var doc = cm.doc, x = pos.left, y
+  if (unit == "page") {
+    var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight)
+    var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3)
+    y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount
+
+  } else if (unit == "line") {
+    y = dir > 0 ? pos.bottom + 3 : pos.top - 3
+  }
+  var target
+  for (;;) {
+    target = coordsChar(cm, x, y)
+    if (!target.outside) { break }
+    if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }
+    y += dir * 5
+  }
+  return target
+}
+
+// CONTENTEDITABLE INPUT STYLE
+
+var ContentEditableInput = function(cm) {
+  this.cm = cm
+  this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null
+  this.polling = new Delayed()
+  this.composing = null
+  this.gracePeriod = false
+  this.readDOMTimeout = null
+};
+
+ContentEditableInput.prototype.init = function (display) {
+    var this$1 = this;
+
+  var input = this, cm = input.cm
+  var div = input.div = display.lineDiv
+  disableBrowserMagic(div, cm.options.spellcheck)
+
+  on(div, "paste", function (e) {
+    if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+    // IE doesn't fire input events, so we schedule a read for the pasted content in this way
+    if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20) }
+  })
+
+  on(div, "compositionstart", function (e) {
+    this$1.composing = {data: e.data, done: false}
+  })
+  on(div, "compositionupdate", function (e) {
+    if (!this$1.composing) { this$1.composing = {data: e.data, done: false} }
+  })
+  on(div, "compositionend", function (e) {
+    if (this$1.composing) {
+      if (e.data != this$1.composing.data) { this$1.readFromDOMSoon() }
+      this$1.composing.done = true
+    }
+  })
+
+  on(div, "touchstart", function () { return input.forceCompositionEnd(); })
+
+  on(div, "input", function () {
+    if (!this$1.composing) { this$1.readFromDOMSoon() }
+  })
+
+  function onCopyCut(e) {
+    if (signalDOMEvent(cm, e)) { return }
+    if (cm.somethingSelected()) {
+      setLastCopied({lineWise: false, text: cm.getSelections()})
+      if (e.type == "cut") { cm.replaceSelection("", null, "cut") }
+    } else if (!cm.options.lineWiseCopyCut) {
+      return
+    } else {
+      var ranges = copyableRanges(cm)
+      setLastCopied({lineWise: true, text: ranges.text})
+      if (e.type == "cut") {
+        cm.operation(function () {
+          cm.setSelections(ranges.ranges, 0, sel_dontScroll)
+          cm.replaceSelection("", null, "cut")
+        })
+      }
+    }
+    if (e.clipboardData) {
+      e.clipboardData.clearData()
+      var content = lastCopied.text.join("\n")
+      // iOS exposes the clipboard API, but seems to discard content inserted into it
+      e.clipboardData.setData("Text", content)
+      if (e.clipboardData.getData("Text") == content) {
+        e.preventDefault()
+        return
+      }
+    }
+    // Old-fashioned briefly-focus-a-textarea hack
+    var kludge = hiddenTextarea(), te = kludge.firstChild
+    cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild)
+    te.value = lastCopied.text.join("\n")
+    var hadFocus = document.activeElement
+    selectInput(te)
+    setTimeout(function () {
+      cm.display.lineSpace.removeChild(kludge)
+      hadFocus.focus()
+      if (hadFocus == div) { input.showPrimarySelection() }
+    }, 50)
+  }
+  on(div, "copy", onCopyCut)
+  on(div, "cut", onCopyCut)
+};
+
+ContentEditableInput.prototype.prepareSelection = function () {
+  var result = prepareSelection(this.cm, false)
+  result.focus = this.cm.state.focused
+  return result
+};
+
+ContentEditableInput.prototype.showSelection = function (info, takeFocus) {
+  if (!info || !this.cm.display.view.length) { return }
+  if (info.focus || takeFocus) { this.showPrimarySelection() }
+  this.showMultipleSelections(info)
+};
+
+ContentEditableInput.prototype.showPrimarySelection = function () {
+  var sel = window.getSelection(), cm = this.cm, prim = cm.doc.sel.primary()
+  var from = prim.from(), to = prim.to()
+
+  if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {
+    sel.removeAllRanges()
+    return
+  }
+
+  var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset)
+  var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset)
+  if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&
+      cmp(minPos(curAnchor, curFocus), from) == 0 &&
+      cmp(maxPos(curAnchor, curFocus), to) == 0)
+    { return }
+
+  var view = cm.display.view
+  var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||
+      {node: view[0].measure.map[2], offset: 0}
+  var end = to.line < cm.display.viewTo && posToDOM(cm, to)
+  if (!end) {
+    var measure = view[view.length - 1].measure
+    var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map
+    end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}
+  }
+
+  if (!start || !end) {
+    sel.removeAllRanges()
+    return
+  }
+
+  var old = sel.rangeCount && sel.getRangeAt(0), rng
+  try { rng = range(start.node, start.offset, end.offset, end.node) }
+  catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible
+  if (rng) {
+    if (!gecko && cm.state.focused) {
+      sel.collapse(start.node, start.offset)
+      if (!rng.collapsed) {
+        sel.removeAllRanges()
+        sel.addRange(rng)
+      }
+    } else {
+      sel.removeAllRanges()
+      sel.addRange(rng)
+    }
+    if (old && sel.anchorNode == null) { sel.addRange(old) }
+    else if (gecko) { this.startGracePeriod() }
+  }
+  this.rememberSelection()
+};
+
+ContentEditableInput.prototype.startGracePeriod = function () {
+    var this$1 = this;
+
+  clearTimeout(this.gracePeriod)
+  this.gracePeriod = setTimeout(function () {
+    this$1.gracePeriod = false
+    if (this$1.selectionChanged())
+      { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }) }
+  }, 20)
+};
+
+ContentEditableInput.prototype.showMultipleSelections = function (info) {
+  removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors)
+  removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection)
+};
+
+ContentEditableInput.prototype.rememberSelection = function () {
+  var sel = window.getSelection()
+  this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset
+  this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset
+};
+
+ContentEditableInput.prototype.selectionInEditor = function () {
+  var sel = window.getSelection()
+  if (!sel.rangeCount) { return false }
+  var node = sel.getRangeAt(0).commonAncestorContainer
+  return contains(this.div, node)
+};
+
+ContentEditableInput.prototype.focus = function () {
+  if (this.cm.options.readOnly != "nocursor") {
+    if (!this.selectionInEditor())
+      { this.showSelection(this.prepareSelection(), true) }
+    this.div.focus()
+  }
+};
+ContentEditableInput.prototype.blur = function () { this.div.blur() };
+ContentEditableInput.prototype.getField = function () { return this.div };
+
+ContentEditableInput.prototype.supportsTouch = function () { return true };
+
+ContentEditableInput.prototype.receivedFocus = function () {
+  var input = this
+  if (this.selectionInEditor())
+    { this.pollSelection() }
+  else
+    { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }) }
+
+  function poll() {
+    if (input.cm.state.focused) {
+      input.pollSelection()
+      input.polling.set(input.cm.options.pollInterval, poll)
+    }
+  }
+  this.polling.set(this.cm.options.pollInterval, poll)
+};
+
+ContentEditableInput.prototype.selectionChanged = function () {
+  var sel = window.getSelection()
+  return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||
+    sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset
+};
+
+ContentEditableInput.prototype.pollSelection = function () {
+  if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }
+  var sel = window.getSelection(), cm = this.cm
+  // On Android Chrome (version 56, at least), backspacing into an
+  // uneditable block element will put the cursor in that element,
+  // and then, because it's not editable, hide the virtual keyboard.
+  // Because Android doesn't allow us to actually detect backspace
+  // presses in a sane way, this code checks for when that happens
+  // and simulates a backspace press in this case.
+  if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) {
+    this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs})
+    this.blur()
+    this.focus()
+    return
+  }
+  if (this.composing) { return }
+  this.rememberSelection()
+  var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset)
+  var head = domToPos(cm, sel.focusNode, sel.focusOffset)
+  if (anchor && head) { runInOp(cm, function () {
+    setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll)
+    if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true }
+  }) }
+};
+
+ContentEditableInput.prototype.pollContent = function () {
+  if (this.readDOMTimeout != null) {
+    clearTimeout(this.readDOMTimeout)
+    this.readDOMTimeout = null
+  }
+
+  var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary()
+  var from = sel.from(), to = sel.to()
+  if (from.ch == 0 && from.line > cm.firstLine())
+    { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length) }
+  if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())
+    { to = Pos(to.line + 1, 0) }
+  if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }
+
+  var fromIndex, fromLine, fromNode
+  if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {
+    fromLine = lineNo(display.view[0].line)
+    fromNode = display.view[0].node
+  } else {
+    fromLine = lineNo(display.view[fromIndex].line)
+    fromNode = display.view[fromIndex - 1].node.nextSibling
+  }
+  var toIndex = findViewIndex(cm, to.line)
+  var toLine, toNode
+  if (toIndex == display.view.length - 1) {
+    toLine = display.viewTo - 1
+    toNode = display.lineDiv.lastChild
+  } else {
+    toLine = lineNo(display.view[toIndex + 1].line) - 1
+    toNode = display.view[toIndex + 1].node.previousSibling
+  }
+
+  if (!fromNode) { return false }
+  var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine))
+  var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length))
+  while (newText.length > 1 && oldText.length > 1) {
+    if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine-- }
+    else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++ }
+    else { break }
+  }
+
+  var cutFront = 0, cutEnd = 0
+  var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length)
+  while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))
+    { ++cutFront }
+  var newBot = lst(newText), oldBot = lst(oldText)
+  var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),
+                           oldBot.length - (oldText.length == 1 ? cutFront : 0))
+  while (cutEnd < maxCutEnd &&
+         newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))
+    { ++cutEnd }
+  // Try to move start of change to start of selection if ambiguous
+  if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {
+    while (cutFront && cutFront > from.ch &&
+           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {
+      cutFront--
+      cutEnd++
+    }
+  }
+
+  newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "")
+  newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "")
+
+  var chFrom = Pos(fromLine, cutFront)
+  var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0)
+  if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {
+    replaceRange(cm.doc, newText, chFrom, chTo, "+input")
+    return true
+  }
+};
+
+ContentEditableInput.prototype.ensurePolled = function () {
+  this.forceCompositionEnd()
+};
+ContentEditableInput.prototype.reset = function () {
+  this.forceCompositionEnd()
+};
+ContentEditableInput.prototype.forceCompositionEnd = function () {
+  if (!this.composing) { return }
+  clearTimeout(this.readDOMTimeout)
+  this.composing = null
+  this.updateFromDOM()
+  this.div.blur()
+  this.div.focus()
+};
+ContentEditableInput.prototype.readFromDOMSoon = function () {
+    var this$1 = this;
+
+  if (this.readDOMTimeout != null) { return }
+  this.readDOMTimeout = setTimeout(function () {
+    this$1.readDOMTimeout = null
+    if (this$1.composing) {
+      if (this$1.composing.done) { this$1.composing = null }
+      else { return }
+    }
+    this$1.updateFromDOM()
+  }, 80)
+};
+
+ContentEditableInput.prototype.updateFromDOM = function () {
+    var this$1 = this;
+
+  if (this.cm.isReadOnly() || !this.pollContent())
+    { runInOp(this.cm, function () { return regChange(this$1.cm); }) }
+};
+
+ContentEditableInput.prototype.setUneditable = function (node) {
+  node.contentEditable = "false"
+};
+
+ContentEditableInput.prototype.onKeyPress = function (e) {
+  if (e.charCode == 0) { return }
+  e.preventDefault()
+  if (!this.cm.isReadOnly())
+    { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0) }
+};
+
+ContentEditableInput.prototype.readOnlyChanged = function (val) {
+  this.div.contentEditable = String(val != "nocursor")
+};
+
+ContentEditableInput.prototype.onContextMenu = function () {};
+ContentEditableInput.prototype.resetPosition = function () {};
+
+ContentEditableInput.prototype.needsContentAttribute = true
+
+function posToDOM(cm, pos) {
+  var view = findViewForLine(cm, pos.line)
+  if (!view || view.hidden) { return null }
+  var line = getLine(cm.doc, pos.line)
+  var info = mapFromLineView(view, line, pos.line)
+
+  var order = getOrder(line, cm.doc.direction), side = "left"
+  if (order) {
+    var partPos = getBidiPartAt(order, pos.ch)
+    side = partPos % 2 ? "right" : "left"
+  }
+  var result = nodeAndOffsetInLineMap(info.map, pos.ch, side)
+  result.offset = result.collapse == "right" ? result.end : result.start
+  return result
+}
+
+function isInGutter(node) {
+  for (var scan = node; scan; scan = scan.parentNode)
+    { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }
+  return false
+}
+
+function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }
+
+function domTextBetween(cm, from, to, fromLine, toLine) {
+  var text = "", closing = false, lineSep = cm.doc.lineSeparator()
+  function recognizeMarker(id) { return function (marker) { return marker.id == id; } }
+  function close() {
+    if (closing) {
+      text += lineSep
+      closing = false
+    }
+  }
+  function addText(str) {
+    if (str) {
+      close()
+      text += str
+    }
+  }
+  function walk(node) {
+    if (node.nodeType == 1) {
+      var cmText = node.getAttribute("cm-text")
+      if (cmText != null) {
+        addText(cmText || node.textContent.replace(/\u200b/g, ""))
+        return
+      }
+      var markerID = node.getAttribute("cm-marker"), range
+      if (markerID) {
+        var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID))
+        if (found.length && (range = found[0].find(0)))
+          { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)) }
+        return
+      }
+      if (node.getAttribute("contenteditable") == "false") { return }
+      var isBlock = /^(pre|div|p)$/i.test(node.nodeName)
+      if (isBlock) { close() }
+      for (var i = 0; i < node.childNodes.length; i++)
+        { walk(node.childNodes[i]) }
+      if (isBlock) { closing = true }
+    } else if (node.nodeType == 3) {
+      addText(node.nodeValue)
+    }
+  }
+  for (;;) {
+    walk(from)
+    if (from == to) { break }
+    from = from.nextSibling
+  }
+  return text
+}
+
+function domToPos(cm, node, offset) {
+  var lineNode
+  if (node == cm.display.lineDiv) {
+    lineNode = cm.display.lineDiv.childNodes[offset]
+    if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }
+    node = null; offset = 0
+  } else {
+    for (lineNode = node;; lineNode = lineNode.parentNode) {
+      if (!lineNode || lineNode == cm.display.lineDiv) { return null }
+      if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }
+    }
+  }
+  for (var i = 0; i < cm.display.view.length; i++) {
+    var lineView = cm.display.view[i]
+    if (lineView.node == lineNode)
+      { return locateNodeInLineView(lineView, node, offset) }
+  }
+}
+
+function locateNodeInLineView(lineView, node, offset) {
+  var wrapper = lineView.text.firstChild, bad = false
+  if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }
+  if (node == wrapper) {
+    bad = true
+    node = wrapper.childNodes[offset]
+    offset = 0
+    if (!node) {
+      var line = lineView.rest ? lst(lineView.rest) : lineView.line
+      return badPos(Pos(lineNo(line), line.text.length), bad)
+    }
+  }
+
+  var textNode = node.nodeType == 3 ? node : null, topNode = node
+  if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {
+    textNode = node.firstChild
+    if (offset) { offset = textNode.nodeValue.length }
+  }
+  while (topNode.parentNode != wrapper) { topNode = topNode.parentNode }
+  var measure = lineView.measure, maps = measure.maps
+
+  function find(textNode, topNode, offset) {
+    for (var i = -1; i < (maps ? maps.length : 0); i++) {
+      var map = i < 0 ? measure.map : maps[i]
+      for (var j = 0; j < map.length; j += 3) {
+        var curNode = map[j + 2]
+        if (curNode == textNode || curNode == topNode) {
+          var line = lineNo(i < 0 ? lineView.line : lineView.rest[i])
+          var ch = map[j] + offset
+          if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)] }
+          return Pos(line, ch)
+        }
+      }
+    }
+  }
+  var found = find(textNode, topNode, offset)
+  if (found) { return badPos(found, bad) }
+
+  // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems
+  for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {
+    found = find(after, after.firstChild, 0)
+    if (found)
+      { return badPos(Pos(found.line, found.ch - dist), bad) }
+    else
+      { dist += after.textContent.length }
+  }
+  for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {
+    found = find(before, before.firstChild, -1)
+    if (found)
+      { return badPos(Pos(found.line, found.ch + dist$1), bad) }
+    else
+      { dist$1 += before.textContent.length }
+  }
+}
+
+// TEXTAREA INPUT STYLE
+
+var TextareaInput = function(cm) {
+  this.cm = cm
+  // See input.poll and input.reset
+  this.prevInput = ""
+
+  // Flag that indicates whether we expect input to appear real soon
+  // now (after some event like 'keypress' or 'input') and are
+  // polling intensively.
+  this.pollingFast = false
+  // Self-resetting timeout for the poller
+  this.polling = new Delayed()
+  // Used to work around IE issue with selection being forgotten when focus moves away from textarea
+  this.hasSelection = false
+  this.composing = null
+};
+
+TextareaInput.prototype.init = function (display) {
+    var this$1 = this;
+
+  var input = this, cm = this.cm
+
+  // Wraps and hides input textarea
+  var div = this.wrapper = hiddenTextarea()
+  // The semihidden textarea that is focused when the editor is
+  // focused, and receives input.
+  var te = this.textarea = div.firstChild
+  display.wrapper.insertBefore(div, display.wrapper.firstChild)
+
+  // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)
+  if (ios) { te.style.width = "0px" }
+
+  on(te, "input", function () {
+    if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null }
+    input.poll()
+  })
+
+  on(te, "paste", function (e) {
+    if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+
+    cm.state.pasteIncoming = true
+    input.fastPoll()
+  })
+
+  function prepareCopyCut(e) {
+    if (signalDOMEvent(cm, e)) { return }
+    if (cm.somethingSelected()) {
+      setLastCopied({lineWise: false, text: cm.getSelections()})
+    } else if (!cm.options.lineWiseCopyCut) {
+      return
+    } else {
+      var ranges = copyableRanges(cm)
+      setLastCopied({lineWise: true, text: ranges.text})
+      if (e.type == "cut") {
+        cm.setSelections(ranges.ranges, null, sel_dontScroll)
+      } else {
+        input.prevInput = ""
+        te.value = ranges.text.join("\n")
+        selectInput(te)
+      }
+    }
+    if (e.type == "cut") { cm.state.cutIncoming = true }
+  }
+  on(te, "cut", prepareCopyCut)
+  on(te, "copy", prepareCopyCut)
+
+  on(display.scroller, "paste", function (e) {
+    if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }
+    cm.state.pasteIncoming = true
+    input.focus()
+  })
+
+  // Prevent normal selection in the editor (we handle our own)
+  on(display.lineSpace, "selectstart", function (e) {
+    if (!eventInWidget(display, e)) { e_preventDefault(e) }
+  })
+
+  on(te, "compositionstart", function () {
+    var start = cm.getCursor("from")
+    if (input.composing) { input.composing.range.clear() }
+    input.composing = {
+      start: start,
+      range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"})
+    }
+  })
+  on(te, "compositionend", function () {
+    if (input.composing) {
+      input.poll()
+      input.composing.range.clear()
+      input.composing = null
+    }
+  })
+};
+
+TextareaInput.prototype.prepareSelection = function () {
+  // Redraw the selection and/or cursor
+  var cm = this.cm, display = cm.display, doc = cm.doc
+  var result = prepareSelection(cm)
+
+  // Move the hidden textarea near the cursor to prevent scrolling artifacts
+  if (cm.options.moveInputWithCursor) {
+    var headPos = cursorCoords(cm, doc.sel.primary().head, "div")
+    var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect()
+    result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
+                                        headPos.top + lineOff.top - wrapOff.top))
+    result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
+                                         headPos.left + lineOff.left - wrapOff.left))
+  }
+
+  return result
+};
+
+TextareaInput.prototype.showSelection = function (drawn) {
+  var cm = this.cm, display = cm.display
+  removeChildrenAndAdd(display.cursorDiv, drawn.cursors)
+  removeChildrenAndAdd(display.selectionDiv, drawn.selection)
+  if (drawn.teTop != null) {
+    this.wrapper.style.top = drawn.teTop + "px"
+    this.wrapper.style.left = drawn.teLeft + "px"
+  }
+};
+
+// Reset the input to correspond to the selection (or to be empty,
+// when not typing and nothing is selected)
+TextareaInput.prototype.reset = function (typing) {
+  if (this.contextMenuPending || this.composing) { return }
+  var cm = this.cm
+  if (cm.somethingSelected()) {
+    this.prevInput = ""
+    var content = cm.getSelection()
+    this.textarea.value = content
+    if (cm.state.focused) { selectInput(this.textarea) }
+    if (ie && ie_version >= 9) { this.hasSelection = content }
+  } else if (!typing) {
+    this.prevInput = this.textarea.value = ""
+    if (ie && ie_version >= 9) { this.hasSelection = null }
+  }
+};
+
+TextareaInput.prototype.getField = function () { return this.textarea };
+
+TextareaInput.prototype.supportsTouch = function () { return false };
+
+TextareaInput.prototype.focus = function () {
+  if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) {
+    try { this.textarea.focus() }
+    catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM
+  }
+};
+
+TextareaInput.prototype.blur = function () { this.textarea.blur() };
+
+TextareaInput.prototype.resetPosition = function () {
+  this.wrapper.style.top = this.wrapper.style.left = 0
+};
+
+TextareaInput.prototype.receivedFocus = function () { this.slowPoll() };
+
+// Poll for input changes, using the normal rate of polling. This
+// runs as long as the editor is focused.
+TextareaInput.prototype.slowPoll = function () {
+    var this$1 = this;
+
+  if (this.pollingFast) { return }
+  this.polling.set(this.cm.options.pollInterval, function () {
+    this$1.poll()
+    if (this$1.cm.state.focused) { this$1.slowPoll() }
+  })
+};
+
+// When an event has just come in that is likely to add or change
+// something in the input textarea, we poll faster, to ensure that
+// the change appears on the screen quickly.
+TextareaInput.prototype.fastPoll = function () {
+  var missed = false, input = this
+  input.pollingFast = true
+  function p() {
+    var changed = input.poll()
+    if (!changed && !missed) {missed = true; input.polling.set(60, p)}
+    else {input.pollingFast = false; input.slowPoll()}
+  }
+  input.polling.set(20, p)
+};
+
+// Read input from the textarea, and update the document to match.
+// When something is selected, it is present in the textarea, and
+// selected (unless it is huge, in which case a placeholder is
+// used). When nothing is selected, the cursor sits after previously
+// seen text (can be empty), which is stored in prevInput (we must
+// not reset the textarea when typing, because that breaks IME).
+TextareaInput.prototype.poll = function () {
+    var this$1 = this;
+
+  var cm = this.cm, input = this.textarea, prevInput = this.prevInput
+  // Since this is called a *lot*, try to bail out as cheaply as
+  // possible when it is clear that nothing happened. hasSelection
+  // will be the case when there is a lot of text in the textarea,
+  // in which case reading its value would be expensive.
+  if (this.contextMenuPending || !cm.state.focused ||
+      (hasSelection(input) && !prevInput && !this.composing) ||
+      cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)
+    { return false }
+
+  var text = input.value
+  // If nothing changed, bail.
+  if (text == prevInput && !cm.somethingSelected()) { return false }
+  // Work around nonsensical selection resetting in IE9/10, and
+  // inexplicable appearance of private area unicode characters on
+  // some key combos in Mac (#2689).
+  if (ie && ie_version >= 9 && this.hasSelection === text ||
+      mac && /[\uf700-\uf7ff]/.test(text)) {
+    cm.display.input.reset()
+    return false
+  }
+
+  if (cm.doc.sel == cm.display.selForContextMenu) {
+    var first = text.charCodeAt(0)
+    if (first == 0x200b && !prevInput) { prevInput = "\u200b" }
+    if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") }
+  }
+  // Find the part of the input that is actually new
+  var same = 0, l = Math.min(prevInput.length, text.length)
+  while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same }
+
+  runInOp(cm, function () {
+    applyTextInput(cm, text.slice(same), prevInput.length - same,
+                   null, this$1.composing ? "*compose" : null)
+
+    // Don't leave long text in the textarea, since it makes further polling slow
+    if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = "" }
+    else { this$1.prevInput = text }
+
+    if (this$1.composing) {
+      this$1.composing.range.clear()
+      this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"),
+                                         {className: "CodeMirror-composing"})
+    }
+  })
+  return true
+};
+
+TextareaInput.prototype.ensurePolled = function () {
+  if (this.pollingFast && this.poll()) { this.pollingFast = false }
+};
+
+TextareaInput.prototype.onKeyPress = function () {
+  if (ie && ie_version >= 9) { this.hasSelection = null }
+  this.fastPoll()
+};
+
+TextareaInput.prototype.onContextMenu = function (e) {
+  var input = this, cm = input.cm, display = cm.display, te = input.textarea
+  var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop
+  if (!pos || presto) { return } // Opera is difficult.
+
+  // Reset the current text selection only if the click is done outside of the selection
+  // and 'resetSelectionOnContextMenu' option is true.
+  var reset = cm.options.resetSelectionOnContextMenu
+  if (reset && cm.doc.sel.contains(pos) == -1)
+    { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll) }
+
+  var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText
+  input.wrapper.style.cssText = "position: absolute"
+  var wrapperBox = input.wrapper.getBoundingClientRect()
+  te.style.cssText = "position: absolute; width: 30px; height: 30px;\n      top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n      z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"
+  var oldScrollY
+  if (webkit) { oldScrollY = window.scrollY } // Work around Chrome issue (#2712)
+  display.input.focus()
+  if (webkit) { window.scrollTo(null, oldScrollY) }
+  display.input.reset()
+  // Adds "Select all" to context menu in FF
+  if (!cm.somethingSelected()) { te.value = input.prevInput = " " }
+  input.contextMenuPending = true
+  display.selForContextMenu = cm.doc.sel
+  clearTimeout(display.detectingSelectAll)
+
+  // Select-all will be greyed out if there's nothing to select, so
+  // this adds a zero-width space so that we can later check whether
+  // it got selected.
+  function prepareSelectAllHack() {
+    if (te.selectionStart != null) {
+      var selected = cm.somethingSelected()
+      var extval = "\u200b" + (selected ? te.value : "")
+      te.value = "\u21da" // Used to catch context-menu undo
+      te.value = extval
+      input.prevInput = selected ? "" : "\u200b"
+      te.selectionStart = 1; te.selectionEnd = extval.length
+      // Re-set this, in case some other handler touched the
+      // selection in the meantime.
+      display.selForContextMenu = cm.doc.sel
+    }
+  }
+  function rehide() {
+    input.contextMenuPending = false
+    input.wrapper.style.cssText = oldWrapperCSS
+    te.style.cssText = oldCSS
+    if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos) }
+
+    // Try to detect the user choosing select-all
+    if (te.selectionStart != null) {
+      if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack() }
+      var i = 0, poll = function () {
+        if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&
+            te.selectionEnd > 0 && input.prevInput == "\u200b") {
+          operation(cm, selectAll)(cm)
+        } else if (i++ < 10) {
+          display.detectingSelectAll = setTimeout(poll, 500)
+        } else {
+          display.selForContextMenu = null
+          display.input.reset()
+        }
+      }
+      display.detectingSelectAll = setTimeout(poll, 200)
+    }
+  }
+
+  if (ie && ie_version >= 9) { prepareSelectAllHack() }
+  if (captureRightClick) {
+    e_stop(e)
+    var mouseup = function () {
+      off(window, "mouseup", mouseup)
+      setTimeout(rehide, 20)
+    }
+    on(window, "mouseup", mouseup)
+  } else {
+    setTimeout(rehide, 50)
+  }
+};
+
+TextareaInput.prototype.readOnlyChanged = function (val) {
+  if (!val) { this.reset() }
+  this.textarea.disabled = val == "nocursor"
+};
+
+TextareaInput.prototype.setUneditable = function () {};
+
+TextareaInput.prototype.needsContentAttribute = false
+
+function fromTextArea(textarea, options) {
+  options = options ? copyObj(options) : {}
+  options.value = textarea.value
+  if (!options.tabindex && textarea.tabIndex)
+    { options.tabindex = textarea.tabIndex }
+  if (!options.placeholder && textarea.placeholder)
+    { options.placeholder = textarea.placeholder }
+  // Set autofocus to true if this textarea is focused, or if it has
+  // autofocus and no other element is focused.
+  if (options.autofocus == null) {
+    var hasFocus = activeElt()
+    options.autofocus = hasFocus == textarea ||
+      textarea.getAttribute("autofocus") != null && hasFocus == document.body
+  }
+
+  function save() {textarea.value = cm.getValue()}
+
+  var realSubmit
+  if (textarea.form) {
+    on(textarea.form, "submit", save)
+    // Deplorable hack to make the submit method do the right thing.
+    if (!options.leaveSubmitMethodAlone) {
+      var form = textarea.form
+      realSubmit = form.submit
+      try {
+        var wrappedSubmit = form.submit = function () {
+          save()
+          form.submit = realSubmit
+          form.submit()
+          form.submit = wrappedSubmit
+        }
+      } catch(e) {}
+    }
+  }
+
+  options.finishInit = function (cm) {
+    cm.save = save
+    cm.getTextArea = function () { return textarea; }
+    cm.toTextArea = function () {
+      cm.toTextArea = isNaN // Prevent this from being ran twice
+      save()
+      textarea.parentNode.removeChild(cm.getWrapperElement())
+      textarea.style.display = ""
+      if (textarea.form) {
+        off(textarea.form, "submit", save)
+        if (typeof textarea.form.submit == "function")
+          { textarea.form.submit = realSubmit }
+      }
+    }
+  }
+
+  textarea.style.display = "none"
+  var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },
+    options)
+  return cm
+}
+
+function addLegacyProps(CodeMirror) {
+  CodeMirror.off = off
+  CodeMirror.on = on
+  CodeMirror.wheelEventPixels = wheelEventPixels
+  CodeMirror.Doc = Doc
+  CodeMirror.splitLines = splitLinesAuto
+  CodeMirror.countColumn = countColumn
+  CodeMirror.findColumn = findColumn
+  CodeMirror.isWordChar = isWordCharBasic
+  CodeMirror.Pass = Pass
+  CodeMirror.signal = signal
+  CodeMirror.Line = Line
+  CodeMirror.changeEnd = changeEnd
+  CodeMirror.scrollbarModel = scrollbarModel
+  CodeMirror.Pos = Pos
+  CodeMirror.cmpPos = cmp
+  CodeMirror.modes = modes
+  CodeMirror.mimeModes = mimeModes
+  CodeMirror.resolveMode = resolveMode
+  CodeMirror.getMode = getMode
+  CodeMirror.modeExtensions = modeExtensions
+  CodeMirror.extendMode = extendMode
+  CodeMirror.copyState = copyState
+  CodeMirror.startState = startState
+  CodeMirror.innerMode = innerMode
+  CodeMirror.commands = commands
+  CodeMirror.keyMap = keyMap
+  CodeMirror.keyName = keyName
+  CodeMirror.isModifierKey = isModifierKey
+  CodeMirror.lookupKey = lookupKey
+  CodeMirror.normalizeKeyMap = normalizeKeyMap
+  CodeMirror.StringStream = StringStream
+  CodeMirror.SharedTextMarker = SharedTextMarker
+  CodeMirror.TextMarker = TextMarker
+  CodeMirror.LineWidget = LineWidget
+  CodeMirror.e_preventDefault = e_preventDefault
+  CodeMirror.e_stopPropagation = e_stopPropagation
+  CodeMirror.e_stop = e_stop
+  CodeMirror.addClass = addClass
+  CodeMirror.contains = contains
+  CodeMirror.rmClass = rmClass
+  CodeMirror.keyNames = keyNames
+}
+
+// EDITOR CONSTRUCTOR
+
+defineOptions(CodeMirror)
+
+addEditorMethods(CodeMirror)
+
+// Set up methods on CodeMirror's prototype to redirect to the editor's document.
+var dontDelegate = "iter insert remove copy getEditor constructor".split(" ")
+for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)
+  { CodeMirror.prototype[prop] = (function(method) {
+    return function() {return method.apply(this.doc, arguments)}
+  })(Doc.prototype[prop]) } }
+
+eventMixin(Doc)
+
+// INPUT HANDLING
+
+CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}
+
+// MODE DEFINITION AND QUERYING
+
+// Extra arguments are stored as the mode's dependencies, which is
+// used by (legacy) mechanisms like loadmode.js to automatically
+// load a mode. (Preferred mechanism is the require/define calls.)
+CodeMirror.defineMode = function(name/*, mode, …*/) {
+  if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name }
+  defineMode.apply(this, arguments)
+}
+
+CodeMirror.defineMIME = defineMIME
+
+// Minimal default mode.
+CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); })
+CodeMirror.defineMIME("text/plain", "null")
+
+// EXTENSIONS
+
+CodeMirror.defineExtension = function (name, func) {
+  CodeMirror.prototype[name] = func
+}
+CodeMirror.defineDocExtension = function (name, func) {
+  Doc.prototype[name] = func
+}
+
+CodeMirror.fromTextArea = fromTextArea
+
+addLegacyProps(CodeMirror)
+
+CodeMirror.version = "5.33.0"
+
+return CodeMirror;
+
+})));</script> 
+  <script>// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+// Open simple dialogs on top of an editor. Relies on dialog.css.
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+  function dialogDiv(cm, template, bottom) {
+    var wrap = cm.getWrapperElement();
+    var dialog;
+    dialog = wrap.appendChild(document.createElement("div"));
+    if (bottom)
+      dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom";
+    else
+      dialog.className = "CodeMirror-dialog CodeMirror-dialog-top";
+
+    if (typeof template == "string") {
+      dialog.innerHTML = template;
+    } else { // Assuming it's a detached DOM element.
+      dialog.appendChild(template);
+    }
+    return dialog;
+  }
+
+  function closeNotification(cm, newVal) {
+    if (cm.state.currentNotificationClose)
+      cm.state.currentNotificationClose();
+    cm.state.currentNotificationClose = newVal;
+  }
+
+  CodeMirror.defineExtension("openDialog", function(template, callback, options) {
+    if (!options) options = {};
+
+    closeNotification(this, null);
+
+    var dialog = dialogDiv(this, template, options.bottom);
+    var closed = false, me = this;
+    function close(newVal) {
+      if (typeof newVal == 'string') {
+        inp.value = newVal;
+      } else {
+        if (closed) return;
+        closed = true;
+        dialog.parentNode.removeChild(dialog);
+        me.focus();
+
+        if (options.onClose) options.onClose(dialog);
+      }
+    }
+
+    var inp = dialog.getElementsByTagName("input")[0], button;
+    if (inp) {
+      inp.focus();
+
+      if (options.value) {
+        inp.value = options.value;
+        if (options.selectValueOnOpen !== false) {
+          inp.select();
+        }
+      }
+
+      if (options.onInput)
+        CodeMirror.on(inp, "input", function(e) { options.onInput(e, inp.value, close);});
+      if (options.onKeyUp)
+        CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);});
+
+      CodeMirror.on(inp, "keydown", function(e) {
+        if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }
+        if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {
+          inp.blur();
+          CodeMirror.e_stop(e);
+          close();
+        }
+        if (e.keyCode == 13) callback(inp.value, e);
+      });
+
+      if (options.closeOnBlur !== false) CodeMirror.on(inp, "blur", close);
+    } else if (button = dialog.getElementsByTagName("button")[0]) {
+      CodeMirror.on(button, "click", function() {
+        close();
+        me.focus();
+      });
+
+      if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close);
+
+      button.focus();
+    }
+    return close;
+  });
+
+  CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) {
+    closeNotification(this, null);
+    var dialog = dialogDiv(this, template, options && options.bottom);
+    var buttons = dialog.getElementsByTagName("button");
+    var closed = false, me = this, blurring = 1;
+    function close() {
+      if (closed) return;
+      closed = true;
+      dialog.parentNode.removeChild(dialog);
+      me.focus();
+    }
+    buttons[0].focus();
+    for (var i = 0; i < buttons.length; ++i) {
+      var b = buttons[i];
+      (function(callback) {
+        CodeMirror.on(b, "click", function(e) {
+          CodeMirror.e_preventDefault(e);
+          close();
+          if (callback) callback(me);
+        });
+      })(callbacks[i]);
+      CodeMirror.on(b, "blur", function() {
+        --blurring;
+        setTimeout(function() { if (blurring <= 0) close(); }, 200);
+      });
+      CodeMirror.on(b, "focus", function() { ++blurring; });
+    }
+  });
+
+  /*
+   * openNotification
+   * Opens a notification, that can be closed with an optional timer
+   * (default 5000ms timer) and always closes on click.
+   *
+   * If a notification is opened while another is opened, it will close the
+   * currently opened one and open the new one immediately.
+   */
+  CodeMirror.defineExtension("openNotification", function(template, options) {
+    closeNotification(this, close);
+    var dialog = dialogDiv(this, template, options && options.bottom);
+    var closed = false, doneTimer;
+    var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000;
+
+    function close() {
+      if (closed) return;
+      closed = true;
+      clearTimeout(doneTimer);
+      dialog.parentNode.removeChild(dialog);
+    }
+
+    CodeMirror.on(dialog, 'click', function(e) {
+      CodeMirror.e_preventDefault(e);
+      close();
+    });
+
+    if (duration)
+      doneTimer = setTimeout(close, duration);
+
+    return close;
+  });
+});
+</script> 
+  <script>// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+  "use strict";
+
+  CodeMirror.defineSimpleMode = function(name, states) {
+    CodeMirror.defineMode(name, function(config) {
+      return CodeMirror.simpleMode(config, states);
+    });
+  };
+
+  CodeMirror.simpleMode = function(config, states) {
+    ensureState(states, "start");
+    var states_ = {}, meta = states.meta || {}, hasIndentation = false;
+    for (var state in states) if (state != meta && states.hasOwnProperty(state)) {
+      var list = states_[state] = [], orig = states[state];
+      for (var i = 0; i < orig.length; i++) {
+        var data = orig[i];
+        list.push(new Rule(data, states));
+        if (data.indent || data.dedent) hasIndentation = true;
+      }
+    }
+    var mode = {
+      startState: function() {
+        return {state: "start", pending: null,
+                local: null, localState: null,
+                indent: hasIndentation ? [] : null};
+      },
+      copyState: function(state) {
+        var s = {state: state.state, pending: state.pending,
+                 local: state.local, localState: null,
+                 indent: state.indent && state.indent.slice(0)};
+        if (state.localState)
+          s.localState = CodeMirror.copyState(state.local.mode, state.localState);
+        if (state.stack)
+          s.stack = state.stack.slice(0);
+        for (var pers = state.persistentStates; pers; pers = pers.next)
+          s.persistentStates = {mode: pers.mode,
+                                spec: pers.spec,
+                                state: pers.state == state.localState ? s.localState : CodeMirror.copyState(pers.mode, pers.state),
+                                next: s.persistentStates};
+        return s;
+      },
+      token: tokenFunction(states_, config),
+      innerMode: function(state) { return state.local && {mode: state.local.mode, state: state.localState}; },
+      indent: indentFunction(states_, meta)
+    };
+    if (meta) for (var prop in meta) if (meta.hasOwnProperty(prop))
+      mode[prop] = meta[prop];
+    return mode;
+  };
+
+  function ensureState(states, name) {
+    if (!states.hasOwnProperty(name))
+      throw new Error("Undefined state " + name + " in simple mode");
+  }
+
+  function toRegex(val, caret) {
+    if (!val) return /(?:)/;
+    var flags = "";
+    if (val instanceof RegExp) {
+      if (val.ignoreCase) flags = "i";
+      val = val.source;
+    } else {
+      val = String(val);
+    }
+    return new RegExp((caret === false ? "" : "^") + "(?:" + val + ")", flags);
+  }
+
+  function asToken(val) {
+    if (!val) return null;
+    if (val.apply) return val
+    if (typeof val == "string") return val.replace(/\./g, " ");
+    var result = [];
+    for (var i = 0; i < val.length; i++)
+      result.push(val[i] && val[i].replace(/\./g, " "));
+    return result;
+  }
+
+  function Rule(data, states) {
+    if (data.next || data.push) ensureState(states, data.next || data.push);
+    this.regex = toRegex(data.regex);
+    this.token = asToken(data.token);
+    this.data = data;
+  }
+
+  function tokenFunction(states, config) {
+    return function(stream, state) {
+      if (state.pending) {
+        var pend = state.pending.shift();
+        if (state.pending.length == 0) state.pending = null;
+        stream.pos += pend.text.length;
+        return pend.token;
+      }
+
+      if (state.local) {
+        if (state.local.end && stream.match(state.local.end)) {
+          var tok = state.local.endToken || null;
+          state.local = state.localState = null;
+          return tok;
+        } else {
+          var tok = state.local.mode.token(stream, state.localState), m;
+          if (state.local.endScan && (m = state.local.endScan.exec(stream.current())))
+            stream.pos = stream.start + m.index;
+          return tok;
+        }
+      }
+
+      var curState = states[state.state];
+      for (var i = 0; i < curState.length; i++) {
+        var rule = curState[i];
+        var matches = (!rule.data.sol || stream.sol()) && stream.match(rule.regex);
+        if (matches) {
+          if (rule.data.next) {
+            state.state = rule.data.next;
+          } else if (rule.data.push) {
+            (state.stack || (state.stack = [])).push(state.state);
+            state.state = rule.data.push;
+          } else if (rule.data.pop && state.stack && state.stack.length) {
+            state.state = state.stack.pop();
+          }
+
+          if (rule.data.mode)
+            enterLocalMode(config, state, rule.data.mode, rule.token);
+          if (rule.data.indent)
+            state.indent.push(stream.indentation() + config.indentUnit);
+          if (rule.data.dedent)
+            state.indent.pop();
+          var token = rule.token
+          if (token && token.apply) token = token(matches)
+          if (matches.length > 2 && rule.token && typeof rule.token != "string") {
+            state.pending = [];
+            for (var j = 2; j < matches.length; j++)
+              if (matches[j])
+                state.pending.push({text: matches[j], token: rule.token[j - 1]});
+            stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0));
+            return token[0];
+          } else if (token && token.join) {
+            return token[0];
+          } else {
+            return token;
+          }
+        }
+      }
+      stream.next();
+      return null;
+    };
+  }
+
+  function cmp(a, b) {
+    if (a === b) return true;
+    if (!a || typeof a != "object" || !b || typeof b != "object") return false;
+    var props = 0;
+    for (var prop in a) if (a.hasOwnProperty(prop)) {
+      if (!b.hasOwnProperty(prop) || !cmp(a[prop], b[prop])) return false;
+      props++;
+    }
+    for (var prop in b) if (b.hasOwnProperty(prop)) props--;
+    return props == 0;
+  }
+
+  function enterLocalMode(config, state, spec, token) {
+    var pers;
+    if (spec.persistent) for (var p = state.persistentStates; p && !pers; p = p.next)
+      if (spec.spec ? cmp(spec.spec, p.spec) : spec.mode == p.mode) pers = p;
+    var mode = pers ? pers.mode : spec.mode || CodeMirror.getMode(config, spec.spec);
+    var lState = pers ? pers.state : CodeMirror.startState(mode);
+    if (spec.persistent && !pers)
+      state.persistentStates = {mode: mode, spec: spec.spec, state: lState, next: state.persistentStates};
+
+    state.localState = lState;
+    state.local = {mode: mode,
+                   end: spec.end && toRegex(spec.end),
+                   endScan: spec.end && spec.forceEnd !== false && toRegex(spec.end, false),
+                   endToken: token && token.join ? token[token.length - 1] : token};
+  }
+
+  function indexOf(val, arr) {
+    for (var i = 0; i < arr.length; i++) if (arr[i] === val) return true;
+  }
+
+  function indentFunction(states, meta) {
+    return function(state, textAfter, line) {
+      if (state.local && state.local.mode.indent)
+        return state.local.mode.indent(state.localState, textAfter, line);
+      if (state.indent == null || state.local || meta.dontIndentStates && indexOf(state.state, meta.dontIndentStates) > -1)
+        return CodeMirror.Pass;
+
+      var pos = state.indent.length - 1, rules = states[state.state];
+      scan: for (;;) {
+        for (var i = 0; i < rules.length; i++) {
+          var rule = rules[i];
+          if (rule.data.dedent && rule.data.dedentIfLineStart !== false) {
+            var m = rule.regex.exec(textAfter);
+            if (m && m[0]) {
+              pos--;
+              if (rule.next || rule.push) rules = states[rule.next || rule.push];
+              textAfter = textAfter.slice(m[0].length);
+              continue scan;
+            }
+          }
+        }
+        break;
+      }
+      return pos < 0 ? 0 : state.indent[pos];
+    };
+  }
+});
+</script> 
+  <script>// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"))
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror"], mod)
+  else // Plain browser env
+    mod(CodeMirror)
+})(function(CodeMirror) {
+  "use strict"
+  var Pos = CodeMirror.Pos
+
+  function regexpFlags(regexp) {
+    var flags = regexp.flags
+    return flags != null ? flags : (regexp.ignoreCase ? "i" : "")
+      + (regexp.global ? "g" : "")
+      + (regexp.multiline ? "m" : "")
+  }
+
+  function ensureGlobal(regexp) {
+    return regexp.global ? regexp : new RegExp(regexp.source, regexpFlags(regexp) + "g")
+  }
+
+  function maybeMultiline(regexp) {
+    return /\\s|\\n|\n|\\W|\\D|\[\^/.test(regexp.source)
+  }
+
+  function searchRegexpForward(doc, regexp, start) {
+    regexp = ensureGlobal(regexp)
+    for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) {
+      regexp.lastIndex = ch
+      var string = doc.getLine(line), match = regexp.exec(string)
+      if (match)
+        return {from: Pos(line, match.index),
+                to: Pos(line, match.index + match[0].length),
+                match: match}
+    }
+  }
+
+  function searchRegexpForwardMultiline(doc, regexp, start) {
+    if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start)
+
+    regexp = ensureGlobal(regexp)
+    var string, chunk = 1
+    for (var line = start.line, last = doc.lastLine(); line <= last;) {
+      // This grows the search buffer in exponentially-sized chunks
+      // between matches, so that nearby matches are fast and don't
+      // require concatenating the whole document (in case we're
+      // searching for something that has tons of matches), but at the
+      // same time, the amount of retries is limited.
+      for (var i = 0; i < chunk; i++) {
+        var curLine = doc.getLine(line++)
+        string = string == null ? curLine : string + "\n" + curLine
+      }
+      chunk = chunk * 2
+      regexp.lastIndex = start.ch
+      var match = regexp.exec(string)
+      if (match) {
+        var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n")
+        var startLine = start.line + before.length - 1, startCh = before[before.length - 1].length
+        return {from: Pos(startLine, startCh),
+                to: Pos(startLine + inside.length - 1,
+                        inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),
+                match: match}
+      }
+    }
+  }
+
+  function lastMatchIn(string, regexp) {
+    var cutOff = 0, match
+    for (;;) {
+      regexp.lastIndex = cutOff
+      var newMatch = regexp.exec(string)
+      if (!newMatch) return match
+      match = newMatch
+      cutOff = match.index + (match[0].length || 1)
+      if (cutOff == string.length) return match
+    }
+  }
+
+  function searchRegexpBackward(doc, regexp, start) {
+    regexp = ensureGlobal(regexp)
+    for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) {
+      var string = doc.getLine(line)
+      if (ch > -1) string = string.slice(0, ch)
+      var match = lastMatchIn(string, regexp)
+      if (match)
+        return {from: Pos(line, match.index),
+                to: Pos(line, match.index + match[0].length),
+                match: match}
+    }
+  }
+
+  function searchRegexpBackwardMultiline(doc, regexp, start) {
+    regexp = ensureGlobal(regexp)
+    var string, chunk = 1
+    for (var line = start.line, first = doc.firstLine(); line >= first;) {
+      for (var i = 0; i < chunk; i++) {
+        var curLine = doc.getLine(line--)
+        string = string == null ? curLine.slice(0, start.ch) : curLine + "\n" + string
+      }
+      chunk *= 2
+
+      var match = lastMatchIn(string, regexp)
+      if (match) {
+        var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n")
+        var startLine = line + before.length, startCh = before[before.length - 1].length
+        return {from: Pos(startLine, startCh),
+                to: Pos(startLine + inside.length - 1,
+                        inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),
+                match: match}
+      }
+    }
+  }
+
+  var doFold, noFold
+  if (String.prototype.normalize) {
+    doFold = function(str) { return str.normalize("NFD").toLowerCase() }
+    noFold = function(str) { return str.normalize("NFD") }
+  } else {
+    doFold = function(str) { return str.toLowerCase() }
+    noFold = function(str) { return str }
+  }
+
+  // Maps a position in a case-folded line back to a position in the original line
+  // (compensating for codepoints increasing in number during folding)
+  function adjustPos(orig, folded, pos, foldFunc) {
+    if (orig.length == folded.length) return pos
+    for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) {
+      if (min == max) return min
+      var mid = (min + max) >> 1
+      var len = foldFunc(orig.slice(0, mid)).length
+      if (len == pos) return mid
+      else if (len > pos) max = mid
+      else min = mid + 1
+    }
+  }
+
+  function searchStringForward(doc, query, start, caseFold) {
+    // Empty string would match anything and never progress, so we
+    // define it to match nothing instead.
+    if (!query.length) return null
+    var fold = caseFold ? doFold : noFold
+    var lines = fold(query).split(/\r|\n\r?/)
+
+    search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) {
+      var orig = doc.getLine(line).slice(ch), string = fold(orig)
+      if (lines.length == 1) {
+        var found = string.indexOf(lines[0])
+        if (found == -1) continue search
+        var start = adjustPos(orig, string, found, fold) + ch
+        return {from: Pos(line, adjustPos(orig, string, found, fold) + ch),
+                to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)}
+      } else {
+        var cutFrom = string.length - lines[0].length
+        if (string.slice(cutFrom) != lines[0]) continue search
+        for (var i = 1; i < lines.length - 1; i++)
+          if (fold(doc.getLine(line + i)) != lines[i]) continue search
+        var end = doc.getLine(line + lines.length - 1), endString = fold(end), lastLine = lines[lines.length - 1]
+        if (endString.slice(0, lastLine.length) != lastLine) continue search
+        return {from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch),
+                to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))}
+      }
+    }
+  }
+
+  function searchStringBackward(doc, query, start, caseFold) {
+    if (!query.length) return null
+    var fold = caseFold ? doFold : noFold
+    var lines = fold(query).split(/\r|\n\r?/)
+
+    search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) {
+      var orig = doc.getLine(line)
+      if (ch > -1) orig = orig.slice(0, ch)
+      var string = fold(orig)
+      if (lines.length == 1) {
+        var found = string.lastIndexOf(lines[0])
+        if (found == -1) continue search
+        return {from: Pos(line, adjustPos(orig, string, found, fold)),
+                to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))}
+      } else {
+        var lastLine = lines[lines.length - 1]
+        if (string.slice(0, lastLine.length) != lastLine) continue search
+        for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++)
+          if (fold(doc.getLine(start + i)) != lines[i]) continue search
+        var top = doc.getLine(line + 1 - lines.length), topString = fold(top)
+        if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search
+        return {from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)),
+                to: Pos(line, adjustPos(orig, string, lastLine.length, fold))}
+      }
+    }
+  }
+
+  function SearchCursor(doc, query, pos, options) {
+    this.atOccurrence = false
+    this.doc = doc
+    pos = pos ? doc.clipPos(pos) : Pos(0, 0)
+    this.pos = {from: pos, to: pos}
+
+    var caseFold
+    if (typeof options == "object") {
+      caseFold = options.caseFold
+    } else { // Backwards compat for when caseFold was the 4th argument
+      caseFold = options
+      options = null
+    }
+
+    if (typeof query == "string") {
+      if (caseFold == null) caseFold = false
+      this.matches = function(reverse, pos) {
+        return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold)
+      }
+    } else {
+      query = ensureGlobal(query)
+      if (!options || options.multiline !== false)
+        this.matches = function(reverse, pos) {
+          return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos)
+        }
+      else
+        this.matches = function(reverse, pos) {
+          return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos)
+        }
+    }
+  }
+
+  SearchCursor.prototype = {
+    findNext: function() {return this.find(false)},
+    findPrevious: function() {return this.find(true)},
+
+    find: function(reverse) {
+      var result = this.matches(reverse, this.doc.clipPos(reverse ? this.pos.from : this.pos.to))
+
+      // Implements weird auto-growing behavior on null-matches for
+      // backwards-compatiblity with the vim code (unfortunately)
+      while (result && CodeMirror.cmpPos(result.from, result.to) == 0) {
+        if (reverse) {
+          if (result.from.ch) result.from = Pos(result.from.line, result.from.ch - 1)
+          else if (result.from.line == this.doc.firstLine()) result = null
+          else result = this.matches(reverse, this.doc.clipPos(Pos(result.from.line - 1)))
+        } else {
+          if (result.to.ch < this.doc.getLine(result.to.line).length) result.to = Pos(result.to.line, result.to.ch + 1)
+          else if (result.to.line == this.doc.lastLine()) result = null
+          else result = this.matches(reverse, Pos(result.to.line + 1, 0))
+        }
+      }
+
+      if (result) {
+        this.pos = result
+        this.atOccurrence = true
+        return this.pos.match || true
+      } else {
+        var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0)
+        this.pos = {from: end, to: end}
+        return this.atOccurrence = false
+      }
+    },
+
+    from: function() {if (this.atOccurrence) return this.pos.from},
+    to: function() {if (this.atOccurrence) return this.pos.to},
+
+    replace: function(newText, origin) {
+      if (!this.atOccurrence) return
+      var lines = CodeMirror.splitLines(newText)
+      this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin)
+      this.pos.to = Pos(this.pos.from.line + lines.length - 1,
+                        lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0))
+    }
+  }
+
+  CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) {
+    return new SearchCursor(this.doc, query, pos, caseFold)
+  })
+  CodeMirror.defineDocExtension("getSearchCursor", function(query, pos, caseFold) {
+    return new SearchCursor(this, query, pos, caseFold)
+  })
+
+  CodeMirror.defineExtension("selectMatches", function(query, caseFold) {
+    var ranges = []
+    var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold)
+    while (cur.findNext()) {
+      if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break
+      ranges.push({anchor: cur.from(), head: cur.to()})
+    }
+    if (ranges.length)
+      this.setSelections(ranges, 0)
+  })
+});
+</script> 
+  <script>// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+// Define search commands. Depends on dialog.js or another
+// implementation of the openDialog method.
+
+// Replace works a little oddly -- it will do the replace on the next
+// Ctrl-G (or whatever is bound to findNext) press. You prevent a
+// replace by making sure the match is no longer selected when hitting
+// Ctrl-G.
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"), require("./searchcursor"), require("../dialog/dialog"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror", "./searchcursor", "../dialog/dialog"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+  "use strict";
+
+  function searchOverlay(query, caseInsensitive) {
+    if (typeof query == "string")
+      query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g");
+    else if (!query.global)
+      query = new RegExp(query.source, query.ignoreCase ? "gi" : "g");
+
+    return {token: function(stream) {
+      query.lastIndex = stream.pos;
+      var match = query.exec(stream.string);
+      if (match && match.index == stream.pos) {
+        stream.pos += match[0].length || 1;
+        return "searching";
+      } else if (match) {
+        stream.pos = match.index;
+      } else {
+        stream.skipToEnd();
+      }
+    }};
+  }
+
+  function SearchState() {
+    this.posFrom = this.posTo = this.lastQuery = this.query = null;
+    this.overlay = null;
+  }
+
+  function getSearchState(cm) {
+    return cm.state.search || (cm.state.search = new SearchState());
+  }
+
+  function queryCaseInsensitive(query) {
+    return typeof query == "string" && query == query.toLowerCase();
+  }
+
+  function getSearchCursor(cm, query, pos) {
+    // Heuristic: if the query string is all lowercase, do a case insensitive search.
+    return cm.getSearchCursor(query, pos, {caseFold: queryCaseInsensitive(query), multiline: true});
+  }
+
+  function persistentDialog(cm, text, deflt, onEnter, onKeyDown) {
+    cm.openDialog(text, onEnter, {
+      value: deflt,
+      selectValueOnOpen: true,
+      closeOnEnter: false,
+      onClose: function() { clearSearch(cm); },
+      onKeyDown: onKeyDown
+    });
+  }
+
+  function dialog(cm, text, shortText, deflt, f) {
+    if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true});
+    else f(prompt(shortText, deflt));
+  }
+
+  function confirmDialog(cm, text, shortText, fs) {
+    if (cm.openConfirm) cm.openConfirm(text, fs);
+    else if (confirm(shortText)) fs[0]();
+  }
+
+  function parseString(string) {
+    return string.replace(/\\(.)/g, function(_, ch) {
+      if (ch == "n") return "\n"
+      if (ch == "r") return "\r"
+      return ch
+    })
+  }
+
+  function parseQuery(query) {
+    var isRE = query.match(/^\/(.*)\/([a-z]*)$/);
+    if (isRE) {
+      try { query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); }
+      catch(e) {} // Not a regular expression after all, do a string search
+    } else {
+      query = parseString(query)
+    }
+    if (typeof query == "string" ? query == "" : query.test(""))
+      query = /x^/;
+    return query;
+  }
+
+  var queryDialog =
+    '<span class="CodeMirror-search-label">Search:</span> <input type="text" style="width: 10em" class="CodeMirror-search-field"/> <span style="color: #888" class="CodeMirror-search-hint">(Use /re/ syntax for regexp search)</span>';
+
+  function startSearch(cm, state, query) {
+    state.queryText = query;
+    state.query = parseQuery(query);
+    cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query));
+    state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query));
+    cm.addOverlay(state.overlay);
+    if (cm.showMatchesOnScrollbar) {
+      if (state.annotate) { state.annotate.clear(); state.annotate = null; }
+      state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query));
+    }
+  }
+
+  function doSearch(cm, rev, persistent, immediate) {
+    var state = getSearchState(cm);
+    if (state.query) return findNext(cm, rev);
+    var q = cm.getSelection() || state.lastQuery;
+    if (q instanceof RegExp && q.source == "x^") q = null
+    if (persistent && cm.openDialog) {
+      var hiding = null
+      var searchNext = function(query, event) {
+        CodeMirror.e_stop(event);
+        if (!query) return;
+        if (query != state.queryText) {
+          startSearch(cm, state, query);
+          state.posFrom = state.posTo = cm.getCursor();
+        }
+        if (hiding) hiding.style.opacity = 1
+        findNext(cm, event.shiftKey, function(_, to) {
+          var dialog
+          if (to.line < 3 && document.querySelector &&
+              (dialog = cm.display.wrapper.querySelector(".CodeMirror-dialog")) &&
+              dialog.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, "window").top)
+            (hiding = dialog).style.opacity = .4
+        })
+      };
+      persistentDialog(cm, queryDialog, q, searchNext, function(event, query) {
+        var keyName = CodeMirror.keyName(event)
+        var extra = cm.getOption('extraKeys'), cmd = (extra && extra[keyName]) || CodeMirror.keyMap[cm.getOption("keyMap")][keyName]
+        if (cmd == "findNext" || cmd == "findPrev" ||
+          cmd == "findPersistentNext" || cmd == "findPersistentPrev") {
+          CodeMirror.e_stop(event);
+          startSearch(cm, getSearchState(cm), query);
+          cm.execCommand(cmd);
+        } else if (cmd == "find" || cmd == "findPersistent") {
+          CodeMirror.e_stop(event);
+          searchNext(query, event);
+        }
+      });
+      if (immediate && q) {
+        startSearch(cm, state, q);
+        findNext(cm, rev);
+      }
+    } else {
+      dialog(cm, queryDialog, "Search for:", q, function(query) {
+        if (query && !state.query) cm.operation(function() {
+          startSearch(cm, state, query);
+          state.posFrom = state.posTo = cm.getCursor();
+          findNext(cm, rev);
+        });
+      });
+    }
+  }
+
+  function findNext(cm, rev, callback) {cm.operation(function() {
+    var state = getSearchState(cm);
+    var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo);
+    if (!cursor.find(rev)) {
+      cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0));
+      if (!cursor.find(rev)) return;
+    }
+    cm.setSelection(cursor.from(), cursor.to());
+    cm.scrollIntoView({from: cursor.from(), to: cursor.to()}, 20);
+    state.posFrom = cursor.from(); state.posTo = cursor.to();
+    if (callback) callback(cursor.from(), cursor.to())
+  });}
+
+  function clearSearch(cm) {cm.operation(function() {
+    var state = getSearchState(cm);
+    state.lastQuery = state.query;
+    if (!state.query) return;
+    state.query = state.queryText = null;
+    cm.removeOverlay(state.overlay);
+    if (state.annotate) { state.annotate.clear(); state.annotate = null; }
+  });}
+
+  var replaceQueryDialog =
+    ' <input type="text" style="width: 10em" class="CodeMirror-search-field"/> <span style="color: #888" class="CodeMirror-search-hint">(Use /re/ syntax for regexp search)</span>';
+  var replacementQueryDialog = '<span class="CodeMirror-search-label">With:</span> <input type="text" style="width: 10em" class="CodeMirror-search-field"/>';
+  var doReplaceConfirm = '<span class="CodeMirror-search-label">Replace?</span> <button>Yes</button> <button>No</button> <button>All</button> <button>Stop</button>';
+
+  function replaceAll(cm, query, text) {
+    cm.operation(function() {
+      for (var cursor = getSearchCursor(cm, query); cursor.findNext();) {
+        if (typeof query != "string") {
+          var match = cm.getRange(cursor.from(), cursor.to()).match(query);
+          cursor.replace(text.replace(/\$(\d)/g, function(_, i) {return match[i];}));
+        } else cursor.replace(text);
+      }
+    });
+  }
+
+  function replace(cm, all) {
+    if (cm.getOption("readOnly")) return;
+    var query = cm.getSelection() || getSearchState(cm).lastQuery;
+    var dialogText = '<span class="CodeMirror-search-label">' + (all ? 'Replace all:' : 'Replace:') + '</span>';
+    dialog(cm, dialogText + replaceQueryDialog, dialogText, query, function(query) {
+      if (!query) return;
+      query = parseQuery(query);
+      dialog(cm, replacementQueryDialog, "Replace with:", "", function(text) {
+        text = parseString(text)
+        if (all) {
+          replaceAll(cm, query, text)
+        } else {
+          clearSearch(cm);
+          var cursor = getSearchCursor(cm, query, cm.getCursor("from"));
+          var advance = function() {
+            var start = cursor.from(), match;
+            if (!(match = cursor.findNext())) {
+              cursor = getSearchCursor(cm, query);
+              if (!(match = cursor.findNext()) ||
+                  (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return;
+            }
+            cm.setSelection(cursor.from(), cursor.to());
+            cm.scrollIntoView({from: cursor.from(), to: cursor.to()});
+            confirmDialog(cm, doReplaceConfirm, "Replace?",
+                          [function() {doReplace(match);}, advance,
+                           function() {replaceAll(cm, query, text)}]);
+          };
+          var doReplace = function(match) {
+            cursor.replace(typeof query == "string" ? text :
+                           text.replace(/\$(\d)/g, function(_, i) {return match[i];}));
+            advance();
+          };
+          advance();
+        }
+      });
+    });
+  }
+
+  CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);};
+  CodeMirror.commands.findPersistent = function(cm) {clearSearch(cm); doSearch(cm, false, true);};
+  CodeMirror.commands.findPersistentNext = function(cm) {doSearch(cm, false, true, true);};
+  CodeMirror.commands.findPersistentPrev = function(cm) {doSearch(cm, true, true, true);};
+  CodeMirror.commands.findNext = doSearch;
+  CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);};
+  CodeMirror.commands.clearSearch = clearSearch;
+  CodeMirror.commands.replace = replace;
+  CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);};
+});
+</script> 
+  <script>(function(){'use strict';
+var c,aa="object"===typeof __ScalaJSEnv&&__ScalaJSEnv?__ScalaJSEnv:{},ba="object"===typeof aa.global&&aa.global?aa.global:"object"===typeof global&&global&&global.Object===Object?global:this;aa.global=ba;var ca="object"===typeof aa.exportsNamespace&&aa.exportsNamespace?aa.exportsNamespace:ba;aa.exportsNamespace=ca;ba.Object.freeze(aa);var aaa={envInfo:aa,semantics:{asInstanceOfs:2,arrayIndexOutOfBounds:2,moduleInit:2,strictFloats:!1,productionMode:!0},assumingES6:!1,linkerVersion:"0.6.18",globalThis:this};
+ba.Object.freeze(aaa);ba.Object.freeze(aaa.semantics);var da=ba.Math.imul||function(a,b){var d=a&65535,e=b&65535;return d*e+((a>>>16&65535)*e+d*(b>>>16&65535)<<16>>>0)|0},ea=ba.Math.fround||function(a){return+a},fa=ba.Math.clz32||function(a){if(0===a)return 32;var b=1;0===(a&4294901760)&&(a<<=16,b+=16);0===(a&4278190080)&&(a<<=8,b+=8);0===(a&4026531840)&&(a<<=4,b+=4);0===(a&3221225472)&&(a<<=2,b+=2);return b+(a>>31)},ha=0,ia=ba.WeakMap?new ba.WeakMap:null;
+function ja(a){return function(b,d){return!(!b||!b.$classData||b.$classData.Rr!==d||b.$classData.Qr!==a)}}function baa(a){for(var b in a)return b}function ka(a,b){return new a.UC(b)}function la(a,b){return caa(a,b,0)}function caa(a,b,d){var e=new a.UC(b[d]);if(d<b.length-1){a=a.Yt;d+=1;for(var f=e.m,h=0;h<f.length;h++)f[h]=caa(a,b,d)}return e}function na(a){return void 0===a?"undefined":a.toString()}
+function oa(a){switch(typeof a){case "string":return pa(qa);case "number":var b=a|0;return b===a?ra(b)?pa(sa):ta(b)?pa(ua):pa(wa):xa(a)?pa(ya):pa(za);case "boolean":return pa(Aa);case "undefined":return pa(Ba);default:return null===a?a.Xoa():Ca(a)?pa(Da):a&&a.$classData?pa(a.$classData):null}}function Ea(a,b){return a&&a.$classData||null===a?a.o(b):"number"===typeof a?"number"===typeof b&&(a===b?0!==a||1/a===1/b:a!==a&&b!==b):a===b}
+function Fa(a){switch(typeof a){case "string":return Ga(Ha(),a);case "number":return daa(Ja(),a);case "boolean":return a?1231:1237;case "undefined":return 0;default:return a&&a.$classData||null===a?a.r():null===ia?42:Ka(a)}}function La(a){return"string"===typeof a?a.length|0:a.ra()}function Ma(a,b,d){return"string"===typeof a?a.substring(b,d):a.Tv(b,d)}function Na(a){return 2147483647<a?2147483647:-2147483648>a?-2147483648:a|0}
+function eaa(a,b){var d=ba.Object.getPrototypeOf,e=ba.Object.getOwnPropertyDescriptor;for(a=d(a);null!==a;){var f=e(a,b);if(void 0!==f)return f;a=d(a)}}function faa(a,b,d){a=eaa(a,d);if(void 0!==a)return d=a.get,void 0!==d?d.call(b):a.value}function gaa(a,b,d,e){a=eaa(a,d);if(void 0!==a&&(a=a.set,void 0!==a)){a.call(b,e);return}throw new ba.TypeError("super has no setter '"+d+"'.");}
+function Oa(a,b,d,e,f){a=a.m;d=d.m;if(a!==d||e<b||(b+f|0)<e)for(var h=0;h<f;h=h+1|0)d[e+h|0]=a[b+h|0];else for(h=f-1|0;0<=h;h=h-1|0)d[e+h|0]=a[b+h|0]}
+var Ka=null!==ia?function(a){switch(typeof a){case "string":case "number":case "boolean":case "undefined":return Fa(a);default:if(null===a)return 0;var b=ia.get(a);void 0===b&&(ha=b=ha+1|0,ia.set(a,b));return b}}:function(a){if(a&&a.$classData){var b=a.$idHashCode$0;if(void 0!==b)return b;if(ba.Object.isSealed(a))return 42;ha=b=ha+1|0;return a.$idHashCode$0=b}return null===a?0:Fa(a)};function ra(a){return"number"===typeof a&&a<<24>>24===a&&1/a!==1/-0}
+function ta(a){return"number"===typeof a&&a<<16>>16===a&&1/a!==1/-0}function Pa(a){return"number"===typeof a&&(a|0)===a&&1/a!==1/-0}function xa(a){return"number"===typeof a}function Qa(a){return null===a?Ra().Np:a}function Sa(){this.ty=this.UC=void 0;this.Qr=this.Yt=this.n=null;this.Rr=0;this.qz=null;this.qx="";this.Fk=this.ix=this.jx=void 0;this.name="";this.isRawJSType=this.isArrayClass=this.isInterface=this.isPrimitive=!1;this.isInstance=void 0}
+function Ta(a,b,d){var e=new Sa;e.n={};e.Yt=null;e.qz=a;e.qx=b;e.Fk=function(){return!1};e.name=d;e.isPrimitive=!0;e.isInstance=function(){return!1};return e}function g(a,b,d,e,f,h,k,p){var t=new Sa,x=baa(a);k=k||function(a){return!!(a&&a.$classData&&a.$classData.n[x])};p=p||function(a,b){return!!(a&&a.$classData&&a.$classData.Rr===b&&a.$classData.Qr.n[x])};t.ty=h;t.n=e;t.qx="L"+d+";";t.Fk=p;t.name=d;t.isInterface=b;t.isRawJSType=!!f;t.isInstance=k;return t}
+function haa(a){function b(a){if("number"===typeof a){this.m=Array(a);for(var b=0;b<a;b++)this.m[b]=f}else this.m=a}var d=new Sa,e=a.qz,f="longZero"==e?Ra().Np:e;b.prototype=new l;b.prototype.constructor=b;b.prototype.jT=function(){return this.m instanceof Array?new b(this.m.slice(0)):new b(new this.m.constructor(this.m))};b.prototype.$classData=d;var e="["+a.qx,h=a.Qr||a,k=a.Rr+1;d.UC=b;d.ty=Ua;d.n={d:1,Ve:1,i:1};d.Yt=a;d.Qr=h;d.Rr=k;d.qz=null;d.qx=e;d.jx=void 0;d.ix=void 0;d.Fk=void 0;d.name=e;
+d.isPrimitive=!1;d.isInterface=!1;d.isArrayClass=!0;d.isInstance=function(a){return h.Fk(a,k)};return d}function pa(a){if(!a.jx){var b=new Va;b.wi=a;a.jx=b}return a.jx}function Wa(a){a.ix||(a.ix=haa(a));return a.ix}Sa.prototype.getFakeInstance=function(){return this===qa?"some string":this===Aa?!1:this===sa||this===ua||this===wa||this===ya||this===za?0:this===Da?Ra().Np:this===Ba?void 0:{$classData:this}};Sa.prototype.getSuperclass=function(){return this.ty?pa(this.ty):null};
+Sa.prototype.getComponentType=function(){return this.Yt?pa(this.Yt):null};Sa.prototype.newArrayOfThisClass=function(a){for(var b=this,d=0;d<a.length;d++)b=Wa(b);return la(b,a)};var Xa=Ta(void 0,"V","void"),Ya=Ta(!1,"Z","boolean"),Za=Ta(0,"C","char"),bb=Ta(0,"B","byte"),cb=Ta(0,"S","short"),db=Ta(0,"I","int"),eb=Ta("longZero","J","long"),fb=Ta(0,"F","float"),gb=Ta(0,"D","double"),hb=ja(Ya);Ya.Fk=hb;var ib=ja(Za);Za.Fk=ib;var jb=ja(bb);bb.Fk=jb;var kb=ja(cb);cb.Fk=kb;var lb=ja(db);db.Fk=lb;var mb=ja(eb);
+eb.Fk=mb;var nb=ja(fb);fb.Fk=nb;var ob=ja(gb);gb.Fk=ob;function iaa(a,b){return m(new n,function(a,b){return function(f){return a.y(b.y(f))}}(a,b))}function pb(a,b){return m(new n,function(a,b){return function(f){return b.y(a.y(f))}}(a,b))}function jaa(a){return m(new n,function(a){return function(d){if(null!==d)return qb(a,d.ja(),d.na());throw(new q).j(d);}}(a))}function rb(a){return m(new n,function(a){return function(d){return m(new n,function(a,b){return function(d){return qb(a,b,d)}}(a,d))}}(a))}
+function kaa(a,b,d){return b.za.Gb(d,sb(new tb,function(a){return function(b,d){return wb(a,d,b)}}(a)))}function wb(a,b,d){if(xb(b))return laa(a,b,d);if(yb(b))return maa(a,b.je,d);if(zb(b))return laa(a,b.fl,d);throw(new q).j(b);}function maa(a,b,d){return b.eg.Gb(d,sb(new tb,function(a){return function(b,d){return kaa(a,d,b)}}(a)))}function naa(a,b,d){return b.za.Gb(d,sb(new tb,function(a){return function(b,d){return wb(a,d,b)}}(a)))}
+function Ab(a,b){if(xb(b))return a.Ig(b);if(yb(b))return a=oaa(a,b.je),Bb(new Cb,a,b.sa,b.vj);if(zb(b))return a=a.Ig(b.fl),Db(new Eb,a,b.sa);throw(new q).j(b);}function oaa(a,b){var d=b.eg;a=m(new n,function(a){return function(b){return a.xh(b)}}(a));var e=r(),d=d.xa(a,e.s);return(new Fb).Cs(b.ns,d,b.re)}function Gb(a,b){var d=b.za;a=m(new n,function(a){return function(b){return Ab(a,b)}}(a));var e=r(),d=d.xa(a,e.s);return(new Hb).hj(b.zd,d,b.sa)}
+function Ib(a,b){var d=b.za;a=m(new n,function(a){return function(b){return Ab(a,b)}}(a));var e=r(),d=d.xa(a,e.s);return(new Jb).Yf(b.se,d,b.sa)}function Kb(a,b){a=oaa(a,b.je);return Lb(b.qi,a,b.xz)}function paa(a,b){b.za.ua(m(new n,function(a){return function(b){Nb(a,b)}}(a)))}function Ob(a,b){b.eg.ua(m(new n,function(a){return function(b){a.oZ(b)}}(a)))}function qaa(a,b){b.za.ua(m(new n,function(a){return function(b){Nb(a,b)}}(a)))}
+function Nb(a,b){if(xb(b))a.sG(b);else if(yb(b))Ob(a,b.je);else if(zb(b))a.sG(b.fl);else throw(new q).j(b);}function raa(a,b){return-1!==(a.Pd.indexOf("\x3cBREED\x3e")|0)?b.Ff:b.wa}function Pb(a){var b=Qb(Ha(),Qb(Ha(),a.Pd,"\\?","\\\\?"),saa(Rb()),"(.+)"),b=u((new v).G((new w).f(["^","$"])),(new w).f([b])),b=(new Sb).c(b),d=y();a.qy((new Tb).$o(b.R,d))}
+function taa(a,b){var d=(new Ub).JD((new Vb).ia(1E8,0)),e=(new Wb).Xj(0),f=uaa(a);Xb(new Yb,f,m(new n,function(){return function(a){return null!==a}}(a))).ua(m(new n,function(a,b,d,e){return function(a){if(null!==a){var f=+a.na(),h;h=Na(+a.ja());var U=255&b>>16,ga=255&h>>16;a=U+(ga/2|0)|0;U=U-ga|0;ga=(255&b>>8)-(255&h>>8)|0;h=(255&b)-(255&h)|0;a=((da(da(512+a|0,U),U)>>8)+da(ga<<2,ga)|0)+(da(da(767-a|0,h),h)>>8)|0;h=(new Vb).ia(a,a>>31);a=h.la;h=h.qa;U=d.Ba;ga=U.qa;if(h===ga?(-2147483648^a)<(-2147483648^
+U.la):h<ga)d.Ba=(new Vb).ia(a,h),e.Ba=f}else throw(new q).j(a);}}(a,b,d,e)));return e.Ba}function vaa(a){var b=Zb,d=uaa(b).$b(a);return+(d.z()?taa(b,a):d.X())}function $b(a,b,d,e){if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Dump.scala: 56");return a.VT.y((new ac).Bd(b,d,e))}function waa(a,b,d,e){a=(new bc).Kf(b,m(new n,function(a,b,d){return function(e){return $b(a,e,b,d)}}(a,d,e)));return cc(a,"["," ","]")}
+function xaa(a,b,d,e,f,h,k,p){var t=[(new A).e("",b)];b=dc(new ec,gc());for(var x=0,E=t.length|0;x<E;)hc(b,t[x]),x=1+x|0;t=yaa;x=new ic;x.gt=b.Oa;x.Jh=k;x.Vr=p;x.bs=e;x.Dn=h;x.Tk=f;x.en=d;return t(a,x)}
+function zaa(a){B();for(var b=Aaa(a).Ha(),d=(new jc).b(),e=0;e<b;){var f=kc();lc(d,f);e=1+e|0}b=d.ob();if(a.tv.sn){a=kc();d=C();D();e=mc();D();f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,b,a,f,h,!1,"OTPL",k,k.ba(),!0)}return nc(D(),b,(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))}function Baa(a){a.M("OTPL");Caa(a,I(oc().ai,y()));a.a=(32|a.a)<<24>>24}function pc(a){return!!(a&&a.$classData&&a.$classData.n.SJ)}
+function Daa(a,b,d,e,f){var h=a.np.y(f.pe());b=qc(b,rc(f),sc());tc();h=h.Ta();uc||(uc=(new vc).b());var h=wc(0,h,uc),k=new xc;d=yc(d,a.ae);k.dc=a.dc;k.ae=d;k.qi=f;k.Jh=e;Eaa(k);a=wc(tc(),h,k);zc||(zc=(new Ac).b());e=zc;a=a.$m();d=Bc();for(h=I(Dc(),y());;)if(k=a.$().kb,null===k||k!==d){b=Ec(e,a,!1,b);if(null===b)throw(new q).j(b);k=b.ja();b=b.na();h.zj(k)}else break;b=h.Ic();e=a.$();b=(new Fb).Cs(e.Oc().cb,b,!1);a=2147483647!==a.$().Oc().$a?a.$().Oc().Ua:b.Oc().$a;return Lb(f,b,a)}
+function Faa(a,b){a=Gaa(Fc(),Gc(a),b);for(var d=Haa(Fc(),a.dc,yc(b.Dn,a.ae)),e=a.ae,f=Hc(b.Dn),e=Ic(e,f),f=(new Kc).mg(e),e=Lc().s,e=Mc(f,e),f=f.ti.wj();f.ta();){var h=f.ma();e.Qa(Daa(a,d,b.Dn,b.Jh,h))}b=e.Da().Ic();return(new A).e(b,a)}function Iaa(a,b,d,e){b=b.za;var f=r();return b.xj(f.s).Gb(e,sb(new tb,function(a,b){return function(d,e){d=(new A).e(d,e);e=d.lb;var f=d.Db;if(null!==f)return Nc(a,f.ja(),b,f.Ec(),e);throw(new q).j(d);}}(a,d)))}
+function Oc(a,b,d,e){b=b.za;var f=r();return b.xj(f.s).Gb(e,sb(new tb,function(a,b){return function(d,e){d=(new A).e(d,e);e=d.lb;var f=d.Db;if(null!==f)return Nc(a,f.ja(),b,f.Ec(),e);throw(new q).j(d);}}(a,d)))}
+function Jaa(a,b,d,e){b=b.eg;var f=r();return b.xj(f.s).Gb(e,sb(new tb,function(a,b){return function(d,e){e=(new A).e(d,e);d=e.lb;var f=e.Db;if(null!==f){e=f.ja();f=Pc(b,(new Qc).qb(f.Ec()));var E=d.ck.$b(f);E.z()?E=F():(E=E.X(),E=(new J).j(Rc(E,a,e,f,d)));E.z()?(E=Sc(d.rf,f),E=Tc(Uc(d),""+E+d.om.y(e.zd)),e=Iaa(a,e,f,E),d=Vc(new Wc,e.Yb,e.ck,d.om,e.rf)):d=E.X();return d}throw(new q).j(e);}}(a,d)))}
+function Nc(a,b,d,e,f){if(xb(b))return d=Pc(d,(new Xc).qb(e)),Yc(a,b,d,f);if(yb(b)){d=Pc(d,(new Zc).qb(e));if(b.vj&&b.je.eg.z())f=Tc(Uc(f),Sc(f.rf,d));else if(b.vj)e=f.ck.$b(d),e.z()?e=F():(e=e.X(),e=(new J).j(Rc(e,a,b,d,Tc(Uc(f),Sc(f.rf,d))))),e.z()?(e=Tc(Uc(f),Sc(f.rf,d)),a=Jaa(a,b.je,d,e),f=Tc(Uc(a),$c(f.rf,d))):f=e.X();else{var h=Kaa(a);e=Laa(a);var k=f.ck.$b(d);k.z()?k=F():(k=k.X(),k=(new J).j(Rc(k,a,b,d,Tc(Uc(f),Sc(f.rf,d)))));k.z()?(h=Tc(Uc(f),h.y(f.rf).y(d)),a=Jaa(a,b.je,d,h),f=Tc(Uc(a),e.y(f.rf).y(d))):
+f=k.X()}return f}if(zb(b))return d=Pc(d,(new ad).qb(e)),h=Kaa(a),e=Laa(a),k=f.ck.$b(d),k.z()?k=F():(k=k.X(),k=(new J).j(Rc(k,a,b,d,Tc(Uc(f),Sc(f.rf,d))))),k.z()?(h=Tc(Uc(f),h.y(f.rf).y(d)),b=b.fl,k=Pc(d,(new Xc).qb(0)),a=Yc(a,b,k,h),f=Tc(Uc(a),e.y(f.rf).y(d))):f=k.X(),f;throw(new q).j(b);}
+function Maa(a,b,d,e,f){bd(a);d=cd(d,"run");var h=f.lp;a=m(new n,function(a,b){return function(a){return u((new v).G((new w).f(["",'Vars["','"] \x3d ',";"])),(new w).f([b,a,a]))}}(a,d));var k=r(),h=h.xa(a,k.s).zb("\n");!b&&f.yq?(a=u((new v).G((new w).f(["var "," \x3d "])),(new w).f([d])),f=u((new v).G((new w).f(["if(reporterContext \x26\x26 "," !\x3d\x3d undefined) { return ","; }"])),(new w).f([d,d]))):f=a="";b=u((new v).G((new w).f(["|","Prims.runCode(\n        |  ",",\n        |  (function() {\n        |    let ",
+"Vars \x3d { }; for(var v in letVars) { ","Vars[v] \x3d letVars[v]; }\n        |    ","\n        |    return ","Vars;\n        |  })(),\n        |  ","\n        |)\n        |","\n        |"])),(new w).f([a,b,d,d,h,d,e.zb(", "),f]));b=(new Sb).c(b);return dd(b)}function Naa(a){return u((new v).G((new w).f(["notImplemented(",", undefined)"])),(new w).f([ed(fd(),a)]))}function gd(a,b){throw(new hd).Bs(a,b.sa.Ua,b.sa.$a,b.sa.cb);}
+function id(a){a=jd().Wc(a);if(a.z())var b=!0;else b=a.X(),b=(new Sb).c(b),b=kd(b);a=b?a:F();return a.z()?"LINKS":a.X()}function Oaa(a,b){ld();return md(new nd,Paa(b)).Wc(a)}function od(a){return pd(qd(),rd(qd(),a))}function sd(a,b){return a.Yk(b).iU(m(new n,function(){return function(a){throw(new td).G(a);}}(a)),m(new n,function(){return function(a){return a}}(a)))}var Qaa=g({wt:0},!0,"sbt.testing.Fingerprint",{wt:1});function ud(a){return!!(a&&a.$classData&&a.$classData.n.UB)}
+var vd=g({UB:0},!0,"sbt.testing.Framework",{UB:1}),Raa=g({VB:0},!0,"sbt.testing.Logger",{VB:1}),wd=g({rR:0},!0,"sbt.testing.Task",{rR:1});function xd(a){a.Zs(Saa(a))}function yd(a){a.Jv(Taa(a))}function zd(a){a.ag(Uaa(a))}function Ad(a){a.pg(Vaa(a))}function Bd(a){a.Yq(Waa(a))}function Cd(a){a.hf(Xaa(a))}function Dd(a,b){var d=Ed();a=[Fd(Ed(),a.ah(b))];b=a.length|0;var e=0,f=Gd((new Hd).ij(d.dr));a:for(;;){if(e!==b){d=1+e|0;f=Id(f,a[e]);e=d;continue a}return f}}function Jd(a){a.Xg(Yaa(a))}
+function Kd(a){a.Qn(Zaa(a))}function Ld(a){a.Rn($aa(a))}function aba(a){a.GX((new Md).Yd(a));a.tX((new Nd).Yd(a));a.sX((new Od).Yd(a));a.uX((new Pd).Yd(a));a.vX((new Qd).Yd(a));a.wX((new Rd).Yd(a));a.xX((new Sd).Yd(a));a.EX((new Td).Yd(a));a.FX((new Ud).Yd(a));a.AX((new Vd).Yd(a));a.BX((new Wd).Yd(a));a.CX((new Xd).Yd(a));a.DX((new Yd).Yd(a));a.zX((new Zd).Yd(a));a.yX((new $d).Yd(a))}function bba(a){a.KX((new ae).dE(a));a.LX((new be).dE(a))}function ce(){}function l(){}l.prototype=ce.prototype;
+ce.prototype.b=function(){return this};ce.prototype.o=function(a){return this===a};ce.prototype.k=function(){var a=oa(this).Bg(),b=(+(this.r()>>>0)).toString(16);return a+"@"+b};ce.prototype.r=function(){return Ka(this)};ce.prototype.toString=function(){return this.k()};function de(a,b){if(a=a&&a.$classData){var d=a.Rr||0;return!(d<b)&&(d>b||!a.Qr.isPrimitive)}return!1}var Ua=g({d:0},!1,"java.lang.Object",{d:1},void 0,void 0,function(a){return null!==a},de);ce.prototype.$classData=Ua;
+function cba(a,b){b!==a&&b.jp(m(new n,function(a){return function(b){return a.hw(b)}}(a)),fe());return a}function ge(a,b){if(a.hw(b))return a;throw(new he).c("Promise already completed.");}
+function dba(a,b){if(ie(b))return b=null===b?0:b.Y,a.rE()&&a.Bi()===b;if(ra(b))return b|=0,a.qE()&&a.wx()===b;if(ta(b))return b|=0,a.sE()&&a.Ry()===b;if(Pa(b))return b|=0,a.Xu()&&a.Bi()===b;if(Ca(b)){var d=Qa(b);b=d.la;d=d.qa;a=a.lj();var e=a.qa;return a.la===b&&e===d}return xa(b)?(b=+b,a.bq()===b):"number"===typeof b?(b=+b,a.Rj()===b):!1}function eba(a,b){a.jF=b;return a}function fba(a,b){return 0<=a.gr(b)?na(Ma(a.UF(),a.gr(b),a.lu(b))):null}
+function gba(a,b){return(new je).ql(a,m(new n,function(a,b){return function(f){return ke(new le,a,b,f)}}(a,b)))}function me(a,b){return(new je).ql(a,m(new n,function(a,b){return function(f){f=ne(b).bi(f);if(oe(f)||pe(f))return f;if(qe(f))return(new re).on(a,f.Kk,f.fe);throw(new q).j(f);}}(a,b)))}function se(a,b){return(new je).ql(a,m(new n,function(a,b){return function(f){return(new te).on(a,b,f)}}(a,b)))}
+function ue(a,b,d){return(new je).ql(a,m(new n,function(a,b,d){return function(k){var p;if(k.Lm.z())p=(new te).on(a,"end of input",k);else if(d.Ya(k.Lm.$())){p=new le;var t=d.y(k.Lm.$());k=hba(new ve,k.Lm.aa(),k.vD);p=ke(p,a,t,k)}else p=(new te).on(a,b+" expected",k);return p}}(a,b,d)))}
+function iba(a,b,d){return(new je).ql(a,m(new n,function(a,b,d){return function(k){var p=(new we).b(),t=(new jc).b(),x=ne(b).bi(k);if(oe(x)){k=x.fe;lc(t,x.zm);if(p.Na)p=p.jb;else{if(null===p)throw(new ye).b();p=p.Na?p.jb:ze(p,ne(d))}a:for(;;)if(x=p.bi(k),oe(x))k=x,x=k.fe,lc(t,k.zm),k=x;else{t=pe(x)?x:ke(new le,a,t.ob(),k);break a}return t}if(x&&x.$classData&&x.$classData.n.hF)return x;throw(new q).j(x);}}(a,b,d)))}
+function Ae(a,b){return Be(iba(a,b,b),K(function(a){return function(){var b=y();return gba(a,b)}}(a)))}function jba(a,b){var d=a.Va;a=Ce(De(a,m(new n,function(a,b){return function(d){return Ee(me(a.Va,b),m(new n,function(a,b){return function(d){return Fe(a.Va,b,d)}}(a,d)))}}(a,b))),"~");return(new Ge).ql(d,a)}
+function kba(a){var b=(new Sb).c("");a=-1+a.wc|0;b=He(Ie(),b.R,0,a);b=(new Sb).c(b);a=Je().Lp;a=Mc(b,a);for(var d=0,e=b.R.length|0;d<e;){var f=b.W(d),f=null===f?0:f.Y;a.Qa((new Ke).Xa(9===f?f:32));d=1+d|0}return"\n"+a.Da()+"^"}function Le(a,b){b.ua(m(new n,function(a){return function(b){return a.Mm(b)}}(a)));return a}function Ic(a,b){var d=a.$f();return b.nb().sf(d,sb(new tb,function(){return function(a,b){return a.ye(b)}}(a)))}
+function Me(a){var b=la(Wa(Ua),[a.m.length]);Oa(a,0,b,0,a.m.length);return b}
+function lba(a,b,d){if(32>d)return a.Ce().m[31&b];if(1024>d)return a.yb().m[31&(b>>>5|0)].m[31&b];if(32768>d)return a.Lb().m[31&(b>>>10|0)].m[31&(b>>>5|0)].m[31&b];if(1048576>d)return a.kc().m[31&(b>>>15|0)].m[31&(b>>>10|0)].m[31&(b>>>5|0)].m[31&b];if(33554432>d)return a.ud().m[31&(b>>>20|0)].m[31&(b>>>15|0)].m[31&(b>>>10|0)].m[31&(b>>>5|0)].m[31&b];if(1073741824>d)return a.Ih().m[31&(b>>>25|0)].m[31&(b>>>20|0)].m[31&(b>>>15|0)].m[31&(b>>>10|0)].m[31&(b>>>5|0)].m[31&b];throw(new Ne).b();}
+function mba(a,b,d,e){if(32<=e)if(1024>e)1===a.yf()&&(a.oc(la(Wa(Ua),[32])),a.yb().m[31&(b>>>5|0)]=a.Ce(),a.Oj(1+a.yf()|0)),a.Rc(la(Wa(Ua),[32]));else if(32768>e)2===a.yf()&&(a.Yc(la(Wa(Ua),[32])),a.Lb().m[31&(b>>>10|0)]=a.yb(),a.Oj(1+a.yf()|0)),a.oc(a.Lb().m[31&(d>>>10|0)]),null===a.yb()&&a.oc(la(Wa(Ua),[32])),a.Rc(la(Wa(Ua),[32]));else if(1048576>e)3===a.yf()&&(a.De(la(Wa(Ua),[32])),a.kc().m[31&(b>>>15|0)]=a.Lb(),a.Oj(1+a.yf()|0)),a.Yc(a.kc().m[31&(d>>>15|0)]),null===a.Lb()&&a.Yc(la(Wa(Ua),[32])),
+a.oc(a.Lb().m[31&(d>>>10|0)]),null===a.yb()&&a.oc(la(Wa(Ua),[32])),a.Rc(la(Wa(Ua),[32]));else if(33554432>e)4===a.yf()&&(a.jh(la(Wa(Ua),[32])),a.ud().m[31&(b>>>20|0)]=a.kc(),a.Oj(1+a.yf()|0)),a.De(a.ud().m[31&(d>>>20|0)]),null===a.kc()&&a.De(la(Wa(Ua),[32])),a.Yc(a.kc().m[31&(d>>>15|0)]),null===a.Lb()&&a.Yc(la(Wa(Ua),[32])),a.oc(a.Lb().m[31&(d>>>10|0)]),null===a.yb()&&a.oc(la(Wa(Ua),[32])),a.Rc(la(Wa(Ua),[32]));else if(1073741824>e)5===a.yf()&&(a.Jo(la(Wa(Ua),[32])),a.Ih().m[31&(b>>>25|0)]=a.ud(),
+a.Oj(1+a.yf()|0)),a.jh(a.Ih().m[31&(d>>>25|0)]),null===a.ud()&&a.jh(la(Wa(Ua),[32])),a.De(a.ud().m[31&(d>>>20|0)]),null===a.kc()&&a.De(la(Wa(Ua),[32])),a.Yc(a.kc().m[31&(d>>>15|0)]),null===a.Lb()&&a.Yc(la(Wa(Ua),[32])),a.oc(a.Lb().m[31&(d>>>10|0)]),null===a.yb()&&a.oc(la(Wa(Ua),[32])),a.Rc(la(Wa(Ua),[32]));else throw(new Ne).b();}function Oe(a,b,d){var e=la(Wa(Ua),[32]);Oa(a,b,e,d,32-(d>b?d:b)|0);return e}
+function nba(a,b,d){if(32<=d)if(1024>d)a.Rc(a.yb().m[31&(b>>>5|0)]);else if(32768>d)a.oc(a.Lb().m[31&(b>>>10|0)]),a.Rc(a.yb().m[31&(b>>>5|0)]);else if(1048576>d)a.Yc(a.kc().m[31&(b>>>15|0)]),a.oc(a.Lb().m[31&(b>>>10|0)]),a.Rc(a.yb().m[31&(b>>>5|0)]);else if(33554432>d)a.De(a.ud().m[31&(b>>>20|0)]),a.Yc(a.kc().m[31&(b>>>15|0)]),a.oc(a.Lb().m[31&(b>>>10|0)]),a.Rc(a.yb().m[31&(b>>>5|0)]);else if(1073741824>d)a.jh(a.Ih().m[31&(b>>>25|0)]),a.De(a.ud().m[31&(b>>>20|0)]),a.Yc(a.kc().m[31&(b>>>15|0)]),a.oc(a.Lb().m[31&
+(b>>>10|0)]),a.Rc(a.yb().m[31&(b>>>5|0)]);else throw(new Ne).b();}
+function oba(a,b){var d=-1+a.yf()|0;switch(d){case 5:a.Jo(Me(a.Ih()));a.jh(Me(a.ud()));a.De(Me(a.kc()));a.Yc(Me(a.Lb()));a.oc(Me(a.yb()));a.Ih().m[31&(b>>>25|0)]=a.ud();a.ud().m[31&(b>>>20|0)]=a.kc();a.kc().m[31&(b>>>15|0)]=a.Lb();a.Lb().m[31&(b>>>10|0)]=a.yb();a.yb().m[31&(b>>>5|0)]=a.Ce();break;case 4:a.jh(Me(a.ud()));a.De(Me(a.kc()));a.Yc(Me(a.Lb()));a.oc(Me(a.yb()));a.ud().m[31&(b>>>20|0)]=a.kc();a.kc().m[31&(b>>>15|0)]=a.Lb();a.Lb().m[31&(b>>>10|0)]=a.yb();a.yb().m[31&(b>>>5|0)]=a.Ce();break;
+case 3:a.De(Me(a.kc()));a.Yc(Me(a.Lb()));a.oc(Me(a.yb()));a.kc().m[31&(b>>>15|0)]=a.Lb();a.Lb().m[31&(b>>>10|0)]=a.yb();a.yb().m[31&(b>>>5|0)]=a.Ce();break;case 2:a.Yc(Me(a.Lb()));a.oc(Me(a.yb()));a.Lb().m[31&(b>>>10|0)]=a.yb();a.yb().m[31&(b>>>5|0)]=a.Ce();break;case 1:a.oc(Me(a.yb()));a.yb().m[31&(b>>>5|0)]=a.Ce();break;case 0:break;default:throw(new q).j(d);}}function Pe(a,b){var d=a.m[b];a.m[b]=null;return Me(d)}
+function Qe(a,b,d){a.Oj(d);d=-1+d|0;switch(d){case -1:break;case 0:a.Rc(b.Ce());break;case 1:a.oc(b.yb());a.Rc(b.Ce());break;case 2:a.Yc(b.Lb());a.oc(b.yb());a.Rc(b.Ce());break;case 3:a.De(b.kc());a.Yc(b.Lb());a.oc(b.yb());a.Rc(b.Ce());break;case 4:a.jh(b.ud());a.De(b.kc());a.Yc(b.Lb());a.oc(b.yb());a.Rc(b.Ce());break;case 5:a.Jo(b.Ih());a.jh(b.ud());a.De(b.kc());a.Yc(b.Lb());a.oc(b.yb());a.Rc(b.Ce());break;default:throw(new q).j(d);}}function Re(a){return null===a?pba():a}
+function qba(a){return a===pba()?null:a}var rba=g({HF:0},!0,"scala.collection.mutable.HashEntry",{HF:1});function Se(){this.Ay=this.xy=null}Se.prototype=new l;Se.prototype.constructor=Se;function sba(a){var b=(new w).f([a.xy,a.Ay]);a=b.pa.length|0;a=la(Wa(Ue),[a]);var d;d=0;for(b=Ve(new We,b,0,b.pa.length|0);b.ta();){var e=b.ma();a.m[d]=e;d=1+d|0}return a}function Xe(a,b,d){a.xy=b;a.Ay=d;return a}Se.prototype.$classData=g({zZ:0},!1,"java.math.BigInteger$QuotAndRem",{zZ:1,d:1});function Ye(){}
+Ye.prototype=new l;Ye.prototype.constructor=Ye;Ye.prototype.b=function(){return this};function tba(a,b,d,e){a=0;var f=-1+e|0;if(!(0>=e))for(var h=0;;){var k=h,p=d.m[k];b.m[k]=p<<1|a;a=p>>>31|0;if(h===f)break;h=1+h|0}0!==a&&(b.m[e]=a)}function uba(a,b,d){a=d>>5;d&=31;var e=(b.cc+a|0)+(0===d?0:1)|0,f=la(Wa(db),[e]);Ze(0,f,b.Ab,a,d);b=$e(new af,b.Vb,e,f);bf(b);return b}
+function vba(a,b,d){a=d>>5;var e=31&d;if(a>=b.cc)return 0>b.Vb?cf().$w:cf().Hj;d=b.cc-a|0;var f=la(Wa(db),[1+d|0]);wba(0,f,d,b.Ab,a,e);if(0>b.Vb){for(var h=0;h<a&&0===b.Ab.m[h];)h=1+h|0;var k=0!==b.Ab.m[h]<<(32-e|0);if(h<a||0<e&&k){for(h=0;h<d&&-1===f.m[h];)f.m[h]=0,h=1+h|0;h===d&&(d=1+d|0);a=h;f.m[a]=1+f.m[a]|0}}b=$e(new af,b.Vb,d,f);bf(b);return b}function df(a,b){if(0===b.Vb)return 0;a=b.cc<<5;var d=b.Ab.m[-1+b.cc|0];0>b.Vb&&ef(b)===(-1+b.cc|0)&&(d=-1+d|0);return a=a-fa(d)|0}
+function wba(a,b,d,e,f,h){for(a=0;a<f;)a=1+a|0;if(0===h)Oa(e,f,b,0,d);else{var k=32-h|0;for(a=0;a<(-1+d|0);)b.m[a]=e.m[a+f|0]>>>h|0|e.m[1+(a+f|0)|0]<<k,a=1+a|0;b.m[a]=e.m[a+f|0]>>>h|0}}function Ze(a,b,d,e,f){if(0===f)Oa(d,0,b,e,b.m.length-e|0);else{a=32-f|0;b.m[-1+b.m.length|0]=0;for(var h=-1+b.m.length|0;h>e;){var k=h;b.m[k]=b.m[k]|d.m[-1+(h-e|0)|0]>>>a|0;b.m[-1+h|0]=d.m[-1+(h-e|0)|0]<<f;h=-1+h|0}}d=-1+e|0;if(!(0>=e))for(e=0;;){b.m[e]=0;if(e===d)break;e=1+e|0}}
+Ye.prototype.$classData=g({AZ:0},!1,"java.math.BitLevel$",{AZ:1,d:1});var ff=void 0;function gf(){ff||(ff=(new Ye).b());return ff}function hf(){this.EG=this.TG=null}hf.prototype=new l;hf.prototype.constructor=hf;
+hf.prototype.b=function(){jf=this;var a=(new w).f([-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),b=a.pa.length|0,b=la(Wa(db),[b]),d;d=0;for(a=Ve(new We,a,0,a.pa.length|0);a.ta();){var e=a.ma();b.m[d]=e|0;d=1+d|0}this.TG=b;a=(new w).f([-2147483648,1162261467,1073741824,1220703125,362797056,1977326743,1073741824,387420489,1E9,214358881,429981696,815730721,1475789056,170859375,268435456,410338673,612220032,893871739,128E7,1801088541,113379904,148035889,191102976,
+244140625,308915776,387420489,481890304,594823321,729E6,887503681,1073741824,1291467969,1544804416,1838265625,60466176]);b=a.pa.length|0;b=la(Wa(db),[b]);d=0;for(a=Ve(new We,a,0,a.pa.length|0);a.ta();)e=a.ma(),b.m[d]=e|0,d=1+d|0;this.EG=b;return this};
+function xba(a,b,d){if(0===b.la&&0===b.qa)switch(d){case 0:return"0";case 1:return"0.0";case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return(0>d?"0E+":"0E")+(-2147483648===d?"2147483648":""+(-d|0))}else{a=0>b.qa;var e;e="";var f=18;if(a){var h=b.la;b=b.qa;b=(new Vb).ia(-h|0,0!==h?~b:-b|0)}for(var h=b.la,k=b.qa;;){b=h;var p=k,k=Ra(),h=kf(k,h,p,10,0),k=k.Rb,f=-1+f|0,p=k,t=h,x=t>>>16|0,t=da(10,65535&t),x=da(10,x),x=t+(x<<16)|0;da(10,
+p);e=""+(new Ke).Xa(65535&(48+(b-x|0)|0))+e;b=k;if(0===h&&0===b)break}b=-1+((18-f|0)-d|0)|0;if(0<d&&-6<=b)if(d=1+b|0,0<d)e=e.substring(0,d)+"."+e.substring(d);else{f=-d|0;d=-1+f|0;if(!(0>=f))for(f=0;;){e=""+(new Ke).Xa(48)+e;if(f===d)break;f=1+f|0}e="0."+e}else 0!==d&&(d=""+b,0<b&&(d=""+(new Ke).Xa(43)+d),d=""+(new Ke).Xa(69)+d,1<(18-f|0)?(f=65535&(e.charCodeAt(0)|0),e=(new Ke).Xa(f)+"."+e.substring(1)+d):e=""+e+d);return a?""+(new Ke).Xa(45)+e:e}}
+function lf(a,b){a=b.Vb;var d=b.cc,e=b.Ab;if(0===a)return"0";if(1===d)return b=(+(e.m[0]>>>0)).toString(10),0>a?"-"+b:b;b="";var f=la(Wa(db),[d]);Oa(e,0,f,0,d);do{for(var h=0,e=-1+d|0;0<=e;){var k=h,h=f.m[e],p=mf(Ra(),h,k,1E9,0);f.m[e]=p;var k=p>>31,t=65535&p,p=p>>>16|0,x=da(51712,t),t=da(15258,t),E=da(51712,p),x=x+((t+E|0)<<16)|0;da(1E9,k);da(15258,p);h=h-x|0;e=-1+e|0}e=""+h;for(b="000000000".substring(e.length|0)+e+b;0!==d&&0===f.m[-1+d|0];)d=-1+d|0}while(0!==d);f=0;for(d=b.length|0;;)if(f<d&&48===
+(65535&(b.charCodeAt(f)|0)))f=1+f|0;else break;b=b.substring(f);return 0>a?""+(new Ke).Xa(45)+b:b}hf.prototype.$classData=g({BZ:0},!1,"java.math.Conversion$",{BZ:1,d:1});var jf=void 0;function nf(){jf||(jf=(new hf).b());return jf}function of(){}of.prototype=new l;of.prototype.constructor=of;of.prototype.b=function(){return this};
+function yba(a,b,d,e,f,h,k){a=la(Wa(db),[1+f|0]);var p=la(Wa(db),[1+k|0]),t=fa(h.m[-1+k|0]);0!==t?(Ze(gf(),p,h,0,t),Ze(gf(),a,e,0,t)):(Oa(e,0,a,0,f),Oa(h,0,p,0,k));e=p.m[-1+k|0];for(d=-1+d|0;0<=d;){if(a.m[f]===e)h=-1;else{var x=a.m[f],E=a.m[-1+f|0];h=Ra();var S=mf(h,E,x,e,0),x=h.Rb;h=S;var U=65535&S,S=S>>>16|0,ga=65535&e,ma=e>>>16|0,va=da(U,ga),ga=da(S,ga),U=da(U,ma),U=va+((ga+U|0)<<16)|0;da(x,e);da(S,ma);E=E-U|0;if(0!==h)a:for(h=1+h|0;;){S=h=-1+h|0;ma=p.m[-2+k|0];x=65535&S;S=S>>>16|0;va=65535&ma;
+ma=ma>>>16|0;U=da(x,va);va=da(S,va);ga=da(x,ma);x=U+((va+ga|0)<<16)|0;U=(U>>>16|0)+ga|0;U=(da(S,ma)+(U>>>16|0)|0)+(((65535&U)+va|0)>>>16|0)|0;ma=E;S=a.m[-2+f|0];va=E+e|0;if(0===((-2147483648^va)<(-2147483648^E)?1:0)&&(E=va,U^=-2147483648,ma^=-2147483648,U===ma?(-2147483648^x)>(-2147483648^S):U>ma))continue a;break}}if(E=0!==h){pf();var E=a,x=f-k|0,ma=p,S=k,U=h,Ia;Ia=0;var $a;$a=0;va=-1+S|0;if(!(0>=S))for(ga=0;;){var ub=ga;qf();var vb=ma.m[ub],Mb=65535&vb,vb=vb>>>16|0,Jc=65535&U,ab=U>>>16|0,fc=da(Mb,
+Jc),Jc=da(vb,Jc),Cc=da(Mb,ab),Mb=fc+((Jc+Cc|0)<<16)|0,fc=(fc>>>16|0)+Cc|0,ab=(da(vb,ab)+(fc>>>16|0)|0)+(((65535&fc)+Jc|0)>>>16|0)|0,vb=Mb+Ia|0;Ia=(-2147483648^vb)<(-2147483648^Mb)?1+ab|0:ab;ab=E.m[x+ub|0];vb=ab-vb|0;ab=(-2147483648^vb)>(-2147483648^ab)?-1:0;Mb=$a;$a=Mb>>31;Mb=vb+Mb|0;$a=(-2147483648^Mb)<(-2147483648^vb)?1+(ab+$a|0)|0:ab+$a|0;E.m[x+ub|0]=Mb;if(ga===va)break;ga=1+ga|0}U=E.m[x+S|0];ma=U-Ia|0;U=(-2147483648^ma)>(-2147483648^U)?-1:0;ga=$a;va=ga>>31;ga=ma+ga|0;E.m[x+S|0]=ga;E=0!==((-2147483648^
+ga)<(-2147483648^ma)?1+(U+va|0)|0:U+va|0)}if(E&&(h=-1+h|0,ga=va=0,E=-1+k|0,!(0>=k)))for(x=0;;){S=x;U=a.m[(f-k|0)+S|0];ma=U+p.m[S]|0;U=(-2147483648^ma)<(-2147483648^U)?1:0;ma=va+ma|0;U=(-2147483648^ma)<(-2147483648^va)?1+(ga+U|0)|0:ga+U|0;va=ma;ga=U;a.m[(f-k|0)+S|0]=va;va=ga;ga=0;if(x===E)break;x=1+x|0}null!==b&&(b.m[d]=h);f=-1+f|0;d=-1+d|0}return 0!==t?(wba(gf(),p,k,a,0,t),p):(Oa(a,0,p,0,k),a)}
+function zba(a,b,d,e,f){a=0;for(e=-1+e|0;0<=e;){var h=a;a=d.m[e];var k=Ra(),h=mf(k,a,h,f,0),k=k.Rb,p=65535&h,t=h>>>16|0,x=65535&f,E=f>>>16|0,S=da(p,x),x=da(t,x),p=da(p,E),S=S+((x+p|0)<<16)|0;da(k,f);da(t,E);a=a-S|0;b.m[e]=h;e=-1+e|0}return a}of.prototype.$classData=g({CZ:0},!1,"java.math.Division$",{CZ:1,d:1});var tf=void 0;function pf(){tf||(tf=(new of).b());return tf}function vf(){}vf.prototype=new l;vf.prototype.constructor=vf;vf.prototype.b=function(){return this};
+function wf(a,b,d,e){for(var f=la(Wa(db),[b]),h=0,k=0;h<e;){var p=a.m[h],t=p-d.m[h]|0,p=(-2147483648^t)>(-2147483648^p)?-1:0,x=k,k=x>>31,x=t+x|0,t=(-2147483648^x)<(-2147483648^t)?1+(p+k|0)|0:p+k|0;f.m[h]=x;k=t;h=1+h|0}for(;h<b;)d=a.m[h],t=k,e=t>>31,t=d+t|0,d=(-2147483648^t)<(-2147483648^d)?1+e|0:e,f.m[h]=t,k=d,h=1+h|0;return f}function xf(a,b,d,e){for(a=-1+e|0;0<=a&&b.m[a]===d.m[a];)a=-1+a|0;return 0>a?0:(-2147483648^b.m[a])<(-2147483648^d.m[a])?-1:1}
+function yf(a,b,d,e){var f=la(Wa(db),[1+b|0]),h=1,k=a.m[0],p=k+d.m[0]|0;f.m[0]=p;k=(-2147483648^p)<(-2147483648^k)?1:0;if(b>=e){for(;h<e;){var t=a.m[h],p=t+d.m[h]|0,t=(-2147483648^p)<(-2147483648^t)?1:0,k=p+k|0,p=(-2147483648^k)<(-2147483648^p)?1+t|0:t;f.m[h]=k;k=p;h=1+h|0}for(;h<b;)d=a.m[h],e=d+k|0,d=(-2147483648^e)<(-2147483648^d)?1:0,f.m[h]=e,k=d,h=1+h|0}else{for(;h<b;)t=a.m[h],p=t+d.m[h]|0,t=(-2147483648^p)<(-2147483648^t)?1:0,k=p+k|0,p=(-2147483648^k)<(-2147483648^p)?1+t|0:t,f.m[h]=k,k=p,h=1+
+h|0;for(;h<e;)a=d.m[h],b=a+k|0,a=(-2147483648^b)<(-2147483648^a)?1:0,f.m[h]=b,k=a,h=1+h|0}0!==k&&(f.m[h]=k);return f}
+function zf(a,b,d){a=b.Vb;var e=d.Vb,f=b.cc,h=d.cc;if(0===a)return d;if(0===e)return b;if(2===(f+h|0)){b=b.Ab.m[0];d=d.Ab.m[0];if(a===e)return e=b+d|0,d=(-2147483648^e)<(-2147483648^b)?1:0,0===d?(new af).ia(a,e):$e(new af,a,2,Af(Bf(),e,(new w).f([d])));e=cf();0>a?(a=b=d-b|0,d=(-2147483648^b)>(-2147483648^d)?-1:0):(a=d=b-d|0,d=(-2147483648^d)>(-2147483648^b)?-1:0);return Cf(e,(new Vb).ia(a,d))}if(a===e)e=f>=h?yf(b.Ab,f,d.Ab,h):yf(d.Ab,h,b.Ab,f);else{var k=f!==h?f>h?1:-1:xf(0,b.Ab,d.Ab,f);if(0===k)return cf().Hj;
+1===k?e=wf(b.Ab,f,d.Ab,h):(d=wf(d.Ab,h,b.Ab,f),a=e,e=d)}a=$e(new af,a|0,e.m.length,e);bf(a);return a}
+function Df(a,b,d){var e=b.Vb;a=d.Vb;var f=b.cc,h=d.cc;if(0===a)return b;if(0===e)return Aba(d);if(2===(f+h|0))return b=b.Ab.m[0],f=0,d=d.Ab.m[0],h=0,0>e&&(e=b,b=-e|0,f=0!==e?~f:-f|0),0>a&&(a=d,e=h,d=-a|0,h=0!==a?~e:-e|0),a=cf(),e=b,b=f,f=h,d=e-d|0,Cf(a,(new Vb).ia(d,(-2147483648^d)>(-2147483648^e)?-1+(b-f|0)|0:b-f|0));var k=f!==h?f>h?1:-1:xf(Ef(),b.Ab,d.Ab,f);if(e===a&&0===k)return cf().Hj;-1===k?(d=e===a?wf(d.Ab,h,b.Ab,f):yf(d.Ab,h,b.Ab,f),a=-a|0):(d=e===a?wf(b.Ab,f,d.Ab,h):yf(b.Ab,f,d.Ab,h),a=
+e);a=$e(new af,a|0,d.m.length,d);bf(a);return a}vf.prototype.$classData=g({DZ:0},!1,"java.math.Elementary$",{DZ:1,d:1});var Ff=void 0;function Ef(){Ff||(Ff=(new vf).b());return Ff}function Gf(){this.Ph=0;this.Qq=null}Gf.prototype=new l;Gf.prototype.constructor=Gf;Gf.prototype.o=function(a){return a&&a.$classData&&a.$classData.n.wH?this.Ph===a.Ph?this.Qq===a.Qq:!1:!1};Gf.prototype.k=function(){return"precision\x3d"+this.Ph+" roundingMode\x3d"+this.Qq};Gf.prototype.r=function(){return this.Ph<<3|this.Qq.yG};
+Gf.prototype.$classData=g({wH:0},!1,"java.math.MathContext",{wH:1,d:1});function Hf(){this.QG=null}Hf.prototype=new l;Hf.prototype.constructor=Hf;Hf.prototype.b=function(){If=this;Jf();var a=Kf().Hw,b=new Gf;b.Ph=34;b.Qq=a;this.QG=b;Jf();Kf();Jf();Kf();Jf();Kf();return this};Hf.prototype.$classData=g({EZ:0},!1,"java.math.MathContext$",{EZ:1,d:1});var If=void 0;function Jf(){If||(If=(new Hf).b());return If}function Lf(){this.lo=this.mo=this.vC=null}Lf.prototype=new l;Lf.prototype.constructor=Lf;
+Lf.prototype.b=function(){Mf=this;this.vC=Bba(10,10);Bba(14,5);this.mo=la(Wa(Ue),[32]);this.lo=la(Wa(Ue),[32]);var a,b;a=1;for(var d=b=0;;){var e=d;if(18>=e){qf().lo.m[e]=Cf(cf(),(new Vb).ia(a,b));var f=qf().mo,h=cf(),k=a,p=b;f.m[e]=Cf(h,(new Vb).ia(0===(32&e)?k<<e:0,0===(32&e)?(k>>>1|0)>>>(31-e|0)|0|p<<e:k<<e));e=a;a=e>>>16|0;e=da(5,65535&e);f=da(5,a);a=e+(f<<16)|0;e=(e>>>16|0)+f|0;b=da(5,b)+(e>>>16|0)|0}else qf().lo.m[e]=Nf(qf().lo.m[-1+e|0],qf().lo.m[1]),qf().mo.m[e]=Nf(qf().mo.m[-1+e|0],cf().Mp);
+if(31===d)break;d=1+d|0}return this};
+function Cba(a,b,d){var e,f=-1+b|0;if(!(0>=b))for(var h=0;;){var k=h;e=0;var p=1+k|0,t=-1+b|0;if(!(p>=b))for(;;){var x=p;qf();var E=a.m[k],S=a.m[x],U=d.m[k+x|0],ga=65535&E,E=E>>>16|0,ma=65535&S,S=S>>>16|0,va=da(ga,ma),ma=da(E,ma),Ia=da(ga,S),ga=va+((ma+Ia|0)<<16)|0,va=(va>>>16|0)+Ia|0,E=(da(E,S)+(va>>>16|0)|0)+(((65535&va)+ma|0)>>>16|0)|0,U=ga+U|0,E=(-2147483648^U)<(-2147483648^ga)?1+E|0:E;e=U+e|0;U=(-2147483648^e)<(-2147483648^U)?1+E|0:E;d.m[k+x|0]=e;e=U;if(p===t)break;p=1+p|0}d.m[k+b|0]=e;if(h===
+f)break;h=1+h|0}tba(gf(),d,d,b<<1);for(h=f=e=0;f<b;)p=a.m[f],x=a.m[f],t=d.m[h],k=e,e=65535&p,p=p>>>16|0,E=65535&x,x=x>>>16|0,U=da(e,E),E=da(p,E),S=da(e,x),e=U+((E+S|0)<<16)|0,U=(U>>>16|0)+S|0,p=(da(p,x)+(U>>>16|0)|0)+(((65535&U)+E|0)>>>16|0)|0,t=e+t|0,p=(-2147483648^t)<(-2147483648^e)?1+p|0:p,k=t+k|0,t=(-2147483648^k)<(-2147483648^t)?1+p|0:p,d.m[h]=k,h=1+h|0,k=t+d.m[h]|0,t=(-2147483648^k)<(-2147483648^t)?1:0,d.m[h]=k,e=t,f=1+f|0,h=1+h|0;return d}
+function Bba(a,b){var d=la(Wa(db),[-1+a|0]);a=[];var e,f=e=1;a.push(null===f?0:f);f=0;for(d=d.m.length;f<d;){var h=e=da(e|0,b);a.push(null===h?0:h);f=1+f|0}return ka(Wa(db),a)}
+function Of(a,b,d){if(d.cc>b.cc)var e=d;else e=b,b=d;d=e;var f=b;if(63>f.cc){var h=d.cc,e=f.cc;b=h+e|0;a=d.Vb!==f.Vb?-1:1;if(2===b){e=d.Ab.m[0];b=f.Ab.m[0];d=65535&e;var e=e>>>16|0,k=65535&b;b=b>>>16|0;var f=da(d,k),k=da(e,k),p=da(d,b);d=f+((k+p|0)<<16)|0;f=(f>>>16|0)+p|0;e=(da(e,b)+(f>>>16|0)|0)+(((65535&f)+k|0)>>>16|0)|0;a=0===e?(new af).ia(a,d):$e(new af,a,2,Af(Bf(),d,(new w).f([e])))}else{d=d.Ab;f=f.Ab;k=la(Wa(db),[b]);if(0!==h&&0!==e)if(1===h)k.m[e]=Pf(0,k,f,e,d.m[0]);else if(1===e)k.m[h]=Pf(0,
+k,d,h,f.m[0]);else if(d===f&&h===e)Cba(d,h,k);else if(p=-1+h|0,!(0>=h))for(h=0;;){var t=h,x;x=0;var E=d.m[t],S=-1+e|0;if(!(0>=e))for(var U=0;;){var ga=U;qf();var ma=f.m[ga],va=k.m[t+ga|0],Ia=65535&E,$a=E>>>16|0,ub=65535&ma,ma=ma>>>16|0,vb=da(Ia,ub),ub=da($a,ub),Mb=da(Ia,ma),Ia=vb+((ub+Mb|0)<<16)|0,vb=(vb>>>16|0)+Mb|0,$a=(da($a,ma)+(vb>>>16|0)|0)+(((65535&vb)+ub|0)>>>16|0)|0,va=Ia+va|0,$a=(-2147483648^va)<(-2147483648^Ia)?1+$a|0:$a;x=va+x|0;va=(-2147483648^x)<(-2147483648^va)?1+$a|0:$a;k.m[t+ga|0]=
+x;x=va;if(U===S)break;U=1+U|0}k.m[t+e|0]=x;if(h===p)break;h=1+h|0}a=$e(new af,a,b,k);bf(a)}return a}e=(-2&d.cc)<<4;k=Qf(d,e);p=Qf(f,e);b=Rf(k,e);h=Df(Ef(),d,b);b=Rf(p,e);f=Df(Ef(),f,b);d=Of(a,k,p);b=Of(a,h,f);a=Of(a,Df(Ef(),k,h),Df(Ef(),f,p));f=d;a=zf(Ef(),a,f);a=zf(Ef(),a,b);a=Rf(a,e);e=d=Rf(d,e<<1);a=zf(Ef(),e,a);return zf(Ef(),a,b)}
+function Pf(a,b,d,e,f){var h;h=0;a=-1+e|0;if(!(0>=e))for(e=0;;){var k=e;qf();var p=d.m[k],t=65535&p,p=p>>>16|0,x=65535&f,E=f>>>16|0,S=da(t,x),x=da(p,x),U=da(t,E),t=S+((x+U|0)<<16)|0,S=(S>>>16|0)+U|0,p=(da(p,E)+(S>>>16|0)|0)+(((65535&S)+x|0)>>>16|0)|0;h=t+h|0;p=(-2147483648^h)<(-2147483648^t)?1+p|0:p;b.m[k]=h;h=p;if(e===a)break;e=1+e|0}return h}
+function Sf(a,b){var d=a.mo.m.length,e=d>>31,f=b.qa;if(f===e?(-2147483648^b.la)<(-2147483648^d):f<e)return a.mo.m[b.la];d=b.qa;if(0===d?-2147483598>=(-2147483648^b.la):0>d)return Tf(cf().Mp,b.la);d=b.qa;if(0===d?-1>=(-2147483648^b.la):0>d)return Rf(Tf(a.lo.m[1],b.la),b.la);for(var h=Tf(a.lo.m[1],2147483647),d=h,f=b.qa,k=-2147483647+b.la|0,e=k,k=1>(-2147483648^k)?f:-1+f|0,f=Uf(Ra(),b.la,b.qa,2147483647,0);;){var p=e,t=k;if(0===t?-1<(-2147483648^p):0<t)d=Nf(d,h),e=-2147483647+e|0,k=1>(-2147483648^e)?
+k:-1+k|0;else break}d=Nf(d,Tf(a.lo.m[1],f));d=Rf(d,2147483647);a=b.qa;e=b=-2147483647+b.la|0;for(k=1>(-2147483648^b)?a:-1+a|0;;)if(b=e,a=k,0===a?-1<(-2147483648^b):0<a)d=Rf(d,2147483647),b=k,a=-2147483647+e|0,b=1>(-2147483648^a)?b:-1+b|0,e=a,k=b;else break;return Rf(d,f)}Lf.prototype.$classData=g({FZ:0},!1,"java.math.Multiplication$",{FZ:1,d:1});var Mf=void 0;function qf(){Mf||(Mf=(new Lf).b());return Mf}function Vf(){this.gj=this.YV=null;this.a=0}Vf.prototype=new l;Vf.prototype.constructor=Vf;
+Vf.prototype.b=function(){Xf=this;this.YV="\x3cBREEDS?\x3e";this.a=(1|this.a)<<24>>24;B();var a=(new w).f([(new $f).vd("CREATE-ORDERED-\x3cBREEDS\x3e",ag(),"_createorderedturtles"),(new $f).vd("CREATE-\x3cBREEDS\x3e",ag(),"_createturtles"),(new $f).vd("HATCH-\x3cBREEDS\x3e",ag(),"_hatch"),(new $f).vd("SPROUT-\x3cBREEDS\x3e",ag(),"_sprout"),(new $f).vd("\x3cBREEDS\x3e",bg(),"_breed"),(new $f).vd("\x3cBREEDS\x3e-AT",bg(),"etc._breedat"),(new $f).vd("\x3cBREEDS\x3e-HERE",bg(),"etc._breedhere"),(new $f).vd("\x3cBREEDS\x3e-ON",
+bg(),"etc._breedon"),(new $f).vd("\x3cBREED\x3e",bg(),"etc._breedsingular"),(new $f).vd("IS-\x3cBREED\x3e?",bg(),"etc._isbreed"),(new cg).vd("CREATE-\x3cBREEDS\x3e-FROM",ag(),"etc._createlinksfrom"),(new cg).vd("CREATE-\x3cBREED\x3e-FROM",ag(),"etc._createlinkfrom"),(new cg).vd("CREATE-\x3cBREEDS\x3e-TO",ag(),"etc._createlinksto"),(new dg).vd("CREATE-\x3cBREEDS\x3e-WITH",ag(),"etc._createlinkswith"),(new cg).vd("CREATE-\x3cBREED\x3e-TO",ag(),"etc._createlinkto"),(new dg).vd("CREATE-\x3cBREED\x3e-WITH",
+ag(),"etc._createlinkwith"),(new eg).vd("IN-\x3cBREED\x3e-FROM",bg(),"etc._inlinkfrom"),(new eg).vd("IN-\x3cBREED\x3e-NEIGHBOR?",bg(),"etc._inlinkneighbor"),(new eg).vd("IN-\x3cBREED\x3e-NEIGHBORS",bg(),"etc._inlinkneighbors"),(new eg).vd("IS-\x3cBREED\x3e?",bg(),"etc._isbreed"),(new eg).vd("\x3cBREEDS\x3e",bg(),"etc._linkbreed"),(new eg).vd("\x3cBREED\x3e",bg(),"etc._linkbreedsingular"),(new eg).vd("\x3cBREED\x3e-NEIGHBOR?",bg(),"etc._linkneighbor"),(new eg).vd("\x3cBREED\x3e-NEIGHBORS",bg(),"etc._linkneighbors"),
+(new eg).vd("\x3cBREED\x3e-WITH",bg(),"etc._linkwith"),(new eg).vd("MY-IN-\x3cBREEDS\x3e",bg(),"etc._myinlinks"),(new eg).vd("MY-\x3cBREEDS\x3e",bg(),"etc._mylinks"),(new eg).vd("MY-OUT-\x3cBREEDS\x3e",bg(),"etc._myoutlinks"),(new eg).vd("OUT-\x3cBREED\x3e-NEIGHBOR?",bg(),"etc._outlinkneighbor"),(new eg).vd("OUT-\x3cBREED\x3e-NEIGHBORS",bg(),"etc._outlinkneighbors"),(new eg).vd("OUT-\x3cBREED\x3e-TO",bg(),"etc._outlinkto")]),b=B().s;this.gj=L(a,b);this.a=(2|this.a)<<24>>24;return this};
+function Dba(a,b){return Qb(Ha(),Qb(Ha(),b.Pd,"\x3cBREEDS\x3e",a.Dl.wa),"\x3cBREED\x3e",a.Ff.wa)}function fg(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/BreedIdentifierHandler.scala: 16");return a.gj}function Eba(a,b,d){return b.Og&&b.Ng?(new gg).zu(a,d):b.Og?(new hg).zu(a,d):(new ig).zu(a,d)}
+function saa(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/BreedIdentifierHandler.scala: 14");return a.YV}function Fba(a,b){var d=fg(a);a=Gba(a,b,bg()).Ij(m(new n,function(a,b){return function(a){return Dba(b,a)}}(a,b)));b=B();return d.jc(a,b.s)}
+function Gba(a,b,d){return Eba(d,b,m(new n,function(a){return function(b){var d=u((new v).G((new w).f(["^","$"])),(new w).f([saa(a)]));if(null===b)throw(new ye).b();var k=jg(),d=kg(k,d);return!Hba(lg(new mg,d,b,La(b)))}}(a)))}function Iba(a,b){var d=fg(a);a=Gba(a,b,ag()).Ij(m(new n,function(a,b){return function(a){return Dba(b,a)}}(a,b)));b=B();return d.jc(a,b.s)}
+function Jba(a,b,d){return fg(a).Jc().fj(m(new n,function(a,b,d){return function(a){var e=b.Y,e=ng(a.py(),e);if(e.z())t=!1;else if(null!==e.X())var t=e.X(),t=0===og(t,1);else t=!1;if(t){var e=e.X().W(0),t=(new Kc).mg(a.vx(d)),x=new pg;if(null===a)throw ug(vg(),null);x.Va=a;x.Eq=e;a=wg(t,x)}else a=F();return a.ob()}}(a,b,d)),(xg(),(new yg).b())).Cg()}Vf.prototype.$classData=g({PZ:0},!1,"org.nlogo.core.BreedIdentifierHandler$",{PZ:1,d:1});var Xf=void 0;
+function Rb(){Xf||(Xf=(new Vf).b());return Xf}function zg(){}zg.prototype=new l;zg.prototype.constructor=zg;zg.prototype.b=function(){return this};function Kba(a,b){if(Ag(b))return(new Bg).c(b);if("number"===typeof b)return(new Cg).hE(b);if("boolean"===typeof b)return(new Dg).Hu(b);if(Eg(b))return Lba(b);throw ug(vg(),(new Fg).c(u((new v).G((new w).f(["Invalid chooser option ",""])),(new w).f([b]))));}zg.prototype.$classData=g({UZ:0},!1,"org.nlogo.core.Chooseable$",{UZ:1,d:1});var Gg=void 0;
+function Mba(){Gg||(Gg=(new zg).b());return Gg}function Hg(){this.LG=null;this.KS=this.FG=0;this.MG=null;this.a=0}Hg.prototype=new l;Hg.prototype.constructor=Hg;
+Hg.prototype.b=function(){Ig=this;var a=(new w).f("gray red orange brown yellow green lime turquoise cyan sky blue violet magenta pink black white".split(" ")),b=a.pa.length|0,b=la(Wa(qa),[b]),d;d=0;for(a=Ve(new We,a,0,a.pa.length|0);a.ta();){var e=a.ma();b.m[d]=e;d=1+d|0}this.LG=b;this.a=(1|this.a)<<24>>24;this.FG=0;this.a=(2|this.a)<<24>>24;this.KS=9.9;this.a=(4|this.a)<<24>>24;a=(new w).f([5,15,25,35,45,55,65,75,85,95,105,115,125,135,Nba(this),Oba(this)]);b=a.pa.length|0;b=la(Wa(gb),[b]);d=0;for(a=
+Ve(new We,a,0,a.pa.length|0);a.ta();)e=a.ma(),b.m[d]=+e,d=1+d|0;this.MG=b;this.a=(8|this.a)<<24>>24;return this};function Oba(a){if(0===(4&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/ColorConstants.scala: 17");return a.KS}
+function Pba(){var a=Jg();if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/ColorConstants.scala: 8");return a.LG}function Nba(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/ColorConstants.scala: 16");return a.FG}
+function Qba(a,b){if(0===(8&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/ColorConstants.scala: 19");return a.MG.m[b]}Hg.prototype.$classData=g({YZ:0},!1,"org.nlogo.core.ColorConstants$",{YZ:1,d:1});var Ig=void 0;function Jg(){Ig||(Ig=(new Hg).b());return Ig}
+var Sba=function Rba(b,d){if(Ag(d))return u((new v).G((new w).f(['"','"'])),(new w).f([Kg(Lg(),d)]));if("boolean"===typeof d)return d?"true":"false";if(Mg(d)){b=function(b){return function(d){return Rba(b,d)}}(b);var e=B().s;if(e===B().s)if(d===y())b=y();else{var e=d.$(),f=e=Ng(new Og,b(e),y());for(d=d.aa();d!==y();){var h=d.$(),h=Ng(new Og,b(h),y()),f=f.Ia=h;d=d.aa()}b=e}else{for(e=Mc(d,e);!d.z();)f=d.$(),e.Qa(b(f)),d=d.aa();b=e.Da()}return b.Mc("["," ","]")}if(Eg(d)){e=B().s;d=L(d,e);b=function(b){return function(d){return Rba(b,
+d)}}(b);e=B().s;if(e===B().s)if(d===y())b=y();else{e=d.$();f=e=Ng(new Og,b(e),y());for(d=d.aa();d!==y();)h=d.$(),h=Ng(new Og,b(h),y()),f=f.Ia=h,d=d.aa();b=e}else{for(e=Mc(d,e);!d.z();)f=d.$(),e.Qa(b(f)),d=d.aa();b=e.Da()}return b.Mc("["," ","]")}if(null!==d)return na(d);throw(new q).j(d);};function Pg(){this.g=null}Pg.prototype=new l;Pg.prototype.constructor=Pg;Pg.prototype.Jf=function(a){this.g=a;return this};Pg.prototype.$classData=g({f_:0},!1,"org.nlogo.core.ErrorSource",{f_:1,d:1});
+function Qg(){}Qg.prototype=new l;Qg.prototype.constructor=Qg;Qg.prototype.b=function(){return this};function Rg(a,b,d,e){throw(new hd).Bs(a,b,d,e);}Qg.prototype.$classData=g({g_:0},!1,"org.nlogo.core.Fail$",{g_:1,d:1});var Tba=void 0;function Sg(){Tba||(Tba=(new Qg).b())}function Tg(){this.eS=null;this.a=!1}Tg.prototype=new l;Tg.prototype.constructor=Tg;Tg.prototype.b=function(){Ug=this;this.eS=Vg(Wg(),y());this.a=!0;return this};
+function bh(){var a;Ug||(Ug=(new Tg).b());a=Ug;if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/FrontEndInterface.scala: 12");return a.eS}Tg.prototype.$classData=g({h_:0},!1,"org.nlogo.core.FrontEndInterface$",{h_:1,d:1});var Ug=void 0;function ch(){this.Oo=null;this.ya=!1}ch.prototype=new l;ch.prototype.constructor=ch;ch.prototype.b=function(){return this};
+function dh(){var a;eh||(eh=(new ch).b());a=eh;if(!a.ya&&!a.ya){for(var b=[(new A).e("org.nlogo.prim.$common.invalidAgentKind.alternative","this code can''t be run by {0}, only {1}"),(new A).e("org.nlogo.prim.$common.agentKind.link","a link"),(new A).e("org.nlogo.prim._askconcurrent.onlyObserverCanAskAllTurtles","only the observer can ASK the set of all turtles"),(new A).e("org.nlogo.prim.etc._resizeworld.worldMustIncludeOrigin","You must include the point (0, 0) in the world."),(new A).e("org.nlogo.prim.etc._linkheading.noLinkHeadingWithSameEndpoints",
+"There is no heading of a link whose endpoints are in the same position."),(new A).e("org.nlogo.agent.Agent.breedDoesNotOwnVariable","{0} breed does not own variable {1}"),(new A).e("org.nlogo.agent.ChooserConstraint.invalidValue","Value must be one of: {0}"),(new A).e("org.nlogo.prim.$common.invalidAgentKind.simple","this code can''t be run by {0}"),(new A).e("org.nlogo.prim._min.cantFindMinOfListWithNoNumbers","Can''t find the minimum of a list with no numbers: {0}"),(new A).e("org.nlogo.prim.$common.paramOutOfBounds",
+"{0} is not in the range 0.0 to 1.0"),(new A).e("org.nlogo.prim.etc._myself.noAgentMyself","There is no agent for MYSELF to refer to."),(new A).e("org.nlogo.prim.etc.$common.emptyString","String is empty."),(new A).e("org.nlogo.agent.ImportPatchColors.unsupportedImageFormat","The following file is not in a supported image format: {0}"),(new A).e("org.nlogo.prim.etc.$common.notThatManyAgentsExist","Requested {0} random agents from a set of only {1} agents."),(new A).e("org.nlogo.plot.noPlotSelected",
+"There is no current plot. Please select a current plot using the set-current-plot command."),(new A).e("org.nlogo.prim.$common.expectedBooleanValue","{0} expected a true/false value from {1}, but got {2} instead."),(new A).e("org.nlogo.prim.etc._stop.notAllowedInsideToReport","{0} is not allowed inside TO-REPORT."),(new A).e("org.nlogo.prim._mean.cantFindMeanOfNonNumbers","Can''t find the mean of a list that contains non-numbers : {0} is a {1}."),(new A).e("org.nlogo.prim.etc._sublist.endIsGreaterThanListSize",
+"{0} is greater than the length of the input list ({1})."),(new A).e("org.nlogo.prim.etc._runresult.failedToReportResult","Failed to report a result."),(new A).e("org.nlogo.prim.etc._randomgamma.noNegativeInputs","Both inputs to {0} must be positive."),(new A).e("org.nlogo.prim._max.cantFindMaxOfListWithNoNumbers","Can''t find the maximum of a list with no numbers: {0}"),(new A).e("org.nlogo.prim.etc.$common.cantTakeLogarithmOf","Can''t take logarithm of {0}."),(new A).e("org.nlogo.prim.$common.turtleCantLinkToSelf",
+"A turtle cannot link to itself."),(new A).e("org.nlogo.prim.etc._standarddeviation.needListGreaterThanOneItem","Can''t find the standard deviation of a list without at least two numbers: {0}"),(new A).e("org.nlogo.agent.Agent.cantSetUnknownVariable","Unknown variable {0}."),(new A).e("fileformat.invalidversion",'Invalid NetLogo file. Expected "{0}" formatted model to have version compatible with {1}, but this model had version {2}'),(new A).e("org.nlogo.agent.Link.cantSetBreedToNonLinkBreedAgentSet",
+"You can''t set BREED to a non-link-breed agentset."),(new A).e("org.nlogo.agent.Turtle.patchBeyondLimits","Cannot get patch beyond limits of current world."),(new A).e("org.nlogo.prim.etc.$common.requestMoreItemsThanInList","Requested {0} random items from a list of length {1}."),(new A).e("org.nlogo.prim.etc.$common.syntaxError","Syntax Error: {0}"),(new A).e("org.nlogo.prim.etc._otherend.onlyTurtleCanGetLinkEnd","Only a turtle can get the OTHER-END of a link."),(new A).e("org.nlogo.agent.Agent.rgbValueError",
+"RGB values must be 0-255"),(new A).e("compiler.LocalsVisitor.notDefined","Nothing named {0} has been defined."),(new A).e("org.nlogo.agent.Protractor.noHeadingFromAgentToSelf","No heading is defined from an agent to itself."),(new A).e("org.nlogo.prim.etc._otherend.incorrectLink","{0} is not linked by {1}."),(new A).e("org.nlogo.prim.etc._atpoints.invalidListOfPoints","Invalid list of points: {0}"),(new A).e("org.nlogo.agent.Agent.wrongTypeOnSetError","can''t set {0} variable {1} to non-{2} {3}"),
+(new A).e("org.nlogo.agent.Topology.cantMoveTurtleBeyondWorldEdge","Cannot move turtle beyond the world''s edge."),(new A).e("org.nlogo.prim.$common.agentKind.observer","the observer"),(new A).e("org.nlogo.prim.etc._otherend.onlyLinkCanGetTurtleEnd","Only a link can get the OTHER-END from a turtle."),(new A).e("org.nlogo.prim._lessthan.cantUseLessthanOnDifferentArgs","The \x3c operator can only be used on two numbers, two strings, or two agents of the same type, but not on {0} and {1}."),(new A).e("org.nlogo.prim.etc._randomNormal.secondInputNotNegative",
+"random-normal''s second input can''t be negative."),(new A).e("org.nlogo.prim.etc.$common.emptyListInput","{0} got an empty list as input."),(new A).e("org.nlogo.prim.etc._setDefaultShape.notADefinedTurtleShape",'"{0}" is not a currently defined turtle shape.'),(new A).e("org.nlogo.prim.etc._linkset.invalidLAgentsetTypeInputToList","List inputs to {0} must only contain link, link agentset, or list elements.  The list {1} contained a different type agentset: {2}."),(new A).e("org.nlogo.prim.etc.$common.noNegativeAngle",
+"{0} cannot take a negative angle."),(new A).e("org.nlogo.agent.Agent.rgbListSizeError.3or4","An rgb list must contain 3 or 4 numbers 0-255"),(new A).e("org.nlogo.prim.etc._range.zeroStep","The step-size for range must be non-zero."),(new A).e("org.nlogo.agent.Patch.cantAccessTurtleOrLinkWithoutSpecifyingAgent","A patch can''t access a turtle or link variable without specifying which agent."),(new A).e("org.nlogo.prim.etc.median.cantFindMedianOfListWithNoNumbers","Can''t find the median of a list with no numbers: {0}."),
+(new A).e("org.nlogo.prim.etc._patchset.listInputNonPatchAgentset","List inputs to {0} must only contain patch, patch agentset, or list elements.  The list {1} contained a different type agentset: {2}."),(new A).e("org.nlogo.prim.etc._sublist.startIsLessThanZero","{0} is less than zero."),(new A).e("org.nlogo.prim.etc._setdefaultshape.cantSetDefaultShapeOfPatch","Cannot set the default shape of patches, because patches do not have shapes."),(new A).e("org.nlogo.prim.etc._layoutcircle.patchesImmovable",
+"Patches are immovable."),(new A).e("org.nlogo.agent.Protractor.noHeadingFromPointToSelf","No heading is defined from a point ({0},{1}) to that same point."),(new A).e("org.nlogo.prim.etc._patchset.listInputNonPatch","List inputs to {0} must only contain patch, patch agentset, or list elements.  The list {1} contained {2} which is NOT a patch or patch agentset."),(new A).e("org.nlogo.prim.etc._setDefaultShape.notADefinedLinkShape",'"{0}" is not a currently defined link shape.'),(new A).e("compiler.StructureParser.includeNotFound",
+"Could not find {0}"),(new A).e("org.nlogo.prim.etc._sublist.endIsLessThanStart","{0} is less than {1}."),(new A).e("org.nlogo.agent.Agent.rgbListSizeError.3","An rgb list must contain 3 numbers 0-255"),(new A).e("org.nlogo.prim.$common.onlyObserverCanAskAllPatches","Only the observer can ASK the set of all patches."),(new A).e("org.nlogo.prim.$common.agentKind.turtle","a turtle"),(new A).e("org.nlogo.prim.etc.$common.emptyStringInput","{0} got an empty string as input."),(new A).e("org.nlogo.prim.etc._log.notAValidBase",
+"{0} isn''t a valid base for a logarithm."),(new A).e("org.nlogo.prim.etc.$common.noNegativeNumber","{0} cannot take a negative number."),(new A).e("org.nlogo.prim.etc.$common.noNegativeRadius","{0} cannot take a negative radius."),(new A).e("org.nlogo.prim.etc._setxy.pointOutsideWorld","The point [ {0} , {1} ] is outside of the boundaries of the world and wrapping is not permitted in one or both directions."),(new A).e("compiler.StructureConverter.noBreed",'There is no breed "{0}"'),(new A).e("org.nlogo.prim.etc._tickadvance.noNegativeTickAdvances",
+"Cannot advance the tick counter by a negative amount."),(new A).e("compiler.TaskVisitor.notDefined","This special variable isn''t defined here."),(new A).e("org.nlogo.prim.etc._variance.listMustHaveMoreThanOneNumber","Can''t find the variance of a list without at least two numbers: {0}."),(new A).e("org.nlogo.prim.etc.$common.indexExceedsStringSize","Can''t find element {0} of the string {1}, which is only of length {2}."),(new A).e("org.nlogo.prim.$common.withExpectedBooleanValue","WITH expected a true/false value from {0}, but got {1} instead."),
+(new A).e("org.nlogo.prim.etc.$common.tickCounterNotStarted","The tick counter has not been started yet. Use RESET-TICKS."),(new A).e("org.nlogo.workspace.DefaultFileManager.canOnlyDeleteFiles","You can only delete files."),(new A).e("org.nlogo.$common.thatAgentIsDead","That {0} is dead."),(new A).e("org.nlogo.prim.etc.$common.noAngleGreaterThan360","{0} cannot take an angle greater than 360."),(new A).e("org.nlogo.agent.Link.cantHaveBreededAndUnbreededLinks","You cannot have both breeded and unbreeded links in the same world."),
+(new A).e("org.nlogo.agent.Patch.cantSetTurtleWithoutSpecifyingTurtle","A patch can''t set a turtle variable without specifying which turtle."),(new A).e("org.nlogo.prim.etc._linkset.invalidListInputs","List inputs to {0} must only contain link, link agentset, or list elements.  The list {1} contained {2} which is NOT a link or link agentset."),(new A).e("org.nlogo.prim._report.mustImmediatelyBeUsedInToReport","{0} must be immediately inside a TO-REPORT."),(new A).e("org.nlogo.prim.etc._turtleset.incorrectInputType",
+"List inputs to {0} must only contain turtle or turtle agentset elements.  The list {1} contained {2} which is NOT a turtle or turtle agentset."),(new A).e("org.nlogo.prim.$common.noSumOfListWithNonNumbers","Can''t find the sum of a list that contains non-numbers {0} is a {1}."),(new A).e("org.nlogo.prim.etc.atan.bothInputsCannotBeZero","atan is undefined when both inputs are zero."),(new A).e("org.nlogo.prim.etc.$common.expectedTurtleOrPatchButGotLink","Expected a turtle or a patch but got a link."),
+(new A).e("org.nlogo.prim.lambda.missingInputs","anonymous procedure expected {0} inputs, but only got {1}"),(new A).e("org.nlogo.workspace.DefaultFileManager.noOpenFile","No file has been opened."),(new A).e("org.nlogo.prim.etc._substring.endIsGreaterThanListSize","{0} is too big for {1}, which is only of length {2}."),(new A).e("org.nlogo.agent.Turtle.cantAccessLinkWithoutSpecifyingLink","A turtle can''t access a link variable without specifying which link."),(new A).e("org.nlogo.prim.etc.$common.emptyList",
+"List is empty."),(new A).e("org.nlogo.prim.$common.agentKind.patch","a patch"),(new A).e("org.nlogo.agent.Patch.cantAccessLinkVarWithoutSpecifyingLink","A patch can''t access a link variable without specifying which link."),(new A).e("org.nlogo.prim.etc.$common.divByZero","Division by zero."),(new A).e("org.nlogo.agent.Agent.shapeUndefined",'"{0}" is not a currently defined shape.'),(new A).e("org.nlogo.prim.etc.$common.expectedLastInputToBeLinkBreed","Expected the last input to be a link breed."),
+(new A).e("org.nlogo.prim._report.canOnlyUseInToReport","{0} can only be used inside TO-REPORT."),(new A).e("org.nlogo.prim.lambda.missingInput","anonymous procedure expected 1 input, but only got 0"),(new A).e("org.nlogo.prim._lessorequal.cannotCompareParameters","The \x3c\x3d operator can only be used on two numbers, two strings, or two agents of the same type, but not on {0} and {1}."),(new A).e("org.nlogo.prim.etc.$common.negativeIndex","{0} isn''t greater than or equal to zero."),(new A).e("org.nlogo.workspace.DefaultFileManager.cannotDeleteNonExistantFile",
+"You cannot delete a non-existent file."),(new A).e("org.nlogo.prim.etc._sqrt.squareRootIsImaginary","The square root of {0} is an imaginary number."),(new A).e("org.nlogo.prim._returnreport.reportNotCalledInReportProcedure","Reached end of reporter procedure without REPORT being called."),(new A).e("org.nlogo.prim.etc._foreach.listsMustBeSameLength","All the list arguments to FOREACH must be the same length."),(new A).e("org.nlogo.prim.etc._setdefaultshape.canOnlySetDefaultShapeOfEntireBreed","Can only set the default shape of all turtles , all links, or an entire breed."),
+(new A).e("compiler.CarefullyVisitor.badNesting","{0} cannot be used outside of CAREFULLY."),(new A).e("org.nlogo.agent.Turtle.cantChangeWho","You can''t change a turtle''s ID number."),(new A).e("org.nlogo.agent.Turtle.cantSetBreedToNonBreedAgentSet","You can''t set BREED to a non-breed agentset."),(new A).e("org.nlogo.agent.Agent.cantMoveToLink","You can''t move-to a link."),(new A).e("org.nlogo.prim.etc._exportoutput.emptyPath","Can''t export to empty pathname."),(new A).e("org.nlogo.prim._reduce.emptyListInvalidInput",
+"The list argument to 'reduce' must not be empty."),(new A).e("org.nlogo.prim.etc._turtleset.listInputsMustBeTurtleOrTurtleAgentset","List inputs to {0} must only contain turtle or turtle agentset elements.  The list {1} contained a different type agentset: {2}."),(new A).e("org.nlogo.prim.etc.$common.firstInputCantBeNegative","First input to {0} can''t be negative."),(new A).e("org.nlogo.prim._greaterthan.cannotCompareParameters","The \x3e operator can only be used on two numbers, two strings, or two agents of the same type, but not on {0} and {1}."),
+(new A).e("org.nlogo.agent.Patch.pcolorNotADouble","Pcolor is not a double."),(new A).e("org.nlogo.agent.Patch.cantAccessTurtleWithoutSpecifyingTurtle","A patch can''t access a turtle variable without specifying which turtle."),(new A).e("org.nlogo.agent.Patch.cantChangePatchCoordinates","You can''t change a patch''s coordinates."),(new A).e("org.nlogo.prim.etc._median.emptyList","Can''t find the median of a list with no numbers: {0}"),(new A).e("org.nlogo.$common.tooBigForInt","{0} is too large to be represented exactly as an integer in NetLogo."),
+(new A).e("org.nlogo.prim.$common.onlyObserverCanAskAllTurtles","Only the observer can ASK the set of all turtles."),(new A).e("org.nlogo.agent.Agent.notADoubleVariable","{0} is not a double variable."),(new A).e("org.nlogo.agent.BooleanConstraint.bool","Value must be a boolean."),(new A).e("org.nlogo.prim.etc.$common.indexExceedsListSize","Can''t find element {0} of the list {1}, which is only of length {2}."),(new A).e("org.nlogo.prim._greaterorequal.cannotCompareParameters","The \x3e\x3d operator can only be used on two numbers, two strings, or two agents of the same type, but not on {0} and {1}."),
+(new A).e("compiler.SetVisitor.notSettable","This isn''t something you can use \"set\" on."),(new A).e("compiler.LetVariable.notDefined","Nothing named {0} has been defined.")],d=dc(new ec,gc()),e=0,f=b.length|0;e<f;)hc(d,b[e]),e=1+e|0;b=new fh;b.im=d.Oa;a.Oo=b;a.ya=!0}return a.Oo}ch.prototype.$classData=g({j_:0},!1,"org.nlogo.core.I18N$",{j_:1,d:1});var eh=void 0;function fh(){this.im=null}fh.prototype=new l;fh.prototype.constructor=fh;
+fh.prototype.$classData=g({k_:0},!1,"org.nlogo.core.I18N$BundleKind",{k_:1,d:1});function gh(a){return a.K().Yb.toUpperCase()}function M(a){a.L(null);a.M(a.H().h);a.P(a.H().p)}function hh(a,b){var d=a.K();b.L(ih(d,b,d.Yb,d.kb));b.M(a.N());return b}function jh(){this.sV=null;this.a=!1}jh.prototype=new l;jh.prototype.constructor=jh;
+jh.prototype.b=function(){kh=this;var a="TO TO-REPORT END GLOBALS TURTLES-OWN LINKS-OWN PATCHES-OWN DIRECTED-LINK-BREED UNDIRECTED-LINK-BREED EXTENSIONS __INCLUDES".split(" ");if(0===(a.length|0))a=lh();else{for(var b=mh(new nh,lh()),d=0,e=a.length|0;d<e;)oh(b,a[d]),d=1+d|0;a=b.Oa}this.sV=a;this.a=!0;return this};jh.prototype.$classData=g({l_:0},!1,"org.nlogo.core.Keywords$",{l_:1,d:1});var kh=void 0;function ph(){}ph.prototype=new l;ph.prototype.constructor=ph;ph.prototype.b=function(){return this};
+ph.prototype.$classData=g({v_:0},!1,"org.nlogo.core.Nobody$",{v_:1,d:1});var qh=void 0;function rh(){qh||(qh=(new ph).b());return qh}function sh(){this.SV=this.iH=this.nH=this.mH=null;this.a=0}sh.prototype=new l;sh.prototype.constructor=sh;
+sh.prototype.b=function(){th=this;this.mH="Number too large";this.a=(1|this.a)<<24>>24;this.nH="is too large to be represented exactly as an integer in NetLogo";this.a=(2|this.a)<<24>>24;this.iH="Illegal number format";this.a=(4|this.a)<<24>>24;this.SV=(new Tb).$o("^-?[0-9]*(\\.[0-9]*)?([Ee]-?[0-9]+)?$",(new w).f([]));this.a=(8|this.a)<<24>>24;return this};
+function uh(a,b){try{var d=(new Sb).c(b).R.length|0;if(0<d){var e=0;45===(65535&(b.charCodeAt(e)|0))&&(e=1+e|0);e<d&&46===(65535&(b.charCodeAt(e)|0))&&(e=1+e|0);if(e<d)var f=65535&(b.charCodeAt(e)|0),h=Fh(Gh(),f);else h=!1}else h=!1;if(h){var k=Hh(Ih(),b);if(Infinity===k||-Infinity===k){oc();if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-js/src/main/core/NumberParser.scala: 12");return(new Jh).j(a.mH)}for(var p=(new Sb).c(".eE"),
+d=0;;){if(d<(p.R.length|0))var t=p.W(d),x=null===t?0:t.Y,E=(new Sb).c(b),S=(new Ke).Xa(x),U=!1===Kh(E,S);else U=!1;if(U)d=1+d|0;else break}if(d!==(p.R.length|0))return oc(),(new Lh).j(k);var ga=Uba(Mh(),b),ma=ga.la,va=ga.qa;if((2097152===va?0!==ma:2097152<va)||-2097152>va){oc();var Ia=u((new v).G((new w).f([""," ",""])),(new w).f([b,Vba(a)]));return(new Jh).j(Ia)}oc();return(new Lh).j(k)}oc();return(new Jh).j("Illegal number format")}catch($a){if($a&&$a.$classData&&$a.$classData.n.xE){if(0===(8&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-js/src/main/core/NumberParser.scala: 21");
+k=lg(new mg,a.SV.qv,b,La(b));if((Nh(k)?(new J).j(Oh(k)):F()).ba())return oc(),a=u((new v).G((new w).f([""," ",""])),(new w).f([b,Vba(a)])),(new Jh).j(a);oc();if(0===(4&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-js/src/main/core/NumberParser.scala: 15");return(new Jh).j(a.iH)}throw $a;}}
+function Vba(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-js/src/main/core/NumberParser.scala: 13");return a.nH}sh.prototype.$classData=g({w_:0},!1,"org.nlogo.core.NumberParser$",{w_:1,d:1});var th=void 0;function Ph(){th||(th=(new sh).b());return th}function Qh(){this.a=0}Qh.prototype=new l;Qh.prototype.constructor=Qh;
+Qh.prototype.b=function(){Rh=this;this.a=(1|this.a)<<24>>24;this.a=(2|this.a)<<24>>24;this.a=(4|this.a)<<24>>24;this.a=(8|this.a)<<24>>24;this.a=(16|this.a)<<24>>24;return this};Qh.prototype.$classData=g({B_:0},!1,"org.nlogo.core.PlotPenInterface$",{B_:1,d:1});var Rh=void 0;function Sh(){}Sh.prototype=new l;Sh.prototype.constructor=Sh;Sh.prototype.b=function(){return this};Sh.prototype.ce=function(a){return(new J).j((new ac).Bd(a.se,a.za,a.sa))};
+Sh.prototype.$classData=g({F_:0},!1,"org.nlogo.core.ReporterApp$",{F_:1,d:1});var Th=void 0;function Uh(){Th||(Th=(new Sh).b());return Th}function Vh(){}Vh.prototype=new l;Vh.prototype.constructor=Vh;Vh.prototype.b=function(){return this};function Wh(a,b){return(new J).j((new A).e(b.fl,b.sa))}Vh.prototype.$classData=g({G_:0},!1,"org.nlogo.core.ReporterBlock$",{G_:1,d:1});var Xh=void 0;function Yh(){Xh||(Xh=(new Vh).b());return Xh}function Zh(){this.Ak=null;this.a=!1}Zh.prototype=new l;
+Zh.prototype.constructor=Zh;Zh.prototype.b=function(){$h=this;var a=[I(r(),(new w).f([0,1])),I(r(),(new w).f([1,0])),I(r(),(new w).f([2,2])),I(r(),(new w).f([4,4])),I(r(),(new w).f([4,4,2,2]))];if(0===(a.length|0))a=lh();else{for(var b=mh(new nh,lh()),d=0,e=a.length|0;d<e;)oh(b,a[d]),d=1+d|0;a=b.Oa}this.Ak=a;this.a=!0;return this};
+function Wba(){var a;$h||($h=(new Zh).b());a=$h;if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Shape.scala: 60");return a.Ak}Zh.prototype.$classData=g({I_:0},!1,"org.nlogo.core.Shape$LinkLine$",{I_:1,d:1});var $h=void 0;function Xba(a){var b=a.vy();a=m(new n,function(){return function(a){return a.Ec()}}(a));var d=r();return b.xa(a,d.s)}
+function Yba(a){var b=a.vy();a=m(new n,function(){return function(a){return a.Zi()}}(a));var d=r();return b.xa(a,d.s)}function ai(){}ai.prototype=new l;ai.prototype.constructor=ai;ai.prototype.b=function(){return this};function Zba(a,b){var d=r(),e=b.pe(),f=b.Mj,h=b.HE(),k=m(new n,function(){return function(a){var b=a.tE()?"1":"0",b=I(r(),(new w).f([a.tG(),b]));a=a.YC();var d=r();return b.Vc(a,d.s).zb(" ")}}(a)),p=r();return I(d,(new w).f([e,f,h.xa(k,p.s).zb("\n"),$ba(a,b.HD())])).zb("\n")}
+function pi(a){return""+(a.Op<<24|a.Mq<<16|a.eq<<8|a.Sp)}
+function aca(a,b){if(b&&b.$classData&&b.$classData.n.Uz)return I(r(),(new w).f(["Circle",pi(b.Bb),b.ll(),b.hc,b.qk,b.rk,b.aD()])).zb(" ");if(b&&b.$classData&&b.$classData.n.Vz)return I(r(),(new w).f(["Line",pi(b.Bb),b.hc,b.Rv().Zi(),b.Rv().Ec(),b.ku().Zi(),b.ku().Ec()])).zb(" ");if(b&&b.$classData&&b.$classData.n.Wz){var d=I(r(),(new w).f(["Polygon",pi(b.Bb),b.ll(),b.hc]));b=b.vy();a=m(new n,function(){return function(a){return I(r(),(new w).f([a.Zi(),a.Ec()]))}}(a));var e=r();b=b.fj(a,e.s);a=r();
+return d.Vc(b,a.s).zb(" ")}if(b&&b.$classData&&b.$classData.n.Xz)return I(r(),(new w).f(["Rectangle",pi(b.Bb),b.ll(),b.hc,b.lw().Zi(),b.lw().Ec(),b.ev().Zi(),b.ev().Ec()])).zb(" ");throw(new q).j(b);}
+function bca(a,b){try{var d=!1,e=null,f=(new Sb).c(b),h=qi(f,32),k=B().s.hh(),p=h.m.length;switch(p){case -1:break;default:k.qc(p)}k.Zb((new ri).Mh(h));var t=k.Da();if(si(t)){var d=!0,e=t,x=e.Ia;if("Circle"===e.Cb&&si(x)){var E=x.Cb,S=x.Ia;if(si(S)){var U=S.Cb,ga=S.Ia;if(si(ga)){var ma=ga.Cb,va=ga.Ia;if(si(va)){var Ia=va.Cb,$a=va.Ia;if(si($a)){var ub=$a.Cb,vb=$a.Ia;if(si(vb)){var Mb=vb.Cb,Jc=vb.Ia;if(y().o(Jc)){var ab=(new Sb).c(E),fc=ti(),Cc=ui(vi(fc,ab.R,10)),rf=(new Sb).c(U),Wf=wi(rf.R),vh=(new Sb).c(ma),
+Te=wi(vh.R),sf=(new Sb).c(Ia),hk=vi(ti(),sf.R,10),qg=(new Sb).c(ub),wh=vi(ti(),qg.R,10),rg=(new Sb).c(Mb),bi=ti();return(new xi).ND(Cc,Wf,Te,hk,wh,vi(bi,rg.R,10))}}}}}}}}if(d){var Vi=e.Ia;if("Line"===e.Cb&&si(Vi)){var ik=Vi.Cb,Wi=Vi.Ia;if(si(Wi)){var jk=Wi.Cb,Xi=Wi.Ia;if(si(Xi)){var Bl=Xi.Cb,Yi=Xi.Ia;if(si(Yi)){var kk=Yi.Cb,Zi=Yi.Ia;if(si(Zi)){var Cl=Zi.Cb,xh=Zi.Ia;if(si(xh)){var Dl=xh.Cb,yh=xh.Ia;if(y().o(yh)){var lk=(new Sb).c(ik),El=ti(),ci=ui(vi(El,lk.R,10)),di=(new Sb).c(jk),Fl=wi(di.R),Gl=(new Sb).c(Bl),
+Hl=vi(ti(),Gl.R,10),mk=(new Sb).c(kk),Il=ti(),Jl=(new yi).ia(Hl,vi(Il,mk.R,10)),Kl=(new Sb).c(Cl),Ll=vi(ti(),Kl.R,10),nk=(new Sb).c(Dl),Ml=ti();return cca(new zi,ci,Fl,Jl,(new yi).ia(Ll,vi(Ml,nk.R,10)))}}}}}}}}if(d){var ei=e.Ia;if("Rectangle"===e.Cb&&si(ei)){var ok=ei.Cb,zh=ei.Ia;if(si(zh)){var Nl=zh.Cb,$i=zh.Ia;if(si($i)){var pk=$i.Cb,Ah=$i.Ia;if(si(Ah)){var Yf=Ah.Cb,xe=Ah.Ia;if(si(xe)){var Bh=xe.Cb,fi=xe.Ia;if(si(fi)){var qk=fi.Cb,aj=fi.Ia;if(si(aj)){var Ol=aj.Cb,bj=aj.Ia;if(y().o(bj)){var Pl=(new Sb).c(ok),
+cj=ti(),dj=ui(vi(cj,Pl.R,10)),rk=(new Sb).c(Nl),Ql=wi(rk.R),ej=(new Sb).c(pk),gi=wi(ej.R),Rl=(new Sb).c(Yf),Xg=vi(ti(),Rl.R,10),Yg=(new Sb).c(Bh),sk=ti(),fj=(new yi).ia(Xg,vi(sk,Yg.R,10)),Ch=(new Sb).c(qk),tk=vi(ti(),Ch.R,10),Sl=(new Sb).c(Ol),uk=ti();return dca(new Ai,dj,Ql,gi,fj,(new yi).ia(tk,vi(uk,Sl.R,10)))}}}}}}}}}if(d){var Zg=e.Ia;if("Polygon"===e.Cb&&si(Zg)){var Tl=Zg.Cb,gj=Zg.Ia;if(si(gj)){var hi=gj.Cb,Dh=gj.Ia;if(si(Dh)){for(var Ul=Dh.Cb,sg=eca(Dh.Ia),ji=(new bc).Kf(sg,m(new n,function(){return function(a){var b=
+Bi(a,0),b=(new Sb).c(b),b=vi(ti(),b.R,10);a=Bi(a,1);a=(new Sb).c(a);var d=ti();return(new yi).ia(b,vi(d,a.R,10))}}(a))),Eh=null,Eh=I(r(),y());ji.ta();){var hj=ji.ma(),$g=(new A).e(Eh,hj);a:{var ij=$g.lb,jj=$g.Db;if(null!==jj){var ki=jj.Zi(),li=jj.Ec();if(0<ij.ra())var kj=ij.$(),Zf=(new yi).ia(ki,li),uf=null!==kj&&Ea(kj,Zf);else uf=!1;if(uf){var ee=(new yi).ia(ki,li),lj=r(),Eh=ij.Qc(ee,lj.s);break a}}var tg=$g.lb,mj=$g.Db;if(null!==mj)var nj=(new yi).ia(mj.Zi(),mj.Ec()),mi=r(),Eh=tg.Qc(nj,mi.s);else throw(new q).j($g);
+}}var ni=Eh.Cf(),Vl=(new Sb).c(Tl),vk=ti(),ah=ui(vi(vk,Vl.R,10)),oi=(new Sb).c(hi),Wl=wi(oi.R),wk=(new Sb).c(Ul);return fca(new Ci,ah,Wl,wi(wk.R),ni)}}}}throw(new he).c(u((new v).G((new w).f(["Invalid shape format in file: ",""])),(new w).f([b])));}catch(ii){if(ii&&ii.$classData&&ii.$classData.n.vn)throw(new he).c(u((new v).G((new w).f(["Invalid shape format in file: ",""])),(new w).f([b])));throw ii;}}
+function gca(a,b){a=m(new n,function(a){return function(b){return Zba(a,b)}}(a));var d=r();return b.xa(a,d.s).zb("\n\n")}
+function hca(a,b){var d=function(a){return function(b){return ica(a,b)}}(a);B();var e=(new w).f([y()]),f=B().s;a=b.Gb(L(e,f),sb(new tb,function(){return function(a,b){a=(new A).e(a,b);b=a.lb;var d=a.Db;if(null!==d&&""===d)return a=y(),Ng(new Og,a,b);var e=a.lb;b=a.Db;if(si(e)&&(d=e.Cb,e=e.Ia,null!==b))return a=B().s,a=Di(d,b,a),Ng(new Og,a,e);throw(new q).j(a);}}(a))).Gb(y(),sb(new tb,function(){return function(a,b){if(si(a)){var d=a.Cb,e=a.Ia;if(y().o(b))return a=B(),d=d.Qc("",a.s),Ng(new Og,d,e)}return Ng(new Og,
+b,a)}}(a))).Xf(m(new n,function(){return function(a){return kd(a)}}(a)));b=B().s;if(b===B().s){if(a===y())return y();b=a.$();e=b=Ng(new Og,d(b),y());for(a=a.aa();a!==y();)f=a.$(),f=Ng(new Og,d(f),y()),e=e.Ia=f,a=a.aa();return b}for(b=Mc(a,b);!a.z();)e=a.$(),b.Qa(d(e)),a=a.aa();return b.Da()}
+function jca(a,b){var d=function(a){return function(b){return kca(a,b)}}(a);B();var e=(new w).f([y()]),f=B().s;a=b.Gb(L(e,f),sb(new tb,function(){return function(a,b){a=(new A).e(a,b);b=a.lb;var d=a.Db;if(null!==d&&""===d)return a=y(),Ng(new Og,a,b);var e=a.lb;b=a.Db;if(si(e)&&(d=e.Cb,e=e.Ia,null!==b))return a=B().s,a=Di(d,b,a),Ng(new Og,a,e);throw(new q).j(a);}}(a))).Gb(y(),sb(new tb,function(){return function(a,b){if(si(a)){var d=a.Cb,e=a.Ia;if(y().o(b))return a=B(),d=d.Qc("",a.s),Ng(new Og,d,e)}return Ng(new Og,
+b,a)}}(a))).Xf(m(new n,function(){return function(a){return kd(a)}}(a)));b=B().s;if(b===B().s){if(a===y())return y();b=a.$();e=b=Ng(new Og,d(b),y());for(a=a.aa();a!==y();)f=a.$(),f=Ng(new Og,d(f),y()),e=e.Ia=f,a=a.aa();return b}for(b=Mc(a,b);!a.z();)e=a.$(),b.Qa(d(e)),a=a.aa();return b.Da()}
+function ica(a,b){if(si(b)){var d=b.Cb,e=b.Ia;if(si(e)){var f=e.Cb,h=e.Ia;if(si(h)){var e=h.Cb,k=h.Ia;if(si(k)){var h=k.Cb,p=k.Ia;if(si(p))return k=p.Cb,b=p.Ia,f=(new Sb).c(f),f=Hh(Ih(),f.R),e=I(r(),(new w).f([e,h,k])),h=m(new n,function(a){return function(b){return lca(a,b)}}(a)),k=r(),mca(new Ei,d,f,e.xa(h,k.s),kca(a,b))}}}}throw(new he).c(u((new v).G((new w).f(["Invalid link shape: ",""])),(new w).f([cc(b,"","\n","")])));}function ui(a){return nca(new Fi,255&a>>16,255&a>>8,255&a,255)}
+function lca(a,b){var d=!1,e=null,f=(new Sb).c(b),f=qi(f,32),h=B().s.hh(),k=f.m.length;switch(k){case -1:break;default:h.qc(k)}h.Zb((new ri).Mh(f));f=h.Da();if(si(f)&&(d=!0,e=f,h=e.Cb,k=e.Ia,si(k))){f=k.Ia;if("1"===k.Cb){k=Wba();Je();var p=function(){return function(a){a=(new Sb).c(a).R;return ea(Hh(Ih(),a))}}(a),t=B().s;if(t===B().s)if(f===y())p=y();else{for(var t=f.$(),x=t=Ng(new Og,p(t),y()),E=f.aa();E!==y();)var S=E.$(),S=Ng(new Og,p(S),y()),x=x.Ia=S,E=E.aa();p=t}else{t=Mc(f,t);for(x=f;!x.z();)E=
+x.$(),t.Qa(p(E)),x=x.aa();p=t.Da()}k=k.ib(oca(p.ve(Gi())))}else k=!1;if(k){b=(new Sb).c(h);b=Hh(Ih(),b.R);e=function(){return function(a){a=(new Sb).c(a).R;return ea(Hh(Ih(),a))}}(a);a=B().s;if(a===B().s)if(f===y())e=y();else{a=f.$();d=a=Ng(new Og,e(a),y());for(f=f.aa();f!==y();)h=f.$(),h=Ng(new Og,e(h),y()),d=d.Ia=h,f=f.aa();e=a}else{for(a=Mc(f,a);!f.z();)d=f.$(),a.Qa(e(d)),f=f.aa();e=a.Da()}return(new Hi).yu(b,!0,e)}}if(d&&(f=e.Cb,a=e.Ia,si(a)&&"1"===a.Cb))return b=(new Sb).c(f),e=Ih(),(new Hi).yu(Hh(e,
+b.R),!0,I(r(),(new w).f([1,0])));if(d&&(f=e.Cb,e=e.Ia,si(e)&&"0"===e.Cb))return b=(new Sb).c(f),e=Ih(),(new Hi).yu(Hh(e,b.R),!1,I(r(),(new w).f([0,1])));throw(new he).c(u((new v).G((new w).f(["Invalid link line: ",""])),(new w).f([b])));}function $ba(a,b){var d=I(r(),(new w).f([b.pe(),b.aF(),b.Tj]));b=b.kh;a=m(new n,function(a){return function(b){return aca(a,b)}}(a));var e=r();b=b.xa(a,e.s);a=r();return d.Vc(b,a.s).zb("\n")}
+function pca(a,b){a=m(new n,function(a){return function(b){return $ba(a,b)}}(a));var d=r();return b.xa(a,d.s).zb("\n\n")}
+function kca(a,b){if(si(b)){var d=b.Cb,e=b.Ia;if(si(e)){var f=e.Cb,h=e.Ia;if(si(h)){e=h.Ia;b=(new Sb).c(h.Cb);b=vi(ti(),b.R,10);a=function(a){return function(b){return bca(a,b)}}(a);h=B().s;if(h===B().s)if(e===y())a=y();else{for(var h=e.$(),k=h=Ng(new Og,a(h),y()),e=e.aa();e!==y();)var p=e.$(),p=Ng(new Og,a(p),y()),k=k.Ia=p,e=e.aa();a=h}else{for(h=Mc(e,h);!e.z();)k=e.$(),h.Qa(a(k)),e=e.aa();a=h.Da()}return(new Ii).fE(d,"true"===f,b,a)}}}throw(new he).c(u((new v).G((new w).f(["Invalid vector shape:\\n ",
+""])),(new w).f([cc(b,"","\n","")])));}ai.prototype.$classData=g({K_:0},!1,"org.nlogo.core.ShapeParser$",{K_:1,d:1});var Ji=void 0;function Ki(){Ji||(Ji=(new ai).b());return Ji}function Li(){this.TS=null;this.a=!1}Li.prototype=new l;Li.prototype.constructor=Li;
+Li.prototype.b=function(){Mi=this;for(var a=Ni(),a=(new A).e(a,"__observercode"),b=Oi(),b=(new A).e(b,"__turtlecode"),d=Pi(),d=(new A).e(d,"__patchcode"),e=Qi(),a=[a,b,d,(new A).e(e,"__linkcode")],b=dc(new ec,gc()),d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.TS=b.Oa;this.a=!0;return this};Li.prototype.$classData=g({L_:0},!1,"org.nlogo.core.SourceWrapping$",{L_:1,d:1});var Mi=void 0;function qca(){Mi||(Mi=(new Li).b());return Mi}function Ri(){}Ri.prototype=new l;Ri.prototype.constructor=Ri;
+Ri.prototype.b=function(){return this};function Si(a,b){return(new J).j((new ac).Bd(b.zd,b.za,b.sa))}Ri.prototype.$classData=g({N_:0},!1,"org.nlogo.core.Statement$",{N_:1,d:1});var Ti=void 0;function Ui(){Ti||(Ti=(new Ri).b());return Ti}function oj(){}oj.prototype=new l;oj.prototype.constructor=oj;oj.prototype.b=function(){return this};
+function Kg(a,b){a=(new Sb).c(b);b=Je().Lp.cf(a.R);for(var d=0,e=a.R.length|0;d<e;){var f=a.W(d),f=null===f?0:f.Y;switch(f){case 10:f="\\n";break;case 13:f="\\r";break;case 9:f="\\t";break;case 92:f="\\\\";break;case 34:f='\\"';break;default:f=ba.String.fromCharCode(f)}f=(new Sb).c(f).R;b.Zb((new pj).c(f));d=1+d|0}return b.Da()}
+function qj(a,b){for(var d=(new Sb).c(b),e=d.R.length|0,f=0;;){if(f<e)var h=d.W(f),h=92!==(null===h?0:h.Y);else h=!1;if(h)f=1+f|0;else break}e=rj(d,f);if(null===e)throw(new q).j(e);d=e.ja();e=e.na();if(2>((new Sb).c(e).R.length|0))return b;b=rca(65535&(e.charCodeAt(1)|0));b=(new Ke).Xa(b);e=(new Sb).c(e);f=e.R.length|0;return""+d+b+qj(a,He(Ie(),e.R,2,f))}
+function rca(a){switch(a){case 110:return 10;case 114:return 13;case 116:return 9;case 92:return 92;case 34:return 34;default:throw(new Ne).c("invalid escape sequence: \\"+(new Ke).Xa(a));}}oj.prototype.$classData=g({O_:0},!1,"org.nlogo.core.StringEscaper$",{O_:1,d:1});var sj=void 0;function Lg(){sj||(sj=(new oj).b());return sj}function tj(){}tj.prototype=new l;tj.prototype.constructor=tj;tj.prototype.b=function(){return this};
+function sca(a,b){var d=uj();b=b-(b&d)|0;d=vj();0!==(b&d)?(d=vj(),b=b-(b&d)|0,d="variable"):(b&wj())===wj()?(d=wj(),b=b-(b&d)|0,d="list or block"):(b&kc())===kc()?(d=kc(),b=b-(b&d)|0,d="anything"):(b&xj(D()))===xj(D())?(d=xj(D())|yj(D()),b=b-(b&d)|0,d="agent"):(d=N(D()),0!==(b&d)?(d=N(D()),b=b-(b&d)|0,d="number"):(d=zj(D()),0!==(b&d)?(d=zj(D()),b=b-(b&d)|0,d="TRUE/FALSE"):(d=Aj(D()),0!==(b&d)?(d=Aj(D()),b=b-(b&d)|0,d="string"):(d=Bj(D()),0!==(b&d)?(d=Bj(D()),b=b-(b&d)|0,d="list"):(b&Cj(D()))===Cj(D())?
+(d=Cj(D()),b=b-(b&d)|0,d="agentset"):(d=Dj(D()),0!==(b&d)?(d=Dj(D()),b=b-(b&d)|0,d="turtle agentset"):(d=Ej(D()),0!==(b&d)?(d=Ej(D()),b=b-(b&d)|0,d="patch agentset"):(d=Fj(D()),0!==(b&d)?(d=Fj(D()),b=b-(b&d)|0,d="link agentset"):(d=Gj(D()),0!==(b&d)?(d=Gj(D())|yj(D()),b=b-(b&d)|0,d="turtle"):(d=Hj(D()),0!==(b&d)?(d=Hj(D())|yj(D()),b=b-(b&d)|0,d="patch"):(d=Ij(D()),0!==(b&d)?(d=Ij(D())|yj(D()),b=b-(b&d)|0,d="link"):(d=Jj(D()),0!==(b&d)?(d=Jj(D()),b=b-(b&d)|0,d="anonymous reporter"):(d=Kj(D()),0!==
+(b&d)?(d=Kj(D()),b=b-(b&d)|0,d="anonymous command"):(d=yj(D()),0!==(b&d)?(d=yj(D()),b=b-(b&d)|0,d="NOBODY"):(d=Lj(D()),0!==(b&d)?(d=Lj(D()),b=b-(b&d)|0,d="command block"):(b&Mj(D()))===Mj(D())?(d=Mj(D()),b=b-(b&d)|0,d="reporter block"):(d=Nj(D()),0!==(b&d)?(d=Mj(D()),b=b-(b&d)|0,d="different kind of block"):(d=Oj(D()),0!==(b&d)?(d=Oj(D()),b=b-(b&d)|0,d="TRUE/FALSE block"):(d=Pj(D()),0!==(b&d)?(d=Pj(D()),b=b-(b&d)|0,d="number block"):(d=Qj(),0!==(b&d)?(d=Qj(),b=b-(b&d)|0,d="code block"):(d=Rj(),0!==
+(b&d)?(d=Rj(),b=b-(b&d)|0,d="variable"):d="(none)")))))))))))))))))));var e=b;return 0===e?d:Sj()===e?d+" (optional)":d+" or "+sca(a,b)}function Tj(a,b){a=sca(a,b);if("NOBODY"!==a&&"anything"!==a)a:switch(b=(new Sb).c(a),b=Uj(b),b=null===b?0:b.Y,tca(Gh(),b)){case 65:case 69:case 73:case 79:case 85:a="an "+a;break a;default:a="a "+a}return a}tj.prototype.$classData=g({m0:0},!1,"org.nlogo.core.TypeNames$",{m0:1,d:1});var Vj=void 0;function Wj(){Vj||(Vj=(new tj).b());return Vj}
+function Xj(){this.vS=null;this.a=!1}Xj.prototype=new l;Xj.prototype.constructor=Xj;Xj.prototype.b=function(){this.vS="@#$#@#$#@";this.a=!0;return this};function uca(){var a=Yj();return m(new n,function(){return function(a){return a}}(a))}
+function vca(a,b){var d=Zj(),e=Vg(Je().$h,y()),f=uca(),h;h=I(oc().ai,y());var k;k=I(oc().ai,y());var p;p=wca();var t=xca;Je();b=null!==b?(new pj).c(b):null;p=t(p,b);for(p=(new ak).Ju(p);bk(p).ta();)t=p.xm(),b=ck(a),0<=(t.length|0)&&t.substring(0,b.length|0)===b?(h=h.mc(k,(dk(),ek().nc)),k=I(oc().ai,y())):k=k.mc(t,(dk(),ek().nc));h=h.mc(k,(dk(),ek().nc));I(oc().ai,y());if(12!==h.ra())throw ug(vg(),(new Fg).c("Models must have 12 sections, this had "+h.ra()));a=h;var x,E,S,U;oc();p=(new J).j(a);if(null!==
+p.U&&0===p.U.Mb(12)){var ga=p.U.W(0),ma=p.U.W(1);a=p.U.W(2);t=p.U.W(3);h=p.U.W(4);k=p.U.W(5);var va=p.U.W(6);b=p.U.W(7);x=p.U.W(8);E=p.U.W(9);S=p.U.W(10);U=p.U.W(11);p=va}else throw(new q).j(a);k;p;b;x;p=E;S;U;k=jca(Ki(),t);p=hca(Ki(),p);t=cc(ga,"","\n","");x=yca();E=B().s;b=new fk;S=L(ma,E);E=I(oc().ai,y());for(ma=I(oc().ai,y());!S.z();){ga=S.$();U=(new Sb).c(ga);if(kd(U))ma=ma.mc(ga,(dk(),ek().nc));else{ga=gk(ma);for(U=!0;U&&ga.Yh;){U=ga.ma();if(null===U)throw(new ye).b();U=""===U}U||(ga=B().s,
+E=E.mc(zca(x,L(ma,ga),d,e,f),(dk(),ek().nc)));ma=I(oc().ai,y())}S=S.aa()}S=gk(ma);for(ga=!0;ga&&S.Yh;){ga=S.ma();if(null===ga)throw(new ye).b();ga=""===ga}ga||(S=B().s,E=E.mc(zca(x,L(ma,S),d,e,f),(dk(),ek().nc)));d=E;e=B().s;d=L(d,e);return xk(b,t,d,cc(a,"","\n",""),h.$(),k.ob(),p.ob(),I(r(),y()))}
+function Aca(a,b){return""+b.de+u((new v).G((new w).f(["\\n","\\n"])),(new w).f([ck(a)]))+Bca(yca(),b.Hc)+u((new v).G((new w).f(["\\n","\\n"])),(new w).f([ck(a)]))+b.Ue+u((new v).G((new w).f(["\\n","\\n"])),(new w).f([ck(a)]))+pca(Ki(),b.ch)+u((new v).G((new w).f(["\\n","\\n"])),(new w).f([ck(a)]))+b.Xh+u((new v).G((new w).f(["\\n","\\n"])),(new w).f([ck(a)]))+u((new v).G((new w).f(["","\\n"])),(new w).f([ck(a)]))+u((new v).G((new w).f(["","\\n"])),(new w).f([ck(a)]))+u((new v).G((new w).f(["","\\n"])),
+(new w).f([ck(a)]))+u((new v).G((new w).f(["","\\n"])),(new w).f([ck(a)]))+gca(Ki(),b.Pg)+u((new v).G((new w).f(["\\n","\\n"])),(new w).f([ck(a)]))+u((new v).G((new w).f(["\\n","\\n"])),(new w).f([ck(a)]))}function ck(a){if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/model/ModelReader.scala: 9");return a.vS}Xj.prototype.$classData=g({v0:0},!1,"org.nlogo.core.model.ModelReader$",{v0:1,d:1});var Ak=void 0;
+function Yj(){Ak||(Ak=(new Xj).b());return Ak}function Bk(){}Bk.prototype=new l;Bk.prototype.constructor=Bk;Bk.prototype.b=function(){return this};
+function Cca(a){var b="";for(;;){var d=a;if(null===d)throw(new ye).b();if(""===d)return(new A).e(b,a);d=(new Sb).c(a);d=Uj(d);if(34===(null===d?0:d.Y))return a=(new Sb).c(a),a=Ck(a),(new A).e(b,a.trim());d=(new Sb).c(a);d=He(Ie(),d.R,0,2);null!==d&&'\\"'===d?(a=(new Sb).c(a),d=a.R.length|0,a=He(Ie(),a.R,2,d),b+='"'):(d=(new Sb).c(a),d=Ck(d),a=(new Sb).c(a),b=""+b+na(Uj(a)),a=d)}}
+function Dk(a,b){var d=(new Sb).c(b),d=Ek(d);if(Fk(d)&&(d=d.U,34===(null===d?0:d.Y))){b=(new Sb).c(b);d=Cca(Ck(b));if(null===d)throw(new q).j(d);b=d.ja();a=Dk(a,d.na());return Ng(new Og,b,a)}return y()}function Gk(a){return""+(new Ke).Xa(34)+a+(new Ke).Xa(34)}Bk.prototype.$classData=g({y0:0},!1,"org.nlogo.core.model.PenReader$",{y0:1,d:1});var Hk=void 0;function Ik(){Hk||(Hk=(new Bk).b());return Hk}function Jk(){this.HT=null;this.a=!1}Jk.prototype=new l;Jk.prototype.constructor=Jk;
+Jk.prototype.b=function(){Kk=this;Lk||(Lk=(new Mk).b());var a=(new A).e("BUTTON",Lk);Nk||(Nk=(new Ok).b());var b=(new A).e("SLIDER",Nk);Pk||(Pk=(new Qk).b());var d=(new A).e("GRAPHICS-WINDOW",Pk);Rk||(Rk=(new Sk).b());var e=(new A).e("MONITOR",Rk);Tk||(Tk=(new Uk).b());var f=(new A).e("SWITCH",Tk);Vk||(Vk=(new Wk).b());var h=(new A).e("PLOT",Vk);Xk||(Xk=(new Yk).b());var k=(new A).e("CHOOSER",Xk);Zk||(Zk=(new $k).b());var p=(new A).e("OUTPUT",Zk);al||(al=(new bl).b());var t=(new A).e("TEXTBOX",al);
+cl||(cl=(new dl).b());a=[a,b,d,e,f,h,k,p,t,(new A).e("INPUTBOX",cl)];b=dc(new ec,gc());d=0;for(e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.HT=b.Oa;this.a=!0;return this};function zca(a,b,d,e,f){a=Dca(a).sk(e);a=(new Kc).mg(a).ti.wj();a:{for(;a.ta();)if(e=a.ma(),e.oG(b)){a=(new J).j(e);break a}a=F()}if(Fk(a))return a.U.lW(b,d).dm(f);if(F()===a)throw ug(vg(),(new Fg).c(u((new v).G((new w).f(["Couldn't find corresponding reader for ",""])),(new w).f([b.$()]))));throw(new q).j(a);}
+function Bca(a,b){a=m(new n,function(a){return function(b){var d=Vg(Je().$h,y()),d=Dca(a).sk(d),k=(new Kc).mg(d);Lc();Lc();el();d=(new jc).b();for(k=k.ti.wj();k.ta();){var p=k.ma(),t;t=p.cm();var x=b;t=null!==x&&(fl(t.Gd(),x)||ra(x)&&gl(t.Gd(),pa(bb))||ta(x)&&gl(t.Gd(),pa(cb))||ie(x)&&gl(t.Gd(),pa(Za))||Pa(x)&&gl(t.Gd(),pa(db))||Ca(x)&&gl(t.Gd(),pa(eb))||xa(x)&&gl(t.Gd(),pa(fb))||"number"===typeof x&&gl(t.Gd(),pa(gb))||"boolean"===typeof x&&gl(t.Gd(),pa(Ya))||void 0===x&&gl(t.Gd(),pa(Xa)))?(new J).j(x):
+F();t.z()?p=F():(t=t.X(),p=(new J).j(p.jU(t)));p=p.ob();hl(d,p)}d=d.ob();d=Ek(d);if(d.z())throw(new il).c("Widget type is not supported: "+oa(b).Bg());return d.X()}}(a));var d=r();return b.xa(a,d.s).zb("\n\n")}function Dca(a){if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/model/WidgetReader.scala: 107");return a.HT}Jk.prototype.$classData=g({E0:0},!1,"org.nlogo.core.model.WidgetReader$",{E0:1,d:1});var Kk=void 0;
+function yca(){Kk||(Kk=(new Jk).b());return Kk}function jl(){}jl.prototype=new l;jl.prototype.constructor=jl;jl.prototype.b=function(){return this};jl.prototype.$classData=g({G0:0},!1,"org.nlogo.core.prim.Lambda$",{G0:1,d:1});var Eca=void 0;function kl(){this.uU=this.KT=this.vU=null;this.a=0}kl.prototype=new l;kl.prototype.constructor=kl;
+kl.prototype.b=function(){ll=this;this.vU="_.?\x3d*!\x3c\x3e:#+/%$^'\x26-";this.a=(1|this.a)<<24>>24;this.KT="0123456789";this.a=(2|this.a)<<24>>24;var a=[(new O).Q(65498,65500,1),(new O).Q(65490,65495,1),(new O).Q(65482,65487,1),(new O).Q(65474,65479,1),(new O).Q(65382,65470,1),(new O).Q(65345,65370,1),(new O).Q(65313,65338,1),(new O).Q(65142,65276,1),(new O).Q(65136,65140,1),(new O).Q(65008,65019,1),(new O).Q(64914,64967,1),(new O).Q(64848,64911,1),(new O).Q(64467,64829,1),(new O).Q(64326,64433,
+1),(new O).Q(64323,64324,1),(new O).Q(64320,64321,1),(new O).Q(64318,64318,1),(new O).Q(64312,64316,1),(new O).Q(64298,64310,1),(new O).Q(64287,64296,1),(new O).Q(64285,64285,1),(new O).Q(64275,64279,1),(new O).Q(64256,64262,1),(new O).Q(64112,64217,1),(new O).Q(63744,64109,1),(new O).Q(55243,55291,1),(new O).Q(55216,55238,1),(new O).Q(44032,55203,1),(new O).Q(43968,44002,1),(new O).Q(43816,43822,1),(new O).Q(43808,43814,1),(new O).Q(43793,43798,1),(new O).Q(43785,43790,1),(new O).Q(43777,43782,1),
+(new O).Q(43762,43764,1),(new O).Q(43744,43754,1),(new O).Q(43739,43741,1),(new O).Q(43714,43714,1),(new O).Q(43712,43712,1),(new O).Q(43705,43709,1),(new O).Q(43701,43702,1),(new O).Q(43697,43697,1),(new O).Q(43648,43695,1),(new O).Q(43642,43642,1),(new O).Q(43616,43638,1),(new O).Q(43588,43595,1),(new O).Q(43584,43586,1),(new O).Q(43520,43560,1),(new O).Q(43471,43471,1),(new O).Q(43396,43442,1),(new O).Q(43360,43388,1),(new O).Q(43312,43334,1),(new O).Q(43274,43301,1),(new O).Q(43259,43259,1),(new O).Q(43250,
+43255,1),(new O).Q(43138,43187,1),(new O).Q(43072,43123,1),(new O).Q(43020,43042,1),(new O).Q(43015,43018,1),(new O).Q(43011,43013,1),(new O).Q(43E3,43009,1),(new O).Q(42912,42922,1),(new O).Q(42896,42899,1),(new O).Q(42891,42894,1),(new O).Q(42786,42888,1),(new O).Q(42775,42783,1),(new O).Q(42656,42725,1),(new O).Q(42623,42647,1),(new O).Q(42560,42606,1),(new O).Q(42538,42539,1),(new O).Q(42512,42527,1),(new O).Q(42240,42508,1),(new O).Q(42192,42237,1),(new O).Q(40960,42124,1),(new O).Q(19968,40908,
+1),(new O).Q(13312,19893,1),(new O).Q(12784,12799,1),(new O).Q(12704,12730,1),(new O).Q(12593,12686,1),(new O).Q(12549,12589,1),(new O).Q(12540,12543,1),(new O).Q(12449,12538,1),(new O).Q(12445,12447,1),(new O).Q(12353,12438,1),(new O).Q(12347,12348,1),(new O).Q(12337,12341,1),(new O).Q(12293,12294,1),(new O).Q(11823,11823,1),(new O).Q(11736,11742,1),(new O).Q(11728,11734,1),(new O).Q(11720,11726,1),(new O).Q(11712,11718,1),(new O).Q(11704,11710,1),(new O).Q(11696,11702,1),(new O).Q(11688,11694,1),
+(new O).Q(11680,11686,1),(new O).Q(11648,11670,1),(new O).Q(11631,11631,1),(new O).Q(11568,11623,1),(new O).Q(11565,11565,1),(new O).Q(11559,11559,1),(new O).Q(11520,11557,1),(new O).Q(11506,11507,1),(new O).Q(11499,11502,1),(new O).Q(11360,11492,1),(new O).Q(11312,11358,1),(new O).Q(11264,11310,1),(new O).Q(8579,8580,1),(new O).Q(8526,8526,1),(new O).Q(8517,8521,1),(new O).Q(8508,8511,1),(new O).Q(8495,8505,1),(new O).Q(8490,8493,1),(new O).Q(8488,8488,1),(new O).Q(8486,8486,1),(new O).Q(8484,8484,
+1),(new O).Q(8473,8477,1),(new O).Q(8469,8469,1),(new O).Q(8458,8467,1),(new O).Q(8455,8455,1),(new O).Q(8450,8450,1),(new O).Q(8336,8348,1),(new O).Q(8319,8319,1),(new O).Q(8305,8305,1),(new O).Q(8182,8188,1),(new O).Q(8178,8180,1),(new O).Q(8160,8172,1),(new O).Q(8150,8155,1),(new O).Q(8144,8147,1),(new O).Q(8134,8140,1),(new O).Q(8130,8132,1),(new O).Q(8126,8126,1),(new O).Q(8118,8124,1),(new O).Q(8064,8116,1),(new O).Q(8031,8061,1),(new O).Q(8029,8029,1),(new O).Q(8027,8027,1),(new O).Q(8025,
+8025,1),(new O).Q(8016,8023,1),(new O).Q(8008,8013,1),(new O).Q(7968,8005,1),(new O).Q(7960,7965,1),(new O).Q(7680,7957,1),(new O).Q(7424,7615,1),(new O).Q(7413,7414,1),(new O).Q(7406,7409,1),(new O).Q(7401,7404,1),(new O).Q(7258,7293,1),(new O).Q(7245,7247,1),(new O).Q(7168,7203,1),(new O).Q(7098,7141,1),(new O).Q(7086,7087,1),(new O).Q(7043,7072,1),(new O).Q(6981,6987,1),(new O).Q(6917,6963,1),(new O).Q(6823,6823,1),(new O).Q(6688,6740,1),(new O).Q(6656,6678,1),(new O).Q(6593,6599,1),(new O).Q(6528,
+6571,1),(new O).Q(6512,6516,1),(new O).Q(6480,6509,1),(new O).Q(6400,6428,1),(new O).Q(6320,6389,1),(new O).Q(6314,6314,1),(new O).Q(6272,6312,1),(new O).Q(6176,6263,1),(new O).Q(6108,6108,1),(new O).Q(6103,6103,1),(new O).Q(6016,6067,1),(new O).Q(5998,6E3,1),(new O).Q(5984,5996,1),(new O).Q(5952,5969,1),(new O).Q(5920,5937,1),(new O).Q(5902,5905,1),(new O).Q(5888,5900,1),(new O).Q(5792,5866,1),(new O).Q(5761,5786,1),(new O).Q(5743,5759,1),(new O).Q(5121,5740,1),(new O).Q(5024,5108,1),(new O).Q(4992,
+5007,1),(new O).Q(4888,4954,1),(new O).Q(4882,4885,1),(new O).Q(4824,4880,1),(new O).Q(4808,4822,1),(new O).Q(4802,4805,1),(new O).Q(4800,4800,1),(new O).Q(4792,4798,1),(new O).Q(4786,4789,1),(new O).Q(4752,4784,1),(new O).Q(4746,4749,1),(new O).Q(4704,4744,1),(new O).Q(4698,4701,1),(new O).Q(4696,4696,1),(new O).Q(4688,4694,1),(new O).Q(4682,4685,1),(new O).Q(4348,4680,1),(new O).Q(4304,4346,1),(new O).Q(4301,4301,1),(new O).Q(4295,4295,1),(new O).Q(4256,4293,1),(new O).Q(4238,4238,1),(new O).Q(4213,
+4225,1),(new O).Q(4206,4208,1),(new O).Q(4197,4198,1),(new O).Q(4193,4193,1),(new O).Q(4186,4189,1),(new O).Q(4176,4181,1),(new O).Q(4159,4159,1),(new O).Q(4096,4138,1),(new O).Q(3976,3980,1),(new O).Q(3913,3948,1),(new O).Q(3904,3911,1),(new O).Q(3840,3840,1),(new O).Q(3804,3807,1),(new O).Q(3782,3782,1),(new O).Q(3776,3780,1),(new O).Q(3773,3773,1),(new O).Q(3762,3763,1),(new O).Q(3757,3760,1),(new O).Q(3754,3755,1),(new O).Q(3751,3751,1),(new O).Q(3749,3749,1),(new O).Q(3745,3747,1),(new O).Q(3737,
+3743,1),(new O).Q(3732,3735,1),(new O).Q(3725,3725,1),(new O).Q(3722,3722,1),(new O).Q(3719,3720,1),(new O).Q(3716,3716,1),(new O).Q(3713,3714,1),(new O).Q(3648,3654,1),(new O).Q(3634,3635,1),(new O).Q(3585,3632,1),(new O).Q(3520,3526,1),(new O).Q(3517,3517,1),(new O).Q(3507,3515,1),(new O).Q(3482,3505,1),(new O).Q(3461,3478,1),(new O).Q(3450,3455,1),(new O).Q(3424,3425,1),(new O).Q(3406,3406,1),(new O).Q(3389,3389,1),(new O).Q(3346,3386,1),(new O).Q(3342,3344,1),(new O).Q(3333,3340,1),(new O).Q(3313,
+3314,1),(new O).Q(3296,3297,1),(new O).Q(3294,3294,1),(new O).Q(3261,3261,1),(new O).Q(3253,3257,1),(new O).Q(3242,3251,1),(new O).Q(3218,3240,1),(new O).Q(3214,3216,1),(new O).Q(3205,3212,1),(new O).Q(3168,3169,1),(new O).Q(3160,3161,1),(new O).Q(3133,3133,1),(new O).Q(3125,3129,1),(new O).Q(3114,3123,1),(new O).Q(3090,3112,1),(new O).Q(3086,3088,1),(new O).Q(3077,3084,1),(new O).Q(3024,3024,1),(new O).Q(2990,3001,1),(new O).Q(2984,2986,1),(new O).Q(2979,2980,1),(new O).Q(2974,2975,1),(new O).Q(2972,
+2972,1),(new O).Q(2969,2970,1),(new O).Q(2962,2965,1),(new O).Q(2958,2960,1),(new O).Q(2949,2954,1),(new O).Q(2947,2947,1),(new O).Q(2929,2929,1),(new O).Q(2911,2913,1),(new O).Q(2908,2909,1),(new O).Q(2877,2877,1),(new O).Q(2869,2873,1),(new O).Q(2866,2867,1),(new O).Q(2858,2864,1),(new O).Q(2835,2856,1),(new O).Q(2831,2832,1),(new O).Q(2821,2828,1),(new O).Q(2784,2785,1),(new O).Q(2768,2768,1),(new O).Q(2749,2749,1),(new O).Q(2741,2745,1),(new O).Q(2738,2739,1),(new O).Q(2730,2736,1),(new O).Q(2707,
+2728,1),(new O).Q(2703,2705,1),(new O).Q(2693,2701,1),(new O).Q(2674,2676,1),(new O).Q(2654,2654,1),(new O).Q(2649,2652,1),(new O).Q(2616,2617,1),(new O).Q(2613,2614,1),(new O).Q(2610,2611,1),(new O).Q(2602,2608,1),(new O).Q(2579,2600,1),(new O).Q(2575,2576,1),(new O).Q(2565,2570,1),(new O).Q(2544,2545,1),(new O).Q(2527,2529,1),(new O).Q(2524,2525,1),(new O).Q(2510,2510,1),(new O).Q(2493,2493,1),(new O).Q(2486,2489,1),(new O).Q(2482,2482,1),(new O).Q(2474,2480,1),(new O).Q(2451,2472,1),(new O).Q(2447,
+2448,1),(new O).Q(2437,2444,1),(new O).Q(2425,2431,1),(new O).Q(2417,2423,1),(new O).Q(2392,2401,1),(new O).Q(2384,2384,1),(new O).Q(2365,2365,1),(new O).Q(2308,2361,1),(new O).Q(2210,2220,1),(new O).Q(2208,2208,1),(new O).Q(2112,2136,1),(new O).Q(2088,2088,1),(new O).Q(2084,2084,1),(new O).Q(2074,2074,1),(new O).Q(2048,2069,1),(new O).Q(2042,2042,1),(new O).Q(2036,2037,1),(new O).Q(1994,2026,1),(new O).Q(1969,1969,1),(new O).Q(1869,1957,1),(new O).Q(1810,1839,1),(new O).Q(1808,1808,1),(new O).Q(1791,
+1791,1),(new O).Q(1786,1788,1),(new O).Q(1774,1775,1),(new O).Q(1765,1766,1),(new O).Q(1749,1749,1),(new O).Q(1649,1747,1),(new O).Q(1646,1647,1),(new O).Q(1568,1610,1),(new O).Q(1520,1522,1),(new O).Q(1488,1514,1),(new O).Q(1377,1415,1),(new O).Q(1369,1369,1),(new O).Q(1329,1366,1),(new O).Q(1162,1319,1),(new O).Q(1015,1153,1),(new O).Q(931,1013,1),(new O).Q(910,929,1),(new O).Q(908,908,1),(new O).Q(904,906,1),(new O).Q(902,902,1),(new O).Q(890,893,1),(new O).Q(886,887,1),(new O).Q(880,884,1),(new O).Q(750,
+750,1),(new O).Q(748,748,1),(new O).Q(736,740,1),(new O).Q(710,721,1),(new O).Q(248,705,1),(new O).Q(216,246,1),(new O).Q(192,214,1),(new O).Q(186,186,1),(new O).Q(181,181,1),(new O).Q(170,170,1),(new O).Q(97,122,1),(new O).Q(65,90,1)];if(0===(a.length|0))a=lh();else{for(var b=mh(new nh,lh()),d=0,e=a.length|0;d<e;)oh(b,a[d]),d=1+d|0;a=b.Oa}b=I(ml(),y());a=nl(a,b,sb(new tb,function(){return function(a,b){var d=ol(),d=pl(d);b=L(b,d);return ql(a,b)}}(this)));if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-js/src/main/lex/Charset.scala: 9");
+b=(new Sb).c(this.KT);Je();for(var d=Mc(b,new rl),e=0,f=b.R.length|0;e<f;){var h=b.W(e);d.Qa(null===h?0:h.Y);e=1+e|0}b=d.Da().gd();if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-js/src/main/lex/Charset.scala: 8");d=(new Sb).c(this.vU);Je();e=Mc(d,new rl);f=0;for(h=d.R.length|0;f<h;){var k=d.W(f);e.Qa(null===k?0:k.Y);f=1+f|0}this.uU=a.Bp(b.Bp(e.Da().gd()));this.a=(4|this.a)<<24>>24;return this};
+function Fca(){var a;ll||(ll=(new kl).b());a=ll;if(0===(4&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-js/src/main/lex/Charset.scala: 11");return a.uU}kl.prototype.$classData=g({P0:0},!1,"org.nlogo.lex.Charset$",{P0:1,d:1});var ll=void 0;function sl(){}sl.prototype=new l;sl.prototype.constructor=sl;function Gca(a,b){return m(new n,function(a,b){return function(a){return b.y((new Ke).Xa(null===a?0:a.Y))?tl():ul()}}(a,b))}
+sl.prototype.b=function(){return this};function vl(a,b){return wl(a,b,sb(new tb,function(){return function(a,b){a:for(b=null===b?0:b.Y;;){var f=a.$().y((new Ke).Xa(b));if(f===ul()&&a.aa().Ke())a=a.aa();else{a=f===ul()?(new A).e(I(r(),y()),ul()):(new A).e(a,f);break a}}return a}}(a)))}function Hca(a,b){return wl(a,!1,sb(new tb,function(a,b){return function(a,d){d=null===d?0:d.Y;return a?(new A).e(!0,ul()):(new A).e(!0,b.y((new Ke).Xa(d)))}}(a,b)))}
+function xl(a,b){return wl(a,b,sb(new tb,function(a){return function(b,f){f=null===f?0:f.Y;if(b.z())return(new A).e(b,ul());f=m(new n,function(a,b){return function(a){return a.y((new Ke).Xa(b))}}(a,f));var h=r();f=b.xa(f,h.s);h=r();b=b.Ge(f,h.s).Xf(m(new n,function(){return function(a){a=a.na();var b=tl();return null!==a&&Ea(a,b)}}(a)));var h=m(new n,function(){return function(a){return a.ja()}}(a)),k=r();b=b.xa(h,k.s);return(new A).e(b,f.ek(sb(new tb,function(){return function(a,b){return a.QE(b)}}(a))))}}(a)))}
+function yl(a,b){return Hca(a,m(new n,function(a,b){return function(a){return b.y((new Ke).Xa(null===a?0:a.Y))?tl():zl()}}(a,b)))}function wl(a,b,d){b=(new Al).j(b);return m(new n,function(a,b,d){return function(a){a=qb(b,d.Ba,(new Ke).Xa(null===a?0:a.Y));if(null===a)throw(new q).j(a);var e=a.na();d.Ba=a.ja();return e}}(a,d,b))}function Ica(a,b){return vl(a,(new w).f([yl(a,b),m(new n,function(a,b){return function(a){return b.y((new Ke).Xa(null===a?0:a.Y))?tl():ul()}}(a,b))]))}
+sl.prototype.$classData=g({S0:0},!1,"org.nlogo.lex.LexOperations$",{S0:1,d:1});var Xl=void 0;function Yl(){Xl||(Xl=(new sl).b());return Xl}function Zl(){}Zl.prototype=new l;Zl.prototype.constructor=Zl;Zl.prototype.b=function(){return this};function $l(a){var b;am||(am=(new Zl).b());b=am;return wl(Yl(),!1,sb(new tb,function(a,b){return function(a,d){d=null===d?0:d.Y;return a?(new A).e(!0,ul()):(new A).e(!0,d===b?tl():zl())}}(b,a)))}
+Zl.prototype.$classData=g({T0:0},!1,"org.nlogo.lex.LexOperations$PrefixConversions$",{T0:1,d:1});var am=void 0;function bm(){this.vW=null;this.a=!1}bm.prototype=new l;bm.prototype.constructor=bm;function Jca(){}Jca.prototype=bm.prototype;
+bm.prototype.b=function(){cm||(cm=(new dm).b());var a=(new A).e(",",cm),b=Kca(),b=(new A).e("{",b);em||(em=(new fm).b());for(var d=(new A).e("}",em),e=im(),e=(new A).e("(",e),f=jm(),f=(new A).e(")",f),h=km(),h=(new A).e("[",h),k=lm(),a=[a,b,d,e,f,h,(new A).e("]",k)],b=dc(new ec,gc()),d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.vW=b.Oa;this.a=!0;return this};
+function Lca(a){return(new A).e(yl(Yl(),m(new n,function(a){return function(d){var e=null===d?0:d.Y;d=Mca(a);e=ba.String.fromCharCode(e);return d.ib(e)}}(a))),m(new n,function(a){return function(d){var e=Mca(a).$b(d);if(e.z())return F();e=e.X();return(new J).j((new ac).Bd(d,e,null))}}(a)))}
+function Nca(a){return(new A).e(Ica(Yl(),m(new n,function(){return function(a){a=null===a?0:a.Y;return Fca().ib(a)}}(a))),m(new n,function(){return function(a){return(new J).j((new ac).Bd(a,mm(),a.toUpperCase()))}}(a)))}function Oca(a){return(new A).e(vl(Yl(),(new w).f([$l(59),Gca(Yl(),m(new n,function(){return function(a){a=null===a?0:a.Y;return 13!==a&&10!==a}}(a)))])),m(new n,function(){return function(a){return(new J).j((new ac).Bd(a,nm(),null))}}(a)))}
+bm.prototype.IC=function(a){return a.ta()?(a=I(r(),(new w).f([Pca(this),Lca(this),Oca(this),Qca(this),Rca(this),Nca(this),Sca(this)])).Gb((new A).e(F(),a),sb(new tb,function(){return function(a,d){d=(new A).e(a,d);var e=d.lb;a=d.Db;if(null!==e){var f=e.ja(),e=e.na();if(Fk(f)&&(f=f.U,null!==a))return(new A).e((new J).j(f),e)}a=d.lb;e=d.Db;if(null!==a&&(f=a.ja(),a=a.na(),F()===f&&null!==e)){f=e.na();d=a.hp;e=e.ja();om(a.xk);b:{var h=(new pm).b();c:for(;;){var k=Tca(a);if(Fk(k)&&(k=k.U,k=null===k?0:
+k.Y,e.y((new Ke).Xa(k)).Bw())){h=qm(h,k);continue c}e=h.rc.Xb;break b}}a.xk.Oq();k=e.length|0;h=a.xk;k=(new Vb).ia(k,k>>31);h.Mn.Pv(k);rm(h,sm(h)-k.la|0);a.hp=a.hp+(e.length|0)|0;e=(new A).e(e,a);if(null===e)throw(new q).j(e);h=e.ja();e=e.na();if(""===h)f=F();else if(f=f.y(h),f.z())f=F();else{f=f.X();if(null===f)throw(new q).j(f);f=(new J).j((new A).e(tm(new um,f.fb,f.Eb,f.tf,vm(new wm,d,e.hp,a.cb)),a))}f.z()?(a.xk.Oq(),a.hp=d,d=F()):d=f;d.z()?d=F():(d=d.X(),d=(new J).j((new A).e((new J).j(d.ja()),
+d.na())));return d.z()?(new A).e(F(),a):d.X()}throw(new q).j(d);}}(this))),(new A).e(a.ja().X(),a.na())):(new A).e(xm(),a)};function Sca(a){return(new A).e(Hca(Yl(),m(new n,function(){return function(){return tl()}}(a))),m(new n,function(){return function(a){return(new J).j((new ac).Bd(a,ym(),"This non-standard character is not allowed."))}}(a)))}
+function Qca(a){return(new A).e(vl(Yl(),(new w).f([xl(Yl(),(new w).f([yl(Yl(),m(new n,function(){return function(a){a=null===a?0:a.Y;return Fh(Gh(),a)}}(a))),vl(Yl(),(new w).f([xl(Yl(),(new w).f([$l(46),$l(45)])),xl(Yl(),(new w).f([yl(Yl(),m(new n,function(){return function(a){a=null===a?0:a.Y;return Fh(Gh(),a)}}(a))),vl(Yl(),(new w).f([$l(46),yl(Yl(),m(new n,function(){return function(a){a=null===a?0:a.Y;return Fh(Gh(),a)}}(a)))]))]))]))])),Gca(Yl(),m(new n,function(){return function(a){a=null===
+a?0:a.Y;return Fca().ib(a)}}(a)))])),m(new n,function(){return function(a){a:{for(var d=(new Sb).c(a),e=0;;){if(e<(d.R.length|0))var f=d.W(e),f=null===f?0:f.Y,f=!1===Fh(Gh(),f);else f=!1;if(f)e=1+e|0;else break}if(e!==(d.R.length|0)){d=uh(Ph(),a);if(zm(d)){d=d.U;a=(new J).j((new ac).Bd(a,ym(),d));break a}if(Am(d)){d=d.U;a=(new J).j((new ac).Bd(a,Bm(),d));break a}throw(new q).j(d);}a=F()}return a}}(a)))}
+function Rca(a){return(new A).e(vl(Yl(),(new w).f([$l(34),Uca(a),$l(34)])),m(new n,function(){return function(a){var d;var e=(new Sb).c(a),e=Cm(e,1),e=(new Sb).c(e),f=e.R.length|0,h=0,k=!1;b:for(;;){if(h!==f){var p=1+h|0,h=e.W(h),h=null===h?0:h.Y,k=!(!0===!!k&&92===h)&&92===h,h=p;continue b}break}e=!!k;try{if(1===(a.length|0))var t=!0;else var x=(new Sb).c(a),E=Dm(x),t=34!==(null===E?0:E.Y);if(t||e)d=(new J).j((new ac).Bd(u((new v).G((new w).f(["",""])),(new w).f([a])),ym(),"Closing double quote is missing"));
+else{var S=Lg(),U=(new Sb).c(a),ga=U.R.length|0,ma=He(Ie(),U.R,1,ga),va=(new Sb).c(ma),Ia=qj(S,Cm(va,1));d=(new J).j((new ac).Bd(u((new v).G((new w).f(["",""])),(new w).f([a])),Bm(),Ia))}}catch($a){if($a&&$a.$classData&&$a.$classData.n.vn)d=(new J).j((new ac).Bd(u((new v).G((new w).f(["",""])),(new w).f([a])),ym(),"Illegal character after backslash"));else throw $a;}return d}}(a)))}
+function Uca(a){return wl(Yl(),(new J).j((new Ke).Xa(34)),sb(new tb,function(){return function(a,d){d=null===d?0:d.Y;if(Fk(a)){var e=a.U;if(92===(null===e?0:e.Y)&&34===d)return(new A).e((new J).j((new Ke).Xa(34)),tl())}return Fk(a)&&(a=a.U,92===(null===a?0:a.Y)&&92===d)?(new A).e(F(),tl()):34===d?(new A).e((new J).j((new Ke).Xa(34)),ul()):10===d?(new A).e(F(),zl()):(new A).e((new J).j((new Ke).Xa(d)),tl())}}(a)))}
+function Mca(a){if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/lex/TokenLexer.scala: 12");return a.vW}
+function Pca(a){var b=Vca(a);return(new A).e(vl(Yl(),(new w).f([b,xl(Yl(),(new w).f([$l(125),$l(10),$l(13)]))])),m(new n,function(){return function(a){var b=(new Sb).c(a),b=He(Ie(),b.R,0,2);if(null===b||"{{"!==b)a=F();else if(b=(new Sb).c(a),b=Dm(b),10===(null===b?0:b.Y)?b=!0:(b=(new Sb).c(a),b=Dm(b),b=13===(null===b?0:b.Y)),b)a=(new J).j((new ac).Bd("",ym(),"End of line reached unexpectedly"));else{var b=(new Sb).c(a),f=F(),h=b.R.length|0,k=0,p=0,t=f;b:for(;;){if(k!==h){f=1+k|0;k=b.W(k);k=null===
+k?0:k.Y;p|=0;c:{if(Fk(t)){var x=t.U;if(123===(null===x?0:x.Y)&&123===k){p=1+p|0;t=k=F();break c}}if(Fk(t)&&(t=t.U,125===(null===t?0:t.Y)&&125===k)){p=-1+p|0;t=k=F();break c}t=k=(new J).j((new Ke).Xa(k))}k=f;continue b}break}a=0<(p|0)?(new J).j((new ac).Bd("",ym(),"End of file reached unexpectedly")):(new J).j((new ac).Bd(a,Wca(),a))}return a}}(a,b)))}function Em(){}Em.prototype=new l;Em.prototype.constructor=Em;Em.prototype.b=function(){return this};
+function Xca(a,b){Yca||(Yca=(new Fm).b());if((a=(new Gm).c(a))&&a.$classData&&a.$classData.n.sH)b=(new Hm).GU(a,0,b);else{var d=new Hm;Hm.prototype.GU.call(d,Zca(a),0,b);b=d}return b}Em.prototype.$classData=g({Y0:0},!1,"org.nlogo.lex.WrapStringInput$",{Y0:1,d:1});var $ca=void 0;function Fm(){}Fm.prototype=new l;Fm.prototype.constructor=Fm;Fm.prototype.b=function(){return this};Fm.prototype.$classData=g({Z0:0},!1,"org.nlogo.lex.WrappedInput$",{Z0:1,d:1});var Yca=void 0;function Im(){this.ZC=null}
+Im.prototype=new l;Im.prototype.constructor=Im;function ada(a){var b=bda(a);a.ZC.ua(m(new n,function(a){return function(b){var d=Jm(a,"OTPL");Ob(d,b.je);b.qi.M(d.h)}}(a)));var d=bda(a);(null===d?null===b:d.o(b))||ada(a)}function bda(a){var b=a.ZC;a=m(new n,function(){return function(a){return a.qi.N()}}(a));var d=r();return b.xa(a,d.s).ob()}Im.prototype.G=function(a){this.ZC=a;return this};Im.prototype.$classData=g({$0:0},!1,"org.nlogo.parse.AgentTypeChecker",{$0:1,d:1});function Km(){}
+Km.prototype=new l;Km.prototype.constructor=Km;Km.prototype.b=function(){return this};
+function cda(a,b,d){for(;;){var e=b.$(),f=(new Lm).Jf(e).ri.kb,h=lm();if(null!==f&&f===h)return(new ac).Bd((new Mm).G(a),b.aa().aa(),d);dda((new Lm).Jf(e),d)?eda(Nm(),Om(d,e.Yb.toUpperCase()),e):("-\x3e"===(new Lm).Jf(e).ri.Yb?f=!0:(f=e.kb,h=bg(),f=!(null!==f&&f===h)),f?(Sg(),f=u((new v).G((new w).f(["Expected a variable name here"])),y()),e=e.sa,Rg(f,e.Ua,e.$a,e.cb)):(f=r(),a=a.mc(e,f.s),b=b.aa(),f=r(),d=e=qc(d,I(f,(new w).f([e.Yb.toUpperCase()])),Pm())))}}
+function fda(a,b){var d=a.$();if(Qm((new Lm).Jf(d)))d=(new J).j(cda(I(r(),y()),a.aa(),b));else if(d=a.$(),"-\x3e"===(new Lm).Jf(d).ri.Yb)d=(new J).j((new ac).Bd((new Rm).od(!0),a.aa(),b));else if(Qm((new Lm).Jf(d)))d=F();else if(dda((new Lm).Jf(d),b))d=gda(I(r(),(new w).f([d])),a.aa(),b);else{a=a.aa();var e=r();b=qc(b,I(e,(new w).f([d.Yb.toUpperCase()])),Pm());e=a.$();if("-\x3e"===(new Lm).Jf(e).ri.Yb){var e=d.kb,f=mm();null!==e&&e===f||Sm(d.Y)||hda(d.Y)?d=(new J).j((new ac).Bd((new Tm).Jf(d),a.aa(),
+b)):(Sg(),a=u((new v).G((new w).f(["Expected a variable name here"])),y()),d=d.sa,Rg(a,d.Ua,d.$a,d.cb),d=void 0)}else var f=e.kb,h=km(),d=null!==f&&f===h?F():gda(I(r(),(new w).f([d,e])),a.aa(),b)}return d}
+function ida(a,b,d){if(b.oe(m(new n,function(){return function(a){return"-\x3e"===a.Yb}}(a)))){var e=b.Cg();if(e.z())e=!1;else var e=e.X().kb,f=km(),e=null!==e&&e===f}else e=!1;e?(e=b.wn(),e.z()?e=!1:(e=e.X().kb,f=lm(),e=null!==e&&e===f)):e=!1;if(e){b=b.ee(1).Wd(1);d=fda(b,d);if(d.z())return F();e=d.X();if(null!==e)d=e.fb,b=e.Eb,e=e.tf,a=m(new n,function(a,b){return function(a){if(null!==a){var d=a.Yb,e=a.kb,f=a.Y;if(bg()===e&&Sm(f)&&b.vk().ib(a.Yb.toUpperCase()))return ih(a,(new Um).eE(d.toUpperCase(),
+!1),a.Yb,a.kb)}return a}}(a,d)),f=r(),a=b.xa(a,f.s),a=(new ac).Bd(d,a,e);else throw(new q).j(e);return(new J).j(a)}return F()}function gda(a,b,d){for(;;){var e=b.$();if("-\x3e"===(new Lm).Jf(e).ri.Yb)if(1<a.ra()){Sg();var f=a.$().Oc().Ua,h=a.hd();Rg("An anonymous procedures of two or more arguments must enclose its argument list in brackets",f,h.Oc().$a,e.sa.cb)}else e=a.$(),eda(Nm(),Om(d,e.Yb.toUpperCase()),e);else{if(Qm((new Lm).Jf(e)))return F();f=r();a=a.mc(e,f.s);b=b.aa()}}}
+Km.prototype.$classData=g({e1:0},!1,"org.nlogo.parse.ArrowLambdaScoper$",{e1:1,d:1});var Vm=void 0;function Lm(){this.ri=null}Lm.prototype=new l;Lm.prototype.constructor=Lm;function dda(a,b){return Wm(b,a.ri.Yb.toUpperCase())?!hda(a.ri.Y):!1}Lm.prototype.Jf=function(a){this.ri=a;return this};function Qm(a){a=a.ri.kb;var b=km();return null!==a&&a===b}Lm.prototype.$classData=g({f1:0},!1,"org.nlogo.parse.ArrowLambdaScoper$RichToken$2",{f1:1,d:1});function Xm(){this.wT=this.fW=this.mT=null;this.a=0}
+Xm.prototype=new l;Xm.prototype.constructor=Xm;
+Xm.prototype.b=function(){Ym=this;for(var a=Pba(),b=null,b=[],d=a.m.length,e=0;e<d;){var f=(new A).e(a.m[e],e);b.push(f);e=1+e|0}a=ka(Wa(Zm),b);a=Xb(new Yb,(new $m).Mh(a),m(new n,function(){return function(a){return null!==a}}(this)));b=m(new n,function(){return function(a){if(null!==a){var b=a.Ec();a=a.ja().toUpperCase();b=Qba(Jg(),b);return(new A).e(a,b)}throw(new q).j(a);}}(this));d=(new an).Dg(pa(Zm));a.ga.ua(m(new n,function(a,b,d){return function(e){return a.Bl.y(e)?d.Qa(b.y(e)):void 0}}(a,
+b,d)));a=d.Da();b=dc(new ec,gc());d=0;for(e=a.m.length;d<e;)hc(b,a.m[d]),d=1+d|0;a=b.Oa;b=Jg();d=Pba();e=d.m.length;for(f=0;;){if(f<e)var h=d.m[f],h=!bn(cn(),"gray",h);else h=!1;if(h)f=1+f|0;else break}e=f;b=Qba(b,e>=d.m.length?-1:e);this.mT=a.Aj((new A).e("GREY",b));this.a=(1|this.a)<<24>>24;a=(new A).e("FALSE",!1);b=(new A).e("TRUE",!0);d=rh();a=[a,b,(new A).e("NOBODY",d),(new A).e("E",2.718281828459045),(new A).e("PI",3.141592653589793)];b=dc(new ec,gc());d=0;for(e=a.length|0;d<e;)hc(b,a[d]),d=
+1+d|0;this.fW=b.Oa;this.a=(2|this.a)<<24>>24;if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/Constants.scala: 13");this.wT=this.fW.sk(jda(this));this.a=(4|this.a)<<24>>24;return this};function jda(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/Constants.scala: 10");return a.mT}
+Xm.prototype.us=function(a){if(0===(4&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/Constants.scala: 20");return this.wT.$b(a.toUpperCase())};Xm.prototype.$classData=g({o1:0},!1,"org.nlogo.parse.Constants$",{o1:1,d:1});var Ym=void 0;function dn(){}dn.prototype=new l;dn.prototype.constructor=dn;dn.prototype.b=function(){return this};dn.prototype.$classData=g({r1:0},!1,"org.nlogo.parse.DelayedBlock$",{r1:1,d:1});
+var kda=void 0;function Ac(){this.aS=0;this.dS=this.cS=this.bS=this.lH=this.eH=this.cH=this.bH=this.dH=null;this.a=0}Ac.prototype=new l;Ac.prototype.constructor=Ac;
+function lda(a,b,d,e,f,h){var k=I(Dc(),y()),p=en(b),t=-1+p|0;if(!(0>=p))for(p=0;;){var x=p,E=b.Ma,S=-1+fn(b.Ma)|0;k.zj(gn(a,b,f,d,e,Bi(E,x<S?x:S)|0,h));if(p===t)break;p=1+p|0}hn(b)&&(t=f.$().kb,p=km(),null!==t&&t===p?d=gn(a,b,f,d,e,jn(b.Ma)|0,h):(a=f.$().Oc().cb,b=k.wn(),b.z()?b=F():(b=b.X(),b=(new J).j(b.Oc().$a)),d=(b.z()?d.$a:b.X())|0,d=Bb(new Cb,(new Fb).c(a),vm(new wm,d,d,a),!0)),k.zj(d));return k.Ic()}
+Ac.prototype.b=function(){zc=this;this.aS=-1;this.a|=1;this.dH="Expected command.";this.a|=2;this.bH="Expected closing bracket.";this.a|=4;this.cH="Expected a closing parenthesis here.";this.a|=8;this.eH="Expected reporter.";this.a|=16;this.lH="To use a non-default number of inputs, you need to put parentheses around this.";this.a|=32;this.bS="No closing bracket for this open bracket.";this.a|=64;this.cS="No closing parenthesis for this open parenthesis.";this.a|=128;this.dS="Missing input on the left.";
+this.a|=256;return this};function mda(a,b){if(null===b)throw(new ye).b();return b.Na?b.jb:ze(b,kn(a)?" on the right":"")}
+function nda(a,b,d,e,f,h){if(d&&ln(b)){d=e.Oc();var k=gh(e.Xx());a:{var p=b.Ma,t=I(r(),y());for(;;){var x=f.$();if(null!==x){var E=x.kb;if(jm()===E){f=t;break a}}if(null!==x&&(E=x.kb,x=x.Y,bg()===E&&x&&x.$classData&&x.$classData.n.ca&&(p.$()|0)!==Jj(D())&&kn(x.H()))){Sg();if(t.Ha()!==mn(b)){f=a;if(0===(32&f.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/ExpressionParser.scala: 702");Rg(f.lH,d.Ua,d.$a,d.cb)}f=t;break a}x=
+gn(a,b,f,d,k,p.$()|0,h);p=p.aa().Ke()?p.aa():p;E=r();t=t.mc(x,E.s)}}}else d=e.Oc(),f=lda(a,b,d,gh(e.Xx()),f,h);d=e.Oc();return oda(a,b,f,d,gh(e.Xx()),h)}
+function pda(a,b,d,e){var f=b.bz().aa().Ta().$m(),h=!nn(D(),d,Bj(D()));if(nn(D(),d,Qj())){if(b&&b.$classData&&b.$classData.n.cQ)a=b.DC;else{if(!(b&&b.$classData&&b.$classData.n.bQ))throw(new q).j(b);a=b.bz()}d=a.Wd(2);e=I(r(),y());a:for(;;){if(d.z())e.z()||(d=e.$().kb,e=im(),null!==d&&d===e&&(Sg(),d=b.bz().hd().Oc(),Rg("Expected close paren here",d.Ua,d.$a,d.cb)));else{f=d.$().kb;h=km();null!==f&&f===h?(f=d.aa(),d=d.$(),h=r(),e=e.Qc(d,h.s),d=f):(f=d.$().kb,h=im(),null!==f&&f===h?(f=d.aa(),d=d.$(),
+h=r(),e=e.Qc(d,h.s),d=f):(f=d.$().kb,h=lm(),null!==f&&f===h?(e.z()?f=!1:(f=e.$().kb,h=im(),f=null!==f&&f===h),f&&(Sg(),f=d.$().Oc(),Rg("Expected close paren before close bracket here",f.Ua,f.$a,f.cb)),e.z()?f=!0:(f=e.$().kb,h=km(),f=!(null!==f&&f===h)),f&&(Sg(),f=d.$().Oc(),Rg("Closing bracket has no matching open bracket here",f.Ua,f.$a,f.cb)),d=d.aa(),e=e.aa()):(f=d.$().kb,h=jm(),null!==f&&f===h?(e.z()?f=!1:(f=e.$().kb,h=km(),f=null!==f&&f===h),f&&(Sg(),f=d.$().Oc(),Rg("Expected close bracket before close paren here",
+f.Ua,f.$a,f.cb)),e.z()?f=!0:(f=e.$().kb,h=im(),f=!(null!==f&&f===h)),f&&(Sg(),f=d.$().Oc(),Rg("Closing paren has no matching open paren here",f.Ua,f.$a,f.cb)),d=d.aa(),e=e.aa()):d=d.aa())));continue a}break}d=(new on).G(a.aa().Wd(2));d.L(a.$());e=a.$().Oc().Ua;b=b.Oc().$a;a=a.$();return pn(new Jb,d,vm(new wm,e,b,a.Oc().cb))}if(b.kE()&&!b.Su())return qda(a,b.ze,b,f);if(b.kE()&&b.Su())return rda(a,b.ze,b,f);if(nn(D(),d,Mj(D()))){a=sda(a,d,e,b,f);if(null===a)throw(new q).j(a);d=a.na();return Db(new Eb,
+a.ja(),vm(new wm,b.Rg.sa.Ua,d.sa.$a,d.sa.cb))}if(nn(D(),d,Lj(D()))){a=tda(a,f,e,b);if(null===a)throw(new q).j(a);d=a.na();return qn(vm(new wm,b.Rg.sa.Ua,d.sa.$a,d.sa.cb),a.ja(),!1)}if(nn(D(),d,Jj(D()))&&!b.Su()&&h)return qda(a,(new Rm).od(!1),b,f);if(nn(D(),d,Kj(D()))&&b.Su()&&h)return rda(a,(new Rm).od(!1),b,f);if(nn(D(),d,Bj(D()))){d=uda(vda(new rn,wda()),b.Rg,f);if(null===d)throw(new q).j(d);a=d.na();d=(new sn).j(d.ja());e=Bm();d.L(tm(new um,"",e,null,vm(new wm,b.Rg.sa.Ua,a.sa.$a,a.sa.cb)));return pn(new Jb,
+d,vm(new wm,b.Rg.sa.Ua,a.sa.$a,a.sa.cb))}Sg();a=u((new v).G((new w).f(["Expected "," here, rather than a list or block."])),(new w).f([Tj(Wj(),d)]));b=b.Oc();Rg(a,b.Ua,b.$a,b.cb)}function tn(a,b,d){return d.Na?d.jb:xda(a,b,d)}
+function yda(a,b,d,e,f,h){var k=b.$(),p=f===(Jj(D())|Kj(D())),t=p||f===Jj(D()),x=p||f===Kj(D()),E=k.kb;if(im()===E){var S=k.sa.cb,U=b.ma();Je();var ga=U.kb,ma=im();un(0,null!==ga&&ga===ma);var va=zda(a,b,!0,f,h);Sg();var Ia=b.$().kb,$a=ag();if(null!==Ia&&Ia===$a){var ub=vn(a),vb=k.sa;Rg(ub,vb.Ua,vb.$a,vb.cb)}var Mb=b.ma();Sg();var Jc=Mb.kb,ab=Bc();if(null!==Jc&&Jc===ab){var fc=vn(a),Cc=U.sa;Rg(fc,Cc.Ua,Cc.$a,Cc.cb)}Sg();var rf=Mb.kb,Wf=jm();if(null===rf||rf!==Wf){var vh=Ada(a),Te=Mb.sa;Rg(vh,Te.Ua,
+Te.$a,Te.cb)}var sf=va.Tt(vm(new wm,U.sa.Ua,Mb.sa.$a,S))}else if(km()===E){var hk;a:{var qg=(new wn).ap((new xn).Dg(pa(Bda))),wh=0;for(;;){var rg=b.ma(),bi=rg.kb,Vi=km();if(null!==bi&&bi===Vi)var ik=qg.zj(rg),Wi=1+wh|0,qg=ik,wh=Wi;else{var jk=rg.kb,Xi=lm();if(null!==jk&&jk===Xi){if(1===wh){hk=qg.zj(rg).Ic();break a}var Bl=qg.zj(rg),Yi=-1+wh|0,qg=Bl,wh=Yi}else{var kk=rg.kb,Zi=Bc();if(null===kk||kk!==Zi)qg=qg.zj(rg);else{Sg();var Cl=yn(a),xh=k.sa;Rg(Cl,xh.Ua,xh.$a,xh.cb)}}}}}var Dl=hk.Ic();kda||(kda=
+(new dn).b());a:{var yh=Dl.aa(),lk;Vm||(Vm=(new Km).b());lk=Vm;var El=r(),ci=ida(lk,yh.Qc(k,El.s),h);if(Fk(ci)){var di=ci.U;if(null!==di){var Fl=di.fb,Gl=di.Eb,Hl=di.tf,mk=yh.hd(),Il=r(),Jl=yh.Qc(k,Il.s),Kl=xm(),Ll=r(),nk=new zn,Ml=Jl.mc(Kl,Ll.s);zn.prototype.HU.call(nk,k,Fl,Gl,mk,Ml,Hl,vm(new wm,k.sa.Ua,mk.sa.$a,k.sa.cb));sf=nk;break a}}if(F()===ci){var ei=new An,ok=yh.wn();if(ok.z())var zh=F();else var Nl=ok.X(),zh=(new J).j(Nl.sa.$a);var $i=(zh.z()?k.sa.$a:zh.X())|0;An.prototype.IU.call(ei,k,yh,
+h,vm(new wm,k.sa.Ua,$i,k.sa.cb));sf=ei}else throw(new q).j(ci);}}else if(bg()!==E&&ag()!==E||!nn(D(),f,Rj()))if(bg()===E||Bm()===E){b.ma();var pk=k.kb;if(Bm()===pk){var Ah=(new sn).j(k.Y);Ah.L(k);var Yf=(new A).e(Ah.H(),pn(new Jb,Ah,k.sa))}else{bg()!==pk&&Bn(Cn(),"unexpected token type: "+k.kb);var xe=k.Y;if(Dn(xe)||Sm(xe))if(f===Rj())Yf=(new A).e(xe.H(),pn(new Jb,xe,k.sa));else{Cda||(Cda=(new En).b());var Bh;if(Sm(xe)){var fi=h.us(k.Yb.toUpperCase()),qk=(new Fn).Jf(k);if(fi.z())bj=F();else var aj=
+md(new nd,qk),Ol=fi.X(),bj=aj.Wc(Ol);if(bj.z())Bh=F();else{var Pl=bj.X();Bh=(new J).j((new A).e(Pl,h))}}else Bh=F();if(Bh.z())var cj=F();else{var dj=Bh.X();if(null===dj)throw(new q).j(dj);var rk=dj.ja(),cj=(new J).j((new A).e(rk.H(),pn(new Jb,rk,k.sa)))}if(cj.z()){Sg();var Ql=dh(),ej=[k.Yb.toUpperCase()],gi=Ql.im.$b("compiler.LetVariable.notDefined");if(!Fk(gi)){if(F()===gi)throw(new Ne).c(u((new v).G((new w).f(["coding error, bad translation key: "," for Errors"])),(new w).f(["compiler.LetVariable.notDefined"])));
+throw(new q).j(gi);}var Rl=gi.U,Xg=ej.length|0;if(0>=Xg)var Yg=0;else var sk=Xg>>31,Yg=(0===sk?-1<(-2147483648^Xg):0<sk)?-1:Xg;r();Gn();var fj=[],Ch=0,tk=ej.length|0;0>Yg&&Hn(Ln(),0,Xg,1,!1);for(var Sl=tk<Yg?tk:Yg;Ch<Sl;){var uk=ej[Ch],Zg=Ch;0>Yg&&Hn(Ln(),0,Xg,1,!1);if(0>Zg||Zg>=Yg)throw(new P).c(""+Zg);var Tl=(new A).e(uk,Zg);fj.push(Tl);Ch=1+Ch|0}var gj=fj.length|0,hi=0,Dh=Rl;a:for(;;){if(hi!==gj){var Ul=1+hi|0,sg=(new A).e(Dh,fj[hi]);b:{var ji,Eh=sg.lb,hj=sg.Db;if(null!==hj){var $g=hj.ja(),ij=
+hj.Ec();if(Ag($g)){var jj=$g;ji=Qb(Ha(),Eh,u((new v).G((new w).f(["\\\\{","\\\\}"])),(new w).f([""+ij])),jj);break b}}throw(new q).j(sg);}hi=Ul;Dh=ji;continue a}break}var ki=k.sa;Rg(Dh,ki.Ua,ki.$a,ki.cb)}Yf=cj.X()}else if(!kn(xe.H())||t)Yf=(new A).e(xe.H(),pn(new Jb,xe,k.sa));else{if(!Mn(xe)||!d)throw(new Nn).Jf(k);var li=(new On).b();li.L(k);Yf=(new A).e(li.H(),pn(new Jb,li,k.sa))}}if(null===Yf)throw(new q).j(Yf);var kj=Yf.ja(),Zf=Yf.na(),uf;if(uf=t&&!d){var ee;a:{var lj=Zf.se;if(nn(D(),lj.H().Sa,
+Qj()|Rj()))ee=!0;else{for(var tg=lj.H().Ma;!tg.z();){var mj=tg.$()|0;if(nn(D(),mj,Qj()|Rj())){ee=!0;break a}tg=tg.aa()}ee=!1}}uf=!ee}var nj;if(uf&&(p||0<mn(kj))){var mi=Zf.se,ni=Dda(a,mn(mi.H()),mi.K(),h);if(null===ni)throw(new q).j(ni);var Vl=ni.na(),vk=(new Pn).Bu((new Qn).G(ni.ja()));vk.L(mi.K());nj=(new Jb).Yf(vk,I(r(),(new w).f([Eda(Zf,Vl)])),mi.K().sa)}else nj=Eda(Zf,nda(a,kj,d,Zf,b,h));sf=nj}else{if(ag()!==E||!x)throw(new Rn).Jf(k);b.ma();var ah=k.Y;if(!ah.H().Tr)throw(new Rn).Jf(k);var oi=
+Dda(a,mn(ah.H()),ah.K(),h);if(null===oi)throw(new q).j(oi);var Wl=oi.ja(),wk=oi.na();if(hn(ah.H()))var ii=Bb(new Cb,(new Fb).c(k.sa.cb),k.sa,!0),LF=r(),Cw=wk.mc(ii,LF.s);else Cw=wk;var gx=(new Sn).Bu((new Qn).G(Wl));gx.L(k);var qG=(new Hb).hj(ah,Cw,k.sa),Gr=qn(k.sa,I(r(),(new w).f([qG])),!0),sf=(new Jb).Yf(gx,I(r(),(new w).f([Gr])),k.sa)}else{b.ma();var hx=(new Tn).b();ih(k,hx,k.Yb,k.kb);sf=pn(new Jb,hx,k.sa)}for(var yk=sf,In=!1;!In;){var gm=b.$(),ix=gm.kb,Hr=bg();if(null!==ix&&ix===Hr){var Jn=gm.Y,
+zk=Jn.H();if(kn(zk)&&(zk.mp>e||zk.Js&&zk.mp===e)){b.ma();Sg();if(null===yk){var sG=Fda(a),Ir=gm.sa;Rg(sG,Ir.Ua,Ir.$a,Ir.cb)}var hm=vm(new wm,yk.Oc().Ua,gm.sa.$a,gm.sa.cb),Jr=lda(a,zk,hm,gh(Jn),b,h),tG=yk,uG=r(),Kn=oda(a,zk,Jr.Qc(tG,uG.s),hm,gh(Jn),h),vG=Kn.hd().Oc().$a,yk=(new Jb).Yf(Jn,Kn,vm(new wm,hm.Ua,vG,hm.cb))}else In=!0}else In=!0}return yk}
+function gn(a,b,d,e,f,h,k){try{return yda(a,d,!1,b.mp,h,k)}catch(p){if(d=Un(vg(),p),null!==d)if(d&&d.$classData&&d.$classData.n.wB||d&&d.$classData&&d.$classData.n.xB)Sg(),a=Vn(a,b,f,!0),Rg(a,e.Ua,e.$a,e.cb);else throw ug(vg(),d);else throw p;}}
+function Ec(a,b,d,e){var f=b.$(),h=f.kb;if(im()===h){f=f.sa.cb;d=b.ma();Je();var h=d.kb,k=im();un(0,null!==h&&h===k);e=Ec(a,b,!0,e);b=b.ma();Sg();h=b.kb;k=Bc();null!==h&&h===k&&(h=vn(a),k=d.sa,Rg(h,k.Ua,k.$a,k.cb));Sg();h=b.kb;k=jm();if(null===h||h!==k)a=Ada(a),h=b.sa,Rg(a,h.Ua,h.$a,h.cb);b=(new A).e(e,vm(new wm,d.sa.Ua,b.sa.$a,f));a=b.lb;f=b.Db;if(null!==a)b=a.na(),a=a.ja();else throw(new q).j(b);return(new A).e((new Hb).hj(a.zd,a.za,f),b)}if(ag()===h){b.ma();var h=f.Y,k=b.$().kb,p=Bc(),p=null===
+k||k!==p?(new J).j(b.$()):F();Gda||(Gda=(new Wn).b());a:{var t=!1,k=null;if(Xn(h)){var t=!0,k=h,x=k.Zc;if(F()===x){t=!1;x=null;if(Fk(p)&&(t=!0,x=p,p=x.U,null!==p)){var E=p.Yb,S=p.kb;if(bg()===S){t=E.toUpperCase();x=(new Yn).c(t);E=e.us(t);E.z()||(E=E.X(),Sg(),E="There is already a "+Zn(Nm(),E)+" called "+t,p=p.sa,Rg(E,p.Ua,p.$a,p.cb));k=(new J).j((new A).e(Hda(k,x),Ida(e,t,(new $n).As(x))));break a}}t&&(k=x.U,Sg(),k=k.sa,Rg("Expected variable name here",k.Ua,k.$a,k.cb));k=F();break a}}if(t&&(k=k.Zc,
+Fk(k))){k=k.U;k=(new J).j((new A).e(h,Ida(e,k.wa.toUpperCase(),(new $n).As(k))));break a}k=F()}if(k.z())k=F();else{k=k.X();if(null===k)throw(new q).j(k);p=k.na();k=(new J).j((new A).e(Jda(k.ja(),f.sa),p))}e=k.z()?(new A).e(Jda(h,f.sa),e):k.X();if(null===e)throw(new q).j(e);f=e.ja();e=e.na();a=nda(a,h.H(),d,f,b,e);return(new A).e(Kda(f,a),e)}b=f.Y;if(!Dn(b)&&!Sm(b)||Wm(e,f.Yb.toUpperCase())){Sg();if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/ExpressionParser.scala: 698");
+f=f.sa;Rg(a.dH,f.Ua,f.$a,f.cb)}else{Sg();a=dh();b=[f.Yb.toUpperCase()];a=a.im.$b("compiler.LetVariable.notDefined");if(!Fk(a)){if(F()===a)throw(new Ne).c(u((new v).G((new w).f(["coding error, bad translation key: "," for Errors"])),(new w).f(["compiler.LetVariable.notDefined"])));throw(new q).j(a);}e=a.U;d=b.length|0;0>=d?h=0:(a=d>>31,h=(0===a?-1<(-2147483648^d):0<a)?-1:d);r();Gn();a=[];k=0;p=b.length|0;0>h&&Hn(Ln(),0,d,1,!1);for(p=p<h?p:h;k<p;){t=b[k];x=k;0>h&&Hn(Ln(),0,d,1,!1);if(0>x||x>=h)throw(new P).c(""+
+x);t=(new A).e(t,x);a.push(t);k=1+k|0}b=a.length|0;d=0;h=e;a:for(;;){if(d!==b){e=1+d|0;h=(new A).e(h,a[d]);b:{d=h.lb;p=h.Db;if(null!==p&&(k=p.ja(),p=p.Ec(),Ag(k))){h=k;h=Qb(Ha(),d,u((new v).G((new w).f(["\\\\{","\\\\}"])),(new w).f([""+p])),h);break b}throw(new q).j(h);}d=e;continue a}break}f=f.sa;Rg(h,f.Ua,f.$a,f.cb)}}function Lda(a,b){if(null===b)throw(new ye).b();return b.Na?b.jb:ze(b,ln(a)?" at least":"")}
+function xda(a,b,d){if(null===d)throw(new ye).b();if(d.Na)return d.jb;b=b.Ma;a=function(){return function(a){a|=0;Ha();a=Tj(Wj(),a);if(null===a)throw(new ye).b();var b=kg(jg(),"anything");a=lg(new mg,b,a,a.length|0);ao(a);Nh(a)?(b=(new bo).b(),co(a,b,"any input"),eo(a,b),a=b.k()):a=a.cp;return a}}(a);var e=B().s;if(e===B().s)if(b===y())a=y();else{var e=b.$(),f=e=Ng(new Og,a(e),y());for(b=b.aa();b!==y();){var h=b.$(),h=Ng(new Og,a(h),y()),f=f.Ia=h;b=b.aa()}a=e}else{for(e=Mc(b,e);!b.z();)f=b.$(),e.Qa(a(f)),
+b=b.aa();a=e.Da()}return ze(d,a)}function qn(a,b,d){b=(new Fb).$o(a.cb,b);return Bb(new Cb,b,a,d)}
+function zda(a,b,d,e,f){try{if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/ExpressionParser.scala: 23");return yda(a,b,d,a.aS,e,f)}catch(h){if(h&&h.$classData&&h.$classData.n.wB)Sg(),a=Fda(a),b=h.ew.sa,Rg(a,b.Ua,b.$a,b.cb);else if(h&&h.$classData&&h.$classData.n.xB){Sg();if(0===(16&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/ExpressionParser.scala: 701");b=
+h.ew.sa;Rg(a.eH,b.Ua,b.$a,b.cb)}else throw h;}}function Mda(a,b){if(null===b)throw(new ye).b();return b.Na?b.jb:ze(b,1<en(a)?"inputs":"input")}function qda(a,b,d,e){e=sda(a,kc(),d.vq,d,e);if(null===e)throw(new q).j(e);a=e.ja();e=e.na();b=(new Pn).Bu(b);b.L(d.Rg);a=I(r(),(new w).f([a]));return(new Jb).Yf(b,a,vm(new wm,d.Rg.sa.Ua,e.sa.$a,d.Oc().cb))}
+function fo(a,b,d,e,f){a=d&&d.$classData&&d.$classData.n.mQ?pda(a,d,b,f):d;Sg();nn(D(),b,a.Nn())||(d=0===(b&vj())&&0!==(a.Nn()&~vj())?a.Nn()&~vj():a.Nn(),b=u((new v).G((new w).f([""," expected this input to be ",", but got "," instead"])),(new w).f([e,Tj(Wj(),b),Tj(Wj(),d)])),e=a.Oc(),Rg(b,e.Ua,e.$a,e.cb));return a}
+function vn(a){if(0===(128&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/ExpressionParser.scala: 705");return a.cS}function tda(a,b,d,e){for(var f=lm(),h=I(Dc(),y());;){var k=b.$().kb;if(null===k||k!==f){Sg();var p=b.$().kb,t=Bc(),k=e.Rg;null!==p&&p===t&&(p=yn(a),k=k.sa,Rg(p,k.Ua,k.$a,k.cb));d=Ec(a,b,!1,d);if(null===d)throw(new q).j(d);k=d.ja();d=d.na();h.zj(k)}else break}a=h.Ic();return(new A).e(a,b.ma())}
+function Vn(a,b,d,e){var f=(new we).b(),h=(new we).b(),k=(new we).b(),p=(new we).b(),t;if(t=e&&ln(b))t=b.Os,t=0===((t.z()?go(b):t.X())|0);d=t?u((new v).G((new w).f([""," expected "," "," on the right or any number of inputs when surrounded by parentheses"])),(new w).f([d,en(b),f.Na?f.jb:Mda(b,f)])):e?u((new v).G((new w).f("; expected; ; ;;".split(";"))),(new w).f([d,h.Na?h.jb:Lda(b,h),en(b),f.Na?f.jb:Mda(b,f),k.Na?k.jb:mda(b,k)])):u((new v).G((new w).f([""," expected "," on the left"])),(new w).f([d,
+Tj(Wj(),b.Sa)]));if(e){a:{for(e=tn(a,b,p);!e.z();){if("any input"!==e.$()){e=!1;break a}e=e.aa()}e=!0}if(e)return u((new v).G((new w).f(["","."])),(new w).f([d]));e=tn(a,b,p);if(1===fn(e))return e=(new v).G((new w).f(["",", ","."])),a=tn(a,b,p),u(e,(new w).f([d,cc(a,"","","")]));e=(new v).G((new w).f(["",", "," and ","."]));f=tn(a,b,p);f=ho(f,1).zb(", ");a=tn(a,b,p);return u(e,(new w).f([d,f,jn(a)]))}return d}
+function Ada(a){if(0===(8&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/ExpressionParser.scala: 700");return a.cH}
+function Dda(a,b,d,e){var f=1>b,h=null,h=(new A).e(I(r(),y()),e);if(!f)for(e=1;;){h=(new A).e(h,e);f=h.lb;if(null!==f){var h=f.ja(),k=Nda(f.na());if(null===k)throw(new q).j(k);var f=k.ja(),k=k.na(),p=r(),h=(new A).e(h.mc(f,p.s),k)}else throw(new q).j(h);if(e===b)break;e=1+e|0}b=h;if(null===b)throw(new q).j(b);b=b.ja();a=m(new n,function(a,b){return function(a){a=(new Um).eE(a,!0);a.L(b);return pn(new Jb,a,vm(new wm,b.sa.Ua,b.sa.$a,b.sa.cb))}}(a,d));d=r();a=b.xa(a,d.s);return(new A).e(b,a)}
+function oda(a,b,d,e,f,h){io||(io=(new jo).b());var k=I(io,d),p=0;if(kn(b)){p=b.Sa;Sg();if(!(1<=d.Ha())){var t=Vn(a,b,f,!1);Rg(t,e.Ua,e.$a,e.cb)}k.pf(0,fo(a,p,d.W(0),f,h));p=1}for(var t=0,x=b.Ma;;){if(t<fn(x)){D();var E=uj(),E=!nn(0,E,Bi(x,t)|0)}else E=!1;if(E){t===(-1+fn(x)|0)&&d.Ha()===(-1+fn(x)|0)?(D(),E=Sj(),E=nn(0,E,Bi(x,t)|0)):E=!1;if(E)return I(ko(),k);Sg();d.Ha()>p||(E=Vn(a,b,f,!0),Rg(E,e.Ua,e.$a,e.cb));k.pf(p,fo(a,Bi(x,t)|0,d.W(p),f,h));t=1+t|0;p=1+p|0}else break}if(t<fn(x)){for(var E=-1+
+d.Ha()|0,S=-1+fn(x)|0;;){if(0<=S){D();var U=uj(),U=!nn(0,U,Bi(x,S)|0)}else U=!1;if(U)Sg(),d.Ha()>E&&-1<E||(U=Vn(a,b,f,!0),Rg(U,e.Ua,e.$a,e.cb)),k.pf(E,fo(a,Bi(x,S)|0,d.W(E),f,h)),S=-1+S|0,E=-1+E|0;else break}for(;p<=E;)k.pf(p,fo(a,Bi(x,t)|0,d.W(p),f,h)),p=1+p|0}return I(ko(),k)}
+function rda(a,b,d,e){a=tda(a,e,d.vq,d);if(null===a)throw(new q).j(a);e=a.ja();a=a.na();b=(new Sn).Bu(b);b.L(d.Rg);e=qn(vm(new wm,d.Rg.sa.Ua,a.sa.$a,d.Oc().cb),e,!1);e=I(r(),(new w).f([e]));return(new Jb).Yf(b,e,vm(new wm,d.Rg.sa.Ua,a.sa.$a,d.Oc().cb))}function Fda(a){if(0===(256&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/ExpressionParser.scala: 706");return a.dS}
+function sda(a,b,d,e,f){b=fo(a,kc(),zda(a,f,!1,b,d),null,d);f=f.ma();Sg();d=f.kb;var h=Bc();e=e.Rg;null!==d&&d===h&&(d=yn(a),e=e.sa,Rg(d,e.Ua,e.$a,e.cb));Sg();e=f.kb;d=lm();if(null===e||e!==d){if(0===(4&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/ExpressionParser.scala: 699");e=f.sa;Rg(a.bH,e.Ua,e.$a,e.cb)}return(new A).e(b,f)}
+function yn(a){if(0===(64&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/ExpressionParser.scala: 704");return a.bS}Ac.prototype.$classData=g({s1:0},!1,"org.nlogo.parse.ExpressionParser$",{s1:1,d:1});var zc=void 0;function lo(){}lo.prototype=new l;lo.prototype.constructor=lo;lo.prototype.b=function(){return this};
+function mo(a,b){var d=!1,e=null;return no(b)&&(d=!0,e=b,a=e.Y,Eg(a))?(b=oo(),$b(b,a,!0,!1)):d?e.K().Yb:po(b)||qo(b)&&b.vj?"":b.K().Yb}function Oda(a,b,d){return Vc(new Wc,"",b,m(new n,function(){return function(a){return mo(0,a)}}(a)),d)}function Pda(){var a=ro();m(new n,function(){return function(a){return mo(0,a)}}(a))}lo.prototype.$classData=g({v1:0},!1,"org.nlogo.parse.Formatter$",{v1:1,d:1});var so=void 0;function ro(){so||(so=(new lo).b());return so}function to(){this.Ht=null}
+to.prototype=new l;to.prototype.constructor=to;function Uc(a){var b=new to;b.Ht=a;return b}function Tc(a,b){return Vc(new Wc,""+a.Ht.Yb+b,a.Ht.ck,a.Ht.om,a.Ht.rf)}to.prototype.$classData=g({w1:0},!1,"org.nlogo.parse.Formatter$RichFormat",{w1:1,d:1});
+function yaa(a,b){b=Faa(a,b);if(null===b)throw(new q).j(b);var d=b.ja();b=b.na();var d=I(r(),(new w).f([(new uo).b(),(new vo).b(),(new wo).b(),new xo])).Gb(d,sb(new tb,function(a){return function(b,d){d=m(new n,function(a,b){return function(a){return b.dh(a)}}(a,d));var e=r();return b.xa(d,e.s)}}(a))),e=(new yo).b();d.ua(m(new n,function(a,b){return function(a){Ob(b,a.je)}}(a,e)));ada((new Im).G(d));e=(new zo).b();a=m(new n,function(a,b){return function(a){return b.dh(a)}}(a,e));e=r();a=d.xa(a,e.s);
+return(new A).e(a,b)}function Wn(){}Wn.prototype=new l;Wn.prototype.constructor=Wn;Wn.prototype.b=function(){return this};Wn.prototype.$classData=g({B1:0},!1,"org.nlogo.parse.LetScope$",{B1:1,d:1});var Gda=void 0;function En(){}En.prototype=new l;En.prototype.constructor=En;En.prototype.b=function(){return this};En.prototype.$classData=g({C1:0},!1,"org.nlogo.parse.LetVariableScope$",{C1:1,d:1});var Cda=void 0;function rn(){this.YG=this.WG=this.VG=this.UG=this.ED=null;this.a=0}rn.prototype=new l;
+rn.prototype.constructor=rn;function uda(a,b,d){for(var e=Qda(Ao(),y()),f=F();!f.ba();){var h=d.ma(),k=h.kb;if(lm()===k)f=(new J).j(h);else if(Bc()===k){Sg();h=a;if(0===(32&h.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/LiteralParser.scala: 25");k=b.sa;Rg(h.YG,k.Ua,k.$a,k.cb)}else e=Bo(e,Co(a,h,d))}return(new A).e(e,f.X())}
+function Co(a,b,d){var e=b.kb;if(Wca()===e)a=a.ED,Sg(),a=Rda(a),b=b.sa,Rg(a,b.Ua,b.$a,b.cb);else{if(Bm()===e)return b.Y;if(km()===e){a=uda(a,b,d);if(null===a)throw(new q).j(a);return a.ja()}if(Kca()===e)a=a.ED,Sg(),b=d.ma(),a=Rda(a),b=b.Oc(),Rg(a,b.Ua,b.$a,b.cb);else{if(im()===e){b=Co(a,d.ma(),d);d=d.ma();Sg();var e=d.kb,f=jm();if(null===e||e!==f){if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/LiteralParser.scala: 20");
+d=d.sa;Rg(a.UG,d.Ua,d.$a,d.cb)}return b}if(nm()===e)return Co(a,d.ma(),d);Sg();if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/LiteralParser.scala: 21");b=b.sa;Rg(a.VG,b.Ua,b.$a,b.cb)}}}
+function vda(a,b){a.ED=b;a.UG="Expected a closing parenthesis.";a.a=(1|a.a)<<24>>24;a.VG="Expected a literal value.";a.a=(2|a.a)<<24>>24;a.a=(4|a.a)<<24>>24;a.WG="Extra characters after literal.";a.a=(8|a.a)<<24>>24;a.a=(16|a.a)<<24>>24;a.YG="No closing bracket for this open bracket.";a.a=(32|a.a)<<24>>24;return a}rn.prototype.$classData=g({F1:0},!1,"org.nlogo.parse.LiteralParser",{F1:1,d:1});function Do(){}Do.prototype=new l;Do.prototype.constructor=Do;
+function Sda(a,b,d){var e=b.Fo;if(Eo(e)){var f=Iba(Rb(),e).ml(m(new n,function(a,b){return function(a){return Wm(b,a.toUpperCase())}}(a,d)),!1),h=m(new n,function(){return function(a){return(new A).e(a,Fo())}}(a)),k=r(),f=f.xa(h,k.s),h=Fba(Rb(),e).ml(m(new n,function(a,b){return function(a){return Wm(b,a.toUpperCase())}}(a,d)),!1),k=m(new n,function(){return function(a){return(new A).e(a,Go())}}(a)),p=r(),h=h.xa(k,p.s),k=r();f.Vc(h,k.s).ua(m(new n,function(a,b,d,e){return function(a){if(null!==a){a=
+a.ja();Sg();var f=Om(d,a.toUpperCase()),f=Zn(Nm(),f);a=u((new v).G((new w).f(["Defining a breed ["," ","] redefines ",", a ",""])),(new w).f([e.Dl.wa,e.Ff.wa,a,f]));f=b.Ck.g.sa;Rg(a,f.Ua,f.$a,f.cb)}else throw(new q).j(a);}}(a,b,d,e)))}}Do.prototype.b=function(){return this};
+function Tda(a,b,d){Sg();var e=d.Ck.wa;if(!(e=a.toLowerCase()!==(null===e?null:e.toLowerCase()))){if(a=!!(b&&b.$classData&&b.$classData.n.Tm))a=d.$n,a=Ho()===b&&Io(a)||Io(b)&&Ho()===a?!0:Jo()===b&&Ko(a)||Ko(b)&&Jo()===a?!0:Ko(b)&&Ko(a)||Io(b)&&Io(a);e=a}a=d.Ck.g;e||(d=d.Ck.wa,b=Zn(Nm(),b),b=u((new v).G((new w).f(["There is already a "," called ",""])),(new w).f([b,d])),d=a.sa,Rg(b,d.Ua,d.$a,d.cb))}
+function Uda(a,b){var d=b.Ta();return(new Lo).Kf(d,m(new n,function(a,b){return function(d){var k=b.fo(m(new n,function(a,b){return function(a){return b!==a}}(a,d)));d=m(new n,function(a,b){return function(a){return(new A).e(b,a)}}(a,d));var p=r();return k.xa(d,p.s)}}(a,b)))}function Vda(a){Sg();var b=a.g;"-\x3e"===a.wa&&(a=b.sa,Rg("-\x3e can only be used to create anonymous procedures",a.Ua,a.$a,a.cb))}
+function Wda(a,b){return b.Gb(Xda(),sb(new tb,function(){return function(a,b){return Eo(b)?qc(qc(a,Iba(Rb(),b),Fo()),Fba(Rb(),b),Go()):a}}(a)))}function Yda(a,b){if(Mo(a)&&Mo(b)){var d=a.Fg,e=b.Fg;if(null===d?null===e:d.o(e))return(new J).j((new A).e(a.Fg.wa,b.Fg.g))}return No(a)&&No(b)?(new J).j((new A).e("EXTENSIONS",b.g)):Oo(a)&&Oo(b)?(new J).j((new A).e("INCLUDES",b.g)):F()}function Zda(a){return u((new v).G((new w).f(["Redeclaration of ",""])),(new w).f([a]))}
+function $da(a,b){b.fo(m(new n,function(){return function(a){return Po(a)}}(a))).ua(m(new n,function(a){return function(b){if(Po(b))b=b.pn,b.ua(m(new n,function(a,b){return function(d){Vda(d);Sg();var e=1===b.WC(m(new n,function(a,b){return function(a){return a.wa===b.wa}}(a,d))),f=d.g;e||(d=aea(d),f=f.sa,Rg(d,f.Ua,f.$a,f.cb))}}(a,b)));else throw(new q).j(b);}}(a)));b=Uda(a,b);for(b=(new Qo).Kf(b,m(new n,function(){return function(a){return null!==a}}(a)));b.ta();){var d=b.ma();if(null!==d){var d=
+Yda(d.ja(),d.na()),e=bea(new Ro,d,m(new n,function(){return function(a){return null!==a}}(a))),d=e.ga,e=e.Bl,d=d.z()||e.y(d.X())?d:F();if(!d.z())if(e=d.X(),null!==e)d=e.ja(),e=e.na(),Sg(),d=Zda(d),e=e.sa,Rg(d,e.Ua,e.$a,e.cb);else throw(new q).j(e);}else throw(new q).j(d);}}function aea(a){return u((new v).G((new w).f(["There is already a local variable called "," here"])),(new w).f([a.wa]))}
+function cea(a,b){b=b.Gb(I(r(),y()),sb(new tb,function(a){return function(b,f){if(Mo(f)){var h=f.Of,k=f.Fg.wa.toUpperCase();if("TURTLES-OWN"===k)f=m(new n,function(a,b){return function(a){return So(new To,b,a,Ho(),!0)}}(a,f)),k=r(),f=h.xa(f,k.s);else if("PATCHES-OWN"===k)f=m(new n,function(a,b){return function(a){return So(new To,b,a,Uo(),!0)}}(a,f)),k=r(),f=h.xa(f,k.s);else if("LINKS-OWN"===k)f=m(new n,function(a,b){return function(a){return So(new To,b,a,Jo(),!0)}}(a,f)),k=r(),f=h.xa(f,k.s);else if("GLOBALS"===
+k)f=m(new n,function(a,b){return function(a){return So(new To,b,a,Vo(),!0)}}(a,f)),k=r(),f=h.xa(f,k.s);else{var k=(new Sb).c(k),k=dea(k),p=b.Vj(m(new n,function(a,b){return function(a){return a.Ck.wa===b}}(a,k)));p.z()?f=F():(p=p.X().$n,Wo()===p?(f=m(new n,function(a,b,d){return function(a){return So(new To,d,a,(new Xo).c(b),!0)}}(a,k,f)),k=r(),f=h.xa(f,k.s)):Yo()===p?(f=m(new n,function(a,b,d){return function(a){return So(new To,d,a,(new Zo).c(b),!0)}}(a,k,f)),k=r(),f=h.xa(f,k.s)):f=I(r(),y()),f=
+(new J).j(f));f=f.z()?I(r(),y()):f.X()}h=r();return b.Vc(f,h.s)}if(Po(f))return k=f.pn,h=So(new To,f,f.wa,$o(),!0),f=m(new n,function(a,b){return function(a){return So(new To,b,a,sc(),!1)}}(a,f)),p=r(),f=k.xa(f,p.s),k=r(),f=f.Qc(h,k.s),h=r(),f.Vc(b,h.s);if(Eo(f)){h=f.Dl;k=f.Ff;if(f.Og)var p=Wo(),t=ap();else p=Yo(),t=bp();f=I(r(),(new w).f([So(new To,f,h,p,!0),So(new To,f,k,t,!0)]));h=r();return b.Vc(f,h.s)}return b}}(a)));a=m(new n,function(){return function(a){return a.$n}}(a));cp||(cp=(new dp).b());
+return ep(b,a,cp)}
+function eea(a,b,d){for(var e=cea(a,b),f=e.Ta(),f=(new Qo).Kf(f,m(new n,function(){return function(a){return null!==a&&Eo(a.Fo)?!0:!1}}(a)));f.ta();){var h=f.ma();if(null!==h&&Eo(h.Fo))Sda(a,h,d);else throw(new q).j(h);}b=fea(d,Wda(a,b));for(d=e.Ta();d.ta();)f=d.ma(),Vda(f.Ck),b.fo(m(new n,function(){return function(a){return null!==a}}(a))).ua(m(new n,function(a,b){return function(a){if(null!==a)Tda(a.ja(),a.na(),b);else throw(new q).j(a);}}(a,f)));b=e.Ta();for(b=(new Qo).Kf(b,m(new n,function(){return function(a){return a.Is}}(a)));b.ta();)d=
+b.ma(),e.fo(m(new n,function(a,b){return function(a){return a!==b}}(a,d))).ua(m(new n,function(a,b){return function(a){Tda(b.Ck.wa,b.$n,a)}}(a,d)))}Do.prototype.$classData=g({Q1:0},!1,"org.nlogo.parse.StructureChecker$",{Q1:1,d:1});var fp=void 0;function gea(){fp||(fp=(new Do).b());return fp}function gp(){}gp.prototype=new l;gp.prototype.constructor=gp;gp.prototype.b=function(){return this};
+function hea(a){var b=hp,d=hba(new ve,a.Jc(),m(new n,function(){return function(a){return a.sa.Ua}}(b))),b=(new ip).b(),d=iea(b).bi(d);if(oe(d))return a=d.zm,oc(),(new Lh).j(a);var e=jea(kea(b),d);if(!e.z())return b=e.X().ja(),d=e.X().na(),a=d.Lm.z()?a.ta()?a.ma():xm():d.Lm.$(),oc(),a=(new A).e(b,a),(new Jh).j(a);throw(new q).j(d);}gp.prototype.$classData=g({S1:0},!1,"org.nlogo.parse.StructureCombinators$",{S1:1,d:1});var hp=void 0;function jp(){}jp.prototype=new l;jp.prototype.constructor=jp;
+jp.prototype.b=function(){return this};function lea(a,b,d){var e=Hc(b),e=kp(e);d=b.kt(d.wa,d);b=Wg();a=m(new n,function(a,b){return function(a){return(new A).e(a,b.y(a))}}(a,d));d=r();a=Vg(b,e.xa(a,d.s).Ic());Je();b=Hc(a);un(0,e.Le(kp(b)));return a}function mea(a,b,d){return nea(a,oea(a,b,d),d)}
+function pea(a,b,d,e,f){var h=Hc(b.ig),k=Hc(b.Lf);if(ql(h,k).ib(d)){if(b.Lf.ib(d))return f=b.Lf,d=b.Lf.y(d),f=lea(a,f,lp(d.wa,d.Ff,e,d.Og,d.Ng)),mp(b.Zj,b.pk,b.Pi,b.mj,b.Di,b.ig,f,b.zg);f=b.ig;d=b.ig.y(d);f=lea(a,f,lp(d.wa,d.Ff,e,d.Og,d.Ng));return mp(b.Zj,b.pk,b.Pi,b.mj,b.Di,f,b.Lf,b.zg)}b=dh();a=[d];b=b.im.$b("compiler.StructureConverter.noBreed");if(!Fk(b)){if(F()===b)throw(new Ne).c(u((new v).G((new w).f(["coding error, bad translation key: "," for Errors"])),(new w).f(["compiler.StructureConverter.noBreed"])));
+throw(new q).j(b);}e=b.U;d=a.length|0;0>=d?h=0:(b=d>>31,h=(0===b?-1<(-2147483648^d):0<b)?-1:d);r();Gn();b=[];var k=0,p=a.length|0;0>h&&Hn(Ln(),0,d,1,!1);for(p=p<h?p:h;k<p;){var t=a[k],x=k;0>h&&Hn(Ln(),0,d,1,!1);if(0>x||x>=h)throw(new P).c(""+x);t=(new A).e(t,x);b.push(t);k=1+k|0}a=b.length|0;d=0;h=e;a:for(;;){if(d!==a){e=1+d|0;h=(new A).e(h,b[d]);b:{d=h.lb;p=h.Db;if(null!==p&&(k=p.ja(),p=p.Ec(),Ag(k))){h=k;h=Qb(Ha(),d,u((new v).G((new w).f(["\\\\{","\\\\}"])),(new w).f([""+p])),h);break b}throw(new q).j(h);
+}d=e;continue a}break}throw(new hd).Bs(h,f.sa.Ua,f.sa.$a,f.sa.cb);}
+function qea(a,b,d,e,f){var h=(new np).b(),k=r(),h=b.jc(h,k.s).ss(Je().Qk);d=(new op).Ja(d);k=r();k=b.jc(d,k.s);k.ua(m(new n,function(){return function(a){a=a.ja();a.a=(32|a.a)<<24>>24}}(a,f)));f=mea(a,e.dc,b);d=e.ae;var p=m(new n,function(){return function(a){if(null!==a){a=a.ja();var b=a.pe();return(new A).e(b,a)}throw(new q).j(a);}}(a)),t=r();d=yc(d,k.xa(p,t.s));p=e.np;a=m(new n,function(){return function(a){if(null!==a){var b=a.na();a=a.ja().pe();return(new A).e(a,b)}throw(new q).j(a);}}(a));
+t=r();a=p.sk(k.xa(a,t.s));k=e.km;p=r();h=k.Vc(h,p.s);k=e.zs;e=e.$p;p=(new pp).b();t=r();b=b.jc(p,t.s).ss(Je().Qk);p=r();return qp(new rp,f,d,a,h,k,e.Vc(b,p.s))}function oea(a,b,d){return d.Gb(b,sb(new tb,function(){return function(a,b){if(Eo(b)){var d=b.Og,k=b.Ng,p=b.Dl.wa;b=b.Ff.wa;var t=I(r(),y()),k=lp(p,b,t,d,k);if(d)return d=a.Lf.kt(k.wa,k),mp(a.Zj,a.pk,a.Pi,a.mj,a.Di,a.ig,d,a.zg);d=a.ig.kt(k.wa,k);return mp(a.Zj,a.pk,a.Pi,a.mj,a.Di,d,a.Lf,a.zg)}return a}}(a)))}
+function nea(a,b,d){return d.Gb(b,sb(new tb,function(a){return function(b,d){if(Mo(d)){var k=d.Fg,p=d.Of;if(null!==k&&"GLOBALS"===k.wa){d=b.pk;var k=m(new n,function(){return function(a){return a.wa}}(a)),t=r(),p=p.xa(k,t.s),k=r();d=d.Vc(p,k.s);return mp(b.Zj,d,b.Pi,b.mj,b.Di,b.ig,b.Lf,b.zg)}}if(Mo(d)&&(k=d.Fg,p=d.Of,null!==k&&"TURTLES-OWN"===k.wa))return d=b.Pi,k=m(new n,function(){return function(a){a=a.wa;var b=kc();return(new A).e(a,b)}}(a)),t=r(),d=yc(d,p.xa(k,t.s)),mp(b.Zj,b.pk,d,b.mj,b.Di,
+b.ig,b.Lf,b.zg);if(Mo(d)&&(k=d.Fg,p=d.Of,null!==k&&"PATCHES-OWN"===k.wa))return d=b.mj,k=m(new n,function(){return function(a){a=a.wa;var b=kc();return(new A).e(a,b)}}(a)),t=r(),d=yc(d,p.xa(k,t.s)),mp(b.Zj,b.pk,b.Pi,d,b.Di,b.ig,b.Lf,b.zg);if(Mo(d)&&(k=d.Fg,p=d.Of,null!==k&&"LINKS-OWN"===k.wa))return d=b.Di,k=m(new n,function(){return function(a){a=a.wa;var b=kc();return(new A).e(a,b)}}(a)),t=r(),d=yc(d,p.xa(k,t.s)),mp(b.Zj,b.pk,b.Pi,b.mj,d,b.ig,b.Lf,b.zg);if(Mo(d)&&(k=d.Fg,d=d.Of,null!==k)){var p=
+k.g,k=(new Sb).c(k.wa),k=dea(k),t=m(new n,function(){return function(a){return a.wa}}(a)),x=r();return pea(a,b,k,d.xa(t,x.s),p)}return b}}(a)))}jp.prototype.$classData=g({Z1:0},!1,"org.nlogo.parse.StructureConverter$",{Z1:1,d:1});var sp=void 0;function rea(){sp||(sp=(new jp).b());return sp}function tp(){this.en=null;this.Tk=!1}tp.prototype=new l;tp.prototype.constructor=tp;
+function sea(a,b,d){hp||(hp=(new gp).b());b=hea(b);if(Am(b))return b=b.U,$da(gea(),b),eea(gea(),b,Haa(Fc(),d.dc,d.ae)),qea(rea(),b,a.en,a.Tk?qp(new rp,d.dc,(up(),bh()),(up(),Vg(Je().$h,y())),(up(),I(r(),y())),(up(),I(r(),y())),(up(),I(r(),y()))):d,a.Tk);zm(b)&&(d=b.U,null!==d&&(a=d.ja(),d=d.na(),Sg(),d=d.sa,Rg(a,d.Ua,d.$a,d.cb)));throw(new q).j(b);}function tea(a,b,d){a.en=b;a.Tk=d;return a}tp.prototype.$classData=g({c2:0},!1,"org.nlogo.parse.StructureParser",{c2:1,d:1});
+function vp(){this.jH=null;this.a=!1}vp.prototype=new l;vp.prototype.constructor=vp;
+function Haa(a,b,d){var e=Xda(),f=uea(wp(b.zg)),e=qc(e,Hc(f),xp()),f=vea(wp(b.zg)),e=qc(qc(qc(qc(e,Hc(f),yp()),zp(b),Vo()),Ap(b),Ho()),wea(b),Uo()),f=Bp(b);a=qc(e,f.ml(m(new n,function(a,b){return function(a){return Ap(b).ib(a)}}(a,b)),!0),Jo());f=(new Kc).mg(b.ig);e=Lc().s;e=Mc(f,e);for(f=f.ti.wj();f.ta();){var h=f.ma();e.Qa(h.Ff)}a=qc(qc(a,e.Da(),bp()),Hc(b.ig),Yo());f=(new Kc).mg(b.Lf);e=Lc().s;e=Mc(f,e);for(f=f.ti.wj();f.ta();)h=f.ma(),e.Qa(h.Ff);d=qc(qc(qc(a,e.Da(),ap()),Hc(b.Lf),Wo()),Hc(d),
+$o());a=(new Kc).mg(b.ig);b=null;b=d;for(d=a.ti.wj();d.ta();)a=d.ma(),b=a.Og?qc(b,a.Al,(new Xo).c(a.wa)):qc(b,a.Al,(new Zo).c(a.wa));return b}vp.prototype.b=function(){this.jH="Included files must end with .nls";this.a=!0;return this};function xea(a,b,d,e,f,h){b=Cp(b,e,f);a=(new Qo).Kf(b,m(new n,function(){return function(a){a=a.kb;var b=nm();return!(null!==a&&a===b)}}(a)));b=Dp();a=(new bc).Kf(a,b);return sea(d,a,h)}
+function yea(){var a=Fc();return sb(new tb,function(){return function(){return F()}}(a))}
+function Gaa(a,b,d){var e=yea();b=function(a,b,d,e){return function(){var t=tea(new tp,d.en,d.Tk),x=d.gt,E=qp(new rp,d.bs,d.Dn,(up(),Vg(Je().$h,y())),(up(),I(r(),y())),(up(),I(r(),y())),(up(),I(r(),y()))),x=nl(x,E,sb(new tb,function(a,b,d){return function(e,f){e=(new A).e(e,f);f=e.lb;var h=e.Db;if(null!==h)return xea(a,b,d,h.na(),h.ja(),f);throw(new q).j(e);}}(a,b,t)));if(d.Tk)return x;oc();return(new Ep).Kf(zea(new Fp,x,m(new n,function(a,b,d,e,f){return function(h){var k=h.km.$().Y;Sg();var p=Gp(Ha(),
+k,".nls"),t=h.km.$();if(!p){if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/StructureParser.scala: 29");p=a.jH;t=t.Oc();Rg(p,t.Ua,t.$a,t.cb)}t=qb(e,d.Vr,k);if(Fk(t)&&(p=t.U,null!==p)){var t=p.ja(),p=p.na(),x=h.km.aa(),E=h.zs,ab=r(),k=E.mc(k,ab.s);return xea(a,b,f,p,t,qp(new rp,h.dc,h.ae,h.np,x,k,h.$p))}if(F()===t){Sg();x=dh();p=[k];k=x.im.$b("compiler.StructureParser.includeNotFound");if(!Fk(k)){if(F()===k)throw(new Ne).c(u((new v).G((new w).f(["coding error, bad translation key: ",
+" for Errors"])),(new w).f(["compiler.StructureParser.includeNotFound"])));throw(new q).j(k);}x=k.U;E=p.length|0;0>=E?ab=0:(k=E>>31,ab=(0===k?-1<(-2147483648^E):0<k)?-1:E);r();Gn();var k=[],fc=0,Cc=p.length|0;0>ab&&Hn(Ln(),0,E,1,!1);for(Cc=Cc<ab?Cc:ab;fc<Cc;){var rf=p[fc],Wf=fc;0>ab&&Hn(Ln(),0,E,1,!1);if(0>Wf||Wf>=ab)throw(new P).c(""+Wf);rf=(new A).e(rf,Wf);k.push(rf);fc=1+fc|0}p=k.length|0;E=0;ab=x;a:for(;;){if(E!==p){x=1+E|0;ab=(new A).e(ab,k[E]);b:{E=ab.lb;Cc=ab.Db;if(null!==Cc&&(fc=Cc.ja(),Cc=
+Cc.Ec(),Ag(fc))){ab=fc;ab=Qb(Ha(),E,u((new v).G((new w).f(["\\\\{","\\\\}"])),(new w).f([""+Cc])),ab);break b}throw(new q).j(ab);}E=x;continue a}k=ab;break}h=h.km.$().Oc();Rg(k,h.Ua,h.$a,h.cb)}throw(new q).j(t);}}(a,b,d,e,t))),m(new n,function(){return function(a){return a.km.Ke()}}(a))).ma()}}(a,b,d,e);if(d.Tk)return b();Hp(d.Jh).Ur();b=b();b.$p.ua(m(new n,function(a,b){return function(a){Aea(b.Jh,a.Yb.toLowerCase(),(new Pg).Jf(a))}}(a,d)));return b}
+vp.prototype.$classData=g({d2:0},!1,"org.nlogo.parse.StructureParser$",{d2:1,d:1});var Ip=void 0;function Fc(){Ip||(Ip=(new vp).b());return Ip}function Jp(){}Jp.prototype=new l;Jp.prototype.constructor=Jp;Jp.prototype.b=function(){return this};function Xda(){Bea||(Bea=(new Jp).b());return Kp(new Lp,Vg(Cea(),y()),0)}Jp.prototype.$classData=g({e2:0},!1,"org.nlogo.parse.SymbolTable$",{e2:1,d:1});var Bea=void 0;function Mp(){}Mp.prototype=new l;Mp.prototype.constructor=Mp;Mp.prototype.b=function(){return this};
+function Zn(a,b){if(Vo()===b)return"global variable";if(Ho()===b)return"turtle variable";if(Uo()===b)return"patch variable";if(Jo()===b)return"link variable";if(Yo()===b)return"breed";if(bp()===b)return"singular breed name";if(Wo()===b)return"link breed";if(ap()===b)return"singular link breed name";if(Io(b)||Ko(b))return a=b.ka,u((new v).G((new w).f(["","-OWN variable"])),(new w).f([a]));if($o()===b)return"procedure";if(xp()===b)return"primitive command";if(yp()===b)return"primitive reporter";if(Fo()===
+b)return"breed command";if(Go()===b)return"breed reporter";if(Np(b)||Pm()===b||sc()===b)return"local variable here";throw(new q).j(b);}function eda(a,b,d){Sg();a="There is already a "+Zn(Nm(),b)+" called "+d.Yb.toUpperCase();d=d.sa;Rg(a,d.Ua,d.$a,d.cb)}Mp.prototype.$classData=g({f2:0},!1,"org.nlogo.parse.SymbolType$",{f2:1,d:1});var Op=void 0;function Nm(){Op||(Op=(new Mp).b());return Op}function Pp(){}Pp.prototype=new l;Pp.prototype.constructor=Pp;Pp.prototype.b=function(){return this};
+function wc(a,b,d){a=new Qp;var e=new Rp;e.hi=b;e.$Y=d;e.YF=d.NU();e.a=!0;return Sp(a,e)}Pp.prototype.$classData=g({x2:0},!1,"org.nlogo.parse.TransformableTokenStream$",{x2:1,d:1});var Tp=void 0;function tc(){Tp||(Tp=(new Pp).b());return Tp}function Up(){}Up.prototype=new l;Up.prototype.constructor=Up;Up.prototype.b=function(){return this};
+function Dea(a,b,d,e,f){var h=m(new n,function(a,b){return function(a){return Eea(b,a)}}(a,e)),k=r();b=b.xa(h,k.s);a=m(new n,function(a,b){return function(a){return Fea(b,a)}}(a,e));e=r();d=d.xa(a,e.s);return Vp(new Wp,f.Nf,f.de,f.Ue,f.Hc,b,d)}
+function Gea(a,b){b=Xp(a,b,Yp());if(Zp(b)){b=b.ha;b=$p().yy().y(b);if(!Zp(b)){if(!aq(b))throw(new q).j(b);b=(new bq).j(cq(b.fc))}if(Zp(b)){b=b.ha;var d=(new dq).j(Aca(Yj(),b.$y()))}else{if(!aq(b))throw(new q).j(b);d=b}}else{if(!aq(b))throw(new q).j(b);d=b}b=qd();if(Zp(d))a=d;else{if(!aq(d))throw(new q).j(d);var e=d.fc;a=function(){return function(a){return a}}(a);eq();var d=a(e.Gc),e=e.Pc,f=fq().$d,e=gq(e);a:for(;;){if(!hq(e)){if(iq(e)){var h=e,e=h.fd,h=a(h.bd),f=(new jq).Sb(h,f);continue a}throw(new q).j(e);
+}break}a=(new bq).j((new kq).Sb(d,f))}lq||(lq=(new mq).b());return rd(b,nq(a,lq).$e())}
+function Hea(a,b){b=Xp(a,b,Yp());if(Zp(b)){b=b.ha;b=oq().yy().y(b);if(!Zp(b)){if(!aq(b))throw(new q).j(b);b=(new bq).j(cq(b.fc))}if(Zp(b)){b=b.ha;pq();(new qq).b();try{var d=Iea(rq(),b.$y(),sq(),tq());if(Zp(d))var e=d;else{if(!aq(d))throw(new q).j(d);var f=d.fc,h=function(){return function(a){return a}}(a);eq();var k=h(f.Gc),p=f.Pc,t=fq().$d,x=gq(p),d=t,E;a:for(;;){f=x;if(!hq(f)){if(iq(f)){var S=f.fd,p=d,U=h(f.bd),ga=(new jq).Sb(U,p),x=S,d=ga;continue a}throw(new q).j(f);}E=d;break}e=(new bq).j((new kq).Sb(k,
+E))}if(Zp(e))var ma=e;else{if(!aq(e))throw(new q).j(e);var va=e.fc,Ia=function(){return function(a){if(uq(a))return vq(a);if(null!==a)return(new wq).wd(a);throw(new q).j(a);}}(a);eq();var $a=Ia(va.Gc),ub=va.Pc,vb=fq().$d,Mb=gq(ub),e=vb,Jc;a:for(;;){h=Mb;if(!hq(h)){if(iq(h)){var ab=h.fd,k=e,fc=Ia(h.bd),Cc=(new jq).Sb(fc,k),Mb=ab,e=Cc;continue a}throw(new q).j(h);}Jc=e;break}ma=(new bq).j((new kq).Sb($a,Jc))}if(Zp(ma))var rf=ma.ha,Wf=xq(yq(),rf),vh=(new dq).j(Dea(a,Jea(b),Kea(b),rf,Wf));else if(aq(ma))vh=
+ma;else throw(new q).j(ma);var Te=(new dq).j(vh)}catch(sf){if(ma=Un(vg(),sf),null!==ma)if(fl(pa(zq),ma))Te=(new bq).j(ma);else throw ug(vg(),ma);else throw sf;}if(Zp(Te))ma=Te.ha;else{if(!aq(Te))throw(new q).j(Te);ma=Te.fc;Aq();ma=(new wq).wd(ma);ma=Bq(pq(),ma)}if(Zp(ma))ma=(new dq).j(ma.ha);else if(!aq(ma))throw(new q).j(ma);}else{if(!aq(b))throw(new q).j(b);ma=b}}else{if(!aq(b))throw(new q).j(b);ma=b}if(Zp(ma))return ma;if(aq(ma)){Ia=ma.fc;a=function(){return function(a){return a}}(a);eq();ma=a(Ia.Gc);
+Ia=Ia.Pc;$a=fq().$d;Ia=gq(Ia);a:for(;;){if(!hq(Ia)){if(iq(Ia)){Mb=Ia;Ia=Mb.fd;Mb=a(Mb.bd);$a=(new jq).Sb(Mb,$a);continue a}throw(new q).j(Ia);}break}return(new bq).j((new kq).Sb(ma,$a))}throw(new q).j(ma);}
+function Xp(a,b,d){b=Cq(qd(),b);d=d.Ra(b);if(Zp(d))return d;if(aq(d)){b=d.fc;a=function(){return function(a){return(new Dq).c(a)}}(a);eq();d=a(b.Gc);b=b.Pc;var e=fq().$d;b=gq(b);a:for(;;){if(!hq(b)){if(iq(b)){var f=b;b=f.fd;f=a(f.bd);e=(new jq).Sb(f,e);continue a}throw(new q).j(b);}break}return(new bq).j((new kq).Sb(d,e))}throw(new q).j(d);}
+function Lea(a,b){var d=qd();Eq();var e=Mea(a);pq();(new qq).b();try{var f=Nea(rq(),b);if(Zp(f))var h=f;else{if(!aq(f))throw(new q).j(f);var k=f.fc,p=function(){return function(a){if(uq(a))return vq(a);if(null!==a)return(new wq).wd(a);throw(new q).j(a);}}(a);eq();var t=p(k.Gc),x=k.Pc,E=fq().$d,S=gq(x);a=E;var U;a:for(;;){b=S;if(!hq(b)){if(iq(b)){var ga=b.fd,f=a,ma=p(b.bd),va=(new jq).Sb(ma,f),S=ga;a=va;continue a}throw(new q).j(b);}U=a;break}h=(new bq).j((new kq).Sb(t,U))}if(Zp(h))var Ia=h.ha,$a=
+(new dq).j(qb(e,Ia,xq(yq(),Ia)));else if(aq(h))$a=h;else throw(new q).j(h);var ub=(new dq).j($a)}catch(vb){if(e=Un(vg(),vb),null!==e)if(fl(pa(zq),e))ub=(new bq).j(e);else throw ug(vg(),e);else throw vb;}if(Zp(ub))e=ub.ha;else{if(!aq(ub))throw(new q).j(ub);e=ub.fc;Aq();e=(new wq).wd(e);e=Bq(pq(),e)}return rd(d,Fq(0,e).$e())}function Mea(a){return sb(new tb,function(){return function(a,d){return d}}(a))}
+function Oea(a,b,d){var e=Gq(Hq());d=Xp(a,d,Pea());if(aq(d))Aq(),d=(new Dq).c(u((new v).G((new w).f([""," must be an Array of ",""])),(new w).f(["commands",Iq(pa(qa))]))),d=Bq(pq(),d);else if(!Zp(d))throw(new q).j(d);if(Zp(d)){d=d.ha.Oa;var e=m(new n,function(a,b){return function(a){a=b.Ra(a);if(aq(a))return(new bq).j(cq(a.fc));if(Zp(a)){a=a.ha;B();a=(new w).f([a]);var d=B().s;return(new dq).j(L(a,d))}throw(new q).j(a);}}(a,e)),f=r(),e=d.xa(e,f.s);Aq();B();d=y();e=e.Gb(Jq().y(d),sb(new tb,function(a){return function(b,
+d){d=function(a,b){return function(){return b}}(a,d);var e=Kq();(new Lq).Eu(e);e=eq();(new Mq).tq(e);if(aq(b)){e=b.fc;d=d();if(aq(d))return(new bq).j(Nq(e,d.fc));if(Zp(d))return b;throw(new q).j(d);}if(Zp(b)){b=b.ha;d=d();if(aq(d))return d;if(Zp(d))return(new dq).j(Oq(d.ha,b));throw(new q).j(d);}throw(new q).j(b);}}(a)));if(!Zp(e)){if(!aq(e))throw(new q).j(e);f=e.fc;e=function(){return function(a){return a}}(a);eq();d=e(f.Gc);var f=f.Pc,h=fq().$d,f=gq(f);a:for(;;){if(!hq(f)){if(iq(f)){var k=f,f=k.fd,
+k=e(k.bd),h=(new jq).Sb(k,h);continue a}throw(new q).j(f);}break}e=(new bq).j((new kq).Sb(d,h))}}else{if(!aq(d))throw(new q).j(d);e=d}if(!Zp(e)){if(!aq(e))throw(new q).j(e);f=e.fc;e=function(){return function(a){return a}}(a);eq();d=e(f.Gc);f=f.Pc;h=fq().$d;f=gq(f);a:for(;;){if(!hq(f)){if(iq(f)){k=f;f=k.fd;k=e(k.bd);h=(new jq).Sb(k,h);continue a}throw(new q).j(f);}break}e=(new bq).j((new kq).Sb(d,h))}if(Zp(e)){e=e.ha;d=I(r(),y());pq();(new qq).b();try{var p=Nea(rq(),b);if(Zp(p))var t=p;else{if(!aq(p))throw(new q).j(p);
+var x=p.fc,E=function(){return function(a){if(uq(a))return vq(a);if(null!==a)return(new wq).wd(a);throw(new q).j(a);}}(a);eq();var S=E(x.Gc),U=x.Pc,ga=fq().$d,ma=gq(U);b=ga;var va;a:for(;;){p=ma;if(!hq(p)){if(iq(p)){var Ia=p.fd,x=b,$a=E(p.bd),ub=(new jq).Sb($a,x),ma=Ia;b=ub;continue a}throw(new q).j(p);}va=b;break}t=(new bq).j((new kq).Sb(S,va))}if(Zp(t))var vb=t.ha,Mb=xq(yq(),vb),Jc=(new dq).j(Dea(a,e,d,vb,Mb));else if(aq(t))Jc=t;else throw(new q).j(t);var ab=(new dq).j(Jc)}catch(fc){if(a=Un(vg(),
+fc),null!==a)if(fl(pa(zq),a))ab=(new bq).j(a);else throw ug(vg(),a);else throw fc;}if(Zp(ab))a=ab.ha;else{if(!aq(ab))throw(new q).j(ab);a=ab.fc;Aq();a=(new wq).wd(a);a=Bq(pq(),a)}if(Zp(a))a=(new dq).j(a.ha);else if(!aq(a))throw(new q).j(a);}else{if(!aq(e))throw(new q).j(e);a=e}return rd(qd(),Fq(Eq(),a).$e())}
+Up.prototype.isReporter=function(a,b){b=Hea(this,b).dw();b=b.z()?F():b.X().Nf.dw();b.z()?b=F():(b=b.X(),b=(new J).j(b.Wt));b.z()?a=F():(b=b.X(),a=(new J).j(Qea(Zj(),a,b.dc,b.ae)));return!(a.z()||!a.X())};Up.prototype.exportNlogo=function(a){return Gea(this,a)};Up.prototype.fromNlogo=function(a){for(var b=arguments.length|0,d=1,e=[];d<b;)e.push(arguments[d]),d=d+1|0;switch(e.length|0){case 0:return Lea(this,a);case 1:return Oea(this,a,e[0]);default:throw"No matching overload";}};
+Up.prototype.fromModel=function(a){a=Hea(this,a);return rd(qd(),Fq(Eq(),a).$e())};Up.prototype.$classData=g({y2:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler",{y2:1,d:1});function Pq(){}Pq.prototype=new l;Pq.prototype.constructor=Pq;Pq.prototype.b=function(){return this};function Fq(a,b){if(Zp(b))a=b.ha;else{if(!aq(b))throw(new q).j(b);a=b.fc;a=Vp(new Wp,(Aq(),Rea().y(a)),"","",I(r(),y()),I(r(),y()),I(r(),y()))}Qq||(Qq=(new Rq).b());return nq(a,Qq)}
+Pq.prototype.$classData=g({z2:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$",{z2:1,d:1});var Sq=void 0;function Eq(){Sq||(Sq=(new Pq).b());return Sq}function Tq(a,b,d,e,f){a=bd(a);b=b.za.W(1);return Uq(a,b,d,e,f)}function Vq(a,b,d,e,f){b=b.za;var h=new Wq;if(null===a)throw ug(vg(),null);h.Va=a;h.tT=d;h.qT=e;h.sW=f;a=r();return b.jc(h,a.s)}
+function Sea(a,b,d,e,f){var h=b.zd;ld();var k=(new Xq).b(),p=md(new nd,k).Wc(h);if(!p.z()){var t=p.X();if(null===t)throw(new ye).b();return""===t?"":u((new v).G((new w).f(["",";"])),(new w).f([t]))}ld();var x=(new Yq).b(),E=md(new nd,x).Wc(h);if(!E.z()){var S=E.X();return u((new v).G((new w).f(["","(",");"])),(new w).f([S,Vq(a,b,d,e,f).zb(", ")]))}if(h&&h.$classData&&h.$classData.n.fA){var U;var ga=b.za.W(0).se;if(Zq(ga)){bd(a);var ma=ga.Zc.wa,va=$q(ar(),ma);U=u((new v).G((new w).f([""," \x3d ","; letVars['",
+"'] \x3d ",";"])),(new w).f([va,Tq(a,b,d,e,f),va,va]))}else if(br(ga)){var Ia=(new v).G((new w).f([""," \x3d ",";"]));bd(a);var $a=ga.wa;U=u(Ia,(new w).f([$q(ar(),$a),Tq(a,b,d,e,f)]))}else if(qo(ga)){var ub=(new v).G((new w).f([""," \x3d ",";"]));bd(a);var vb=ga.wa;U=u(ub,(new w).f([$q(ar(),vb),Tq(a,b,d,e,f)]))}else{null===a.hx&&null===a.hx&&(a.hx=(new cr).SD(a));var Mb=a.hx.mG(ga);if(Mb.z()){var Jc=b.zd.K();gd('This isn\'t something you can use "set" on.',Jc);U=void 0}else U=Mb.X().y(Tq(a,b,d,e,
+f))}return U}if(h&&h.$classData&&h.$classData.n.UA){var ab=bd(a),fc=b.za.W(0),Cc=dr(ab,fc,!0,!1,d,e,f),rf=u((new v).G((new w).f(["|while (true) {\n        |","\n        |};"])),(new w).f([er(fd(),Cc)])),Wf=(new Sb).c(rf);return dd(Wf)}if(h&&h.$classData&&h.$classData.n.eA){var vh=bd(a),Te=b.za.W(0),sf=Uq(vh,Te,d,e,f),hk=bd(a),qg=b.za.W(1),wh=dr(hk,qg,!0,!1,d,e,f);bd(a);var rg=b.zd.K(),bi=cd(rg,"index");bd(a);var Vi=b.zd.K(),ik=cd(Vi,"repeatcount"),Wi=u((new v).G((new w).f(["|for (let "," \x3d 0, ",
+" \x3d StrictMath.floor(","); "," \x3c ","; ","++){\n        |","\n        |}"])),(new w).f([bi,ik,sf,bi,ik,bi,er(fd(),wh)])),jk=(new Sb).c(Wi);return dd(jk)}if(h&&h.$classData&&h.$classData.n.nB){var Xi=bd(a),Bl=b.za.W(0),Yi=Uq(Xi,Bl,d,e,f),kk=bd(a),Zi=b.za.W(1),Cl=dr(kk,Zi,!0,!1,d,e,f),xh=u((new v).G((new w).f(["|while (",") {\n        |","\n        |}"])),(new w).f([Yi,er(fd(),Cl)])),Dl=(new Sb).c(xh);return dd(Dl)}if(h&&h.$classData&&h.$classData.n.HA){var yh=bd(a),lk=b.za.W(0),El=Uq(yh,lk,d,
+e,f),ci=bd(a),di=b.za.W(1),Fl=dr(ci,di,!0,!1,d,e,f),Gl=u((new v).G((new w).f(["|if (",") {\n        |","\n        |}"])),(new w).f([El,er(fd(),Fl)])),Hl=(new Sb).c(Gl);return dd(Hl)}if(h&&h.$classData&&h.$classData.n.IA){var mk=bd(a),Il=b.za.W(0),Jl=Uq(mk,Il,d,e,f),Kl=bd(a),Ll=b.za.W(1),nk=dr(Kl,Ll,!0,!1,d,e,f),Ml=bd(a),ei=b.za.W(2),ok=dr(Ml,ei,!0,!1,d,e,f),zh=u((new v).G((new w).f(["|if (",") {\n        |","\n        |}\n        |else {\n        |","\n        |}"])),(new w).f([Jl,er(fd(),nk),er(fd(),
+ok)])),Nl=(new Sb).c(zh);return dd(Nl)}if(h&&h.$classData&&h.$classData.n.aA){var $i=bd(a),pk=b.za.W(0),Ah=Uq($i,pk,d,e,f),Yf=bd(a),xe=b.za.W(1),Bh=fr(Yf,xe,!1,d,e,f);return gr(Ah,!0,Bh)}if(hr(h)){bd(a);var fi=b.zd.K(),qk=cd(fi,"error"),aj=bd(a),Ol=b.za.W(0),bj=dr(aj,Ol,!0,!1,d,e,f);Ha();var Pl=bd(a),cj=b.za.W(1),dj=dr(Pl,cj,!0,!1,d,e,f),rk=(new v).G((new w).f(["_error_",""])),Ql=Tea(h),ej=Q(),gi=Qb(0,dj,u(rk,(new w).f([R(ej,Ql)])),qk),Rl=u((new v).G((new w).f(["\n       |try {\n       |","\n       |} catch (",
+") {\n       |","\n       |}\n     "])),(new w).f([er(fd(),bj),qk,er(fd(),gi)])),Xg=(new Sb).c(Rl);return dd(Xg)}if(ir(h))return Uea(a,b,!1,d,e,f);if(jr(h))return Uea(a,b,!0,d,e,f);if(h&&h.$classData&&h.$classData.n.GB)return Vea(a,b,!1,d,e,f);if(h&&h.$classData&&h.$classData.n.FB)return Vea(a,b,!0,d,e,f);if(kr(h)){var Yg=bd(a),sk=b.za.W(0),fj=Uq(Yg,sk,d,e,f),Ch=bd(a),tk=b.za.W(1),Sl=fr(Ch,tk,!1,d,e,f),uk=b.zd.ka,Zg=(new Sb).c(uk),Tl=kd(Zg)?uk:"TURTLES",gj=u((new v).G((new w).f(["SelfManager.self().sprout(",
+", ",")"])),(new w).f([fj,ed(fd(),Tl)]));return gr(gj,!0,Sl)}if(h&&h.$classData&&h.$classData.n.LB){var hi=bd(a),Dh=b.za.W(0),Ul=Uq(hi,Dh,d,e,f),sg=b.zd;if(!(sg&&sg.$classData&&sg.$classData.n.LB))throw(new Ne).c(u((new v).G((new w).f(["How did you get here with class of type ",""])),(new w).f([oa(sg).Bg()])));var ji=sg.ka,Eh=(new Sb).c(ji),hj=kd(Eh)?ji:"TURTLES";return u((new v).G((new w).f(["SelfManager.self().sprout(",", ",");"])),(new w).f([Ul,ed(fd(),hj)]))}if(h&&h.$classData&&h.$classData.n.sA)return lr(a,
+b,"createLinkFrom",h.ka,d,e,f);if(h&&h.$classData&&h.$classData.n.tA)return lr(a,b,"createLinksFrom",h.ka,d,e,f);if(h&&h.$classData&&h.$classData.n.wA)return lr(a,b,"createLinkTo",h.ka,d,e,f);if(h&&h.$classData&&h.$classData.n.uA)return lr(a,b,"createLinksTo",h.ka,d,e,f);if(h&&h.$classData&&h.$classData.n.xA)return lr(a,b,"createLinkWith",h.ka,d,e,f);if(h&&h.$classData&&h.$classData.n.vA)return lr(a,b,"createLinksWith",h.ka,d,e,f);if(h&&h.$classData&&h.$classData.n.DA){var $g=bd(a),ij=b.za.W(0),jj=
+Uq($g,ij,d,e,f),ki=bd(a),li=b.za.W(1),kj=dr(ki,li,!0,!1,d,e,f),Zf,uf=bd(a),ee;if(!uf.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Compiler.scala: 55");ee=uf.ry;if(null===ee)throw(new q).j(ee);var lj=ee.Zi(),tg=ee.na(),mj=(new A).e(1+lj|0,tg);uf.ry=mj;uf.a=!0;Zf=u((new v).G((new w).f(["","_",""])),(new w).f([tg,lj]));var nj=u((new v).G((new w).f(['|if (Prims.isThrottleTimeElapsed("','", workspace.selfManager.self(), ',')) {\n        |  Prims.resetThrottleTimerFor("',
+'", workspace.selfManager.self());\n        |',"\n        |}"])),(new w).f([Zf,jj,Zf,er(fd(),kj)])),mi=(new Sb).c(nj);return dd(mi)}if(h&&h.$classData&&h.$classData.n.CA)return u((new v).G((new w).f(["throw new Error(",");"])),(new w).f([mr(a,0,b,d,e,f)]));if(nr(h)){var ni=h.ka,Vl=bd(a),vk=b.za.W(0),ah=Uq(Vl,vk,d,e,f),oi=bd(a),Wl=b.za.W(1),wk=fr(oi,Wl,!1,d,e,f),ii=u((new v).G((new w).f(["SelfManager.self().hatch(",", ",")"])),(new w).f([ah,ed(fd(),ni)]));return gr(ii,!0,wk)}if(h&&h.$classData&&h.$classData.n.EQ){var LF=
+h.ka,Cw=bd(a),gx=b.za.W(0),qG=Uq(Cw,gx,d,e,f);return u((new v).G((new w).f(["SelfManager.self().hatch(",", ",");"])),(new w).f([qG,ed(fd(),LF)]))}if(h&&h.$classData&&h.$classData.n.bA)return u((new v).G((new w).f(["SelfManager.self().fd(-",");"])),(new w).f([mr(a,0,b,d,e,f)]));if(h&&h.$classData&&h.$classData.n.OA)return u((new v).G((new w).f(["SelfManager.self().right(-",");"])),(new w).f([mr(a,0,b,d,e,f)]));if(h&&h.$classData&&h.$classData.n.yA)return u((new v).G((new w).f(["world.topology.diffuse(",
+", ",")"])),(new w).f([ed(fd(),or(b)),mr(a,1,b,d,e,f)]));if(h&&h.$classData&&h.$classData.n.zA)return u((new v).G((new w).f(["world.topology.diffuse4(",", ",")"])),(new w).f([ed(fd(),or(b)),mr(a,1,b,d,e,f)]));if(h&&h.$classData&&h.$classData.n.lB)return u((new v).G((new w).f(["Prims.uphill(",")"])),(new w).f([ed(fd(),or(b))]));if(h&&h.$classData&&h.$classData.n.mB)return u((new v).G((new w).f(["Prims.uphill4(",")"])),(new w).f([ed(fd(),or(b))]));if(h&&h.$classData&&h.$classData.n.AA)return u((new v).G((new w).f(["Prims.downhill(",
+")"])),(new w).f([ed(fd(),or(b))]));if(h&&h.$classData&&h.$classData.n.BA)return u((new v).G((new w).f(["Prims.downhill4(",")"])),(new w).f([ed(fd(),or(b))]));if(h&&h.$classData&&h.$classData.n.iB)return u((new v).G((new w).f(["BreedManager.setDefaultShape(",".getSpecialName(), ",")"])),(new w).f([mr(a,0,b,d,e,f),mr(a,1,b,d,e,f)]));if(h&&h.$classData&&h.$classData.n.GA)return"SelfManager.self().setVariable('hidden?', true)";if(h&&h.$classData&&h.$classData.n.jB)return"SelfManager.self().setVariable('hidden?', false)";
+if(pr(h)){var Gr;var hx=Vq(a,b,d,e,f),yk=u((new v).G((new w).f(['procedures["','"](',");"])),(new w).f([h.Qh.pe(),hx.zb(",")])),In=d.Ts,gm=Wea();if(null!==In&&In===gm&&1===e.wo){bd(a);var ix=h.K(),Hr=cd(ix,"maybestop"),Jn=u((new v).G((new w).f(["|let "," \x3d ","\n          |if ("," instanceof Exception.StopInterrupt) { return ","; }"])),(new w).f([Hr,yk,Hr,Hr])),zk=(new Sb).c(Jn);Gr=dd(zk)}else Gr=yk;return Gr}if(qr(h)){var sG=u((new v).G((new w).f(['|if(!reporterContext) { throw new Error("REPORT can only be used inside TO-REPORT.") } else {\n            |  return ',
+"\n            |}"])),(new w).f([mr(a,0,b,d,e,f)])),Ir=(new Sb).c(sG);return dd(Ir)}if(h&&h.$classData&&h.$classData.n.KA)return u((new v).G((new w).f(["",";"])),(new w).f([mr(a,0,b,d,e,f)]));if(Xn(h)){var hm=h.Zc;if(hm.z())var Jr=F();else{var tG=hm.X();bd(a);var uG=tG.wa,Kn=$q(ar(),uG),Jr=(new J).j(u((new v).G((new w).f(["let "," \x3d ","; letVars['","'] \x3d ",";"])),(new w).f([Kn,mr(a,0,b,d,e,f),Kn,Kn])))}return Jr.z()?"":Jr.X()}if(h&&h.$classData&&h.$classData.n.oB){var vG=(new v).G((new w).f(["workspace.rng.withClone(function() { ",
+" })"])),N7=bd(a),O7=b.za.W(0);return u(vG,(new w).f([dr(N7,O7,!0,!1,d,e,f)]))}if(rr(h)){var Q7=h.K(),R7=Vq(a,b,d,e,f);return Maa(a,!1,Q7,R7,f)}if(h&&h.$classData&&h.$classData.n.FA){var S7=Vq(a,b,d,e,f).Je().zb(", ");bd(a);var T7=h.K(),aH=cd(T7,"foreach"),U7=(new v).G((new w).f(["var "," \x3d Tasks.forEach(",", ","); if(reporterContext \x26\x26 "," !\x3d\x3d undefined) { return ","; }"])),V7=-1+b.za.Ha()|0;return u(U7,(new w).f([aH,mr(a,V7,b,d,e,f),S7,aH,aH]))}if(sr(h)){var X7=(new Sb).c("_extern\\(([^:]+):([^)]+)\\)"),
+Y7=y(),Z7=(new Tb).$o(X7.R,Y7),u_=h.k();var Vr=ng(Z7,u_);if(Vr.z())bH=!1;else if(null!==Vr.X())var $7=Vr.X(),bH=0===og($7,2);else bH=!1;if(bH)var a8=Vr.X().W(0),b8=Vr.X().W(1);else throw(new q).j(u_);var c8=a8,d8=b8;return u((new v).G((new w).f(["Extensions[","].prims[","](",");"])),(new w).f([ed(fd(),c8),ed(fd(),d8),Vq(a,b,d,e,f).zb(", ")]))}if(d.Uo){var e8=(new v).G((new w).f(["",";"])),f8=oa(b.zd).Bg(),v_=(new Sb).c(f8),g8=v_.R.length|0,h8=He(Ie(),v_.R,1,g8);return u(e8,(new w).f([Naa(h8)]))}var i8=
+u((new v).G((new w).f(["unimplemented primitive: ",""])),(new w).f([b.zd.K().Yb])),j8=b.zd.K();gd(i8,j8)}function or(a){var b=a.za.W(0).se;if(tr(b))return gh(b).toLowerCase();b=u((new v).G((new w).f(["unknown reference: ",""])),(new w).f([oa(b).Bg()]));a=a.zd.K();gd(b,a)}function mr(a,b,d,e,f,h){a=bd(a);b=d.za.W(b);return Uq(a,b,e,f,h)}
+function Vea(a,b,d,e,f,h){a=bd(a);var k=b.za.W(0);e=Uq(a,k,e,f,h);d=d?"createOrderedTurtles":"createTurtles";b=b.zd;if(!(b&&b.$classData&&b.$classData.n.GB||b&&b.$classData&&b.$classData.n.FB))throw(new Ne).c(u((new v).G((new w).f(["How did you get here with class of type ",""])),(new w).f([oa(b).Bg()])));b=b.ka;return u((new v).G((new w).f(["world.turtleManager.","(",", ",");"])),(new w).f([d,e,ed(fd(),b)]))}
+function lr(a,b,d,e,f,h,k){var p=bd(a),t=b.za.W(0),t=Uq(p,t,f,h,k),p=b.za.W(1).je.eg.Ke();a=bd(a);b=b.za.W(1);f=fr(a,b,!1,f,h,k);d=u((new v).G((new w).f(["LinkPrims.","(",", ",")"])),(new w).f([d,t,ed(fd(),id(e))]));return gr(d,p,f)}
+function Uea(a,b,d,e,f,h){var k=bd(a),p=b.za.W(0),k=Uq(k,p,e,f,h);d=d?"createOrderedTurtles":"createTurtles";p=b.zd;if(!ir(p)&&!jr(p))throw(new Ne).c("How did you get here with class of type "+oa(p).Bg());p=p.ka;a=bd(a);b=b.za.W(1);e=fr(a,b,!1,e,f,h);f=u((new v).G((new w).f(["world.turtleManager.","(",", ",")"])),(new w).f([d,k,ed(fd(),p)]));return gr(f,!0,e)}function gr(a,b,d){return u((new v).G((new w).f(["",".ask(",", ",");"])),(new w).f([a,d,b]))}function ur(){}ur.prototype=new l;
+ur.prototype.constructor=ur;ur.prototype.b=function(){return this};
+function Xea(a,b){var d=vr(wr(),(new xr).ji(b),"returnType"),e=yr(),d=d.Yk(e).Mt(),e=d.z()?"unit":d.X(),d="unit"!==e,f=zr(wr(),(new xr).ji(b),"argTypes"),h=Yea(),f=sd(f,h).Y;a=m(new n,function(){return function(a){var b=vr(wr(),(new xr).ji(a),"type"),d=yr();if((b=Ar(b,d))&&b.$classData&&b.$classData.n.QB)b=yr(),a=Br(sd(a,b));else if(b&&b.$classData&&b.$classData.n.SB)b=b.Y,a=vr(wr(),(new xr).ji(a),"isRepeatable"),d=Zea(),a=a.Yk(d).Mt(),a=!(a.z()||!a.X()),a=Br(b)|(a?uj():0);else throw(new q).j(b);
+return a}}(a));h=ek().nc;f=Cr(f,a,h);a=Br(e);d?(d=vr(wr(),(new xr).ji(b),"isInfix"),e=Zea(),d=d.Yk(e).Mt(),(d.z()?0:d.X())?(d=f.$(),e=f.aa()):(d=mc(),e=f),d|=0,f=vr(wr(),(new xr).ji(b),"precedenceOffset"),h=$ea(),f=f.Yk(h).Mt(),f=(f.z()?0:f.X())|0,f=C()+f|0,a=afa(a,d,e,f)):a=(new Dr).Wx(f);d=zr(wr(),(new xr).ji(b),"name");e=yr();d=sd(d,e);b=zr(wr(),(new xr).ji(b),"actionName");e=yr();return bfa(new Er,a,d,sd(b,e))}
+function Br(a){if("agentset"===a)return Cj(D());if("agent"===a)return xj(D());if("booleanblock"===a)return Oj(D());if("boolean"===a)return zj(D());if("bracketed"===a)return wj();if("codeblock"===a)return Qj();if("commandblock"===a)return Lj(D());if("command"===a)return Kj(D());if("linkset"===a)return Fj(D());if("link"===a)return Ij(D());if("list"===a)return Bj(D());if("nobody"===a)return yj(D());if("numberblock"===a)return Pj(D());if("number"===a)return N(D());if("optional"===a)return Sj();if("otherblock"===
+a)return Nj(D());if("patchset"===a)return Ej(D());if("patch"===a)return Hj(D());if("readable"===a)return Fr();if("reference"===a)return vj();if("repeatable"===a)return uj();if("reporterblock"===a)return Mj(D());if("reporter"===a)return Jj(D());if("string"===a)return Aj(D());if("symbol"===a)return Rj();if("turtleset"===a)return Dj(D());if("turtle"===a)return Gj(D());if("wildcard"===a)return kc();if("unit"===a)return mc();throw ug(vg(),(new Kr).c(u((new v).G((new w).f(["Unknown type given in extension: ",
+""])),(new w).f([a]))));}ur.prototype.$classData=g({a3:0},!1,"org.nlogo.tortoise.compiler.CreateExtension$",{a3:1,d:1});var Lr=void 0;function cfa(){Lr||(Lr=(new ur).b());return Lr}function Mr(){}Mr.prototype=new l;Mr.prototype.constructor=Mr;Mr.prototype.b=function(){return this};Mr.prototype.$classData=g({g3:0},!1,"org.nlogo.tortoise.compiler.ExtDefReader$",{g3:1,d:1});var dfa=void 0;
+function efa(a){a=u((new v).G((new w).f(["|try {\n        |  var reporterContext \x3d false;\n        |  var letVars \x3d { };\n        |","\n        |} catch (e) {\n        |  if (e instanceof Exception.StopInterrupt) {\n        |    return e;\n        |  } else {\n        |    throw e;\n        |  }\n        |}"])),(new w).f([er(fd(),a)]));a=(new Sb).c(a);return dd(a)}
+var dr=function ffa(b,d,e,f,h,k,p){var t=(new Nr).Yo(1+k.wo|0,k.xc);if(yb(d))return ffa(b,d.je,!0,!1,h,t,p);if(!(d&&d.$classData&&d.$classData.n.Yz))throw(new q).j(d);k=d.eg;h=m(new n,function(b,d,e,f){return function(h){var k=b.ya?b.wy:gfa(b);return Sea(k,h,d,f,e)}}(b,h,p,t));p=r();b=k.xa(h,p.s).Xf(m(new n,function(){return function(b){b=(new Sb).c(b);return kd(b)}}(b))).zb("\n");return f||e&&d.re?efa(b):b};
+function fr(a,b,d,e,f,h){a=d?u((new v).G((new w).f(["return ",";"])),(new w).f([Uq(a,b,e,f,h)])):dr(a,b,!0,!1,e,f,h);b=I(r(),y());return Or(fd(),b,a)}var ifa=function hfa(b,d){if(Eg(d)){fd();var e=ek().nc,e=Mc(d,e);for(d=gk(d.uc);d.Yh;){var f=d.ma();e.Qa(hfa(b,f))}return Pr(0,e.Da()," ")}if(rh()===d)return"Nobody";b=oo();return $b(b,d,!0,!1)};function cd(a,b){return u((new v).G((new w).f(["_","_","_",""])),(new w).f([b,a.sa.Ua,a.sa.$a]))}
+var Uq=function jfa(b,d,e,f,h){f=(new Nr).Yo(1+f.wo|0,f.xc);if(zb(d))return jfa(b,d.fl,e,f,h);if(!xb(d))throw(new q).j(d);b=b.ya?b.wy:gfa(b);return kfa(b,d,e,f,h)};
+function lfa(a,b,d,e,f,h,k){a=d?u((new v).G((new w).f(["return ",";"])),(new w).f([Uq(a,b,f,h,k)])):dr(a,b,!0,!1,f,h,k);b=1!==e.ra()?"s":"";a=0<e.ra()?u((new v).G((new w).f(["if (arguments.length \x3c ",') {\n          |  throw new Error("anonymous procedure expected '," input",', but only got " + arguments.length);\n          |}\n          |',""])),(new w).f([e.ra(),e.ra(),b,a])):u((new v).G((new w).f(["",""])),(new w).f([a]));a=(new Sb).c(a);a=dd(a);return Or(fd(),e,a)}
+function Qr(){this.oH=this.uS=this.kH=null;this.a=0}Qr.prototype=new l;Qr.prototype.constructor=Qr;
+Qr.prototype.b=function(){Rr=this;for(var a=[(new A).e("!","_exclamation_"),(new A).e("#","_pound_"),(new A).e("\\$","_dollar_"),(new A).e("%","_percent_"),(new A).e("\\^","_caret_"),(new A).e("\\\x26","_ampersand_"),(new A).e("\\*","_asterisk_"),(new A).e("\x3c","_lessthan_"),(new A).e("\x3e","_greaterthan_"),(new A).e("/","_slash_"),(new A).e("\\.","_dot_"),(new A).e("\\?","_p"),(new A).e("\x3d","_eq"),(new A).e("\\+","_plus_"),(new A).e(":","_colon_"),(new A).e("'","_prime_")],b=dc(new ec,gc()),
+d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.kH=b.Oa;this.a=(1|this.a)<<24>>24;this.uS=I(r(),(new w).f("^(is)([A-Z].*)$ ^(on)([a-z].*)$ ^(screen)([A-Z].*)$ ^(scroll)([A-Zb].*)$ ^(webkit)([A-Z].*)$ ^(moz)([A-Z].*)$ ^(ms)([A-Z].*)$".split(" ")));this.a=(2|this.a)<<24>>24;this.oH=I(r(),(new w).f("alert atob break blur btoa case catch class clear close closed console content copy const confirm console constructor continue crypto debugger default delete do document dump else enum escape eval event export extends external false finally find focus for frames function history if implements import in instanceof inspect interface keys length let location localStorage monitor moveBy moveTo name navigator new null open opener package parent parseFloat parseInt performance print private profile profileEnd prompt protected public return screen scroll setInterval setTimeout static status statusbar stop super switch table this throw toolbar toString top true try typeof updateCommands undefined unescape uneval unmonitor unwatch valueOf values var void while window with yield".split(" ")));
+this.a=(4|this.a)<<24>>24;return this};function mfa(a){if(0===(4&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/JSIdentProvider.scala: 55");return a.oH}
+function nfa(a,b){return ofa(a).Gb(b,sb(new tb,function(){return function(a,b){b=(new Sb).c(b);var f=y(),f=(new Tb).$o(b.R,f),h=f.pX;b=new Sr;b.TF=a;b.Jba=h;b.qm=lg(new mg,f.qv,a,La(a));b.Cn=0;a=new Tr;if(null===b)throw ug(vg(),null);a.Va=b;for(a.kF=(new bo).b();a.ta();)b=pfa(a),b=u((new v).G((new w).f(["","_",""])),(new w).f([fba(b,1),fba(b,2)])),co(a.Va.qm,a.kF,b);b=(new bo).gE(a.kF);eo(a.Va.qm,b);return b.k()}}(a)))}
+function qfa(a,b){var d=rfa(a);return nl(d,b,sb(new tb,function(){return function(a,b){var d=(new A).e(a,b);a=d.lb;b=d.Db;if(null!==b)return d=b.ja(),b=b.na(),Qb(Ha(),a,d,b);throw(new q).j(d);}}(a)))}function rfa(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/JSIdentProvider.scala: 26");return a.kH}
+function sfa(a,b){return mfa(a).Gb(b,sb(new tb,function(){return function(a,b){return a!==b?a:u((new v).G((new w).f(["_","_"])),(new w).f([a]))}}(a)))}
+function $q(a,b){return pb(m(new n,function(){return function(a){a=a.toLowerCase();a=(new Sb).c(a);a=qi(a,45);var b;b=[];for(var f=0,h=a.m.length;f<h;){var k=(new Sb).c(a.m[f]),k=tfa(k);b.push(null===k?null:k);f=1+f|0}a=ka(Wa(qa),b);b=(new pm).b();f=!0;Ur(b,"");h=0;for(k=a.m.length;h<k;){var p=a.m[h];f?(Wr(b,p),f=!1):(Ur(b,""),Wr(b,p));h=1+h|0}Ur(b,"");a=b.rc.Xb;b=(new Sb).c(a);b=Uj(b);b=null===b?0:b.Y;b=ufa(Gh(),b);b=(new Ke).Xa(b);a=(new Sb).c(a);return""+b+Ck(a)}}(a)),m(new n,function(a){return function(b){return qfa(a,
+b)}}(a))).Ca(m(new n,function(a){return function(b){return sfa(a,b)}}(a))).Ca(m(new n,function(a){return function(b){return nfa(a,b)}}(a))).y(b)}function ofa(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/JSIdentProvider.scala: 45");return a.uS}Qr.prototype.$classData=g({i3:0},!1,"org.nlogo.tortoise.compiler.JSIdentProvider$",{i3:1,d:1});var Rr=void 0;function ar(){Rr||(Rr=(new Qr).b());return Rr}
+function Xr(){this.kh=null;this.ya=0}Xr.prototype=new l;Xr.prototype.constructor=Xr;function vfa(a,b){b=Yr(b.Tg);var d=m(new n,function(){return function(a){return(new A).e(a.ja(),wfa(a.na()))}}(a)),e=r();b=b.xa(d,e.s);a=a.kh;d=r();return(new Xr).G(b.Vc(a,d.s))}Xr.prototype.G=function(a){this.kh=a;return this};Xr.prototype.gG=function(){var a=this.kh,b=m(new n,function(){return function(a){return a.na().EW(a.ja())}}(this)),d=r();return a.xa(b,d.s).Mc("{",",","}")};
+Xr.prototype.$classData=g({j3:0},!1,"org.nlogo.tortoise.compiler.JavascriptObject",{j3:1,d:1});function Zr(){}Zr.prototype=new l;Zr.prototype.constructor=Zr;Zr.prototype.b=function(){return this};function Pr(a,b,d){return b.Ke()?b.Mc("[",u((new v).G((new w).f([",",""])),(new w).f([d])),"]"):"[]"}function xfa(a,b){a=(new Sb).c(b).R.split("\\").join("\\\\");a=(new Sb).c(a).R.split("\n").join("\\n");a=(new Sb).c(a).R.split('"').join('\\"');return(new Sb).c(a).R.split("'").join("\\'")}
+function yfa(a,b){return ed(0,xfa(0,b))}function $r(a,b){var d=(new Sb).c(b);return kd(d)?(b=u((new v).G((new w).f(["return ",";"])),(new w).f([b])),d=I(r(),y()),Or(a,d,b)):Or(a,I(r(),y()),"")}
+function Or(a,b,d){b=b.Mc("(",", ",")");if(0===(d.length|0))return u((new v).G((new w).f(["function"," {}"])),(new w).f([b]));var e=(new Sb).c(d),e=zfa(e);if(2>as(e)&&100>(d.length|0))return u((new v).G((new w).f(["function"," { "," }"])),(new w).f([b,d]));a=u((new v).G((new w).f(["|function"," {\n          |","\n          |}"])),(new w).f([b,er(a,d)]));a=(new Sb).c(a);return dd(a)}function ed(a,b){return""+(new Ke).Xa(34)+b+(new Ke).Xa(34)}
+function er(a,b){b=(new Sb).c(b);b=zfa(b);a=(new bc).Kf(b,m(new n,function(){return function(a){return"  "+a}}(a)));return cc(a,"","\n","")}function bs(a,b){var d=(new Sb).c(b);return kd(d)?(b=u((new v).G((new w).f(["",";"])),(new w).f([b])),d=I(r(),y()),Or(a,d,b)):Or(a,I(r(),y()),"")}function cs(a){return"NIL"!==a?(new Sb).c(a).R.split("'").join("\\'"):""}Zr.prototype.$classData=g({l3:0},!1,"org.nlogo.tortoise.compiler.JsOps$",{l3:1,d:1});var ds=void 0;
+function fd(){ds||(ds=(new Zr).b());return ds}function es(){}es.prototype=new l;es.prototype.constructor=es;es.prototype.b=function(){return this};
+function Afa(a,b,d,e,f){b=Cq(qd(),b);b=Yp().Ra(b);if(!Zp(b)){if(!aq(b))throw(new q).j(b);var h=b.fc;b=function(){return function(a){return(new Dq).c(a)}}(a);eq();var k=b(h.Gc),h=h.Pc,p=fq().$d,h=gq(h);a:for(;;){if(!hq(h)){if(iq(h)){var t=h,h=t.fd,t=b(t.bd),p=(new jq).Sb(t,p);continue a}throw(new q).j(h);}break}b=(new bq).j((new kq).Sb(k,p))}if(Zp(b)){b=b.ha;b=oq().yy().y(b);if(!Zp(b)){if(!aq(b))throw(new q).j(b);b=(new bq).j(cq(b.fc))}if(Zp(b))b=(new dq).j(b.ha);else if(!aq(b))throw(new q).j(b);}else if(!aq(b))throw(new q).j(b);
+if(!Zp(b)){if(aq(b)){e=b.fc;Bfa();a=function(){return function(a){return a}}(a);eq();d=a(e.Gc);e=e.Pc;f=fq().$d;e=gq(e);a:for(;;){if(!hq(e)){if(iq(e)){var x=e;e=x.fd;x=a(x.bd);f=(new jq).Sb(x,f);continue a}throw(new q).j(e);}break}a=(new kq).Sb(d,f);d=eq().NE;a=Cfa(a,d);a=a.pt.ok(a.tc);throw(new fs).c(cc(a,"","\n",""));}throw(new q).j(b);}b=b.ha;try{x=Dfa(sq(),Efa(b,e,f,d),tq())}catch(E){a=Un(vg(),E);if(gs(a))throw(new fs).c(a.Lh());throw E;}a=x.Zr.ml(m(new n,function(){return function(a){if(null!==
+a)return a.na().ib("__run");throw(new q).j(a);}}(a)),!1);switch(a.Ha()){case 1:return a.$().ja();case 0:throw(new fs).c("The compiler did not return a procedure for the run primitive, but it also did not throw an error.");default:throw(new fs).c("The compiler returned multiple procedures with the same name for the run primitive.");}}
+function Efa(a,b,d,e){b=b?u((new v).G((new w).f(["","\\nto-report __run [","] report (","\\n)end"])),(new w).f([a.de,d,e])):u((new v).G((new w).f(["","\\nto __run [","] ","\\nend"])),(new w).f([a.de,d,e]));return Ffa(b,a.Ue,a.Xh,a.Hc,a.cj,a.nj,a.ch,a.Pg).$y()}es.prototype.compileRunString=function(a,b,d,e){return Afa(this,a,b,!!d,e)};
+es.prototype.stringToJSValue=function(a){var b;try{var d=(new hs).b(),e=Gfa(Zj(),a);b=d.eb(e,ld().fD)}catch(f){a=Un(vg(),f);if(gs(a))throw(new fs).c(a.Lh());throw f;}return b};es.prototype.$classData=g({m3:0},!1,"org.nlogo.tortoise.compiler.LiteralConverter$",{m3:1,d:1});var is=void 0;function js(){}js.prototype=new l;js.prototype.constructor=js;js.prototype.b=function(){return this};js.prototype.k=function(){return"nobody"};js.prototype.toString=function(){return"nobody"};
+js.prototype.getBreedName=function(){return"nobody"};js.prototype.isDead=function(){return!0};Object.defineProperty(js.prototype,"id",{get:function(){return-1},configurable:!0});js.prototype.ask=function(){};js.prototype.$classData=g({q3:0},!1,"org.nlogo.tortoise.compiler.Nobody$",{q3:1,d:1});var ks=void 0;function Hfa(){ks||(ks=(new js).b());return ks}function ls(){}ls.prototype=new l;ls.prototype.constructor=ls;ls.prototype.b=function(){return this};
+function Ifa(a,b){return pb(m(new n,function(){return function(a){ms||(ms=(new ns).b());return Kb(ms,a)}}(a)),m(new n,function(){return function(a){os||(os=(new ps).b());return Kb(os,a)}}(a))).Ca(m(new n,function(){return function(a){qs||(qs=(new rs).b());return Kb(qs,a)}}(a))).Ca(m(new n,function(){return function(a){ss||(ss=(new ts).b());return Kb(ss,a)}}(a))).Ca(m(new n,function(){return function(a){us||(us=(new vs).b());return Kb(us,a)}}(a))).Ca(m(new n,function(){return function(a){ws||(ws=(new xs).b());
+return Kb(ws,a)}}(a))).Ca(m(new n,function(){return function(a){ys||(ys=(new zs).b());return Kb(ys,a)}}(a))).Ca(m(new n,function(){return function(a){As||(As=(new Bs).b());return Kb(As,a)}}(a))).Ca(m(new n,function(){return function(a){Cs||(Cs=(new Ds).b());return Kb(Cs,a)}}(a))).Ca(m(new n,function(){return function(a){Es||(Es=(new Fs).b());return Kb(Es,a)}}(a))).Ca(m(new n,function(){return function(a){Gs||(Gs=(new Hs).b());return Kb(Gs,a)}}(a))).Ca(m(new n,function(){return function(a){Is||(Is=
+(new Js).b());return Kb(Is,a)}}(a))).Ca(m(new n,function(){return function(a){Ks||(Ks=(new Ls).b());return Kb(Ks,a)}}(a))).Ca(m(new n,function(){return function(a){Ms||(Ms=(new Ns).b());return Kb(Ms,a)}}(a))).y(b)}ls.prototype.$classData=g({r3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$",{r3:1,d:1});var Os=void 0;function Jfa(){Os||(Os=(new ls).b());return Os}function Ps(){}Ps.prototype=new l;Ps.prototype.constructor=Ps;Ps.prototype.b=function(){return this};
+Ps.prototype.ce=function(a){var b=Uh().ce(a);if(!b.z()){var d=b.X().fb,b=b.X().Eb;if(Qs(d)&&(r(),d=(new J).j(b),null!==d.U&&0===d.U.Mb(2)&&(b=d.U.W(0),d=d.U.W(1),xb(b)&&(b=Uh().ce(b),!b.z()&&(b=b.X().fb,tr(b)&&xb(d))))))return(new J).j((new A).e(b,d))}d=Uh().ce(a);return!d.z()&&(a=d.X().fb,d=d.X().Eb,Qs(a)&&(r(),d=(new J).j(d),null!==d.U&&0===d.U.Mb(2)&&(a=d.U.W(0),d=d.U.W(1),xb(a)&&xb(d)&&(d=Uh().ce(d),!d.z()&&(d=d.X().fb,tr(d))))))?(new J).j((new A).e(d,a)):F()};
+Ps.prototype.$classData=g({H3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$WithTransformer$PatchVarEqualExpression$",{H3:1,d:1});var Rs=void 0;function Ss(){}Ss.prototype=new l;Ss.prototype.constructor=Ss;Ss.prototype.b=function(){return this};
+function Kfa(a,b){var d=(new Ts).b(),e=r();b=b.jc(d,e.s);a=m(new n,function(){return function(a){var b=new Us;b.hl=a;a=b.hl.Ap;if(Zp(a))a=a.ha,b=Lfa(b,a.Jj,a.Kj,a.Yr);else{if(!aq(a))throw(new q).j(a);b=Mfa(b,a.fc)}return b}}(a));d=r();a=b.xa(a,d.s);b=(new Vs).b();d=r();b=a.jc(b,d.s);d=(new Ws).b();e=r();a=a.jc(d,e.s).ss(Je().Qk);b=Pr(fd(),b," ");a=a.z()?"":Nfa(0,a.zb(", "));return I(r(),(new w).f([(new Xs).Dd("PenBundle","engine/plot/pen"),(new Xs).Dd("Plot","engine/plot/plot"),(new Xs).Dd("PlotOps",
+"engine/plot/plotops"),(new Ys).Ek("modelConfig",Zs(0,"window.modelConfig","{}"),I(r(),y())),(new Ys).Ek("modelPlotOps",Zs(0,"modelConfig.plotOps","{}"),I(r(),(new w).f(["modelConfig"]))),(new $s).Ek("modelConfig.plots",u((new v).G((new w).f(["modelConfig.plots \x3d ",";",""])),(new w).f([b,a])),I(r(),(new w).f(["PenBundle","Plot","PlotOps","modelConfig","modelPlotOps"])))]))}function Nfa(a,b){return u((new v).G((new w).f(['modelConfig.dialog.notify("Error: ','");'])),(new w).f([b]))}
+function Zs(a,b,d){return u((new v).G((new w).f(["(typeof ",' !\x3d\x3d "undefined" \x26\x26 '," !\x3d\x3d null) ? "," : ",""])),(new w).f([b,b,b,d]))}Ss.prototype.$classData=g({I3:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$",{I3:1,d:1});var at=void 0;function bt(){at||(at=(new Ss).b());return at}function Us(){this.hl=null}Us.prototype=new l;Us.prototype.constructor=Us;
+function Ofa(a,b){a=function(){return function(a){return a.Lh()}}(a);eq();var d=a(b.Gc);b=b.Pc;var e=fq().$d;b=gq(b);a:for(;;){if(!hq(b)){if(iq(b)){var f=b;b=f.fd;f=a(f.bd);e=(new jq).Sb(f,e);continue a}throw(new q).j(b);}break}return(new ct).G(dt((new kq).Sb(d,e)).ob())}function Pfa(a){var b=(new v).G((new w).f(["PenBundle.DisplayMode.",""]));switch(a){case 0:a="Line";break;case 1:a="Bar";break;case 2:a="Point";break;default:a="Line"}return u(b,(new w).f([a]))}
+function Mfa(a,b){a=function(){return function(a){return a.Lh()}}(a);eq();var d=a(b.Gc);b=b.Pc;var e=fq().$d;b=gq(b);a:for(;;){if(!hq(b)){if(iq(b)){var f=b;b=f.fd;f=a(f.bd);e=(new jq).Sb(f,e);continue a}throw(new q).j(b);}break}return(new ct).G(dt((new kq).Sb(d,e)).ob())}
+function Lfa(a,b,d,e){var f=bs(fd(),""),h=$r(fd(),f),f=u((new v).G((new w).f("new PlotOps(;, ;, ;, ;, ;, ;, ;)".split(";"))),(new w).f([f,f,f,h,h,h,h])),h=m(new n,function(a){return function(b){var d=b.it;if(Zp(d)){b=b.Ss;var d=d.ha,e=(new v).G((new w).f(["new PenBundle.State(",", ",", ",")"]));Zb||(Zb=(new et).b());e=u(e,(new w).f([vaa(b.Bb),b.rl,Pfa(b.vl)]));b=I(r(),(new w).f([u((new v).G((new w).f(["'","'"])),(new w).f([b.ab])),"plotOps.makePenOps","false",e,d.Jj,d.Kj]));b=(new ft).c(u((new v).G((new w).f(["new PenBundle.Pen(",
+")"])),(new w).f([b.zb(", ")])))}else{if(!aq(d))throw(new q).j(d);b=Ofa(a,d.fc)}return b}}(a)),k=r();e=e.xa(h,k.s);var h=(new Vs).b(),k=r(),h=e.jc(h,k.s),k=(new Ws).b(),p=r(),k=e.jc(k,p.s).ss(Je().Qk);e=Pr(fd(),h,"\n");h=k.z()?"":Nfa(bt(),k.zb(", "));k=r();fd();fd();p=a.hl.Ri.go;p=ed(0,cs(p.z()?"":p.X()));fd();fd();var t=a.hl.Ri.io,t=ed(0,cs(t.z()?"":t.X())),k=I(k,(new w).f(["name","pens","plotOps",p,t,a.hl.Ri.xn,a.hl.Ri.Zm,a.hl.Ri.Ti,a.hl.Ri.Si,a.hl.Ri.Vi,a.hl.Ri.Ui,"setup","update"])).zb(", ");
+a=u((new v).G((new w).f("|var name    \x3d ',';\n            |var plotOps \x3d ,;\n            |var pens    \x3d ,;,\n            |var setup   \x3d ,;\n            |var update  \x3d ,;\n            |return new Plot(,);".split(","))),(new w).f([a.hl.iT,Zs(bt(),"modelPlotOps[name]",f),e,h,b,d,k]));a=(new Sb).c(a);a=dd(a);b=(new v).G((new w).f(["(",")()"]));d=I(r(),y());return(new ft).c(u(b,(new w).f([Or(fd(),d,a)])))}
+Us.prototype.$classData=g({N3:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$RichCompiledPlot",{N3:1,d:1});function gt(){this.pT=this.sT=this.gj=null}gt.prototype=new l;gt.prototype.constructor=gt;function Qfa(a,b,d,e){a.gj=b;a.sT=d;a.pT=e;return a}
+function Rfa(a,b){a=m(new n,function(a){return function(b){var d=a.sT,k=a.pT,p=d.kp?Ifa(Jfa(),b):b;b=p.qi.pe();var t=$q(ar(),b),x=a.gj,E=(new A).e(0,t);x.ry=E;x.a=!0;E=rc(p.qi);dk();x=ek().nc;x=Mc(E,x);for(E=gk(E);E.Yh;){var S=E.ma();x.Qa($q(ar(),S))}E=x.Da();x=new ht;x.yq=!0;x.lp=E;p.qi.tv.sn?(d=dr(a.gj,p.je,!1,!1,d,k,x),d=u((new v).G((new w).f(["|try {\n        |  var reporterContext \x3d true;\n        |  var letVars \x3d { };\n        |",'\n        |  throw new Error("Reached end of reporter procedure without REPORT being called.");\n        |} catch (e) {\n        | if (e instanceof Exception.StopInterrupt) {\n        |    throw new Error("STOP is not allowed inside TO-REPORT.");\n        |  } else {\n        |    throw e;\n        |  }\n        |}'])),
+(new w).f([er(fd(),d)])),d=(new Sb).c(d),d=dd(d)):d=dr(a.gj,p.je,!0,!0,d,k,x);d=u((new v).G((new w).f(["(",")"])),(new w).f([Or(fd(),x.lp,d)]));return(new A).e(d,I(r(),(new w).f([t,b])).xi())}}(a));var d=r();return b.xa(a,d.s)}gt.prototype.$classData=g({S3:0},!1,"org.nlogo.tortoise.compiler.ProcedureCompiler",{S3:1,d:1});function it(){}it.prototype=new l;it.prototype.constructor=it;it.prototype.b=function(){return this};
+function Sfa(a,b){a=m(new n,function(a){return function(b){if(null!==b){var d=b.ja();b=b.na();var k=m(new n,function(){return function(a){return u((new v).G((new w).f(['procs["','"] \x3d temp;'])),(new w).f([a]))}}(a)),p=r();return b.xa(k,p.s).Mc(u((new v).G((new w).f(["temp \x3d ",";\\n"])),(new w).f([d])),"\n","")}throw(new q).j(b);}}(a));var d=r();b=b.xa(a,d.s).zb("\n");b=u((new v).G((new w).f(["|var procs \x3d {};\n          |var temp \x3d undefined;\n          |","\n          |return procs;"])),
+(new w).f([b]));b=(new Sb).c(b);b=dd(b);a=(new v).G((new w).f(["(",")()"]));d=I(r(),y());return u(a,(new w).f([Or(fd(),d,b)]))}function Tfa(a){var b=jt;return I(r(),(new w).f([(new Ys).Ek("procedures",Sfa(b,a),I(r(),(new w).f(["workspace","world"])))]))}it.prototype.$classData=g({T3:0},!1,"org.nlogo.tortoise.compiler.ProcedureCompiler$",{T3:1,d:1});var jt=void 0;function kt(a,b,d,e,f){b=b.za;var h=new lt;if(null===a)throw ug(vg(),null);h.Va=a;h.uT=d;h.rT=e;h.tW=f;a=r();return b.jc(h,a.s)}
+function Ufa(a){r();var b=(new J).j(a);if(null!==b.U&&0===b.U.Mb(1))return a=b.U.W(0),u((new v).G((new w).f(["Prims.rangeUnary(",")"])),(new w).f([a]));r();b=(new J).j(a);if(null!==b.U&&0===b.U.Mb(2))return a=b.U.W(0),b=b.U.W(1),u((new v).G((new w).f(["Prims.rangeBinary(",", ",")"])),(new w).f([a,b]));r();var d=(new J).j(a);if(null!==d.U&&0===d.U.Mb(3))return a=d.U.W(0),b=d.U.W(1),d=d.U.W(2),u((new v).G((new w).f(["Prims.rangeTernary(",", ",", ",")"])),(new w).f([a,b,d]));throw(new Ne).c("range expects at most three arguments");
+}function Vfa(a){return u((new v).G((new w).f(["SelfManager.self()._optimalNSum4(",")"])),(new w).f([ed(fd(),a)]))}function mt(a,b,d,e,f,h){a=bd(a);b=d.za.W(b);return Uq(a,b,e,f,h)}function Wfa(a){return u((new v).G((new w).f(["SelfManager.self()._optimalNSum(",")"])),(new w).f([ed(fd(),a)]))}function Xfa(a,b,d,e,f){var h=bd(a),k=b.za.W(1),h=Uq(h,k,d,e,f);a=bd(a);b=b.za.W(0);d=fr(a,b,!0,d,e,f);return u((new v).G((new w).f(["",".projectionBy(",")"])),(new w).f([h,d]))}
+function kfa(a,b,d,e,f){var h=b.se;ld();var k=(new nt).b(),p=md(new nd,k).Wc(h);if(!p.z())return p.X();ld();var t=(new ot).b(),x=md(new nd,t).Wc(h);if(!x.z()){var E=x.X();return u((new v).G((new w).f(["("," "," ",")"])),(new w).f([mt(a,0,b,d,e,f),E,mt(a,1,b,d,e,f)]))}ld();var S=(new pt).b(),U=md(new nd,S).Wc(h);if(!U.z()){var ga=U.X();return u((new v).G((new w).f(["","(",")"])),(new w).f([ga,kt(a,b,d,e,f).zb(", ")]))}ld();var ma=(new qt).b(),va=md(new nd,ma).Wc(h);if(!va.z()){var Ia=va.X();return u((new v).G((new w).f(["NLType(",
+").",""])),(new w).f([mt(a,0,b,d,e,f),Ia]))}var $a=Yfa(a).mG(h);if(!$a.z())return $a.X();if(no(h)){var ub=bd(a);return ifa(ub,h.Y)}if(Zq(h)){bd(a);var vb=h.Zc.wa;return $q(ar(),vb)}if(br(h)){bd(a);var Mb=h.wa;return $q(ar(),Mb)}if(qo(h)){bd(a);var Jc=h.wa;return $q(ar(),Jc)}if(rt(h))return u((new v).G((new w).f(['procedures["','"](',")"])),(new w).f([h.Qh.pe(),kt(a,b,d,e,f).zb(",")]));if(h&&h.$classData&&h.$classData.n.gA)return u((new v).G((new w).f([" -",""])),(new w).f([mt(a,0,b,d,e,f)]));if(h&&
+h.$classData&&h.$classData.n.dA)return u((new v).G((new w).f(["!",""])),(new w).f([mt(a,0,b,d,e,f)]));if(st(h))return u((new v).G((new w).f(["",".size()"])),(new w).f([mt(a,0,b,d,e,f)]));if(tt(h))return u((new v).G((new w).f(["!",".isEmpty()"])),(new w).f([mt(a,0,b,d,e,f)]));if(h&&h.$classData&&h.$classData.n.hA){var ab=kt(a,b,d,e,f),fc=r(),Cc=ab.Qc("''",fc.s),rf=m(new n,function(){return function(a){return u((new v).G((new w).f(["workspace.dump(",")"])),(new w).f([a]))}}(a)),Wf=r();return Cc.xa(rf,
+Wf.s).Mc("("," + ",")")}if(ut(h))return Xfa(a,b,d,e,f);if(h&&h.$classData&&h.$classData.n.JA)return u((new v).G((new w).f(["("," ? "," : ",")"])),(new w).f([mt(a,0,b,d,e,f),mt(a,1,b,d,e,f),mt(a,2,b,d,e,f)]));if(h&&h.$classData&&h.$classData.n.gB)return u((new v).G((new w).f(["",".reduce(",")"])),(new w).f([mt(a,1,b,d,e,f),mt(a,0,b,d,e,f)]));if(h&&h.$classData&&h.$classData.n.EA)return u((new v).G((new w).f(["",".filter(",")"])),(new w).f([mt(a,1,b,d,e,f),mt(a,0,b,d,e,f)]));if(h&&h.$classData&&h.$classData.n.bB)return u((new v).G((new w).f(["Tasks.nValues(",
+", ",")"])),(new w).f([mt(a,0,b,d,e,f),mt(a,1,b,d,e,f)]));if(vt(h)){var vh=h.Zc;if(Fk(vh)){var Te=vh.U,sf=(new v).G((new w).f(["_error_",".message"])),hk=Q();return u(sf,(new w).f([R(hk,Te)]))}}if(wt(h)){var qg=mt(a,0,b,d,e,f),wh=(new v).G((new w).f(["",".agentFilter(",")"])),rg=bd(a),bi=b.za.W(1);return u(wh,(new w).f([qg,fr(rg,bi,!0,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.VA){var Vi=mt(a,1,b,d,e,f),ik=(new v).G((new w).f(["",".maxNOf(",", ",")"])),Wi=mt(a,0,b,d,e,f),jk=bd(a),Xi=b.za.W(2);return u(ik,
+(new w).f([Vi,Wi,fr(jk,Xi,!0,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.WA){var Bl=mt(a,0,b,d,e,f),Yi=(new v).G((new w).f(["",".maxOneOf(",")"])),kk=bd(a),Zi=b.za.W(1);return u(Yi,(new w).f([Bl,fr(kk,Zi,!0,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.XA){var Cl=mt(a,1,b,d,e,f),xh=(new v).G((new w).f(["",".minNOf(",", ",")"])),Dl=mt(a,0,b,d,e,f),yh=bd(a),lk=b.za.W(2);return u(xh,(new w).f([Cl,Dl,fr(yh,lk,!0,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.YA){var El=mt(a,0,b,d,e,f),ci=(new v).G((new w).f(["",
+".minOneOf(",")"])),di=bd(a),Fl=b.za.W(1);return u(ci,(new w).f([El,fr(di,Fl,!0,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.mA){var Gl=mt(a,0,b,d,e,f),Hl=(new v).G((new w).f(["",".agentAll(",")"])),mk=bd(a),Il=b.za.W(1);return u(Hl,(new w).f([Gl,fr(mk,Il,!0,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.pB){var Jl=mt(a,0,b,d,e,f),Kl=(new v).G((new w).f(["",".maxesBy(",")"])),Ll=bd(a),nk=b.za.W(1);return u(Kl,(new w).f([Jl,fr(Ll,nk,!0,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.qB){var Ml=mt(a,0,b,
+d,e,f),ei=(new v).G((new w).f(["",".minsBy(",")"])),ok=bd(a),zh=b.za.W(1);return u(ei,(new w).f([Ml,fr(ok,zh,!0,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.nA){var Nl=mt(a,0,b,d,e,f);return u((new v).G((new w).f(["",".atPoints(",")"])),(new w).f([Nl,mt(a,1,b,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.kB){var $i=mt(a,1,b,d,e,f),pk=(new v).G((new w).f(["",".sortOn(",")"])),Ah=bd(a),Yf=b.za.W(0);return u(pk,(new w).f([$i,fr(Ah,Yf,!0,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.FQ)return Wfa(h.$k);
+if(h&&h.$classData&&h.$classData.n.GQ)return Vfa(h.$k);if(h&&h.$classData&&h.$classData.n.IQ){var xe=mt(a,0,b,d,e,f),Bh=(new v).G((new w).f(["","._optimalOtherWith(",")"])),fi=bd(a),qk=b.za.W(1);return u(Bh,(new w).f([xe,fr(fi,qk,!0,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.HQ){var aj=mt(a,0,b,d,e,f),Ol=(new v).G((new w).f(["","._optimalOneOfWith(",")"])),bj=bd(a),Pl=b.za.W(1);return u(Ol,(new w).f([aj,fr(bj,Pl,!0,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.cA)return u((new v).G((new w).f(["world.turtleManager.turtlesOfBreed(",
+")"])),(new w).f([ed(fd(),h.ka)]));if(h&&h.$classData&&h.$classData.n.rA)return u((new v).G((new w).f(["world.turtleManager.getTurtleOfBreed(",", ",")"])),(new w).f([ed(fd(),h.ka),mt(a,0,b,d,e,f)]));if(h&&h.$classData&&h.$classData.n.PA)return u((new v).G((new w).f(["world.linkManager.linksOfBreed(",")"])),(new w).f([ed(fd(),h.ka)]));if(h&&h.$classData&&h.$classData.n.QA)return u((new v).G((new w).f(["world.linkManager.getLink(",", ",", ",")"])),(new w).f([mt(a,0,b,d,e,f),mt(a,1,b,d,e,f),ed(fd(),
+h.ka)]));if(h&&h.$classData&&h.$classData.n.oA)return u((new v).G((new w).f(["SelfManager.self().breedAt(",", ",", ",")"])),(new w).f([ed(fd(),h.ka),mt(a,0,b,d,e,f),mt(a,1,b,d,e,f)]));if(h&&h.$classData&&h.$classData.n.pA)return u((new v).G((new w).f(["SelfManager.self().breedHere(",")"])),(new w).f([ed(fd(),h.ka)]));if(h&&h.$classData&&h.$classData.n.qA)return u((new v).G((new w).f(["Prims.breedOn(",", ",")"])),(new w).f([ed(fd(),h.ka),mt(a,0,b,d,e,f)]));if(h&&h.$classData&&h.$classData.n.LA){var cj=
+(new v).G((new w).f(["LinkPrims.inLinkFrom(",", ",")"]));fd();return u(cj,(new w).f([ed(0,id(h.ka)),mt(a,0,b,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.MA){var dj=(new v).G((new w).f(["LinkPrims.isInLinkNeighbor(",", ",")"]));fd();return u(dj,(new w).f([ed(0,id(h.ka)),mt(a,0,b,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.NA){var rk=(new v).G((new w).f(["LinkPrims.inLinkNeighbors(",")"]));fd();return u(rk,(new w).f([ed(0,id(h.ka))]))}if(h&&h.$classData&&h.$classData.n.RA){var Ql=(new v).G((new w).f(["LinkPrims.isLinkNeighbor(",
+", ",")"]));fd();return u(Ql,(new w).f([ed(0,id(h.ka)),mt(a,0,b,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.SA){var ej=(new v).G((new w).f(["LinkPrims.linkNeighbors(",")"]));fd();return u(ej,(new w).f([ed(0,id(h.ka))]))}if(h&&h.$classData&&h.$classData.n.TA){var gi=(new v).G((new w).f(["LinkPrims.linkWith(",", ",")"]));fd();return u(gi,(new w).f([ed(0,id(h.ka)),mt(a,0,b,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.ZA){var Rl=(new v).G((new w).f(["LinkPrims.myInLinks(",")"]));fd();return u(Rl,(new w).f([ed(0,
+id(h.ka))]))}if(h&&h.$classData&&h.$classData.n.$A){var Xg=(new v).G((new w).f(["LinkPrims.myLinks(",")"]));fd();return u(Xg,(new w).f([ed(0,id(h.ka))]))}if(h&&h.$classData&&h.$classData.n.aB){var Yg=(new v).G((new w).f(["LinkPrims.myOutLinks(",")"]));fd();return u(Yg,(new w).f([ed(0,id(h.ka))]))}if(h&&h.$classData&&h.$classData.n.cB){var sk=(new v).G((new w).f(["LinkPrims.isOutLinkNeighbor(",", ",")"]));fd();return u(sk,(new w).f([ed(0,id(h.ka)),mt(a,0,b,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.dB){var fj=
+(new v).G((new w).f(["LinkPrims.outLinkNeighbors(",")"]));fd();return u(fj,(new w).f([ed(0,id(h.ka))]))}if(h&&h.$classData&&h.$classData.n.eB){var Ch=(new v).G((new w).f(["LinkPrims.outLinkTo(",", ",")"]));fd();return u(Ch,(new w).f([ed(0,id(h.ka)),mt(a,0,b,d,e,f)]))}if(h&&h.$classData&&h.$classData.n.hB){var tk=h.K(),Sl=kt(a,b,d,e,f);return Maa(a,!0,tk,Sl,f)}if(xt(h)){var uk=b.za.W(0),Zg=h.ze.vk(),Tl=bd(a),gj=m(new n,function(){return function(a){return $q(ar(),a)}}(a,Tl)),hi=r(),Dh=Zg.xa(gj,hi.s),
+Ul=Zfa(a,uk,!0,Dh,h.xc,d,e,f);return u((new v).G((new w).f(["Tasks.reporterTask(",")"])),(new w).f([Ul]))}if(po(h)){var sg=b.za.W(0),ji=h.ze.vk(),Eh=bd(a),hj=m(new n,function(){return function(a){return $q(ar(),a)}}(a,Eh)),$g=r(),ij=ji.xa(hj,$g.s),jj=Zfa(a,sg,!1,ij,h.xc,d,e,f);return u((new v).G((new w).f(["Tasks.commandTask(",")"])),(new w).f([jj]))}if(yt(h)){var ki=(new Sb).c("_externreport\\(([^:]+):([^)]+)\\)"),li=y(),kj=(new Tb).$o(ki.R,li),Zf=h.k();var uf,ee=ng(kj,Zf);if(ee.z())tg=!1;else if(null!==
+ee.X())var lj=ee.X(),tg=0===og(lj,2);else tg=!1;if(tg){var mj=ee.X().W(0),nj=ee.X().W(1);uf=(new A).e(mj,nj)}else throw(new q).j(Zf);var mi=uf.ja(),ni=uf.na();return u((new v).G((new w).f(["Extensions[","].prims[","](",")"])),(new w).f([ed(fd(),mi),ed(fd(),ni),kt(a,b,d,e,f).zb(", ")]))}if(h&&h.$classData&&h.$classData.n.fB){var Vl=kt(a,b,d,e,f);return Ufa(Vl)}if(d.Uo){var vk=oa(b.se).Bg(),ah=(new Sb).c(vk),oi=ah.R.length|0,Wl=He(Ie(),ah.R,1,oi);return Naa(Wl)}var wk=u((new v).G((new w).f(["unimplemented primitive: ",
+""])),(new w).f([b.se.K().Yb])),ii=b.se.K();gd(wk,ii)}function Zfa(a,b,d,e,f,h,k,p){var t=(new v).G((new w).f(["",", ",""]));a=bd(a);return u(t,(new w).f([lfa(a,b,d,e,h,k,p),yfa(fd(),f.z()?"":f.X())]))}function zt(){this.WV=this.Nf=this.Hc=this.dc=null}zt.prototype=new l;zt.prototype.constructor=zt;
+function $fa(a){var b=r(),d=(new Ys).Ek("turtleShapes",aga(bga(new At,Oi(),cga(Bt(),a.Nf.ch))),I(r(),y())),e=(new Ys).Ek("linkShapes",aga(bga(new At,Qi(),cga(Bt(),a.Nf.Pg))),I(r(),y())),f=r(),h=I(r(),(new w).f([dga(a)])),k=ega(a),p=I(r(),(new w).f([u((new v).G((new w).f(["'","'"])),(new w).f([xfa(fd(),a.Nf.de)]))])),t=r();fd();var x=a.Hc,E=m(new n,function(){return function(a){a=fga(a).$e();return od(a)}}(a)),S=r();return I(b,(new w).f([d,e,(new Ct).Ku(I(f,(new w).f([h,k,p,I(t,(new w).f([Pr(0,x.xa(E,
+S.s)," ")])),I(r(),(new w).f(['tortoise_require("extensions/all").dumpers()'])),gga(a)])),I(r(),(new w).f(["turtleShapes","linkShapes"]))),Dt("BreedManager"),Dt("ImportExportPrims"),Dt("LayoutManager"),Dt("LinkPrims"),Dt("ListPrims"),Dt("MousePrims"),Dt("OutputPrims"),Dt("plotManager"),Dt("Prims"),Dt("PrintPrims"),Dt("SelfPrims"),Dt("SelfManager"),Dt("UserDialogPrims"),Dt("Updater"),Dt("world"),(new Xs).Dd("Exception","util/exception"),(new Xs).Dd("NLMath","util/nlmath"),(new Xs).Dd("notImplemented",
+"util/notimplemented"),(new Xs).Dd("ColorModel","engine/core/colormodel"),(new Xs).Dd("Link","engine/core/link"),(new Xs).Dd("LinkSet","engine/core/linkset"),(new Xs).Dd("PatchSet","engine/core/patchset"),(new Xs).Dd("Turtle","engine/core/turtle"),(new Xs).Dd("TurtleSet","engine/core/turtleset"),(new Xs).Dd("NLType","engine/core/typechecker"),(new Xs).Dd("Tasks","engine/prim/tasks"),(new Xs).Dd("AgentModel","agentmodel"),(new Xs).Dd("Meta","meta"),(new Xs).Dd("Random","shim/random"),(new Xs).Dd("StrictMath",
+"shim/strictmath"),hga()]))}
+function ega(a){var b=Bp(a.dc),d=Et(Je(),iga()),d=Ft(b,d),b=Ap(a.dc),e=Et(Je(),jga()),b=Ft(b,e);fd();var e=m(new n,function(){return function(a){return a.toLowerCase()}}(a)),f=r(),d=d.xa(e,f.s),e=m(new n,function(){return function(a){return ed(fd(),a)}}(a)),f=r(),d=Pr(0,d.xa(e,f.s)," ");fd();e=m(new n,function(){return function(a){return a.toLowerCase()}}(a));f=r();b=b.xa(e,f.s);a=m(new n,function(){return function(a){return ed(fd(),a)}}(a));e=r();a=Pr(0,b.xa(a,e.s)," ");return I(r(),(new w).f([a,
+d]))}function Dt(a){var b=(new Sb).c(a),b=Uj(b),b=null===b?0:b.Y,b=ufa(Gh(),b),b=(new Ke).Xa(b),d=(new Sb).c(a),b=""+b+Ck(d);return(new Ys).Ek(a,u((new v).G((new w).f(["workspace.",""])),(new w).f([b])),I(r(),(new w).f(["workspace"])))}function aga(a){var b=Hc(a.br);return kd(b)?kga(Gt(),a):"{}"}function lga(a,b,d,e){var f=new zt;f.dc=a;f.Hc=b;f.Nf=d;f.WV=e;return f}
+function gga(a){var b=wea(a.dc),d=Et(Je(),mga()),b=Ft(b,d);fd();var d=zp(a.dc),e=m(new n,function(){return function(a){return a.toLowerCase()}}(a)),f=r(),d=d.xa(e,f.s),e=m(new n,function(){return function(a){return ed(fd(),a)}}(a)),f=r(),d=Pr(0,d.xa(e,f.s)," ");fd();var e=a.dc.Zj,f=m(new n,function(){return function(a){return a.toLowerCase()}}(a)),h=r(),e=e.xa(f,h.s),f=m(new n,function(){return function(a){return ed(fd(),a)}}(a)),h=r(),e=Pr(0,e.xa(f,h.s)," ");fd();f=m(new n,function(){return function(a){return a.toLowerCase()}}(a));
+h=r();b=b.xa(f,h.s);f=m(new n,function(){return function(a){return ed(fd(),a)}}(a));h=r();b=Pr(0,b.xa(f,h.s)," ");f=nga(a.Nf);b=I(r(),(new w).f([d,e,b,oga(f),pga(f),qga(f),rga(f),sga(f),tga(f),uga(f),"turtleShapes","linkShapes",a.WV]));a=m(new n,function(){return function(a){return na(a)}}(a));d=r();return b.xa(a,d.s)}
+function dga(a){var b=(new Kc).mg(a.dc.ig),d=(new Kc).mg(a.dc.Lf),e=Lc().s,b=Ht(b,d,e);a=m(new n,function(a){return function(b){var d=ed(fd(),b.wa),e=ed(fd(),b.Ff.toLowerCase());fd();var t=b.Al,x=m(new n,function(){return function(a){return a.toLowerCase()}}(a)),E=r(),t=t.xa(x,E.s),x=m(new n,function(){return function(a){return ed(fd(),a)}}(a)),E=r(),t=Pr(0,t.xa(x,E.s)," ");b=b.Og?u((new v).G((new w).f([", isDirected: ",""])),(new w).f([b.Ng])):"";return u((new v).G((new w).f(["{ name: ",", singular: ",
+", varNames: ",""," }"])),(new w).f([d,e,t,b]))}}(a));d=Lc();a=b.xa(a,d.s).Ic();return Pr(fd(),a," ")}zt.prototype.$classData=g({Z3:0},!1,"org.nlogo.tortoise.compiler.RuntimeInit",{Z3:1,d:1});function It(){}It.prototype=new l;It.prototype.constructor=It;
+function vga(a,b){var d=m(new n,function(){return function(a){return a.Ln()}}(a)),e=r(),d=b.xa(d,e.s),e=r(),d=d.Ge(b,e.s).we(Je().Qk),e=m(new n,function(a){return function(b){var d=b.fs();b=m(new n,function(a,b){return function(a){var d=b.Ln();return(new A).e(a,d)}}(a,b));var e=r();return d.xa(b,e.s)}}(a)),f=r();b=b.fj(e,f.s).gd();var e=Hc(d),f=m(new n,function(){return function(a){return Jt(a).zf.na()}}(a)),h=ol(),h=pl(h),f=Cr(b,f,h),e=Ic(e,f);b=wga(a,I(r(),(new w).f([e])),b);a=m(new n,function(a,
+b){return function(a){var d=ol(),d=pl(d);a=Cr(a,b,d).Ic();d=(new Kt).b();return xga(a,d)}}(a,d));d=r();return b.fj(a,d.s)}It.prototype.b=function(){return this};function yga(a,b){var d=m(new n,function(){return function(a){return a.Ln()}}(a)),e=r(),d=b.xa(d,e.s);a=m(new n,function(){return function(a){return a.fs()}}(a));e=r();b=b.fj(a,e.s).gd();d=d.gd();return Ic(b,d)}
+function zga(a,b){var d=yga(a,b);if(d.z())return b=vga(a,b),a=m(new n,function(){return function(a){return a.cw()}}(a)),d=r(),b.xa(a,d.s).Mc("","\n","\n");throw(new Ne).c(u((new v).G((new w).f(["Please provide the following dependencies: ",""])),(new w).f([cc(d,"",", ","")])));}
+function wga(a,b,d){for(;;)if(kd(d)){var e=Lt(d,m(new n,function(a,b){return function(a){return b.hd().ib(Jt(a).zf.ja())}}(a,b)));if(null===e)throw(new q).j(e);var f=e.ja(),e=e.na(),h=m(new n,function(){return function(a){return Jt(a).zf.na()}}(a)),k=ol(),k=pl(k),f=Cr(f,h,k),h=m(new n,function(){return function(a){return Jt(a).zf.na()}}(a)),k=ol(),k=pl(k),f=f.al(Cr(e,h,k));if(kd(f))d=r(),b=b.mc(f,d.s),d=e;else throw e=d,a=m(new n,function(){return function(a){return u((new v).G((new w).f(["from ",
+" to ",""])),(new w).f([a.na(),a.ja()]))}}(a)),b=ol(),b=pl(b),a=Cr(e,a,b).zb(",\n"),(new Ne).c(u((new v).G((new w).f(["unable to satisfy dependencies: ",""])),(new w).f([a])));}else return b}It.prototype.$classData=g({h4:0},!1,"org.nlogo.tortoise.compiler.TortoiseLoader$",{h4:1,d:1});var Mt=void 0;function Nt(){this.zf=null}Nt.prototype=new l;Nt.prototype.constructor=Nt;function Jt(a){var b=new Nt;b.zf=a;return b}
+Nt.prototype.$classData=g({i4:0},!1,"org.nlogo.tortoise.compiler.TortoiseLoader$RichEdge$2",{i4:1,d:1});function Ot(){this.SC=this.RC=null}Ot.prototype=new l;Ot.prototype.constructor=Ot;
+function Aga(a,b){if(Pt(b)){fd();var d=b.ab,d=cs(d.z()?"":d.X()),e=r(),f=(new A).e("setup",b.sg),e=I(e,(new w).f([f,(new A).e("update",b.tg)])),f=m(new n,function(a,b){return function(d){if(null!==d){var e=d.ja();d=d.na();Qt();d=Bga(a,d,b,F());return Rt(St(d),"plot",b,e)}throw(new q).j(d);}}(a,d)),h=r(),f=e.xa(f,h.s);r();e=(new J).j(f);if(null!==e.U&&0===e.U.Mb(2))f=e.U.W(0),e=e.U.W(1);else throw(new q).j(f);pq();var h=eq(),h=(new Mq).tq(h),h=Tt(h),k=(new dq).j(sb(new tb,function(a,b,d){return function(e,
+f){var h=d.Jn,k=function(a,b){return function(d){return Cga(a,b,d)}}(a,b),p=B().s;if(p===B().s)if(h===y())k=y();else{for(var p=h.$(),t=p=Ng(new Og,k(p),y()),h=h.aa();h!==y();)var ub=h.$(),ub=Ng(new Og,k(ub),y()),t=t.Ia=ub,h=h.aa();k=p}else{for(p=Mc(h,p);!h.z();)t=h.$(),p.Qa(k(t)),h=h.aa();k=p.Da()}return(new Ut).Ek(e,f,k)}}(a,d,b))),h=a=h.hn,k=(new A).e(f,(new dq).j(rb(k.ha)));a:{var p=k.lb,t=k.Db;if(Zp(p)&&(p=p.ha,Zp(t))){f=(new dq).j(t.ha.y(p));break a}t=k.lb;p=k.Db;if(aq(t)&&Zp(p))f=t;else if(t=
+k.Db,Zp(k.lb)&&aq(t))f=t;else{p=k.lb;t=k.Db;if(aq(p)&&(p=p.fc,aq(t))){f=(new bq).j(h.sc(t.fc,K(function(a,b){return function(){return b}}(f,p))));break a}throw(new q).j(k);}}f=(new A).e(e,f);a:{k=f.lb;h=f.Db;if(Zp(k)&&(k=k.ha,Zp(h))){e=(new dq).j(h.ha.y(k));break a}h=f.lb;k=f.Db;if(aq(h)&&Zp(k))e=h;else if(h=f.Db,Zp(f.lb)&&aq(h))e=h;else{k=f.lb;h=f.Db;if(aq(k)&&(k=k.fc,aq(h))){e=(new bq).j(a.sc(h.fc,K(function(a,b){return function(){return b}}(e,k))));break a}throw(new q).j(f);}}return Dga(b,d,e)}if(Vt(b))return(new Wt).Au(b,
+Ega(a,b));if(Xt(b))return(new Wt).Au(b,Fga(a,b));if(Yt(b))return(new Wt).Au(b,Gga(a,b));Aq();d=Hga();return(new Wt).Au(b,Jq().y(d))}
+function Gga(a,b){var d=r(),e=(new A).e("min",b.Bn),f=(new A).e("max",b.rm),d=I(d,(new w).f([e,f,(new A).e("step",b.Im)]));b=jaa(sb(new tb,function(a,b){return function(d,e){Qt();e=a.SC.y(e);var f=b.ab;return Rt(St(e),"slider",f.z()?b.mt():f.X(),d)}}(a,b)));e=r();b=d.xa(b,e.s);r();d=(new J).j(b);if(null!==d.U&&0===d.U.Mb(3))f=d.U.W(0),b=d.U.W(1),e=d.U.W(2);else throw(new q).j(b);d=b;b=e;pq();var e=eq(),e=(new Mq).tq(e),e=Tt(e),h=K(function(a,b){return function(){return b}}(a,f)),f=(new dq).j(sb(new tb,
+function(a,b){return function(a,d){var e=a.ja();a=a.na();return(0,b.yi)(e,a,d)}}(e,Zt(function(){return function(a,b,d){var e=new $t;e.Xr=a;e.Wr=b;e.as=d;return e}}(a)))));a=e.hn;var k=(new dq).j(sb(new tb,function(){return function(a,b){return(new A).e(a,b)}}(e))),d=Iga(d,K(function(a,b,d){return function(){return a.wf(b,K(function(a,b){return function(){return a.cd(b,m(new n,function(){return function(a){return rb(a)}}(a)))}}(a,d)))}}(e,h,k)),e.hn),e=e.hn,f=(new A).e(d,(new dq).j(rb(f.ha)));a:{k=
+f.lb;h=f.Db;if(Zp(k)&&(k=k.ha,Zp(h))){d=(new dq).j(h.ha.y(k));break a}h=f.lb;k=f.Db;if(aq(h)&&Zp(k))d=h;else if(h=f.Db,Zp(f.lb)&&aq(h))d=h;else{k=f.lb;h=f.Db;if(aq(k)&&(k=k.fc,aq(h))){d=(new bq).j(e.sc(h.fc,K(function(a,b){return function(){return b}}(d,k))));break a}throw(new q).j(f);}}d=(new A).e(b,d);f=d.lb;e=d.Db;if(Zp(f)&&(f=f.ha,Zp(e)))return(new dq).j(e.ha.y(f));e=d.lb;f=d.Db;if(aq(e)&&Zp(f))return e;e=d.Db;if(Zp(d.lb)&&aq(e))return e;f=d.lb;e=d.Db;if(aq(f)&&(f=f.fc,aq(e)))return(new bq).j(a.sc(e.fc,
+K(function(a,b){return function(){return b}}(b,f))));throw(new q).j(d);}
+function Cga(a,b,d){var e=r(),f=(new A).e("setup",d.sg),e=I(e,(new w).f([f,(new A).e("update",d.tg)]));b=m(new n,function(a,b,d){return function(e){if(null!==e){var f=e.ja();e=e.na();Qt();e=Bga(a,e,b,jd().Wc(d.ab));e=St(e);var h=jd().Wc(d.ab);return Rt(e,"pen",h.z()?"":h.X(),f)}throw(new q).j(e);}}(a,b,d));f=r();e=e.xa(b,f.s);r();b=(new J).j(e);if(null!==b.U&&0===b.U.Mb(2))e=b.U.W(0),b=b.U.W(1);else throw(new q).j(e);pq();var f=eq(),f=(new Mq).tq(f),f=Tt(f),h=(new dq).j(sb(new tb,function(){return function(a,
+b){return(new au).Dd(a,b)}}(a))),f=a=f.hn,h=(new A).e(e,(new dq).j(rb(h.ha)));a:{var k=h.lb,p=h.Db;if(Zp(k)&&(k=k.ha,Zp(p))){e=(new dq).j(p.ha.y(k));break a}p=h.lb;k=h.Db;if(aq(p)&&Zp(k))e=p;else if(p=h.Db,Zp(h.lb)&&aq(p))e=p;else{k=h.lb;p=h.Db;if(aq(k)&&(k=k.fc,aq(p))){e=(new bq).j(f.sc(p.fc,K(function(a,b){return function(){return b}}(e,k))));break a}throw(new q).j(h);}}e=(new A).e(b,e);a:{h=e.lb;f=e.Db;if(Zp(h)&&(h=h.ha,Zp(f))){b=(new dq).j(f.ha.y(h));break a}f=e.lb;h=e.Db;if(aq(f)&&Zp(h))b=f;
+else if(f=e.Db,Zp(e.lb)&&aq(f))b=f;else{h=e.lb;f=e.Db;if(aq(h)&&(h=h.fc,aq(f))){b=(new bq).j(a.sc(f.fc,K(function(a,b){return function(){return b}}(b,h))));break a}throw(new q).j(e);}}return Jga(d,b)}Ot.prototype.jn=function(a){throw(new Ne).c(u((new v).G((new w).f(["This type of agent cannot be asked: ",""])),(new w).f([a])));};
+function Ega(a,b){Qt();var d=a.RC,e=b.an.k().toUpperCase(),f=b.xc;a=d.y(Kga(a,e,f.z()?"":f.X()).split("\\n").join("\n").split("\\\\").join("\\").split('\\"').join('"'));a=St(a);d=b.ab;b=d.z()?b.xc:d;b=Rt(a,"button",b.z()?"":b.X(),"source");if(Zp(b))return(new dq).j((new bu).c(b.ha));if(aq(b))return b;throw(new q).j(b);}
+function Bga(a,b,d,e){e.z()?e=F():(e=e.X(),e=(new J).j(u((new v).G((new w).f(["'","'"])),(new w).f([e]))));e=e.z()?"undefined":e.X();var f=b.trim();if(null===f)throw(new ye).b();if(""===f)return Aq(),d=bs(fd(),""),Jq().y(d);a=a.RC.y(b);if(Zp(a))a=a.ha,a=(new dq).j(bs(fd(),a));else if(!aq(a))throw(new q).j(a);if(Zp(a))a=a.ha,d=u((new v).G((new w).f(["plotManager.withTemporaryContext('","', ",")(",")"])),(new w).f([d,e,a])),d=(new dq).j($r(fd(),d));else{if(!aq(a))throw(new q).j(a);d=a}if(Zp(d))return d=
+d.ha,d=u((new v).G((new w).f(["workspace.rng.withClone(",")"])),(new w).f([d])),(new dq).j($r(fd(),d));if(aq(d))return d;throw(new q).j(d);}
+function Kga(a,b,d){for(var e=(new A).e("OBSERVER",m(new n,function(){return function(a){return a}}(a))),f=(new A).e("TURTLE",m(new n,function(){return function(a){return cu("turtles",a)}}(a))),h=(new A).e("PATCH",m(new n,function(){return function(a){return cu("patches",a)}}(a))),e=[e,f,h,(new A).e("LINK",m(new n,function(){return function(a){return cu("links",a)}}(a)))],f=dc(new ec,gc()),h=0,k=e.length|0;h<k;)hc(f,e[h]),h=1+h|0;e=f.Oa.$b(b);if(!Fk(e))throw F()===e&&a.jn(b),(new q).j(e);return e.U.y(d)}
+function Lga(a,b){b=b.ml(m(new n,function(){return function(a){return Pt(a)}}(a)),!1);b=Mga(b,m(new n,function(){return function(a){if(Pt(a))return a.ab;throw(new q).j(a);}}(a))).Xf(m(new n,function(){return function(a){return 1<a.na().Ha()}}(a)));if(kd(b)){a=(new v).G((new w).f(["Having multiple plots with same display name is not supported. Duplicate names detected: ",""]));b=Hc(b);a=u(a,(new w).f([cc(b,"",", ","")]));b=xm().sa.Ua;var d=xm().sa.$a,e=xm();throw(new hd).Bs(a,b,d,e.sa.cb);}}
+function Fga(a,b){Qt();var d=b.xc;a=a.SC.y(d.z()?"":d.X());a=St(a);d=b.ab;b=d.z()?b.xc:d;b=Rt(a,"monitor",b.z()?"":b.X(),"reporter");if(Zp(b))return(new dq).j((new bu).c(b.ha));if(aq(b))return b;throw(new q).j(b);}function cu(a,b){return u((new v).G((new w).f(["ask "," [ "," ]"])),(new w).f([a,b]))}function Nga(a,b){var d=new Ot;d.RC=a;d.SC=b;return d}function Oga(a,b){Lga(a,b);a=m(new n,function(a){return function(b){return Aga(a,b)}}(a));var d=r();return b.xa(a,d.s)}
+Ot.prototype.$classData=g({u4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompiler",{u4:1,d:1});function du(){this.JY=this.IV=null;this.a=0}du.prototype=new l;du.prototype.constructor=du;
+du.prototype.b=function(){eu=this;for(var a=[(new A).e("compiledSource","reporter")],b=dc(new ec,gc()),d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.IV=b.Oa;this.a=(1|this.a)<<24>>24;a=[(new A).e("compiledMin","getMin"),(new A).e("compiledMax","getMax"),(new A).e("compiledStep","getStep")];b=dc(new ec,gc());d=0;for(e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.JY=b.Oa;this.a=(2|this.a)<<24>>24;return this};
+function Pga(a,b){fd();a=m(new n,function(a){return function(b){return Qga(a,b).gG()}}(a));var d=r();return Pr(0,b.xa(a,d.s),"\n")}
+function Qga(a,b){var d=vfa((new Xr).G(y()),fga(b).$e());if(null!==b){var e=b.Ap;if(Xt(b.Ri)&&Zp(e)&&(e=e.ha,fu(e)))return a=sb(new tb,function(a){return function(b,d){if(0===(1&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/WidgetCompiler.scala: 141");return Rga(a.IV,b,d)}}(a)),e.TC().Gb(d,a)}return null!==b&&(e=b.Ap,Yt(b.Ri)&&Zp(e)&&(b=e.ha,gu(b)))?(a=sb(new tb,function(a){return function(b,d){if(0===(2&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/WidgetCompiler.scala: 144");
+return Rga(a.JY,b,d)}}(a)),b.TC().Gb(d,a)):d}function Rga(a,b,d){if(null!==d){var e=d.na();a=a.y(d.ja());e=(new hu).Ku(I(r(),y()),I(r(),(new w).f([u((new v).G((new w).f(["return ",";"])),(new w).f([e]))])));e=(new A).e(a,e);b=b.kh;a=r();return(new Xr).G(b.Qc(e,a.s))}throw(new q).j(d);}du.prototype.$classData=g({v4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompiler$",{v4:1,d:1});var eu=void 0;function Qt(){eu||(eu=(new du).b());return eu}function iu(){this.kZ=null}iu.prototype=new l;
+iu.prototype.constructor=iu;function Rt(a,b,d,e){b=u((new v).G((new w).f([""," '","' - ",".",""])),(new w).f([b,d,b,e]));d=a.kZ;if(Zp(d))return d;if(aq(d)){d=d.fc;a=function(a,b){return function(a){return(new Kr).c(u((new v).G((new w).f(["",": ",""])),(new w).f([b,a.Lh()])))}}(a,b);eq();b=a(d.Gc);d=d.Pc;e=fq().$d;d=gq(d);a:for(;;){if(!hq(d)){if(iq(d)){var f=d;d=f.fd;f=a(f.bd);e=(new jq).Sb(f,e);continue a}throw(new q).j(d);}break}return(new bq).j((new kq).Sb(b,e))}throw(new q).j(d);}
+function St(a){var b=new iu;b.kZ=a;return b}iu.prototype.$classData=g({w4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompiler$ValidationContextualizer",{w4:1,d:1});function ju(){}ju.prototype=new l;ju.prototype.constructor=ju;ju.prototype.b=function(){return this};ju.prototype.$classData=g({x4:0},!1,"org.nlogo.tortoise.compiler.json.ElemToJsonConverters$",{x4:1,d:1});var ku=void 0;function lu(){this.xv=null;this.ya=!1}lu.prototype=new l;lu.prototype.constructor=lu;lu.prototype.b=function(){return this};
+lu.prototype.XE=function(){if(!this.ya&&!this.ya){var a=(new we).b();if(a.Na)a=a.jb;else{if(null===a)throw(new ye).b();a=a.Na?a.jb:ze(a,(new mu).b())}var a=(new A).e("line",a),b=(new we).b();if(b.Na)b=b.jb;else{if(null===b)throw(new ye).b();b=b.Na?b.jb:ze(b,(new nu).b())}var b=(new A).e("circle",b),d=(new we).b();if(d.Na)d=d.jb;else{if(null===d)throw(new ye).b();d=d.Na?d.jb:ze(d,(new ou).b())}var d=(new A).e("rectangle",d),e=(new we).b();if(e.Na)e=e.jb;else{if(null===e)throw(new ye).b();e=e.Na?e.jb:
+ze(e,(new pu).b())}a=[a,b,d,(new A).e("polygon",e)];b=dc(new ec,gc());d=0;for(e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.xv=b.Oa;this.ya=!0}return this.xv};lu.prototype.$classData=g({D4:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$",{D4:1,d:1});var qu=void 0;function ru(a){return(new su).ac(yc(a.aq().Tg,a.Rp().Tg))}function Sga(){var a=y();return(new su).ac(Vg(Wg(),a))}function tu(){}tu.prototype=new l;tu.prototype.constructor=tu;tu.prototype.b=function(){return this};
+function pd(a,b){return ba.JSON.stringify(b)}
+function Cq(a,b){var d=(new A).e(b,typeof b);if(null===d.lb)return uu();var e=d.Db;if("undefined"===e||"function"===e)return uu();e=d.lb;if("number"===d.Db)return a=+e,vu(wu(),a)?(new xu).qb(Na(a)):(new yu).Xj(a);e=d.lb;if("string"===d.Db)return(new zu).c(e);e=d.lb;if("boolean"===d.Db)return(new Au).od(!!e);var e=d.lb,f=d.Db;if(e instanceof ba.Array&&"object"===f&&ba.Array.isArray(e)){b=[];d=0;for(f=e.length|0;d<f;){var h=Cq(a,e[d]);b.push(h);d=1+d|0}a=B().s.hh();d=b.length|0;switch(d){case -1:break;
+default:a.qc(d)}a.Zb((new w).f(b));return(new Bu).G(a.Da())}if("object"===d.Db){e=ba.Object.keys(b);Lc();Gn();d=[];f=0;for(h=e.length|0;f<h;){var k=e[f];if(!Cu().Dm.call(b,k))throw(new Du).c("key not found: "+k);var p=Cq(a,b[k]),k=(new A).e(k,p);d.push(k);f=1+f|0}a=dc(new ec,Eu());b=0;for(e=d.length|0;b<e;)hc(a,d[b]),b=1+b|0;return(new su).ac(a.Oa)}throw(new q).j(d);}
+function rd(a,b){if(uu()===b)return null;if(Fu(b))return b.hi;if(Gu(b))return b.em;if(Hu(b))return b.Nc;if(Iu(b))return b.Zl;if(Ju(b)){var d=b.Oa;b=vg();a=m(new n,function(a){return function(b){return rd(a,b)}}(a));var e=r();a=d.xa(a,e.s);if(Ku(a))return a.Rd;if(Lu(a))return a.pa;d=[];a.ua(m(new n,function(a,b){return function(a){return b.push(a)|0}}(b,d)));return d}if(Mu(b))return d=b.Tg,Nu||(Nu=(new Ou).b()),b=Nu,a=(new Pu).Ds(d,m(new n,function(a){return function(b){return rd(a,b)}}(a))),Tga(b,
+Yr(a));throw(new q).j(b);}tu.prototype.$classData=g({K4:0},!1,"org.nlogo.tortoise.compiler.json.JsonLibrary$",{K4:1,d:1});var Qu=void 0;function qd(){Qu||(Qu=(new tu).b());return Qu}function Uga(a,b){Aq();a=u((new v).G((new w).f(["could not convert "," to ",""])),(new w).f([Iq(a),Iq(b)]));return Bq(pq(),a)}
+function Ru(a,b,d){d=(new Su).Ja(d);Tu();d=d.MX;if(Fk(d))b=(new dq).j(d.U);else{if(F()!==d)throw(new q).j(d);eq();b=u((new v).G((new w).f(["could not find key ",""])),(new w).f([b]));d=[];var e=fq().$d,f=d.length|0;a:for(;;){if(0!==f){e=(new jq).Sb(d[-1+f|0],e);f=-1+f|0;continue a}break}b=(new bq).j((new kq).Sb(b,e))}if(Zp(b))return a.Ra(b.ha);if(aq(b))return b;throw(new q).j(b);}function Uu(){this.rX=this.BV=this.bV=null;this.a=0}Uu.prototype=new l;Uu.prototype.constructor=Uu;
+Uu.prototype.b=function(){Vu=this;this.bV=(new Wu).b();this.a=(1|this.a)<<24>>24;this.BV=(new Xu).b();this.a=(2|this.a)<<24>>24;this.rX=(new Yu).b();this.a=(4|this.a)<<24>>24;return this};function Vga(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonSerializer.scala: 99");return a.BV}
+function Wga(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonSerializer.scala: 90");return a.bV}function Zu(a,b){return Wga(a).xl(Vga(a)).xl(Xga(a)).eb(b,m(new n,function(){return function(){return(new zu).c("XXX IMPLEMENT ME")}}(a)))}function Xga(a){if(0===(4&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonSerializer.scala: 108");return a.rX}
+function kga(a,b){return pb(m(new n,function(a){return function(b){return Zu(a,b)}}(a)),m(new n,function(){return function(a){return rd(qd(),a)}}(a))).Ca(m(new n,function(){return function(a){return pd(qd(),a)}}(a))).y(b)}Uu.prototype.$classData=g({M4:0},!1,"org.nlogo.tortoise.compiler.json.JsonSerializer$",{M4:1,d:1});var Vu=void 0;function Gt(){Vu||(Vu=(new Uu).b());return Vu}function $u(a,b){return(new J).j(a.vc(b))}function av(){this.xV=this.nZ=null;this.a=0}av.prototype=new l;
+av.prototype.constructor=av;av.prototype.b=function(){bv=this;this.nZ=(new cv).b();this.a=(1|this.a)<<24>>24;this.xV=(new dv).b();this.a=(2|this.a)<<24>>24;return this};function Yga(a,b){return Mu(b)?(b=b.Tg,a=(new zu).c(a),(new su).ac(b.Om((new A).e("name",a)))):b}function ev(a,b){if(Mu(b))return a=(new we).b(),(a.Na?a.jb:Zga(a)).Pa(b);Aq();b=u((new v).G((new w).f(["Expected shape as json object, got ",""])),(new w).f([b]));return Bq(pq(),b)}
+function Zga(a){if(null===a)throw(new ye).b();return a.Na?a.jb:ze(a,(new fv).b())}function $ga(a,b){if(b&&b.$classData&&b.$classData.n.ZH)return aha(new gv,b);if(b&&b.$classData&&b.$classData.n.XH)return bha(b);throw(new q).j(b);}function cha(a,b){if(Mu(b)){var d=b.Tg;b=el().s;b=Mc(d,b);d=hv(d);for(d=iv(d);d.ta();){var e=d.ma();if(null===e)throw(new q).j(e);b.Qa(Yga(e.ja(),e.na()))}return a.Ra((new Bu).G(b.Da().Ic()))}return a.Ra(b)}
+av.prototype.$classData=g({f5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$",{f5:1,d:1});var bv=void 0;function jv(){bv||(bv=(new av).b());return bv}function kv(){this.wa=null}kv.prototype=new l;kv.prototype.constructor=kv;kv.prototype.c=function(a){this.wa=a;return this};kv.prototype.$classData=g({s5:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsField",{s5:1,d:1});function lv(){this.xv=null;this.a=!1}lv.prototype=new l;lv.prototype.constructor=lv;
+lv.prototype.b=function(){mv=this;var a=(new we).b();if(a.Na)a=a.jb;else{if(null===a)throw(new ye).b();a=a.Na?a.jb:ze(a,(new nv).b())}var a=(new A).e("button",a),b=(new we).b();if(b.Na)b=b.jb;else{if(null===b)throw(new ye).b();b=b.Na?b.jb:ze(b,(new ov).b())}var b=(new A).e("chooser",b),d=(new we).b();if(d.Na)d=d.jb;else{if(null===d)throw(new ye).b();d=d.Na?d.jb:ze(d,(new pv).b())}var d=(new A).e("inputBox",d),e=(new we).b();if(e.Na)e=e.jb;else{if(null===e)throw(new ye).b();e=e.Na?e.jb:ze(e,(new qv).b())}var e=
+(new A).e("monitor",e),f=(new we).b();if(f.Na)f=f.jb;else{if(null===f)throw(new ye).b();f=f.Na?f.jb:ze(f,(new rv).b())}var f=(new A).e("output",f),h=(new we).b();if(h.Na)h=h.jb;else{if(null===h)throw(new ye).b();h=h.Na?h.jb:ze(h,(new sv).b())}var h=(new A).e("plot",h),k=(new we).b();if(k.Na)k=k.jb;else{if(null===k)throw(new ye).b();k=k.Na?k.jb:ze(k,(new tv).b())}var k=(new A).e("slider",k),p=(new we).b();if(p.Na)p=p.jb;else{if(null===p)throw(new ye).b();p=p.Na?p.jb:ze(p,(new uv).b())}var p=(new A).e("switch",
+p),t=(new we).b();if(t.Na)t=t.jb;else{if(null===t)throw(new ye).b();t=t.Na?t.jb:ze(t,(new vv).b())}var t=(new A).e("textBox",t),x=(new we).b();if(x.Na)x=x.jb;else{if(null===x)throw(new ye).b();x=x.Na?x.jb:ze(x,(new wv).b())}a=[a,b,d,e,f,h,k,p,t,(new A).e("view",x)];b=dc(new ec,gc());d=0;for(e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.xv=b.Oa;this.a=!0;return this};
+lv.prototype.XE=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/WidgetRead.scala: 174");return this.xv};lv.prototype.$classData=g({v5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$",{v5:1,d:1});var mv=void 0;function xv(){this.au=this.cW=null}xv.prototype=new l;xv.prototype.constructor=xv;
+xv.prototype.b=function(){yv=this;var a=[zv().Ez,zv().Fw];if(0===(a.length|0))a=lh();else{for(var b=mh(new nh,lh()),d=0,e=a.length|0;d<e;)oh(b,a[d]),d=1+d|0;a=b.Oa}this.cW=a;a=(new Av).b();this.au=dha(a);return this};xv.prototype.$classData=g({J6:0},!1,"org.scalajs.testinterface.HTMLRunner$EventCounter$",{J6:1,d:1});var yv=void 0;function Bv(){yv||(yv=(new xv).b());return yv}function Cv(){this.RE=null;this.wz=!1;this.SE=this.Hn=this.dW=this.lv=this.mv=null}Cv.prototype=new l;
+Cv.prototype.constructor=Cv;function eha(a,b,d){b.ua(m(new n,function(a,b){return function(a){a.DY(!!b.checked)}}(a,d)));return!0}function fha(a,b,d){var e=b.lh(m(new n,function(){return function(a){return a.Oy()}}(a)));a=!e&&b.oe(m(new n,function(){return function(a){return a.Oy()}}(a)));(d.indeterminate=a)||(d.checked=e);return!0}function Dv(a){return a?"success":"error"}
+function gha(a){a=Ev(a.Hn.Jg,"","warn");Fv(Gv(),a,"There are new excluded tests in your project. You may wish to ");Hv(Gv(),a,"?","Run all");Fv(Gv(),a," to rediscover all available tests.")}function hha(a,b,d){return function(a,b,d){return function(){return eha(a,b,d)}}(a,b,d)}
+function Iv(a){var b=Bv().au.mZ().fg(Jv())|0,b=u((new v).G((new w).f(["Total: ",""])),(new w).f([b])),d;d=zv().Ar.jT();var e;e=[];for(var f=0,h=d.m.length;f<h;){var k=d.m[f],k=u((new v).G((new w).f(["",": ",""])),(new w).f([k,Bv().au.y(k)]));e.push(null===k?null:k);f=1+f|0}e=ka(Wa(qa),e);d=1+e.m.length|0;d=la(Wa(qa),[d]);d.m[0]=b;Kv(Bf(),e,0,d,1,e.m.length);b=(new pm).b();e=!0;Ur(b,"");f=0;for(h=d.m.length;f<h;)k=d.m[f],e?(Wr(b,k),e=!1):(Ur(b,", "),Wr(b,k)),f=1+f|0;Ur(b,"");b=b.rc.Xb;a.Hn.XC.textContent=
+a.wz?b:"Running... "+b}function iha(a,b){b=(new Lv).Du(a,b);a.mv.zj(b);return b}function jha(a,b,d){return function(a,b,d){return function(){return fha(a,b,d)}}(a,b,d)}
+function kha(a,b){var d=new Cv;d.RE=a;d.wz=!1;Dc();d.mv=(new w).b();Dc();d.lv=(new w).b();var e=ba.document.body;d.dW=Mv(Gv(),e,"","","div");var e=new Nv,f=a.Ha();if(null===d)throw ug(vg(),null);e.ga=d;0===f?b=u((new v).G((new w).f(["Total Test Suites: ",""])),(new w).f([b])):(f=b-f|0,b=u((new v).G((new w).f(["Selected Test Suites "," (Total: ",")"])),(new w).f([f,b])));e.Jg=(new Ov).Du(d,b);Pv(e.Jg);e.Jg.di.onclick=hha(d,d.mv,e.Jg.di);e.XC=Ev(e.Jg,"","info");e.eZ=jha(d,d.mv,e.Jg.di);d.Hn=e;d.SE=
+a.Ke()?lha(d):d.Hn;Iv(d);return d}Cv.prototype.dD=function(a){this.wz=!0;a.pD().ua(m(new n,function(a){return function(d){Ev(a.Hn.Jg,"Test framework crashed during execution:","error");var e=a.Hn;d=d.k();return Ev(e.Jg,d,"error")}}(this)));this.Hn.Dx(!!a.AD(K(function(){return function(){return!1}}(this))));Iv(this)};Cv.prototype.$classData=g({L6:0},!1,"org.scalajs.testinterface.HTMLRunner$UI",{L6:1,d:1});function Qv(){}Qv.prototype=new l;Qv.prototype.constructor=Qv;Qv.prototype.b=function(){return this};
+function mha(a,b,d){a=Mv(Gv(),b,"","","input");a.setAttribute("type","checkbox");a.checked=d;return a}function Mv(a,b,d,e,f){a=ba.document.createElement(f);f=(new Sb).c(d);kd(f)&&(a.className=d);d=(new Sb).c(e);kd(d)&&(a.textContent=e);b.appendChild(a);return a}function Fv(a,b,d){a=ba.document.createTextNode(d);b.appendChild(a);return a}function Hv(a,b,d,e){a=Mv(Gv(),b,"",e,"a");a.setAttribute("href",d);return a}
+Qv.prototype.$classData=g({T6:0},!1,"org.scalajs.testinterface.HTMLRunner$dom$RichElement$",{T6:1,d:1});var Rv=void 0;function Gv(){Rv||(Rv=(new Qv).b());return Rv}function Sv(){}Sv.prototype=new l;Sv.prototype.constructor=Sv;Sv.prototype.b=function(){return this};
+function nha(a,b){b=(new Tv).f(b);b=Ve(new We,b,0,b.Rd.length|0);a=Uv(Vv(b).xa(m(new n,function(){return function(a){var b;b=Wv().Ou.$b(a);var f=(new Xv).b();b.z()?b=F():(f=md(new nd,f),b=b.X(),b=f.Wc(b));if(b.z()){var h=aa.exportsNamespace;a=(new Sb).c(a);a=qi(a,46);b=a.m.length;f=0;a:for(;;){if(f!==b){var k=a.m[f],h=void 0===h?void 0:h[k],f=1+f|0;continue a}a=h;break}a=void 0===a?void 0:new a;(new Yv).b();a=void 0===a?void 0:ud(a)?a:void 0;a=void 0===a?F():(new J).j(a)}else a=b;return a}}(a)),(xg(),
+(new yg).b())),m(new n,function(){return function(a){return a.ob()}}(a)));return Ek(a)}
+function oha(){var a;Zv||(Zv=(new Sv).b());a=Zv;for(var b=ba.definedTests,d=[],e=0,f=b.length|0;e<f;){var h=b[e],h=$v(aw(),h);d.push(h);e=1+e|0}e=ba.testFrameworkNames;b=[];f=0;for(h=e.length|0;f<h;){var k=nha(a,e[f]).ob();if(null!==k)a:for(;;){if(kd(k)){var p=k.$();b.push(p);k=k.aa();continue a}break}else for(;!k.z();)p=k.$(),b.push(p),k=k.aa();f=1+f|0}e=B().s.hh();f=b.length|0;switch(f){case -1:break;default:e.qc(f)}e.Zb((new w).f(b));b=e.Da();a=function(a,b){return function(a){for(var d=pha(),
+e=[],f=0,h=b.length|0;f<h;){for(var k=b[f],p=k,t=0;;){var ub;if(ub=t<d.m.length){ub=d.m[t];var vb=p.Cp;ub=!1===(bw(ub)&&bw(vb)?ub.Vu()===vb.Vu()&&ub.Wv()===vb.Wv():cw(ub)&&cw(vb)?ub.xq===vb.xq&&ub.mx===vb.mx:!1)}if(ub)t=1+t|0;else break}t!==d.m.length!==!1&&e.push(k);f=1+f|0}return(new A).e(a,(new w).f(e))}}(a,d);d=B().s;if(d===B().s){if(b===y())return y();d=b.$();e=d=Ng(new Og,a(d),y());for(b=b.aa();b!==y();)f=b.$(),f=Ng(new Og,a(f),y()),e=e.Ia=f,b=b.aa();return d}for(d=Mc(b,d);!b.z();)e=b.$(),d.Qa(a(e)),
+b=b.aa();return d.Da()}Sv.prototype.$classData=g({U6:0},!1,"org.scalajs.testinterface.TestDetector$",{U6:1,d:1});var Zv=void 0;function dw(){}dw.prototype=new l;dw.prototype.constructor=dw;dw.prototype.b=function(){return this};
+function qha(a,b){var d=Wv().zV.$b(a+"$");if(d.z()){if(b&&b.$classData&&b.$classData.n.hR)b=b.OV;else throw(new Ne).c("Need a ScalaJSClassLoader.");a:{a=(new Sb).c(a);a=qi(a,46);var d=a.m.length,e=0;for(;;){if(e===d)break a;b=b[a.m[e]];e=1+e|0}}b=b()}else b=d.X().epa();return b}dw.prototype.$classData=g({X6:0},!1,"org.scalajs.testinterface.TestUtils$",{X6:1,d:1});var rha=void 0;function ew(){this.su=null}ew.prototype=new l;ew.prototype.constructor=ew;function fw(){}fw.prototype=ew.prototype;
+function sha(a){ba.scalajsCom.init(function(a){return function(d){tha(a,d)}}(a))}function gw(a){var b=!1,d=null;a:{if(hw(a)&&(b=!0,d=a,void 0===d.U)){ba.scalajsCom.send("ok:");break a}if(b)ba.scalajsCom.send("ok:"+d.U);else if(iw(a))a=a.Bk,a=ba.JSON.stringify(jw(kw(),a)),ba.scalajsCom.send("fail:"+a);else throw(new q).j(a);}}ew.prototype.c=function(a){this.su=uha(vha(),a);return this};
+function wha(a){var b;b=[];for(var d=0,e=a.m.length;d<e;){var f=a.m[d],h=f.Zv,h=ba.JSON.stringify(xha(aw(),h)),f=xha(aw(),f.Zv),k,p=y();k=fn(p);k=la(Wa(qa),[k]);var t;t=0;for(p=iv(p);p.ta();){var x=p.ma();k.m[t]=x;t=1+t|0}k=lw(Je(),k);if(Ku(k))k=k.Rd;else if(Lu(k))k=k.pa;else{t=[];p=0;for(x=k.ra();p<x;){var E=k.W(p);t.push(E)|0;p=1+p|0}k=t}h={serializedTask:h,taskDef:f,tags:k};b.push(null===h?null:h);d=1+d|0}a=ka(Wa(yha),b);a=lw(Je(),a);if(Ku(a))return a.Rd;if(Lu(a))return a.pa;b=[];d=0;for(e=a.ra();d<
+e;)h=a.W(d),b.push(h)|0,d=1+d|0;return b}function tha(a,b){var d=mw(Ha(),b,58),e=-1===d?b:b.substring(0,d);try{a.sU(e,K(function(a,b,d,e){return function(){if(-1===d)throw(new Ne).c(u((new v).G((new w).f([""," needs args"])),(new w).f([e])));return b.substring(1+d|0)}}(a,b,d,e)))}catch(f){if(a=Un(vg(),f),null!==a){b=nw(ow(),a);if(b.z())throw ug(vg(),a);a=b.X();a=ba.JSON.stringify(jw(kw(),a));ba.scalajsCom.send("bad:"+a)}else throw f;}}ew.prototype.init=function(){sha(this)};function pw(){}
+pw.prototype=new l;pw.prototype.constructor=pw;pw.prototype.b=function(){return this};pw.prototype.$classData=g({Z6:0},!1,"org.scalajs.testinterface.internal.EventSerializer$",{Z6:1,d:1});var zha=void 0;function qw(){}qw.prototype=new l;qw.prototype.constructor=qw;qw.prototype.b=function(){return this};
+function rw(a,b){if(cw(b))return{fpType:"AnnotatedFingerprint",isModule:b.xq,annotationName:b.mx};if(bw(b))return{fpType:"SubclassFingerprint",isModule:b.Vu(),superclassName:b.Wv(),requireNoArgConstructor:b.$E()};throw(new Ne).c(u((new v).G((new w).f(["Unknown Fingerprint type: ",""])),(new w).f([oa(b)])));}qw.prototype.$classData=g({$6:0},!1,"org.scalajs.testinterface.internal.FingerprintSerializer$",{$6:1,d:1});var sw=void 0;function tw(){sw||(sw=(new qw).b());return sw}function uw(){}
+uw.prototype=new l;uw.prototype.constructor=uw;uw.prototype.b=function(){return this};uw.prototype.$classData=g({c7:0},!1,"org.scalajs.testinterface.internal.FrameworkDetector$",{c7:1,d:1});var Aha=void 0;function vw(){}vw.prototype=new l;vw.prototype.constructor=vw;vw.prototype.b=function(){return this};
+function uha(a,b){a=Wv().Ou.$b(b);if(a.z()){a=aa.exportsNamespace;b=(new Sb).c(b);b=qi(b,46);var d=b.m.length,e=0;a:for(;;){if(e!==d){a=a[b.m[e]];e=1+e|0;continue a}break}return new a}return Bha(a.X())}vw.prototype.$classData=g({d7:0},!1,"org.scalajs.testinterface.internal.FrameworkLoader$",{d7:1,d:1});var ww=void 0;function vha(){ww||(ww=(new vw).b());return ww}function xw(){this.kU=null}xw.prototype=new l;xw.prototype.constructor=xw;
+function Cha(a){a=pha(uha(vha(),a.kU));var b;b=[];for(var d=0,e=a.m.length;d<e;){var f=a.m[d],f=rw(tw(),f);b.push(null===f?null:f);d=1+d|0}a=ka(Wa(yw),b);a=lw(Je(),a);if(Ku(a))a=a.Rd;else if(Lu(a))a=a.pa;else{b=[];d=0;for(e=a.ra();d<e;)f=a.W(d),b.push(f)|0,d=1+d|0;a=b}ba.scalajsCom.send(ba.JSON.stringify({name:"utest",fingerprints:a}))}function Dha(a){ba.scalajsCom.init(function(){return function(){}}(a));Cha(a);ba.scalajsCom.close()}xw.prototype.c=function(a){this.kU=a;return this};
+xw.prototype.initAndSend=function(){Dha(this)};xw.prototype.$classData=g({e7:0},!1,"org.scalajs.testinterface.internal.InfoSender",{e7:1,d:1});function zw(){}zw.prototype=new l;zw.prototype.constructor=zw;zw.prototype.b=function(){return this};
+function Eha(a,b){if(b&&b.$classData&&b.$classData.n.ZB)return{selType:"SuiteSelector"};if(b&&b.$classData&&b.$classData.n.$B)return{selType:"TestSelector",testName:b.Cj};if(b&&b.$classData&&b.$classData.n.WB)return{selType:"NestedSuiteSelector",suiteId:b.Bj};if(b&&b.$classData&&b.$classData.n.XB)return{selType:"NestedTestSelector",suiteId:b.Bj,testName:b.Cj};if(b&&b.$classData&&b.$classData.n.aC)return{selType:"TestWildcardSelector",testWildcard:b.zr};throw(new Ne).c(u((new v).G((new w).f(["Unknown Selector type: ",
+""])),(new w).f([oa(b)])));}function Fha(a,b){a=b.selType;if("SuiteSelector"===a)return(new Aw).b();if("TestSelector"===a)return(new Bw).c(b.testName);if("NestedSuiteSelector"===a)return(new Dw).c(b.suiteId);if("NestedTestSelector"===a)return(new Ew).Dd(b.suiteId,b.testName);if("TestWildcardSelector"===a)return(new Fw).c(b.testWildcard);throw(new Ne).c(u((new v).G((new w).f(["Unknown Selector type: ",""])),(new w).f([a])));}
+zw.prototype.$classData=g({g7:0},!1,"org.scalajs.testinterface.internal.SelectorSerializer$",{g7:1,d:1});var Gw=void 0;function Hw(){Gw||(Gw=(new zw).b());return Gw}function Iw(){this.pz=!1;this.ga=null}Iw.prototype=new l;Iw.prototype.constructor=Iw;function Jw(){}Jw.prototype=Iw.prototype;function Gha(a){if(!a.pz)throw(new he).c(u((new v).G((new w).f([""," has been invalidated"])),(new w).f([a])));}Iw.prototype.Vx=function(a){if(null===a)throw ug(vg(),null);this.ga=a;this.pz=!0;return this};
+function Kw(){}Kw.prototype=new l;Kw.prototype.constructor=Kw;Kw.prototype.b=function(){return this};
+function $v(a,b){a=b.selectors;for(var d=[],e=0,f=a.length|0;e<f;){var h=a[e],h=Fha(Hw(),h);d.push(h);e=1+e|0}a=d.length|0;a=la(Wa(Hha),[a]);for(var h=a.m.length,f=e=0,k=d.length|0,h=k<h?k:h,k=a.m.length,h=h<k?h:k;e<h;)a.m[f]=d[e],e=1+e|0,f=1+f|0;d=new Lw;e=b.fullyQualifiedName;tw();f=b.fingerprint;h=f.fpType;if("AnnotatedFingerprint"===h)h=f.annotationName,k=new Mw,k.xq=!!f.isModule,k.mx=h,f=k;else if("SubclassFingerprint"===h){var h=f.superclassName,k=!!f.requireNoArgConstructor,p=new Nw;p.xq=!!f.isModule;
+p.PY=h;p.FW=k;f=p}else throw(new Ne).c(u((new v).G((new w).f(["Unknown Fingerprint type: ",""])),(new w).f([h])));b=!!b.explicitlySpecified;d.tk=e;d.Cp=f;d.xr=b;d.yr=a;if(null===e)throw(new ye).c("fullyQualifiedName was null");if(null===f)throw(new ye).c("fingerprint was null");if(null===a)throw(new ye).c("selectors was null");return d}
+function xha(a,b){a=b.tk;var d=rw(tw(),b.Cp),e=b.xr;b=b.yr;var f;f=[];for(var h=0,k=b.m.length;h<k;){var p=b.m[h],p=Eha(Hw(),p);f.push(null===p?null:p);h=1+h|0}b=ka(Wa(yw),f);b=lw(Je(),b);if(Ku(b))b=b.Rd;else if(Lu(b))b=b.pa;else{f=[];h=0;for(k=b.ra();h<k;)p=b.W(h),f.push(p)|0,h=1+h|0;b=f}return{fullyQualifiedName:a,fingerprint:d,explicitlySpecified:e,selectors:b}}Kw.prototype.$classData=g({l7:0},!1,"org.scalajs.testinterface.internal.TaskDefSerializer$",{l7:1,d:1});var Ow=void 0;
+function aw(){Ow||(Ow=(new Kw).b());return Ow}function Pw(){}Pw.prototype=new l;Pw.prototype.constructor=Pw;Pw.prototype.b=function(){return this};
+function jw(a,b){var d=oa(b).k(),e=b.Lh(),f=b.k(),h=Qw(b),k;k=[];for(var p=0,t=h.m.length;p<t;){var x;x=h.m[p];x={className:x.Go,methodName:x.Ns,fileName:x.os,lineNumber:x.Ls};k.push(null===x?null:x);p=1+p|0}h=ka(Wa(yw),k);h=lw(Je(),h);if(Ku(h))h=h.Rd;else if(Lu(h))h=h.pa;else{k=[];p=0;for(t=h.ra();p<t;)x=h.W(p),k.push(x)|0,p=1+p|0;h=k}d={"class":d,message:e,toString:f,stackTrace:h};null!==b.zf&&(d.cause=jw(a,b.zf));return d}
+Pw.prototype.$classData=g({m7:0},!1,"org.scalajs.testinterface.internal.ThrowableSerializer$",{m7:1,d:1});var Rw=void 0;function kw(){Rw||(Rw=(new Pw).b());return Rw}function Ar(a,b){if(Sw(a))return b.Mk(a.Y);if(a&&a.$classData&&a.$classData.n.TB)return Tw(),a=Uw(Vw(),ne(a.No)),Ww(0,a);throw(new q).j(a);}var Iha=g({oo:0},!0,"play.api.libs.json.JsValue",{oo:1,Um:1});function Xw(){}Xw.prototype=new l;Xw.prototype.constructor=Xw;Xw.prototype.b=function(){return this};
+function Yw(a){var b=Jha();return Zw(b,a,!1,0,m(new n,function(){return function(){return""}}(b)),!1,":",(new ac).Bd("[",",","]"))}
+function $w(a,b){if(null===b)return Kha();if(Ag(b))return(new ax).c(b);if("number"===typeof b){var d=+b;a=bx();return cx(new dx,ex(d,a.Nj))}if(xa(b))return d=+b,a=bx(),cx(new dx,ex(d,a.Nj));if(Pa(b))return d=b|0,a=bx(),cx(new dx,fx(a,d,a.Nj));if(Ca(b))return a=Qa(b),d=a.la,a=a.qa,b=bx(),cx(new dx,Lha(b,(new Vb).ia(d,a)));if(bn(cn(),!0,b))return Mha();if(bn(cn(),!1,b))return Nha();if(b instanceof ba.Array){Je();for(var d=[],e=0,f=b.length|0;e<f;){var h=$w(a,b[e]);d.push(h);e=1+e|0}a=d.length|0;a=la(Wa(Iha),
+[a]);f=a.m.length;e=b=0;h=d.length|0;f=h<f?h:f;h=a.m.length;for(f=f<h?f:h;b<f;)a.m[e]=d[b],b=1+b|0,e=1+e|0;return(new jx).Wx(Et(0,a))}if(b instanceof ba.Object)return Oha||(Oha=(new kx).b()),d=(new lx).nm(b),d=Xb(new Yb,d,m(new n,function(){return function(a){return null!==a}}(a))).xa(m(new n,function(a){return function(b){if(null!==b){var d=b.ja();b=$w(a,b.na());return(new A).e(d,b)}throw(new q).j(b);}}(a)),(new mx).b()),nx(ox(d));Bn(Cn(),u((new v).G((new w).f(["Unexpected JS value: ",""])),(new w).f([b])))}
+function Pha(a){a=(new Sb).c(a);for(var b=Je().Lp.cf(a.R),d=0,e=a.R.length|0;d<e;){var f=a.W(d),h=null===f?0:f.Y;if(31<h&&127>h)f=(new J).j((new Ke).Xa(h)).ob();else{var f=(new v).G((new w).f(["u",""])),h=(+(h>>>0)).toString(16),h=(new Sb).c(h),h=px(h),h=(new Sb).c(h),k=(new Ke).Xa(48),p=Je().Lp,p=p.cf(h.Fd()),t=h.ra();p.qc(4<t?t:4);t=4-t|0;for(p.Zb(h.be());0<t;)p.Qa(k),t=-1+t|0;h=p.Da();h=(new Sb).c(h);h=px(h);f=u(f,(new w).f([h.toUpperCase()]));f=(new Sb).c(f);h=(new Ke).Xa(92);k=Je().Lp;f=qx(f,
+h,k);f=(new Sb).c(f)}b.Zb(f.nb());d=1+d|0}return b.Da()}
+function Zw(a,b,d,e,f,h,k,p){if(Kha()===b)return"null";if(rx(b))return p=b.Y,d?Pha(ba.JSON.stringify(p)):ba.JSON.stringify(p);if(sx(b))return b.Y.Fc.k();if(Mha().o(b))return"true";if(Nha().o(b))return"false";if(tx(b))return b=b.Y,d=m(new n,function(a,b,d,e,f,h,k){return function(p){return Zw(a,p,b,k,d,e,f,h)}}(a,d,f,h,k,p,1+e|0)),a=ek().nc,Cr(b,d,a).Mc(p.fb,p.Eb,p.tf);if(ux(b)){b=b.jw;var t=1+e|0;if(h){var x=u((new v).G((new w).f(["\\n",""])),(new w).f([f.y(t)])),E=u((new v).G((new w).f(["\\n","}"])),
+(new w).f([f.y(e)]));e=x;x=E}else e=f.y(t),x="}";p=m(new n,function(a,b,d,e,f,h,k,p){return function(t){if(null!==t){var x=t.ja();t=t.na();return u((new v).G((new w).f(["","","","",""])),(new w).f([p,b?Pha(ba.JSON.stringify(x)):ba.JSON.stringify(x),f,Zw(a,t,b,k,d,e,f,h)]))}throw(new q).j(t);}}(a,d,f,h,k,p,t,e));d=Lc().s;return Cr(b,p,d).Mc("{",",",x)}throw(new q).j(b);}Xw.prototype.$classData=g({I7:0},!1,"play.api.libs.json.StaticBinding$",{I7:1,d:1});var vx=void 0;
+function Jha(){vx||(vx=(new Xw).b());return vx}function cw(a){return!!(a&&a.$classData&&a.$classData.n.J7)}function wx(){}wx.prototype=new l;wx.prototype.constructor=wx;function xx(){}xx.prototype=wx.prototype;var Hha=g({Ir:0},!1,"sbt.testing.Selector",{Ir:1,d:1});wx.prototype.$classData=Hha;function bw(a){return!!(a&&a.$classData&&a.$classData.n.YB)}function yx(a){a.up(Qha(a))}function zx(a){a.Iv(Rha(a))}function Ax(){}Ax.prototype=new l;Ax.prototype.constructor=Ax;function Sha(){}
+Sha.prototype=Ax.prototype;Ax.prototype.b=function(){(new Bx).UD(this);(new Cx).UD(this);return this};function Dx(){}Dx.prototype=new l;Dx.prototype.constructor=Dx;function Tha(){}Tha.prototype=Dx.prototype;function Uha(a,b,d){var e=a.Pm;d=ne(d);return e.sc(d,K(function(a,b){return function(){return b}}(a,b)))}function Ex(){}Ex.prototype=new l;Ex.prototype.constructor=Ex;function Vha(){}Vha.prototype=Ex.prototype;function Fx(){}Fx.prototype=new l;Fx.prototype.constructor=Fx;function Wha(){}
+Wha.prototype=Fx.prototype;Fx.prototype.b=function(){(new Gx).VD(this);return this};function Hx(){}Hx.prototype=new l;Hx.prototype.constructor=Hx;function Ix(){}Ix.prototype=Hx.prototype;Hx.prototype.ob=function(){return this.iy(m(new n,function(){return function(a){return a}}(this)),Xha()).Ms()};function Jx(){this.ea=null}Jx.prototype=new l;Jx.prototype.constructor=Jx;function Kx(){}Kx.prototype=Jx.prototype;
+function Yha(a,b){Lx();b=(new Mx).Ac(b);return a.Kh(m(new n,function(a,b){return function(){return T(b)}}(a,b)),sb(new tb,function(a,b){return function(f,h){return Nx(T(b),K(function(a,b){return function(){return b}}(a,h)))}}(a,b)),Ox(function(a,b){return function(f,h,k,p){return T(b).Kh(m(new n,function(a){return function(){return a}}(a)),sb(new tb,function(a){return function(b,d){return Px(a,K(function(a,b){return function(){return b}}(a,d)))}}(a)),Ox(function(a,b,d,e,f){return function(h,k,p,Ia){h=
+a.ea.wl().sc(b,K(function(a,b){return function(){return b}}(a,h)));return Qx(new Rx,h,d,K(function(a,b,d,e,f){return function(){return Zha(a,ne(b),d,e,f)}}(a,e,f,k,p)),Ia,a.ea)}}(a,f,h,k,p)))}}(a,b)))}
+function $ha(a,b,d,e,f,h,k){Lx();e=(new Mx).Ac(e);Lx();f=(new Mx).Ac(f);Lx();k=(new Mx).Ac(k);if(Sx(d)){d=d.Aa;if(Sx(h))return Tx(b,K(function(a,b,d){return function(){return Ux(Vx(),d,T(b),a.ea)}}(a,e,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,f,h.Aa)),K(function(a,b){return function(){return T(b)}}(a,k)));if(Wx(h))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,
+h.Aa,h.Wa)),K(function(a,b){return function(){return T(b)}}(a,k)));if(Yx(h))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,h.Aa,h.Wa,h.Ib)),K(function(a,b){return function(){return T(b)}}(a,k)));if(Zx(h))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,h.Aa,h.Wa)),K(function(a,
+b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,h.Ib,h.yd)),K(function(a,b){return function(){return T(b)}}(a,k)));throw(new q).j(h);}if(Wx(d)){var p=d.Aa;d=d.Wa;if(Sx(h))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,p,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,f,h.Aa)),K(function(a,b){return function(){return T(b)}}(a,k)));if(Wx(h))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,p,d)),K(function(a,
+b,d,e){return function(){return Xx(Vx(),T(b),d,e,a.ea)}}(a,f,h.Aa,h.Wa)),K(function(a,b){return function(){return T(b)}}(a,k)));if(Yx(h))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,p,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,f,h.Aa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,h.Wa,h.Ib)),K(function(a,b){return function(){return T(b)}}(a,k)));if(Zx(h))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),
+d,e,T(b),a.ea)}}(a,e,p,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),d,e,a.ea)}}(a,f,h.Aa,h.Wa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,h.Ib,h.yd)),K(function(a,b){return function(){return T(b)}}(a,k)));throw(new q).j(h);}if(Yx(d)){var p=d.Aa,t=d.Wa;d=d.Ib;if(Sx(h))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,p,t,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),e,a.ea)}}(a,e,f,h.Aa)),K(function(a,b){return function(){return T(b)}}(a,
+k)));if(Wx(h))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,p,t,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),T(d),a.ea)}}(a,e,f)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,h.Aa,h.Wa)),K(function(a,b){return function(){return T(b)}}(a,k)));if(Yx(h))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,p,t,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),e,a.ea)}}(a,e,f,h.Aa)),K(function(a,
+b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,h.Wa,h.Ib)),K(function(a,b){return function(){return T(b)}}(a,k)));if(Zx(h))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,p,t,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),e,a.ea)}}(a,e,f,h.Aa)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,h.Wa,h.Ib,h.yd)),K(function(a,b){return function(){return T(b)}}(a,k)));throw(new q).j(h);}if(Zx(d)){var p=d.Aa,t=d.Wa,x=d.Ib;d=d.yd;
+if(Sx(h))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,p,t,x)),K(function(a,b,d){return function(){return Ux(Vx(),d,T(b),a.ea)}}(a,e,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,f,h.Aa)),K(function(a,b){return function(){return T(b)}}(a,k)));if(Wx(h))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,p,t,x)),K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d){return function(){return Ux(Vx(),
+b,d,a.ea)}}(a,h.Aa,h.Wa)),K(function(a,b){return function(){return T(b)}}(a,k)));if(Yx(h))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,p,t,x)),K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,h.Aa,h.Wa,h.Ib)),K(function(a,b){return function(){return T(b)}}(a,k)));if(Zx(h))return ay(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,p,t,x)),
+K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,h.Aa,h.Wa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,h.Ib,h.yd)),K(function(a,b){return function(){return T(b)}}(a,k)));throw(new q).j(h);}throw(new q).j(d);}
+function $x(a,b,d,e,f){Lx();f=(new Mx).Ac(f);Lx();b=(new Mx).Ac(b);Lx();d=(new Mx).Ac(d);Lx();e=(new Mx).Ac(e);return a.Kh(m(new n,function(a,b,d,e,f){return function(){var E=T(d),S=T(e),U=T(f);return Nx(Nx(Nx(T(b),K(function(a,b){return function(){return b}}(a,U))),K(function(a,b){return function(){return b}}(a,S))),K(function(a,b){return function(){return b}}(a,E)))}}(a,f,b,d,e)),sb(new tb,function(a,b,d,e,f){return function(E,S){E=T(d);var U=T(e),ga=T(f);return Nx(Nx(Nx(Nx(T(b),K(function(a,b){return function(){return b}}(a,
+ga))),K(function(a,b){return function(){return b}}(a,U))),K(function(a,b){return function(){return b}}(a,E))),K(function(a,b){return function(){return b}}(a,S)))}}(a,f,b,d,e)),Ox(function(a,b,d,e,f){return function(E,S,U,ga){return T(b).Kh(m(new n,function(a,b,d,e){return function(){return Px(Px(Px(a,K(function(a,b){return function(){return T(b)}}(a,b))),K(function(a,b){return function(){return T(b)}}(a,d))),K(function(a,b){return function(){return T(b)}}(a,e)))}}(a,d,e,f)),sb(new tb,function(a,b,
+d,e){return function(f,h){return Px(Px(Px(Px(a,K(function(a,b){return function(){return T(b)}}(a,b))),K(function(a,b){return function(){return T(b)}}(a,d))),K(function(a,b){return function(){return T(b)}}(a,e))),K(function(a,b){return function(){return b}}(a,h)))}}(a,d,e,f)),Ox(function(a,b,d,e,f,h,k,p){return function(t,x,E,U){var S=a.ea,ga=a.ea.Oe(a.ea.Oe(a.ea.Oe(f,T(b)),T(d)),T(e));t=S.wl().sc(ga,K(function(a,b){return function(){return b}}(a,t)));return Qx(new Rx,t,h,K(function(a,b,d,e,f,h,k,
+p){return function(){return aia(a,ne(f),h,K(function(a,b){return function(){return T(b)}}(a,b)),K(function(a,b){return function(){return T(b)}}(a,d)),K(function(a,b){return function(){return T(b)}}(a,e)),k,p)}}(a,b,d,e,k,p,x,E)),U,a.ea)}}(a,d,e,f,E,S,U,ga)))}}(a,f,b,d,e)))}Jx.prototype.ij=function(a){this.ea=a;return this};
+function Tx(a,b,d,e){Lx();e=(new Mx).Ac(e);Lx();b=(new Mx).Ac(b);Lx();d=(new Mx).Ac(d);return a.Kh(m(new n,function(a,b,d,e){return function(){var t=T(d),x=T(e);return Nx(Nx(T(b),K(function(a,b){return function(){return b}}(a,x))),K(function(a,b){return function(){return b}}(a,t)))}}(a,e,b,d)),sb(new tb,function(a,b,d,e){return function(t,x){t=T(d);var E=T(e);return Nx(Nx(Nx(T(b),K(function(a,b){return function(){return b}}(a,E))),K(function(a,b){return function(){return b}}(a,t))),K(function(a,b){return function(){return b}}(a,
+x)))}}(a,e,b,d)),Ox(function(a,b,d,e){return function(t,x,E,S){return T(b).Kh(m(new n,function(a,b,d){return function(){return Px(Px(a,K(function(a,b){return function(){return T(b)}}(a,b))),K(function(a,b){return function(){return T(b)}}(a,d)))}}(a,d,e)),sb(new tb,function(a,b,d){return function(e,f){return Px(Px(Px(a,K(function(a,b){return function(){return T(b)}}(a,b))),K(function(a,b){return function(){return T(b)}}(a,d))),K(function(a,b){return function(){return b}}(a,f)))}}(a,d,e)),Ox(function(a,
+b,d,e,f,h,k){return function(p,t,x,E){var S=a.ea,Cc=a.ea.Oe(a.ea.Oe(e,T(b)),T(d));p=S.wl().sc(Cc,K(function(a,b){return function(){return b}}(a,p)));return Qx(new Rx,p,f,K(function(a,b,d,e,f,h,k){return function(){return $ha(a,ne(e),f,K(function(a,b){return function(){return T(b)}}(a,b)),K(function(a,b){return function(){return T(b)}}(a,d)),h,k)}}(a,b,d,h,k,t,x)),E,a.ea)}}(a,d,e,t,x,E,S)))}}(a,e,b,d)))}
+function ay(a,b,d,e,f,h){Lx();h=(new Mx).Ac(h);Lx();b=(new Mx).Ac(b);Lx();d=(new Mx).Ac(d);Lx();e=(new Mx).Ac(e);Lx();f=(new Mx).Ac(f);return a.Kh(m(new n,function(a,b,d,e,f,h){return function(){var U=T(d),ga=T(e),ma=T(f),va=T(h);return Nx(Nx(Nx(Nx(T(b),K(function(a,b){return function(){return b}}(a,va))),K(function(a,b){return function(){return b}}(a,ma))),K(function(a,b){return function(){return b}}(a,ga))),K(function(a,b){return function(){return b}}(a,U)))}}(a,h,b,d,e,f)),sb(new tb,function(a,
+b,d,e,f,h){return function(U,ga){U=T(d);var ma=T(e),va=T(f),Ia=T(h);return Nx(Nx(Nx(Nx(Nx(T(b),K(function(a,b){return function(){return b}}(a,Ia))),K(function(a,b){return function(){return b}}(a,va))),K(function(a,b){return function(){return b}}(a,ma))),K(function(a,b){return function(){return b}}(a,U))),K(function(a,b){return function(){return b}}(a,ga)))}}(a,h,b,d,e,f)),Ox(function(a,b,d,e,f,h){return function(U,ga,ma,va){return T(b).Kh(m(new n,function(a,b,d,e,f){return function(){return Px(Px(Px(Px(a,
+K(function(a,b){return function(){return T(b)}}(a,b))),K(function(a,b){return function(){return T(b)}}(a,d))),K(function(a,b){return function(){return T(b)}}(a,e))),K(function(a,b){return function(){return T(b)}}(a,f)))}}(a,d,e,f,h)),sb(new tb,function(a,b,d,e,f){return function(h,k){return Px(Px(Px(Px(Px(a,K(function(a,b){return function(){return T(b)}}(a,b))),K(function(a,b){return function(){return T(b)}}(a,d))),K(function(a,b){return function(){return T(b)}}(a,e))),K(function(a,b){return function(){return T(b)}}(a,
+f))),K(function(a,b){return function(){return b}}(a,k)))}}(a,d,e,f,h)),Ox(function(a,b,d,e,f,h,k,p,t){return function(x,E,U,S){var ga=a.ea,ma=a.ea.Oe(a.ea.Oe(a.ea.Oe(a.ea.Oe(h,T(b)),T(d)),T(e)),T(f));x=ga.wl().sc(ma,K(function(a,b){return function(){return b}}(a,x)));return Qx(new Rx,x,k,K(function(a,b,d,e,f,h,k,p,t){return function(){return bia(a,ne(h),k,K(function(a,b){return function(){return T(b)}}(a,b)),K(function(a,b){return function(){return T(b)}}(a,d)),K(function(a,b){return function(){return T(b)}}(a,
+e)),K(function(a,b){return function(){return T(b)}}(a,f)),p,t)}}(a,b,d,e,f,p,t,E,U)),S,a.ea)}}(a,d,e,f,h,U,ga,ma,va)))}}(a,h,b,d,e,f)))}
+function aia(a,b,d,e,f,h,k,p){Lx();e=(new Mx).Ac(e);Lx();f=(new Mx).Ac(f);Lx();h=(new Mx).Ac(h);Lx();p=(new Mx).Ac(p);if(Sx(d)){d=d.Aa;if(Sx(k))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,h,k.Aa)),K(function(a,b){return function(){return T(b)}}(a,p)));if(Wx(k))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),
+T(b),d,e,a.ea)}}(a,h,k.Aa,k.Wa)),K(function(a,b){return function(){return T(b)}}(a,p)));if(Yx(k))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,h,k.Aa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,k.Wa,k.Ib)),K(function(a,b){return function(){return T(b)}}(a,p)));if(Zx(k))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,
+d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),d,e,a.ea)}}(a,h,k.Aa,k.Wa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,k.Ib,k.yd)),K(function(a,b){return function(){return T(b)}}(a,p)));throw(new q).j(k);}if(Wx(d)){var t=d.Aa;d=d.Wa;if(Sx(k))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,t,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),e,a.ea)}}(a,f,h,k.Aa)),K(function(a,b){return function(){return T(b)}}(a,
+p)));if(Wx(k))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,t,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),T(d),a.ea)}}(a,f,h)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,k.Aa,k.Wa)),K(function(a,b){return function(){return T(b)}}(a,p)));if(Yx(k))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,t,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),e,a.ea)}}(a,f,h,k.Aa)),
+K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,k.Wa,k.Ib)),K(function(a,b){return function(){return T(b)}}(a,p)));if(Zx(k))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,t,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),e,a.ea)}}(a,f,h,k.Aa)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,k.Wa,k.Ib,k.yd)),K(function(a,b){return function(){return T(b)}}(a,p)));throw(new q).j(k);}if(Yx(d)){var t=d.Aa,x=
+d.Wa;d=d.Ib;if(Sx(k))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,t,x,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),T(d),a.ea)}}(a,e,f)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,h,k.Aa)),K(function(a,b){return function(){return T(b)}}(a,p)));if(Wx(k))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,t,x,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),T(e),a.ea)}}(a,e,f,h)),
+K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,k.Aa,k.Wa)),K(function(a,b){return function(){return T(b)}}(a,p)));if(Yx(k))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,t,x,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),T(e),a.ea)}}(a,e,f,h)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,k.Aa,k.Wa,k.Ib)),K(function(a,b){return function(){return T(b)}}(a,p)));if(Zx(k))return ay(b,K(function(a,b,d,e){return function(){return Xx(Vx(),
+b,d,e,a.ea)}}(a,t,x,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),T(e),a.ea)}}(a,e,f,h)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,k.Aa,k.Wa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,k.Ib,k.yd)),K(function(a,b){return function(){return T(b)}}(a,p)));throw(new q).j(k);}if(Zx(d)){var t=d.Aa,x=d.Wa,E=d.Ib;d=d.yd;if(Sx(k))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,t,x,E)),K(function(a,b,d,e){return function(){return Xx(Vx(),
+e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,h,k.Aa)),K(function(a,b){return function(){return T(b)}}(a,p)));if(Wx(k))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,t,x,E)),K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),d,e,a.ea)}}(a,h,k.Aa,k.Wa)),K(function(a,b){return function(){return T(b)}}(a,p)));if(Yx(k))return ay(b,
+K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,t,x,E)),K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,h,k.Aa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,k.Wa,k.Ib)),K(function(a,b){return function(){return T(b)}}(a,p)));if(Zx(k))return ay(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,t,x,E)),K(function(a,b,d,e){return function(){return Xx(Vx(),
+e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),d,e,a.ea)}}(a,h,k.Aa,k.Wa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,k.Ib,k.yd)),K(function(a,b){return function(){return T(b)}}(a,p)));throw(new q).j(k);}throw(new q).j(d);}Jx.prototype.k=function(){by();var a=(new cy).b();by();var b=(new cy).b();Vx();var d=new dy;d.fx=a;d.Br=b;Jd(d);by();cia||(cia=(new ey).b());a=new fy;a.mu=b;Jd(a);d.Bz=a;return d.Sd(this).k()};
+function Zha(a,b,d,e,f){if(Sx(d)){d=d.Aa;if(Sx(e))return e=e.Aa,gy(b,Ux(Vx(),d,e,a.ea),f);if(Wx(e)){var h=e.Aa;e=e.Wa;return gy(b,Xx(Vx(),d,h,e,a.ea),f)}if(Yx(e))return Tx(b,K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,d,e.Aa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,e.Wa,e.Ib)),f);if(Zx(e))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,d,e.Aa,e.Wa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,e.Ib,
+e.yd)),f);throw(new q).j(e);}if(Wx(d)){h=d.Aa;d=d.Wa;if(Sx(e))return e=e.Aa,gy(b,Xx(Vx(),h,d,e,a.ea),f);if(Wx(e))return Tx(b,K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,h,d)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,e.Aa,e.Wa)),f);if(Yx(e))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,h,d,e.Aa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,e.Wa,e.Ib)),f);if(Zx(e))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),
+b,d,e,a.ea)}}(a,h,d,e.Aa)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,e.Wa,e.Ib,e.yd)),f);throw(new q).j(e);}if(Yx(d)){var h=d.Aa,k=d.Wa;d=d.Ib;if(Sx(e))return Tx(b,K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,h,k)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,d,e.Aa)),f);if(Wx(e))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,h,k,d)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,
+e.Aa,e.Wa)),f);if(Yx(e))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,h,k,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,e.Aa,e.Wa,e.Ib)),f);if(Zx(e))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,h,k,d)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,e.Aa,e.Wa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,e.Ib,e.yd)),f);throw(new q).j(e);}if(Zx(d)){var h=d.Aa,k=d.Wa,
+p=d.Ib;d=d.yd;if(Sx(e))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,h,k,p)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,d,e.Aa)),f);if(Wx(e))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,h,k,p)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,d,e.Aa,e.Wa)),f);if(Yx(e))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,h,k,p)),K(function(a,b,d){return function(){return Ux(Vx(),
+b,d,a.ea)}}(a,d,e.Aa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,e.Wa,e.Ib)),f);if(Zx(e))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,h,k,p)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,d,e.Aa,e.Wa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,e.Ib,e.yd)),f);throw(new q).j(e);}throw(new q).j(d);}
+Jx.prototype.ua=function(a){this.Kh(m(new n,function(){return function(){}}(this)),sb(new tb,function(a,d){return function(a,b){d.y(b)}}(this,a)),Ox(function(a,d){return function(e,f,h,k){f.ua(d);ne(h).ua(m(new n,function(a,b){return function(a){a.ua(b)}}(a,d)));k.ua(d)}}(this,a)))};Jx.prototype.Ms=function(){return dia(Vx(),this.ea).Nl(this)};
+function bia(a,b,d,e,f,h,k,p,t){Lx();e=(new Mx).Ac(e);Lx();f=(new Mx).Ac(f);Lx();h=(new Mx).Ac(h);Lx();k=(new Mx).Ac(k);Lx();t=(new Mx).Ac(t);if(Sx(d)){d=d.Aa;if(Sx(p))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),e,a.ea)}}(a,h,k,p.Aa)),K(function(a,b){return function(){return T(b)}}(a,t)));if(Wx(p))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,
+f,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),T(d),a.ea)}}(a,h,k)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,p.Aa,p.Wa)),K(function(a,b){return function(){return T(b)}}(a,t)));if(Yx(p))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),e,a.ea)}}(a,h,k,p.Aa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,p.Wa,p.Ib)),K(function(a,b){return function(){return T(b)}}(a,
+t)));if(Zx(p))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),e,a.ea)}}(a,h,k,p.Aa)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,p.Wa,p.Ib,p.yd)),K(function(a,b){return function(){return T(b)}}(a,t)));throw(new q).j(p);}if(Wx(d)){var x=d.Aa;d=d.Wa;if(Sx(p))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,x,d)),K(function(a,b,d){return function(){return Ux(Vx(),
+T(b),T(d),a.ea)}}(a,f,h)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,k,p.Aa)),K(function(a,b){return function(){return T(b)}}(a,t)));if(Wx(p))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,x,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),T(e),a.ea)}}(a,f,h,k)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,p.Aa,p.Wa)),K(function(a,b){return function(){return T(b)}}(a,t)));if(Yx(p))return $x(b,K(function(a,
+b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,x,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),T(e),a.ea)}}(a,f,h,k)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,p.Aa,p.Wa,p.Ib)),K(function(a,b){return function(){return T(b)}}(a,t)));if(Zx(p))return ay(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,x,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),T(e),a.ea)}}(a,f,h,k)),K(function(a,b,d){return function(){return Ux(Vx(),
+b,d,a.ea)}}(a,p.Aa,p.Wa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,p.Ib,p.yd)),K(function(a,b){return function(){return T(b)}}(a,t)));throw(new q).j(p);}if(Yx(d)){var x=d.Aa,E=d.Wa;d=d.Ib;if(Sx(p))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,x,E,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),T(e),a.ea)}}(a,e,f,h)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,k,p.Aa)),K(function(a,b){return function(){return T(b)}}(a,
+t)));if(Wx(p))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,x,E,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),T(e),a.ea)}}(a,e,f,h)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),d,e,a.ea)}}(a,k,p.Aa,p.Wa)),K(function(a,b){return function(){return T(b)}}(a,t)));if(Yx(p))return ay(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,x,E,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),T(e),a.ea)}}(a,
+e,f,h)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,k,p.Aa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,p.Wa,p.Ib)),K(function(a,b){return function(){return T(b)}}(a,t)));if(Zx(p))return ay(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,x,E,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),T(e),a.ea)}}(a,e,f,h)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),d,e,a.ea)}}(a,k,p.Aa,p.Wa)),K(function(a,b,
+d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,p.Ib,p.yd)),K(function(a,b){return function(){return T(b)}}(a,t)));throw(new q).j(p);}if(Zx(d)){var x=d.Aa,E=d.Wa,S=d.Ib;d=d.yd;if(Sx(p))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,x,E,S)),K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),e,a.ea)}}(a,h,k,p.Aa)),K(function(a,b){return function(){return T(b)}}(a,t)));if(Wx(p))return ay(b,
+K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,x,E,S)),K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),T(d),a.ea)}}(a,h,k)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,p.Aa,p.Wa)),K(function(a,b){return function(){return T(b)}}(a,t)));if(Yx(p))return ay(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,x,E,S)),K(function(a,b,d,e){return function(){return Xx(Vx(),
+e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),e,a.ea)}}(a,h,k,p.Aa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,p.Wa,p.Ib)),K(function(a,b){return function(){return T(b)}}(a,t)));if(Zx(p))return ay(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,x,E,S)),K(function(a,b,d,e){return function(){return Xx(Vx(),e,T(b),T(d),a.ea)}}(a,e,f,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),T(d),e,a.ea)}}(a,
+h,k,p.Aa)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,p.Wa,p.Ib,p.yd)),K(function(a,b){return function(){return T(b)}}(a,t)));throw(new q).j(p);}throw(new q).j(d);}
+function Px(a,b){var d=hy(Vx(),a.ea);Lx();b=(new Mx).Ac(b);return a.Kh(m(new n,function(a,b){return function(d){d=a.ea.Oe(d,T(b));return iy(new jy,d,K(function(a,b){return function(){return T(b)}}(a,b)),a.ea)}}(a,b)),sb(new tb,function(a,b,d){return function(k,p){k=a.ea.Oe(k,T(d));p=ky(Vx(),p,a.ea);var t=K(function(a,b){return function(){return(new Hd).ij(b)}}(a,b)),x=ky(Vx(),T(d),a.ea);return Qx(new Rx,k,p,t,x,a.ea)}}(a,d,b)),Ox(function(a,b){return function(d,k,p,t){p=ne(p);if(Zx(t)){var x=t.Aa,
+E=t.Wa,S=t.Ib;t=t.yd;d=a.ea.Oe(d,T(b));p=K(function(a,b,d,e,f){return function(){return Px(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,d,e,f)))}}(a,p,x,E,S));t=ly(Vx(),t,T(b),a.ea);return Qx(new Rx,d,k,p,t,a.ea)}d=a.ea.Oe(d,T(b));p=K(function(a,b){return function(){return b}}(a,p));t=t.vw(T(b));return Qx(new Rx,d,k,p,t,a.ea)}}(a,b)))}
+function eia(a,b,d,e,f,h){Lx();e=(new Mx).Ac(e);Lx();h=(new Mx).Ac(h);if(Sx(d)){d=d.Aa;if(Sx(f))return f=f.Aa,gy(b,Xx(Vx(),d,T(e),f,a.ea),K(function(a,b){return function(){return T(b)}}(a,h)));if(Wx(f))return Tx(b,K(function(a,b,d){return function(){return Ux(Vx(),d,T(b),a.ea)}}(a,e,d)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,f.Aa,f.Wa)),K(function(a,b){return function(){return T(b)}}(a,h)));if(Yx(f))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,T(b),
+e,a.ea)}}(a,e,d,f.Aa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,f.Wa,f.Ib)),K(function(a,b){return function(){return T(b)}}(a,h)));if(Zx(f))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,T(b),e,a.ea)}}(a,e,d,f.Aa)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,f.Wa,f.Ib,f.yd)),K(function(a,b){return function(){return T(b)}}(a,h)));throw(new q).j(f);}if(Wx(d)){var k=d.Aa;d=d.Wa;if(Sx(f))return Tx(b,K(function(a,b,d){return function(){return Ux(Vx(),
+b,d,a.ea)}}(a,k,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,e,f.Aa)),K(function(a,b){return function(){return T(b)}}(a,h)));if(Wx(f))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,k,d)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,f.Aa,f.Wa)),K(function(a,b){return function(){return T(b)}}(a,h)));if(Yx(f))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,k,d)),K(function(a,b,
+d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,f.Aa,f.Wa,f.Ib)),K(function(a,b){return function(){return T(b)}}(a,h)));if(Zx(f))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),d,e,T(b),a.ea)}}(a,e,k,d)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,f.Aa,f.Wa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,f.Ib,f.yd)),K(function(a,b){return function(){return T(b)}}(a,h)));throw(new q).j(f);}if(Yx(d)){var k=d.Aa,p=d.Wa;d=d.Ib;if(Sx(f))return Tx(b,
+K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,k,p,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,e,f.Aa)),K(function(a,b){return function(){return T(b)}}(a,h)));if(Wx(f))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,k,p,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),d,e,a.ea)}}(a,e,f.Aa,f.Wa)),K(function(a,b){return function(){return T(b)}}(a,h)));if(Yx(f))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),
+b,d,e,a.ea)}}(a,k,p,d)),K(function(a,b,d){return function(){return Ux(Vx(),T(b),d,a.ea)}}(a,e,f.Aa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,f.Wa,f.Ib)),K(function(a,b){return function(){return T(b)}}(a,h)));if(Zx(f))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,k,p,d)),K(function(a,b,d,e){return function(){return Xx(Vx(),T(b),d,e,a.ea)}}(a,e,f.Aa,f.Wa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,f.Ib,f.yd)),K(function(a,
+b){return function(){return T(b)}}(a,h)));throw(new q).j(f);}if(Zx(d)){var k=d.Aa,p=d.Wa,t=d.Ib;d=d.yd;if(Sx(f))return Tx(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,k,p,t)),K(function(a,b,d,e){return function(){return Xx(Vx(),d,T(b),e,a.ea)}}(a,e,d,f.Aa)),K(function(a,b){return function(){return T(b)}}(a,h)));if(Wx(f))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,k,p,t)),K(function(a,b,d){return function(){return Ux(Vx(),d,T(b),a.ea)}}(a,
+e,d)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,f.Aa,f.Wa)),K(function(a,b){return function(){return T(b)}}(a,h)));if(Yx(f))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,k,p,t)),K(function(a,b,d,e){return function(){return Xx(Vx(),d,T(b),e,a.ea)}}(a,e,d,f.Aa)),K(function(a,b,d){return function(){return Ux(Vx(),b,d,a.ea)}}(a,f.Wa,f.Ib)),K(function(a,b){return function(){return T(b)}}(a,h)));if(Zx(f))return $x(b,K(function(a,b,d,e){return function(){return Xx(Vx(),
+b,d,e,a.ea)}}(a,k,p,t)),K(function(a,b,d,e){return function(){return Xx(Vx(),d,T(b),e,a.ea)}}(a,e,d,f.Aa)),K(function(a,b,d,e){return function(){return Xx(Vx(),b,d,e,a.ea)}}(a,f.Wa,f.Ib,f.yd)),K(function(a,b){return function(){return T(b)}}(a,h)));throw(new q).j(f);}throw(new q).j(d);}
+function gy(a,b,d){Lx();d=(new Mx).Ac(d);return a.Kh(m(new n,function(a,b,d){return function(){return Nx(T(d),K(function(a,b){return function(){return b}}(a,b)))}}(a,b,d)),sb(new tb,function(a,b,d){return function(k,p){return Nx(Nx(T(d),K(function(a,b){return function(){return b}}(a,b))),K(function(a,b){return function(){return b}}(a,p)))}}(a,b,d)),Ox(function(a,b,d){return function(k,p,t,x){return T(d).Kh(m(new n,function(a,b){return function(){return Px(a,K(function(a,b){return function(){return b}}(a,
+b)))}}(a,b)),sb(new tb,function(a,b){return function(d,e){return Px(Px(a,K(function(a,b){return function(){return b}}(a,b))),K(function(a,b){return function(){return b}}(a,e)))}}(a,b)),Ox(function(a,b,d,e,f,h){return function(k,p,t,x){var Mb=a.ea,Jc=a.ea.Oe(d,b);k=Mb.wl().sc(Jc,K(function(a,b){return function(){return b}}(a,k)));return Qx(new Rx,k,e,K(function(a,b,d,e,f,h){return function(){return eia(a,ne(d),e,K(function(a,b){return function(){return b}}(a,b)),f,h)}}(a,b,f,h,p,t)),x,a.ea)}}(a,b,
+k,p,t,x)))}}(a,b,d)))}
+function Nx(a,b){var d=hy(Vx(),a.ea);Lx();b=(new Mx).Ac(b);return a.Kh(m(new n,function(a,b){return function(d){d=a.ea.Bo(T(b),d);return iy(new jy,d,K(function(a,b){return function(){return T(b)}}(a,b)),a.ea)}}(a,b)),sb(new tb,function(a,b,d){return function(k,p){k=a.ea.Bo(T(d),k);var t=ky(Vx(),T(d),a.ea),x=K(function(a,b){return function(){return(new Hd).ij(b)}}(a,b));p=ky(Vx(),p,a.ea);return Qx(new Rx,k,t,x,p,a.ea)}}(a,d,b)),Ox(function(a,b){return function(d,k,p,t){p=ne(p);if(Zx(k)){var x=k.Aa,
+E=k.Wa,S=k.Ib;k=k.yd;d=a.ea.Bo(T(b),d);x=ly(Vx(),T(b),x,a.ea);return Qx(new Rx,d,x,K(function(a,b,d,e,f){return function(){var h=Xx(Vx(),d,e,f,a.ea);return Nx(b,K(function(a,b){return function(){return b}}(a,h)))}}(a,p,E,S,k)),t,a.ea)}E=a.ea.Bo(T(b),d);S=T(b);k=k.yw(S);return Qx(new Rx,E,k,K(function(a,b){return function(){return b}}(a,p)),t,a.ea)}}(a,b)))}function my(){}my.prototype=new l;my.prototype.constructor=my;function fia(){}fia.prototype=my.prototype;
+function hy(a,b){return ny(new oy,m(new n,function(a){return function(b){return b.wD(Zt(function(){return function(a){return a}}(a)),Ox(function(){return function(a){return a}}(a)))}}(a)),b.wl())}function dia(a,b){return ny(new oy,m(new n,function(a){return function(b){return b.Kh(m(new n,function(){return function(a){return a}}(a)),sb(new tb,function(){return function(a){return a}}(a)),Ox(function(){return function(a){return a}}(a)))}}(a)),b.wl())}
+function py(a,b){return qy(a.zi(b,y(),sb(new tb,function(){return function(a,b){return Ng(new Og,b,a)}}(a))))}function ry(a){a.Ok(gia(a))}function hia(a,b,d,e){e=m(new n,function(a,b){return function(a){sy();var d=iia;ty||(ty=(new uy).b());d=d(ty,b);a=rb(d).y(a);return(new vy).mn(a)}}(a,e));jia||(jia=(new wy).b());var f=sy(),f=(new xy).VD(f);return a.Wj(b,e,kia(f)).Rq.y(d)}function yy(){}yy.prototype=new l;yy.prototype.constructor=yy;function zy(){}zy.prototype=yy.prototype;
+function lia(a,b){for(;;){var d=a;if(Ay(d))return(new By).j(d.ha);if(Cy(d))return(new Dy).j(b.cd(d.ha,m(new n,function(){return function(a){return(new Ey).j(a)}}(a))));if(Fy(d)){var e=d.Lr;if(Ay(e))a=d.So.y(e.ha);else{if(Cy(e))return(new Dy).j(b.cd(e.ha,d.So));if(Fy(e))a=Gy(new Hy,e.Lr,m(new n,function(a,b,d){return function(a){a=b.So.y(a);return Gy(new Hy,a,d.So)}}(a,e,d)));else throw(new q).j(e);}}else throw(new q).j(d);}}
+function mia(a,b){return Gy(new Hy,a,m(new n,function(a,b){return function(a){return(new Ey).j(b.y(a))}}(a,b)))}function Iy(){}Iy.prototype=new l;Iy.prototype.constructor=Iy;function nia(){}nia.prototype=Iy.prototype;function Jy(a,b){return m(new n,function(a,b){return function(f){return a.cd(f,b)}}(a,b))}function Ky(a){a.Wg(oia(a))}function Ly(){}Ly.prototype=new l;Ly.prototype.constructor=Ly;function pia(){}pia.prototype=Ly.prototype;function My(){}My.prototype=new l;My.prototype.constructor=My;
+function qia(){}qia.prototype=My.prototype;function Ny(){}Ny.prototype=new l;Ny.prototype.constructor=Ny;function Oy(){}Oy.prototype=Ny.prototype;function ria(a,b){return(new Py).mn(m(new n,function(a,b){return function(f){return b.y(m(new n,function(a,b){return function(d){return Qy(a,d,b)}}(a,f)))}}(a,b)))}function Qy(a,b,d){return d.jj(d.cd(a.yD().y(d),m(new n,function(a,b){return function(a){return a.y(b)}}(a,b))))}
+function sia(a,b,d){return ria(a,m(new n,function(a,b,d){return function(k){return m(new n,function(a,b,d,e){return function(f){return d.cd(e.y(f),m(new n,function(a,b){return function(a){return(new A).e(a.ja(),b.y(a.na()))}}(a,b)))}}(a,b,d,k))}}(a,b,d)))}function tia(a,b){var d=Ry();return(new Py).mn(m(new n,function(a,b,d){return function(){return m(new n,function(a,b,d){return function(e){return d.Qd(K(function(a,b,d){return function(){return Qy(a,d,b)}}(a,b,e)))}}(a,b,d))}}(a,b,d)))}
+function uia(a,b,d){return ria(a,m(new n,function(a,b,d){return function(k){return m(new n,function(a,b,d,e){return function(f){return d.ih(e.y(f),m(new n,function(a,b,d){return function(e){var f=b.y(e.na()).yD().y(d);return d.ih(f,m(new n,function(a,b){return function(a){return a.y(b.ja())}}(a,e)))}}(a,b,d)))}}(a,b,d,k))}}(a,b,d)))}function Sy(){}Sy.prototype=new l;Sy.prototype.constructor=Sy;function via(){}via.prototype=Sy.prototype;function Ty(a){a.ct((new Uy).WD(a));a.bt((new Vy).WD(a))}
+function Wy(a){a.qF((new Xy).XD(a));a.pF((new Yy).XD(a))}function Zy(){}Zy.prototype=new l;Zy.prototype.constructor=Zy;function wia(){}wia.prototype=Zy.prototype;function $y(){}$y.prototype=new l;$y.prototype.constructor=$y;function xia(){}xia.prototype=$y.prototype;function az(){}az.prototype=new l;az.prototype.constructor=az;function yia(){}yia.prototype=az.prototype;az.prototype.b=function(){var a=new bz;yd(a);zx(a);return this};function cz(){}cz.prototype=new l;cz.prototype.constructor=cz;
+function zia(){}zia.prototype=cz.prototype;function dz(a){a.Df(Aia(a))}function ez(){}ez.prototype=new l;ez.prototype.constructor=ez;function Bia(){}Bia.prototype=ez.prototype;function fz(){}fz.prototype=new l;fz.prototype.constructor=fz;fz.prototype.b=function(){gz=this;(new hz).b();return this};fz.prototype.$classData=g({t9:0},!1,"scalaz.Need$",{t9:1,d:1});var gz=void 0;function Lx(){gz||(gz=(new fz).b())}function iz(){}iz.prototype=new l;iz.prototype.constructor=iz;function jz(){}
+jz.prototype=iz.prototype;iz.prototype.ij=function(){return this};iz.prototype.ua=function(a){this.wD(Zt(function(a,d){return function(a,b,h){d.y(ne(b));d.y(ne(h))}}(this,a)),Ox(function(a,d){return function(a,b,h,k){d.y(ne(b));d.y(ne(h));d.y(ne(k))}}(this,a)))};function kq(){this.Pc=this.Gc=null}kq.prototype=new l;kq.prototype.constructor=kq;c=kq.prototype;c.o=function(a){if(a&&a.$classData&&a.$classData.n.MR){var b=dt(this);a=dt(a);return null===b?null===a:b.o(a)}return!1};
+function dt(a){return(new jq).Sb(a.Gc,a.Pc)}c.k=function(){return"NonEmpty"+(new jq).Sb(this.Gc,this.Pc)};
+function Cia(a,b,d){var e=a.Pc;if(hq(e))return d.cd(b.y(a.Gc),m(new n,function(){return function(a){eq();var b=fq().$d;return(new kq).Sb(a,b)}}(a)));if(iq(e))return kz(d,K(function(a,b){return function(){return b.y(a.Gc)}}(a,b)),K(function(a,b,d,e,t){return function(){lz||(lz=(new mz).b());var a=fq().jE,f=new nz;f.gn=a;Ad(f);Ky(f);ry(f);oz(f);f.Xq(pz(f));f.Zq(qz(f));a=(new rz).e(e,t);return Dia(f,a,b,d)}}(a,b,d,e.bd,e.fd)),sb(new tb,function(){return function(a,b){eq();return(new kq).Sb(a,(new jq).Sb(b.Gc,
+b.Pc))}}(a)));throw(new q).j(e);}function Nq(a,b){var d=dt(a);if(hq(d))a=b;else if(iq(d))a=d.bd,d=d.fd,eq(),b=dt(b),b=Eia(d,b),a=(new kq).Sb(a,b);else throw(new q).j(d);return a}function cq(a){var b;sz||(sz=(new tz).b());b=sz;eq();var d=b.y(a.Gc);a=Fia(a.Pc,b);return(new kq).Sb(d,a)}c.Sb=function(a,b){this.Gc=a;this.Pc=b;return this};c.r=function(){return dt(this).r()};c.$classData=g({MR:0},!1,"scalaz.NonEmptyList",{MR:1,d:1});function uz(){}uz.prototype=new l;uz.prototype.constructor=uz;
+function Gia(){}Gia.prototype=uz.prototype;function vz(){}vz.prototype=new l;vz.prototype.constructor=vz;function Hia(){}Hia.prototype=vz.prototype;function wz(a){a.qg(Iia(a))}function xz(a){a.dt(Jia(a))}function yz(){}yz.prototype=new l;yz.prototype.constructor=yz;function zz(){}zz.prototype=yz.prototype;function Az(){}Az.prototype=new l;Az.prototype.constructor=Az;function Kia(){}Kia.prototype=Az.prototype;
+Az.prototype.b=function(){Lia();m(new n,function(){return function(a){return!!a}}(this));m(new n,function(){return function(a){return!!a}}(this));Bz();m(new n,function(){return function(a){return a|0}}(this));Bz();m(new n,function(){return function(a){return(new Ke).Xa(null===a?0:a.Y)}}(this));Bz();m(new n,function(){return function(a){return a|0}}(this));Bz();m(new n,function(){return function(a){a=Qa(a);return(new Vb).ia(a.la,a.qa)}}(this));Bz();m(new n,function(){return function(a){return a|0}}(this));
+Bz();m(new n,function(){return function(a){return a}}(this));Cz||(Cz=(new Dz).b());return this};function Xha(){var a;Ez||(Ez=(new Fz).b());a=Ez;var b=m(new n,function(){return function(a){var b=y();return Ng(new Og,a,b)}}(a));a=m(new n,function(a){return function(b){return m(new n,function(a,b){return function(a){return Ng(new Og,b,a)}}(a,b))}}(a));var d=Kq(),d=(new Lq).Eu(d);return Mia(b,a,d)}function Gz(){}Gz.prototype=new l;Gz.prototype.constructor=Gz;
+Gz.prototype.b=function(){Hz=this;(new Iz).b();return this};Gz.prototype.$classData=g({S9:0},!1,"scalaz.Show$",{S9:1,d:1});var Hz=void 0;function by(){Hz||(Hz=(new Gz).b())}function Nia(a,b){a=m(new n,function(a,b){return function(a){a=b.y(a);return(new A).e(a,void 0)}}(a,b));b=Jz().kg;return Kz(new Lz,a,b)}function Mz(){}Mz.prototype=new l;Mz.prototype.constructor=Mz;
+Mz.prototype.b=function(){Nz=this;(new Oz).b();(new Oz).b();(new Oz).b();(new Oz).b();(new Oz).b();(new Oz).b();(new Oz).b();(new Oz).b();(new Oz).b();(new Oz).b();(new Oz).b();(new Oz).b();(new Oz).b();(new Oz).b();return this};Mz.prototype.$classData=g({c$:0},!1,"scalaz.Tags$",{c$:1,d:1});var Nz=void 0;function Pz(){Nz||(Nz=(new Mz).b())}function Qz(){this.ga=this.gH=null}Qz.prototype=new l;Qz.prototype.constructor=Qz;Qz.prototype.$classData=g({f$:0},!1,"scalaz.Traverse$Traversal",{f$:1,d:1});
+function Rz(){}Rz.prototype=new l;Rz.prototype.constructor=Rz;function Oia(){}Oia.prototype=Rz.prototype;function Sz(){}Sz.prototype=new l;Sz.prototype.constructor=Sz;function Pia(){}Pia.prototype=Sz.prototype;Sz.prototype.b=function(){var a=new Tz;yx(a);xd(a);Uz(a);return this};function Vz(){this.kg=null}Vz.prototype=new l;Vz.prototype.constructor=Vz;
+Vz.prototype.b=function(){Wz=this;Xz||(Xz=(new Yz).b());this.kg=Xz.Tx;Qia||(Qia=(new Zz).b());Ria||(Ria=(new $z).b());Sia||(Sia=(new aA).b());Tia||(Tia=(new bA).b());Uia||(Uia=(new cA).b());Via||(Via=(new dA).b());Wia();Xia||(Xia=(new eA).b());Yia||(Yia=(new fA).b());Zia||(Zia=(new gA).b());return this};Vz.prototype.$classData=g({q$:0},!1,"scalaz.package$",{q$:1,d:1});var Wz=void 0;function Jz(){Wz||(Wz=(new Vz).b());return Wz}function hA(){}hA.prototype=new l;hA.prototype.constructor=hA;
+hA.prototype.b=function(){return this};function $ia(a){eq();var b=[],d=fq().$d,e=b.length|0;a:for(;;){if(0!==e){d=(new jq).Sb(b[-1+e|0],d);e=-1+e|0;continue a}break}return(new kq).Sb(a,d)}hA.prototype.$classData=g({Zaa:0},!1,"scalaz.syntax.NelOps$",{Zaa:1,d:1});var aja=void 0;function uy(){}uy.prototype=new l;uy.prototype.constructor=uy;uy.prototype.b=function(){return this};function iia(a,b){return sb(new tb,function(a,b){return function(a,d){return qb(b,d,a)}}(a,b))}
+uy.prototype.$classData=g({qba:0},!1,"scalaz.syntax.std.Function2Ops$",{qba:1,d:1});var ty=void 0;function Su(){this.MX=null}Su.prototype=new l;Su.prototype.constructor=Su;Su.prototype.Ja=function(a){this.MX=a;return this};Su.prototype.$classData=g({rba:0},!1,"scalaz.syntax.std.OptionOps",{rba:1,d:1});function iA(){this.aw=null}iA.prototype=new l;iA.prototype.constructor=iA;
+function bja(a,b){Dc();for(var d=(new w).b(),e=a.aw,f=b.ob();;)if(kd(f)){if(!si(f))throw(new q).j(f);for(var h=f.Cb,f=f.Ia,h=e.td.GD(m(new n,function(a,b){return function(a){return a.Y.pe()===b}}(a,h))),k=[h],p=0,t=k.length|0;p<t;)d.pa.push(k[p]),p=1+p|0;if(!e.td.dp(h))throw(new jA).G(b);e=e.td.W(h)}else break;return(new A).e(d,e)}function kA(a){var b=new iA;b.aw=a;return b}
+function cja(a,b,d,e,f,h,k,p,t,x){var E=b.Cg();if(F()===E)return lA(mA(),K(function(a,b){return function(){return b}}(a,d)),t);if(Fk(E)){var S=E.U,E=kA(S),U=r(),U=h.mc(e,U.s),S=S.Y.pe(),ga=r();return dja(E,f,U,k.mc(S,ga.s),p,x,t).nl(m(new n,function(a,b,d,e,f,h,k,p,t,x){return function(E){var S=p.aa(),U=B().s;return cja(a,S,Di(t,E,U),1+x|0,b,d,e,f,h,k)}}(a,f,h,k,p,t,x,b,d,e)),t)}throw(new q).j(E);}
+function eja(a,b,d,e,f,h){e=bja(a,e);if(null===e)throw(new q).j(e);a=e.ja();e=kA(e.na());var k=nA(mA(),F());return dja(e,b,a,d,f,k,h)}
+function dja(a,b,d,e,f,h,k){return lA(mA(),K(function(a,b,d,e,f,h,k){return function(){var ma=fja(),va=f.y(K(function(a,b,d,e){return function(){return d.nl(m(new n,function(a,b,d){return function(e){if(F()===e)return lA(mA(),K(function(a,b){return function(){try{return nA(mA(),a.aw.Y.Toa().fpa(b.ob()))}catch(d){var e=Un(vg(),d);if(null!==e)return mA(),oA||(oA=(new pA).b()),e=(new qA).wd(e),gja(hja(),e);throw d;}}}(a,b)),d).nl(m(new n,function(){return function(a){return a}}(a)),d);if(Fk(e))throw e.U;
+throw(new q).j(e);}}(a,b,e)),e).nl(m(new n,function(){return function(a){return a&&a.$classData&&a.$classData.n.cF?a:nA(mA(),a)}}(a)),e)}}(a,d,h,k))),Ia=va.Oh(m(new n,function(){return function(){return F()}}(a)),k).Us(ija(a,e),k),Ia=cja(a,a.aw.td,y(),0,b,d,e,f,k,Ia);return va.Oh(m(new n,function(){return function(a){return(new rA).j(a)}}(a)),k).Us(new sA,k).nl(m(new n,function(a,b,d,e,f,h){return function(k){return h.Oh(m(new n,function(a,b,d,e,f){return function(h){a:{var k;if(iw(f)){var p=f.Bk;
+if(p&&p.$classData&&p.$classData.n.AE&&"Boxed Error"===p.Nc){k=(new qA).wd(p.zf);break a}}k=f}var t=fja(),p=a.aw.Y.pe(),t=t.xp,x=t.bo.Zn(t.Jk),t=x.la,E=x.qa,x=e.xp,x=x.bo.Zn(x.Jk),S=x.qa,x=t-x.la|0,E=(-2147483648^x)>(-2147483648^t)?-1+(E-S|0)|0:E-S|0,t=new tA,x=(new Vb).ia(x,E);t.wa=p;t.Y=k;t.gv=x;qb(b,d,t);p=new uA;p.Y=t;p.td=h;return p}}(a,b,d,f,k)),e)}}(a,b,e,k,ma,Ia)),k)}}(a,b,d,e,f,h,k)),k).nl(m(new n,function(){return function(a){return a}}(a)),k)}
+iA.prototype.$classData=g({tba:0},!1,"utest.framework.TestTreeSeq",{tba:1,d:1});function vA(){}vA.prototype=new l;vA.prototype.constructor=vA;vA.prototype.b=function(){wA=this;var a=(new xA).qb(100),b=yA().Dt;jja(zA(),a.Ys,b);a=(new xA).qb(1);b=yA().Ft;jja(zA(),a.Ys,b);return this};vA.prototype.$classData=g({wba:0},!1,"utest.package$",{wba:1,d:1});var wA=void 0;function Va(){this.wi=null}Va.prototype=new l;Va.prototype.constructor=Va;Va.prototype.Bg=function(){return this.wi.name};
+function AA(a){return a.wi.getComponentType()}Va.prototype.k=function(){return(this.wi.isInterface?"interface ":this.wi.isPrimitive?"":"class ")+this.Bg()};function gl(a,b){return a.wi.isPrimitive||b.wi.isPrimitive?a===b||(a===pa(cb)?b===pa(bb):a===pa(db)?b===pa(bb)||b===pa(cb):a===pa(fb)?b===pa(bb)||b===pa(cb)||b===pa(db):a===pa(gb)&&(b===pa(bb)||b===pa(cb)||b===pa(db)||b===pa(fb))):fl(a,b.wi.getFakeInstance())}function fl(a,b){return!!a.wi.isInstance(b)}
+function Iq(a){a=(new Sb).c(a.wi.name);a=qi(a,46);a=Dm((new $m).Mh(a));a=(new Sb).c(a);a=qi(a,36);return Dm((new $m).Mh(a))}Va.prototype.$classData=g({aca:0},!1,"java.lang.Class",{aca:1,d:1});function BA(){}BA.prototype=new l;BA.prototype.constructor=BA;function kja(){}kja.prototype=BA.prototype;function CA(){this.gT=0;this.zW=DA();this.hW=DA()}CA.prototype=new l;CA.prototype.constructor=CA;CA.prototype.$classData=g({nca:0},!1,"java.lang.Long$StringRadixInfo",{nca:1,d:1});
+function EA(){this.oU=this.No=this.gW=null}EA.prototype=new l;EA.prototype.constructor=EA;EA.prototype.b=function(){FA=this;this.gW=(new GA).Hu(!1);this.No=(new GA).Hu(!0);this.oU=ba.performance?ba.performance.now?function(){HA();return+ba.performance.now()}:ba.performance.webkitNow?function(){HA();return+ba.performance.webkitNow()}:function(){HA();return+(new ba.Date).getTime()}:function(){HA();return+(new ba.Date).getTime()};return this};
+EA.prototype.$classData=g({xca:0},!1,"java.lang.System$",{xca:1,d:1});var FA=void 0;function HA(){FA||(FA=(new EA).b());return FA}function IA(){this.xS=null}IA.prototype=new l;IA.prototype.constructor=IA;IA.prototype.b=function(){JA=this;var a=new KA;a.wa="main";this.xS=a;return this};IA.prototype.$classData=g({zca:0},!1,"java.lang.Thread$",{zca:1,d:1});var JA=void 0;function LA(){this.uc=this.Qx=null}LA.prototype=new l;LA.prototype.constructor=LA;LA.prototype.b=function(){this.Qx=!1;return this};
+LA.prototype.X=function(){this.Qx||MA(this,null);return this.uc};function MA(a,b){a.uc=b;a.Qx=!0}LA.prototype.$classData=g({Aca:0},!1,"java.lang.ThreadLocal",{Aca:1,d:1});function NA(){}NA.prototype=new l;NA.prototype.constructor=NA;NA.prototype.b=function(){return this};function OA(a,b,d){return b.wi.newArrayOfThisClass([d])}NA.prototype.$classData=g({Cca:0},!1,"java.lang.reflect.Array$",{Cca:1,d:1});var PA=void 0;function QA(){PA||(PA=(new NA).b());return PA}function RA(){}RA.prototype=new l;
+RA.prototype.constructor=RA;function lja(a,b,d){if(b===d)return!0;if(null!==b&&null!==d&&b.m.length===d.m.length){a=lw(Je(),b);a=SA(a);a=Ve(new We,a,0,a.ra());for(var e=!0;e&&a.ta();)e=a.ma()|0,e=bn(cn(),b.m[e],d.m[e]);return e}return!1}RA.prototype.b=function(){return this};function mja(a){return m(new n,function(){return function(a){return Fa(a)}}(a))}
+function nja(a,b,d,e){d=d-b|0;if(2<=d){if(0<e.zk(a.m[b],a.m[1+b|0])){var f=a.m[b];a.m[b]=a.m[1+b|0];a.m[1+b|0]=f}for(f=2;f<d;){var h=a.m[b+f|0];if(0>e.zk(h,a.m[-1+(b+f|0)|0])){for(var k=b,p=-1+(b+f|0)|0;1<(p-k|0);){var t=(k+p|0)>>>1|0;0>e.zk(h,a.m[t])?p=t:k=t}k=k+(0>e.zk(h,a.m[k])?0:1)|0;for(p=b+f|0;p>k;)a.m[p]=a.m[-1+p|0],p=-1+p|0;a.m[k]=h}f=1+f|0}}}function oja(a,b){a=b.m.length;for(var d=0;d!==a;)b.m[d]=0,d=1+d|0}
+function pja(a,b,d){var e=new TA;e.lT=d;d=b.m.length;16<d?UA(a,b,la(Wa(Ua),[b.m.length]),0,d,e):nja(b,0,d,e)}function UA(a,b,d,e,f,h){var k=f-e|0;if(16<k){var p=e+(k/2|0)|0;UA(a,b,d,e,p,h);UA(a,b,d,p,f,h);for(var t=a=e,x=p;a<f;)t<p&&(x>=f||0>=h.zk(b.m[t],b.m[x]))?(d.m[a]=b.m[t],t=1+t|0):(d.m[a]=b.m[x],x=1+x|0),a=1+a|0;Oa(d,e,b,e,k)}else nja(b,e,f,h)}RA.prototype.$classData=g({Dca:0},!1,"java.util.Arrays$",{Dca:1,d:1});var VA=void 0;function WA(){VA||(VA=(new RA).b());return VA}
+function XA(){this.YU=this.XU=this.WU=this.ZU=null}XA.prototype=new l;XA.prototype.constructor=XA;XA.prototype.b=function(){YA=this;this.ZU=ZA(new $A,new ba.RegExp("^[^\\x25]+"));this.WU=ZA(new $A,new ba.RegExp("^\\x25{2}"));this.XU=ZA(new $A,new ba.RegExp("^\\x25n"));this.YU=ZA(new $A,new ba.RegExp("^\\x25(?:([1-9]\\d*)\\$)?([-#+ 0,\\(\x3c]*)(\\d*)(?:\\.(\\d+))?([A-Za-z])"));return this};XA.prototype.$classData=g({Hca:0},!1,"java.util.Formatter$",{Hca:1,d:1});var YA=void 0;
+function aB(){YA||(YA=(new XA).b());return YA}function $A(){this.Nq=null}$A.prototype=new l;$A.prototype.constructor=$A;function bB(a,b){return jd().Wc(a.Nq.exec(b))}function ZA(a,b){a.Nq=b;return a}$A.prototype.$classData=g({Ica:0},!1,"java.util.Formatter$RegExpExtractor",{Ica:1,d:1});function cB(){this.FV=null}cB.prototype=new l;cB.prototype.constructor=cB;function dB(a,b,d,e,f){e=eB(a,d,e,f);if(null===e)throw(new q).j(e);a=e.fb;d=e.Eb|0;e=e.tf|0;f=r();return(new ac).Bd(qja(a.Qc(b,f.s)),d,e)}
+function rja(a,b){a=eB(a,0,1,b).fb;if(y().o(a))return fB(gB(),"");r();b=(new J).j(a);return null!==b.U&&0===b.U.Mb(1)?b.U.W(0):hB(gB(),a)}
+function qja(a){a:for(;;){var b=a,d=iB(oc().nt,b);if(!d.z()){var e=d.X().ja(),d=d.X().na(),e=jB().ao(e);if(!e.z()&&(e=e.X(),d=iB(oc().nt,d),!d.z())){var f=d.X().ja(),d=d.X().na(),f=jB().ao(f);if(!f.z()&&(f=f.X(),!kB(lB(),e)&&"|"!==e&&!kB(lB(),f)&&"|"!==f)){a=fB(gB(),""+e+f);b=r();a=d.Qc(a,b.s);continue a}}}b=iB(oc().nt,b);if(!b.z()&&(e=b.X().ja(),b=b.X().na(),b=iB(oc().nt,b),!b.z()&&(d=b.X().ja(),b=b.X().na(),f=gB().ao(d),!f.z()&&(d=f.X().ja(),f=f.X().na(),mB(d)&&(d=sja(tja(),d),!d.z()&&(d=d.X(),
+nB(f)&&""===f.op)))))){a=gB().ao(e);if(!a.z()&&(f=a.X().ja(),a=a.X().na(),mB(f))){e=f;e=(new oB).Dd(e.Sa,""+e.Ma+d);a=pB(new qB,e,a);e=r();a=b.Qc(a,e.s);continue a}a=gB().ao(e);if(!a.z()&&(a=a.X().ja(),rB(a))){a=(new oB).Dd("",d);e=(new sB).G(I(r(),(new w).f([e])));a=pB(new qB,a,e);e=r();a=b.Qc(a,e.s);continue a}throw(new q).j(e);}return a}}
+function eB(a,b,d,e){if(b>=(e.length|0))return(new ac).Bd(I(r(),y()),b,d);switch(65535&(e.charCodeAt(b)|0)){case 40:if((e.length|0)>=(3+b|0)&&63===(65535&(e.charCodeAt(1+b|0)|0))&&(61===(65535&(e.charCodeAt(2+b|0)|0))||33===(65535&(e.charCodeAt(2+b|0)|0)))){var f=eB(a,3+b|0,d,e);if(null===f)throw(new q).j(f);var h=f.fb;d=f.tf|0;f=1+(f.Eb|0)|0;b=65535&(e.charCodeAt(2+b|0)|0);b=(new oB).Dd("(?"+(new Ke).Xa(b),")");h=tB(uB(),h);return dB(a,pB(new qB,b,h),f,d,e)}if((e.length|0)<(3+b|0)||63!==(65535&(e.charCodeAt(1+
+b|0)|0))||58!==(65535&(e.charCodeAt(2+b|0)|0))){f=eB(a,1+b|0,1+d|0,e);if(null===f)throw(new q).j(f);h=f.fb;b=f.tf|0;f=1+(f.Eb|0)|0;d=(new vB).qb(d);h=tB(uB(),h);return dB(a,uja(pB(new qB,d,h)),f,b,e)}if((e.length|0)>=(3+b|0)&&63===(65535&(e.charCodeAt(1+b|0)|0))&&58===(65535&(e.charCodeAt(2+b|0)|0))){h=eB(a,3+b|0,d,e);if(null===h)throw(new q).j(h);d=h.fb;b=h.tf|0;h=1+(h.Eb|0)|0;return dB(a,uja(hB(gB(),d)),h,b,e)}return wB(a,e,b,d);case 41:return(new ac).Bd(I(r(),y()),b,d);case 92:if((e.length|0)>=
+(2+b|0)){h=65535&(e.charCodeAt(1+b|0)|0);if(Fh(Gh(),h))a:for(h=1+b|0;;)if(h<(e.length|0)?(f=65535&(e.charCodeAt(h)|0),f=Fh(Gh(),f)):f=!1,f)h=1+h|0;else break a;else h=2+b|0;b=e.substring(b,h);return dB(a,fB(gB(),b),h,d,e)}return wB(a,e,b,d);case 43:case 42:case 63:return h=(e.length|0)>=(2+b|0)&&63===(65535&(e.charCodeAt(1+b|0)|0))?2+b|0:1+b|0,b=e.substring(b,h),b=(new oB).Dd("",b),f=(new xB).c(""),dB(a,pB(new qB,b,f),h,d,e);case 123:a:for(h=1+b|0;;){if((e.length|0)<=h)break a;if(125===(65535&(e.charCodeAt(h)|
+0))){h=1+h|0;break a}h=1+h|0}b=e.substring(b,h);b=(new oB).Dd("",b);f=(new xB).c("");return dB(a,pB(new qB,b,f),h,d,e);case 91:a:for(h=1+b|0;;){if((e.length|0)<=h)break a;if(92===(65535&(e.charCodeAt(h)|0))&&1<(e.length|0))h=2+h|0;else{if(93===(65535&(e.charCodeAt(h)|0))){h=1+h|0;break a}h=1+h|0}}b=e.substring(b,h);return dB(a,fB(gB(),b),h,d,e);default:return wB(a,e,b,d)}}
+function vja(a,b,d){var e=new cB,f=rja(e,d.Aw),h="g"+(0!==(2&d.yz)?"i":"")+(0!==(8&d.yz)?"m":"");yB(f,1);var k=zB(f);AB(f,(new Pu).Ds(k,m(new n,function(){return function(a){return a.my}}(e))));var p=BB(f),h=new ba.RegExp(p,h);h.lastIndex=b;p=h.exec(a);if(null===p)throw ug(vg(),(new Kr).c(""+u((new v).G((new w).f(["[Internal error] Executed '","' on "])),(new w).f([h]))+u((new v).G((new w).f(["'","' at position ",", got an error.\\n"])),(new w).f([a,b]))+u((new v).G((new w).f(["Original pattern '",
+"' did match however."])),(new w).f([d]))));CB(f,m(new n,function(a,b){return function(a){a=b[a|0];return void 0===a?null:a}}(e,p)));DB(f,b);e.FV=(new Pu).Ds(k,m(new n,function(){return function(a){return a.Ua}}(e)));return e}function wB(a,b,d,e){var f=65535&(b.charCodeAt(d)|0);return dB(a,fB(gB(),""+(new Ke).Xa(f)),1+d|0,e,b)}cB.prototype.$classData=g({Yca:0},!1,"java.util.regex.GroupStartMap",{Yca:1,d:1});function EB(){}EB.prototype=new l;EB.prototype.constructor=EB;EB.prototype.b=function(){return this};
+function kB(a,b){if(2<=(b.length|0)&&92===(65535&(b.charCodeAt(0)|0))){a=(new Sb).c(b);a=Ck(a);a=(new Sb).c(a);for(b=0;;){if(b<(a.R.length|0))var d=a.W(b),d=null===d?0:d.Y,d=!0===Fh(Gh(),d);else d=!1;if(d)b=1+b|0;else break}return b===(a.R.length|0)}return!1}EB.prototype.$classData=g({Zca:0},!1,"java.util.regex.GroupStartMap$",{Zca:1,d:1});var FB=void 0;function lB(){FB||(FB=(new EB).b());return FB}function GB(){}GB.prototype=new l;GB.prototype.constructor=GB;GB.prototype.b=function(){return this};
+function wja(a){a=a.op;if(kB(lB(),a)){a=a.substring(1);a=(new Sb).c(a);var b=ti();return(new J).j(vi(b,a.R,10))}return F()}GB.prototype.$classData=g({$ca:0},!1,"java.util.regex.GroupStartMap$BackReferenceLeaf$",{$ca:1,d:1});var xja=void 0;function HB(){}HB.prototype=new l;HB.prototype.constructor=HB;HB.prototype.b=function(){return this};
+function tB(a,b){var d=b.ob(),e=y(),f=y();a:for(;;){if(!y().o(d)){if(si(d)){var h=d.Cb,d=d.Ia,k=h.Lk,p=(new xB).c("|");if(null!==k&&k.o(p)){f=qy(f);e=Ng(new Og,f,e);f=y();continue a}f=Ng(new Og,h,f);continue a}throw(new q).j(d);}d=qy(f);e=qy(Ng(new Og,d,e));break}if(1===fn(e))return(new sB).G(b);a=function(){return function(a){return hB(gB(),a)}}(a);b=B().s;if(b===B().s)if(e===y())a=y();else{b=e.$();d=b=Ng(new Og,a(b),y());for(e=e.aa();e!==y();)f=e.$(),f=Ng(new Og,a(f),y()),d=d.Ia=f,e=e.aa();a=b}else{for(b=
+Mc(e,b);!e.z();)d=e.$(),b.Qa(a(d)),e=e.aa();a=b.Da()}return(new IB).G(a)}HB.prototype.$classData=g({ada:0},!1,"java.util.regex.GroupStartMap$CreateParentNode$",{ada:1,d:1});var JB=void 0;function uB(){JB||(JB=(new HB).b());return JB}function qB(){this.Lk=this.In=null;this.my=0;this.Cq=null;this.Ua=0}qB.prototype=new l;qB.prototype.constructor=qB;function yja(a,b){var d=a.In;b=mB(d)&&zja(Aja(),d)?b:null===a.Cq?-1:b-(a.Cq.length|0)|0;a.Ua=b;Bja(a);return a.Ua}
+function BB(a){var b=a.In;if(rB(b))b="(";else{if(!mB(b))throw(new q).j(b);b="((?:"+b.Sa}var d=a.Lk;if(nB(d))d=d.op;else if(KB(d))var d=d.td,e=m(new n,function(){return function(a){return BB(a)}}(a)),f=r(),d="(?:"+d.xa(e,f.s).Mf()+")";else{if(!LB(d))throw(new q).j(d);d=d.td;e=m(new n,function(){return function(a){return BB(a)}}(a));f=r();d="(?:"+d.xa(e,f.s).zb("|")+")"}a=a.In;if(rB(a))a=")";else{if(!mB(a))throw(new q).j(a);a=")"+a.Ma+")"}return b+d+a}
+qB.prototype.k=function(){return"Node("+this.In+", "+this.Lk+")"};function AB(a,b){var d=!1,e=null,f=a.Lk;a:{if(nB(f)&&(d=!0,e=f,xja||(xja=(new GB).b()),e=wja(e),!e.z())){d=e.X()|0;b=b.$b(d);a.Lk=(new xB).c("\\"+(b.z()?0:b.X()));break a}if(!d)if(KB(f))f.td.ua(m(new n,function(a,b){return function(a){return AB(a,b)}}(a,b)));else if(LB(f))f.td.ua(m(new n,function(a,b){return function(a){return AB(a,b)}}(a,b)));else throw(new q).j(f);}return a}
+qB.prototype.Uj=function(){return this.Ua+(null===this.Cq?0:this.Cq.length|0)|0};function CB(a,b){a.Cq=b.y(a.my);var d=a.Lk;if(!nB(d))if(KB(d))d.td.ua(m(new n,function(a,b){return function(a){CB(a,b)}}(a,b)));else if(LB(d))d.td.ua(m(new n,function(a,b){return function(a){CB(a,b)}}(a,b)));else throw(new q).j(d);}
+function zB(a){var b=a.In;if(rB(b)){for(var b=[(new A).e(b.Iq,a)],d=dc(new ec,gc()),e=0,f=b.length|0;e<f;)hc(d,b[e]),e=1+e|0;b=d.Oa}else{if(!mB(b))throw(new q).j(b);b=Vg(Je().$h,y())}d=a.Lk;if(nB(d))a=Vg(Je().$h,y());else{if(!KB(d)&&!LB(d))throw(new q).j(d);a=d.td.Gb(Vg(Je().$h,y()),sb(new tb,function(){return function(a,b){return a.sk(zB(b))}}(a)))}return b.sk(a)}
+function Bja(a){var b=a.Lk;if(!nB(b))if(KB(b))b.td.Gb(a.Ua,sb(new tb,function(){return function(a,b){return DB(b,a|0)}}(a)))|0;else if(LB(b))b.td.ua(m(new n,function(a){return function(b){return DB(b,a.Ua)}}(a)));else throw(new q).j(b);}function pB(a,b,d){a.In=b;a.Lk=d;a.my=0;a.Cq="";a.Ua=0;return a}
+function yB(a,b){a.my=b;var d=a.Lk;if(nB(d))return 1+b|0;if(KB(d))return d.td.Gb(1+b|0,sb(new tb,function(){return function(a,b){return yB(b,a|0)}}(a)))|0;if(!LB(d))throw(new q).j(d);return d.td.Gb(1+b|0,sb(new tb,function(){return function(a,b){return yB(b,a|0)}}(a)))|0}
+function Cja(a){var b=a.Lk;if(!nB(b))if(KB(b))b.td.Ai(a.Uj(),sb(new tb,function(){return function(a,b){return yja(a,b|0)}}(a)))|0;else if(LB(b))b.td.ua(m(new n,function(a){return function(b){return yja(b,a.Uj())}}(a)));else throw(new q).j(b);}
+function uja(a){var b=gB().ao(a);if(!b.z()){var d=b.X().ja(),b=b.X().na();if(rB(d)&&(d=d.Iq,KB(b)&&(b=b.td,r(),b=(new J).j(b),null!==b.U&&0===b.U.Mb(1)&&(b=b.U.W(0),b=jB().ao(b),!b.z()))))return a=b.X(),d=(new vB).qb(d),a=(new xB).c(a),pB(new qB,d,a)}return a}function DB(a,b){a.Ua=null===a.Cq?-1:b;var d=a.In;mB(d)&&!sja(tja(),d).z()?Cja(a):Bja(a);d=a.In;return mB(d)&&zja(Aja(),d)?b:a.Uj()}qB.prototype.$classData=g({bda:0},!1,"java.util.regex.GroupStartMap$Node",{bda:1,d:1});function MB(){}
+MB.prototype=new l;MB.prototype.constructor=MB;MB.prototype.b=function(){return this};function fB(a,b){return pB(new qB,(new oB).Dd("",""),(new xB).c(b))}MB.prototype.ao=function(a){return(new J).j((new A).e(a.In,a.Lk))};function hB(a,b){return pB(new qB,(new oB).Dd("",""),tB(uB(),b))}MB.prototype.$classData=g({cda:0},!1,"java.util.regex.GroupStartMap$Node$",{cda:1,d:1});var NB=void 0;function gB(){NB||(NB=(new MB).b());return NB}function OB(){}OB.prototype=new l;OB.prototype.constructor=OB;
+OB.prototype.b=function(){return this};function zja(a,b){return("(?!"===b.Sa||"(?\x3d"===b.Sa)&&")"===b.Ma}OB.prototype.$classData=g({fda:0},!1,"java.util.regex.GroupStartMap$OriginallyWrapped$Absolute$",{fda:1,d:1});var PB=void 0;function Aja(){PB||(PB=(new OB).b());return PB}function QB(){}QB.prototype=new l;QB.prototype.constructor=QB;QB.prototype.b=function(){return this};
+function sja(a,b){if(a=""===b.Sa)Dja||(Dja=(new RB).b()),a=b.Ma,a="?"===a||"??"===a||"*"===a||"+"===a||"*?"===a||"+?"===a||0<=(a.length|0)&&"{"===a.substring(0,1);return a?(new J).j(b.Ma):F()}QB.prototype.$classData=g({gda:0},!1,"java.util.regex.GroupStartMap$OriginallyWrapped$Repeater$",{gda:1,d:1});var SB=void 0;function tja(){SB||(SB=(new QB).b());return SB}function TB(){}TB.prototype=new l;TB.prototype.constructor=TB;TB.prototype.b=function(){return this};
+TB.prototype.ao=function(a){var b=gB().ao(a);if(!b.z()&&(a=b.X().ja(),b=b.X().na(),mB(a))){var d=a.Ma;if(""===a.Sa&&""===d&&nB(b))return(new J).j(b.op)}return F()};TB.prototype.$classData=g({hda:0},!1,"java.util.regex.GroupStartMap$UnwrappedRegexLeaf$",{hda:1,d:1});var UB=void 0;function jB(){UB||(UB=(new TB).b());return UB}function VB(){}VB.prototype=new l;VB.prototype.constructor=VB;function Eja(){}Eja.prototype=VB.prototype;function WB(){}WB.prototype=new l;WB.prototype.constructor=WB;
+function Fja(){}Fja.prototype=WB.prototype;function XB(){}XB.prototype=new l;XB.prototype.constructor=XB;function Gja(){}Gja.prototype=XB.prototype;function Et(a,b){null===b?a=null:0===b.m.length?(YB||(YB=(new ZB).b()),a=YB.$G):a=(new ri).Mh(b);return a}function oca(a){return null!==a?(new $B).Xo(a):null}function Ro(){this.ga=this.Bl=null}Ro.prototype=new l;Ro.prototype.constructor=Ro;function bea(a,b,d){a.Bl=d;if(null===b)throw ug(vg(),null);a.ga=b;return a}
+Ro.prototype.$classData=g({sda:0},!1,"scala.Option$WithFilter",{sda:1,d:1});function aC(a,b){return m(new n,function(a,b){return function(f){f=a.eb(f,ld().Tq);return!bC(ld(),f)&&(b.y(f),!0)}}(a,b))}function cC(a,b,d){return a.Ya(b)?a.y(b):d.y(b)}function dC(){this.fD=this.nX=this.Tq=null}dC.prototype=new l;dC.prototype.constructor=dC;dC.prototype.b=function(){eC=this;this.Tq=(new fC).b();this.nX=m(new n,function(){return function(){return!1}}(this));this.fD=(new gC).b();return this};
+function bC(a,b){return a.Tq===b}dC.prototype.$classData=g({tda:0},!1,"scala.PartialFunction$",{tda:1,d:1});var eC=void 0;function ld(){eC||(eC=(new dC).b());return eC}function hC(){}hC.prototype=new l;hC.prototype.constructor=hC;hC.prototype.b=function(){return this};hC.prototype.$classData=g({Eda:0},!1,"scala.Predef$DummyImplicit",{Eda:1,d:1});function iC(){}iC.prototype=new l;iC.prototype.constructor=iC;iC.prototype.b=function(){return this};function Hja(a,b,d){return""+b+d}
+iC.prototype.$classData=g({Fda:0},!1,"scala.Predef$any2stringadd$",{Fda:1,d:1});var jC=void 0;function Ija(){jC||(jC=(new iC).b());return jC}function kC(){this.Zt=null}kC.prototype=new l;kC.prototype.constructor=kC;kC.prototype.b=function(){lC=this;this.Zt=(new LA).b();return this};kC.prototype.$classData=g({Mda:0},!1,"scala.concurrent.BlockContext$",{Mda:1,d:1});var lC=void 0;function Jja(){lC||(lC=(new kC).b());return lC}function mC(){this.qU=null;this.ya=!1}mC.prototype=new l;
+mC.prototype.constructor=mC;mC.prototype.b=function(){return this};function nC(){var a;oC||(oC=(new mC).b());a=oC;a.ya||a.ya||(pC||(pC=(new qC).b()),a.qU=pC.yW,a.ya=!0);return a.qU}mC.prototype.$classData=g({Oda:0},!1,"scala.concurrent.ExecutionContext$Implicits$",{Oda:1,d:1});var oC=void 0;function Kja(a,b,d){return Lja(a,m(new n,function(a,b){return function(d){if(hw(d))return b.y(d.U);if(iw(d))return a;throw(new q).j(d);}}(a,b)),d)}
+function Mja(a,b,d){return Nja(a,m(new n,function(a,b){return function(a){return a.DV(b)}}(a,b)),d)}function Oja(a,b,d,e){return a.nl(m(new n,function(a,b,d,e){return function(t){return b.Oh(m(new n,function(a,b,d){return function(a){return qb(b,d,a)}}(a,d,t)),e)}}(a,b,d,e)),fe())}function Pja(a,b,d){return a.Oh(m(new n,function(a,b){return function(a){if(b.y(a))return a;throw(new Du).c("Future.filter predicate is not satisfied");}}(a,b)),d)}
+function Qja(a,b,d){return Nja(a,m(new n,function(a,b){return function(a){return a.AW(b)}}(a,b)),d)}function rC(){this.dZ=null}rC.prototype=new l;rC.prototype.constructor=rC;
+rC.prototype.b=function(){sC=this;for(var a=[(new A).e(pa(Ya),pa(Aa)),(new A).e(pa(bb),pa(sa)),(new A).e(pa(Za),pa(Rja)),(new A).e(pa(cb),pa(ua)),(new A).e(pa(db),pa(wa)),(new A).e(pa(eb),pa(Da)),(new A).e(pa(fb),pa(ya)),(new A).e(pa(gb),pa(za)),(new A).e(pa(Xa),pa(Ba))],b=dc(new ec,gc()),d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.dZ=nA(0,void 0);return this};
+function tC(a,b,d,e){return b.Gb(nA(0,d.cf(b)),sb(new tb,function(a,b){return function(d,e){return d.uG(e,sb(new tb,function(){return function(a,b){return a.Qa(b)}}(a)),b)}}(a,e))).Oh(m(new n,function(){return function(a){return a.Da()}}(a)),fe())}function nA(a,b){oA||(oA=(new pA).b());a=(new rA).j(b);return gja(hja(),a)}function lA(a,b,d){return a.dZ.Oh(m(new n,function(a,b){return function(){return ne(b)}}(a,b)),d)}rC.prototype.$classData=g({Pda:0},!1,"scala.concurrent.Future$",{Pda:1,d:1});
+var sC=void 0;function mA(){sC||(sC=(new rC).b());return sC}function pA(){}pA.prototype=new l;pA.prototype.constructor=pA;pA.prototype.b=function(){return this};pA.prototype.$classData=g({Sda:0},!1,"scala.concurrent.Promise$",{Sda:1,d:1});var oA=void 0;function uC(){}uC.prototype=new l;uC.prototype.constructor=uC;uC.prototype.b=function(){return this};function jja(a,b,d){vC();a=b>>31;wC(new xC,(new Vb).ia(b,a),d)}
+uC.prototype.$classData=g({Yda:0},!1,"scala.concurrent.duration.package$DurationInt$",{Yda:1,d:1});var yC=void 0;function zA(){yC||(yC=(new uC).b());return yC}function zC(){}zC.prototype=new l;zC.prototype.constructor=zC;zC.prototype.b=function(){return this};
+function Sja(a){return a&&a.$classData&&a.$classData.n.VF?(new rA).j(a.pG):AC(a)?(new qA).wd((new BC).gc("Boxed ControlThrowable",a)):CC(a)?(new qA).wd((new BC).gc("Boxed InterruptedException",a)):a&&a.$classData&&a.$classData.n.eca?(new qA).wd((new BC).gc("Boxed Error",a)):(new qA).wd(a)}zC.prototype.$classData=g({$da:0},!1,"scala.concurrent.impl.Promise$",{$da:1,d:1});var DC=void 0;function EC(){}EC.prototype=new l;EC.prototype.constructor=EC;EC.prototype.b=function(){return this};
+function gja(a,b){DC||(DC=(new zC).b());a=iw(b)?Sja(b.Bk):b;if(hw(a))return b=new FC,b.Hi=a,b;if(iw(a))return b=new GC,b.Hi=a,b;throw(new q).j(a);}EC.prototype.$classData=g({aea:0},!1,"scala.concurrent.impl.Promise$KeptPromise$",{aea:1,d:1});var HC=void 0;function hja(){HC||(HC=(new EC).b());return HC}function IC(){}IC.prototype=new l;IC.prototype.constructor=IC;function Tja(){}Tja.prototype=IC.prototype;function JC(){}JC.prototype=new l;JC.prototype.constructor=JC;JC.prototype.b=function(){return this};
+function xca(a,b){return Uja(Vja(b),K(function(a,b){return function(){return xca(wca(),b)}}(a,b)))}JC.prototype.$classData=g({eea:0},!1,"scala.io.Source$",{eea:1,d:1});var KC=void 0;function wca(){KC||(KC=(new JC).b());return KC}function LC(){this.RY=this.Up=this.yx=this.wc=this.OC=0;this.ga=null}LC.prototype=new l;LC.prototype.constructor=LC;function Wja(){}Wja.prototype=LC.prototype;
+LC.prototype.ny=function(){var a=this.ga.Bf.ma();this.OC=null===a?0:a.Y;var a=this.yx,b=this.Up;this.wc=1048575<=a?2147481600:a<<11|(2047<b?2047:b);switch(this.OC){case 10:this.Up=1;this.yx=1+this.yx|0;break;case 9:this.Up=this.Up+this.RY|0;break;default:this.Up=1+this.Up|0}return this.OC};LC.prototype.Rba=function(a){if(null===a)throw ug(vg(),null);this.ga=a;this.wc=0;this.Up=this.yx=1;this.RY=4;return this};function MC(){}MC.prototype=new l;MC.prototype.constructor=MC;MC.prototype.b=function(){return this};
+MC.prototype.$classData=g({qea:0},!1,"scala.math.Ordered$",{qea:1,d:1});var Xja=void 0;function NC(){this.ai=this.zS=this.nt=this.CG=null;this.ya=0}NC.prototype=new l;NC.prototype.constructor=NC;
+NC.prototype.b=function(){OC=this;(new PC).b();QC||(QC=(new RC).b());Lc();r();ek();SC();B();y();Yja||(Yja=(new TC).b());UC||(UC=(new VC).b());this.nt=UC;Zja||(Zja=(new WC).b());this.zS=xg();$ja||($ja=(new XC).b());this.ai=dk();aka||(aka=(new YC).b());Ln();bka||(bka=(new ZC).b());cka||(cka=(new $C).b());dka||(dka=(new aD).b());eka||(eka=(new bD).b());Xja||(Xja=(new MC).b());fka||(fka=(new cD).b());gka||(gka=(new dD).b());hka||(hka=(new eD).b());ika||(ika=(new fD).b());return this};
+NC.prototype.$classData=g({vea:0},!1,"scala.package$",{vea:1,d:1});var OC=void 0;function oc(){OC||(OC=(new NC).b());return OC}function gD(){}gD.prototype=new l;gD.prototype.constructor=gD;gD.prototype.b=function(){hD=this;iD();jD();kD();lD();mD();Gi();nD();oD();pD();jka||(jka=(new qD).b());rD();kka||(kka=(new sD).b());lka();mka();return this};gD.prototype.$classData=g({xea:0},!1,"scala.reflect.ClassManifestFactory$",{xea:1,d:1});var hD=void 0;function tD(){}tD.prototype=new l;
+tD.prototype.constructor=tD;tD.prototype.b=function(){return this};tD.prototype.$classData=g({Aea:0},!1,"scala.reflect.ManifestFactory$",{Aea:1,d:1});var nka=void 0;function uD(){}uD.prototype=new l;uD.prototype.constructor=uD;uD.prototype.b=function(){vD=this;hD||(hD=(new gD).b());nka||(nka=(new tD).b());return this};uD.prototype.$classData=g({Qea:0},!1,"scala.reflect.package$",{Qea:1,d:1});var vD=void 0;function wD(){vD||(vD=(new uD).b())}function xD(){}xD.prototype=new l;
+xD.prototype.constructor=xD;xD.prototype.b=function(){return this};function Bn(a,b){throw ug(vg(),(new Fg).c(b));}xD.prototype.$classData=g({Rea:0},!1,"scala.sys.package$",{Rea:1,d:1});var yD=void 0;function Cn(){yD||(yD=(new xD).b());return yD}function zD(){this.uc=null}zD.prototype=new l;zD.prototype.constructor=zD;zD.prototype.k=function(){return"DynamicVariable("+this.uc+")"};zD.prototype.j=function(a){this.uc=a;return this};
+zD.prototype.$classData=g({Sea:0},!1,"scala.util.DynamicVariable",{Sea:1,d:1});function AD(){}AD.prototype=new l;AD.prototype.constructor=AD;AD.prototype.b=function(){(new BD).b();return this};AD.prototype.$classData=g({Yea:0},!1,"scala.util.control.Breaks",{Yea:1,d:1});function AC(a){return!!(a&&a.$classData&&a.$classData.n.fX)}function CD(){this.RV=null}CD.prototype=new l;CD.prototype.constructor=CD;
+CD.prototype.b=function(){DD=this;this.RV=oka(m(new n,function(){return function(){return!1}}(this)),m(new n,function(){return function(a){throw ug(vg(),a);}}(this)));var a=ED(new FD,this.RV,F(),pka());eba(a,"\x3cnothing\x3e");return this};function qka(a,b,d){return d.oe(m(new n,function(a,b){return function(a){return gl(a,oa(b))}}(a,b)))}
+function rka(){var a=GD(),b=(new w).f([pa(ska)]),d=ED(new FD,(new HD).G(b),F(),pka()),a=m(new n,function(){return function(a){return a.Bg()}}(a)),e=r(),b=b.xa(a,e.s).zb(", ");return eba(d,b)}function oka(a,b){var d=(new xn).Dg(pa(zq)),e=new ID;e.QU=a;e.ej=b;e.mu=d;return e}CD.prototype.$classData=g({Zea:0},!1,"scala.util.control.Exception$",{Zea:1,d:1});var DD=void 0;function GD(){DD||(DD=(new CD).b());return DD}function JD(){}JD.prototype=new l;JD.prototype.constructor=JD;JD.prototype.b=function(){return this};
+function pka(){KD||(KD=(new JD).b());return m(new n,function(){return function(a){GD();return AC(a)||CC(a)}}(KD))}JD.prototype.$classData=g({cfa:0},!1,"scala.util.control.Exception$Catch$",{cfa:1,d:1});var KD=void 0;function LD(){}LD.prototype=new l;LD.prototype.constructor=LD;LD.prototype.b=function(){return this};function nw(a,b){return b&&b.$classData&&b.$classData.n.bpa||b&&b.$classData&&b.$classData.n.apa||CC(b)||b&&b.$classData&&b.$classData.n.$oa||AC(b)?F():(new J).j(b)}
+LD.prototype.$classData=g({gfa:0},!1,"scala.util.control.NonFatal$",{gfa:1,d:1});var MD=void 0;function ow(){MD||(MD=(new LD).b());return MD}function ND(){}ND.prototype=new l;ND.prototype.constructor=ND;function tka(){}tka.prototype=ND.prototype;ND.prototype.Ps=function(a,b){b=da(-862048943,b);b=da(461845907,b<<15|b>>>17|0);return a^b};ND.prototype.da=function(a,b){a=this.Ps(a,b);return-430675100+da(5,a<<13|a>>>19|0)|0};
+function R(a,b){var d=b.v();if(0===d)return a=b.u(),Ga(Ha(),a);for(var e=-889275714,f=0;f<d;)e=a.da(e,OD(V(),b.w(f))),f=1+f|0;return a.pb(e,d)}function PD(a,b,d){var e=(new QD).qb(0),f=(new QD).qb(0),h=(new QD).qb(0),k=(new QD).qb(1);b.ua(m(new n,function(a,b,d,e,f){return function(a){a=OD(V(),a);b.Ba=b.Ba+a|0;d.Ba^=a;0!==a&&(f.Ba=da(f.Ba,a));e.Ba=1+e.Ba|0}}(a,e,f,h,k)));b=a.da(d,e.Ba);b=a.da(b,f.Ba);b=a.Ps(b,k.Ba);return a.pb(b,h.Ba)}
+ND.prototype.pb=function(a,b){a^=b;a=da(-2048144789,a^(a>>>16|0));a=da(-1028477387,a^(a>>>13|0));return a^(a>>>16|0)};function uka(a,b,d){var e=(new QD).qb(0);d=(new QD).qb(d);b.ua(m(new n,function(a,b,d){return function(e){d.Ba=a.da(d.Ba,OD(V(),e));b.Ba=1+b.Ba|0}}(a,e,d)));return a.pb(d.Ba,e.Ba)}function RD(){}RD.prototype=new l;RD.prototype.constructor=RD;RD.prototype.b=function(){return this};
+function vka(a,b){a=da(-1640532531,b);ti();return da(-1640532531,a<<24|16711680&a<<8|65280&(a>>>8|0)|a>>>24|0)}RD.prototype.$classData=g({ifa:0},!1,"scala.util.hashing.package$",{ifa:1,d:1});var SD=void 0;function wka(){SD||(SD=(new RD).b());return SD}function TD(){}TD.prototype=new l;TD.prototype.constructor=TD;function jea(a,b){return qe(b)?(new J).j((new A).e(b.Kk,b.fe)):pe(b)?(new J).j((new A).e(b.Kk,b.fe)):F()}TD.prototype.bp=function(){return this};
+TD.prototype.$classData=g({sfa:0},!1,"scala.util.parsing.combinator.Parsers$NoSuccess$",{sfa:1,d:1});function UD(){this.ga=null}UD.prototype=new l;UD.prototype.constructor=UD;function VD(){}VD.prototype=UD.prototype;UD.prototype.bp=function(a){if(null===a)throw ug(vg(),null);this.ga=a;return this};function WD(){}WD.prototype=new l;WD.prototype.constructor=WD;function xka(){}xka.prototype=WD.prototype;function WC(){}WC.prototype=new l;WC.prototype.constructor=WC;WC.prototype.b=function(){return this};
+WC.prototype.$classData=g({tfa:0},!1,"scala.collection.$colon$plus$",{tfa:1,d:1});var Zja=void 0;function VC(){}VC.prototype=new l;VC.prototype.constructor=VC;VC.prototype.b=function(){return this};function iB(a,b){if(b.z())return F();a=b.$();b=b.aa();return(new J).j((new A).e(a,b))}VC.prototype.$classData=g({ufa:0},!1,"scala.collection.$plus$colon$",{ufa:1,d:1});var UC=void 0;function XD(){this.Xd=null}XD.prototype=new l;XD.prototype.constructor=XD;
+XD.prototype.b=function(){YD=this;this.Xd=(new ZD).b();return this};XD.prototype.$classData=g({Bfa:0},!1,"scala.collection.Iterator$",{Bfa:1,d:1});var YD=void 0;function SC(){YD||(YD=(new XD).b());return YD}function $D(a,b,d){a.Ae(b,d,aE(W(),b)-d|0)}function bE(a,b){b=b.hh();b.Zb(a.nb());return b.Da()}function cE(a,b){var d=(new QD).qb(0);a.ua(m(new n,function(a,b,d){return function(a){b.y(a)&&(d.Ba=1+d.Ba|0)}}(a,b,d)));return d.Ba}function cc(a,b,d,e){return a.Sf((new pm).b(),b,d,e).rc.Xb}
+function nl(a,b,d){b=(new Al).j(b);a.ua(m(new n,function(a,b,d){return function(a){d.Ba=qb(b,d.Ba,a)}}(a,d,b)));return b.Ba}function yka(a,b,d){a=zka(a);var e=b;for(b=a;!b.z();)a=e,e=b.$(),e=qb(d,e,a),b=b.aa();return e}function as(a){var b=(new QD).qb(0);a.ua(m(new n,function(a,b){return function(){b.Ba=1+b.Ba|0}}(a,b)));return b.Ba}
+function wg(a,b){var d=(new ce).b();try{if(a&&a.$classData&&a.$classData.n.ad)var e=a;else{if(!(a&&a.$classData&&a.$classData.n.Kb))return a.ua(b.Am(m(new n,function(a,b){return function(a){throw(new dE).e(b,(new J).j(a));}}(a,d)))),F();e=a.Hg()}for(var f=new eE;e.ta();){var h=b.eb(e.ma(),f);if(h!==f)return(new J).j(h)}return F()}catch(k){if(k&&k.$classData&&k.$classData.n.VF&&k.rV===d)return k.pG;throw k;}}
+function fE(a,b,d,e,f){var h=(new gE).od(!0);Ur(b,d);a.ua(m(new n,function(a,b,d,e){return function(a){if(e.Ba)Wr(b,a),e.Ba=!1;else return Ur(b,d),Wr(b,a)}}(a,b,e,h)));Ur(b,f);return b}function hE(a,b){return a.Gb(0,sb(new tb,function(){return function(a,b){return(a|0)+(b|0)|0}}(a,b)))}function iE(a,b){return a.Eg()?(b=b.Qg(a.Ha()),a.yg(b,0),b):a.Td().ve(b)}function kd(a){return!a.z()}
+function zka(a){var b=y(),b=(new Al).j(b);a.ua(m(new n,function(a,b){return function(a){b.Ba=Ng(new Og,a,b.Ba)}}(a,b)));return b.Ba}function jE(a,b){if(a.z())throw(new il).c("empty.reduceLeft");var d=(new gE).od(!0),e=(new Al).j(0);a.ua(m(new n,function(a,b,d,e){return function(a){d.Ba?(e.Ba=a,d.Ba=!1):e.Ba=qb(b,e.Ba,a)}}(a,b,d,e)));return e.Ba}function kE(){}kE.prototype=new l;kE.prototype.constructor=kE;function Aka(){}Aka.prototype=kE.prototype;function Vg(a,b){return a.db().Zb(b).Da()}
+kE.prototype.db=function(){return dc(new ec,this.js())};function lE(){}lE.prototype=new l;lE.prototype.constructor=lE;function Bka(){}Bka.prototype=lE.prototype;function mE(){}mE.prototype=new l;mE.prototype.constructor=mE;function nE(){}nE.prototype=mE.prototype;function I(a,b){if(b.z())return a.Mo();a=a.db();a.Zb(b);return a.Da()}mE.prototype.Mo=function(){return this.db().Da()};
+function Cka(a,b){var d=a.nd().db();a.nb().ua(m(new n,function(a,b,d){return function(a){return d.Zb(b.y(a).nb())}}(a,b,d)));return d.Da()}function Dka(a,b){a:for(;;){if(kd(b)){a.md(b.$());b=b.aa();continue a}break}}function oE(a,b){b&&b.$classData&&b.$classData.n.qp?Dka(a,b):b.ua(m(new n,function(a){return function(b){return a.md(b)}}(a)));return a}function pE(){}pE.prototype=new l;pE.prototype.constructor=pE;function qE(){}qE.prototype=pE.prototype;function XC(){}XC.prototype=new l;
+XC.prototype.constructor=XC;XC.prototype.b=function(){return this};XC.prototype.$classData=g({Oga:0},!1,"scala.collection.immutable.Stream$$hash$colon$colon$",{Oga:1,d:1});var $ja=void 0;function rE(){this.fG=null}rE.prototype=new l;rE.prototype.constructor=rE;rE.prototype.Ac=function(a){this.fG=a;return this};function Eka(a,b){return sE(new tE,b,a.fG)}function Fka(a,b){return uE(b,a.fG)}rE.prototype.$classData=g({Pga:0},!1,"scala.collection.immutable.Stream$ConsWrapper",{Pga:1,d:1});
+function vE(){this.WF=this.uc=null;this.ya=!1;this.ga=null}vE.prototype=new l;vE.prototype.constructor=vE;function wE(a,b,d){a.WF=d;if(null===b)throw ug(vg(),null);a.ga=b;return a}function xE(a){a.ya||(a.ya||(a.uc=ne(a.WF),a.ya=!0),a.WF=null);return a.uc}vE.prototype.$classData=g({Uga:0},!1,"scala.collection.immutable.StreamIterator$LazyCell",{Uga:1,d:1});function yE(){}yE.prototype=new l;yE.prototype.constructor=yE;yE.prototype.b=function(){return this};
+function He(a,b,d,e){a=0>d?0:d;return e<=a||a>=(b.length|0)?"":b.substring(a,e>(b.length|0)?b.length|0:e)}yE.prototype.$classData=g({Wga:0},!1,"scala.collection.immutable.StringOps$",{Wga:1,d:1});var zE=void 0;function Ie(){zE||(zE=(new yE).b());return zE}function AE(){}AE.prototype=new l;AE.prototype.constructor=AE;AE.prototype.b=function(){return this};AE.prototype.db=function(){var a=(new pm).b();return BE(new CE,a,m(new n,function(){return function(a){return(new pj).c(a)}}(this)))};
+AE.prototype.$classData=g({dha:0},!1,"scala.collection.immutable.WrappedString$",{dha:1,d:1});var DE=void 0;function EE(){}EE.prototype=new l;EE.prototype.constructor=EE;EE.prototype.b=function(){return this};EE.prototype.$classData=g({hha:0},!1,"scala.collection.mutable.ArrayOps$ofBoolean$",{hha:1,d:1});var Gka=void 0;function FE(){}FE.prototype=new l;FE.prototype.constructor=FE;FE.prototype.b=function(){return this};
+FE.prototype.$classData=g({iha:0},!1,"scala.collection.mutable.ArrayOps$ofByte$",{iha:1,d:1});var Hka=void 0;function GE(){}GE.prototype=new l;GE.prototype.constructor=GE;GE.prototype.b=function(){return this};GE.prototype.$classData=g({jha:0},!1,"scala.collection.mutable.ArrayOps$ofChar$",{jha:1,d:1});var Ika=void 0;function HE(){}HE.prototype=new l;HE.prototype.constructor=HE;HE.prototype.b=function(){return this};
+HE.prototype.$classData=g({kha:0},!1,"scala.collection.mutable.ArrayOps$ofDouble$",{kha:1,d:1});var Jka=void 0;function IE(){}IE.prototype=new l;IE.prototype.constructor=IE;IE.prototype.b=function(){return this};IE.prototype.$classData=g({lha:0},!1,"scala.collection.mutable.ArrayOps$ofFloat$",{lha:1,d:1});var Kka=void 0;function JE(){}JE.prototype=new l;JE.prototype.constructor=JE;JE.prototype.b=function(){return this};
+JE.prototype.$classData=g({mha:0},!1,"scala.collection.mutable.ArrayOps$ofInt$",{mha:1,d:1});var Lka=void 0;function KE(){}KE.prototype=new l;KE.prototype.constructor=KE;KE.prototype.b=function(){return this};KE.prototype.$classData=g({nha:0},!1,"scala.collection.mutable.ArrayOps$ofLong$",{nha:1,d:1});var Mka=void 0;function LE(){}LE.prototype=new l;LE.prototype.constructor=LE;LE.prototype.b=function(){return this};
+LE.prototype.$classData=g({oha:0},!1,"scala.collection.mutable.ArrayOps$ofRef$",{oha:1,d:1});var Nka=void 0;function ME(){}ME.prototype=new l;ME.prototype.constructor=ME;ME.prototype.b=function(){return this};ME.prototype.$classData=g({pha:0},!1,"scala.collection.mutable.ArrayOps$ofShort$",{pha:1,d:1});var Oka=void 0;function NE(){}NE.prototype=new l;NE.prototype.constructor=NE;NE.prototype.b=function(){return this};
+NE.prototype.$classData=g({qha:0},!1,"scala.collection.mutable.ArrayOps$ofUnit$",{qha:1,d:1});var Pka=void 0;function Qka(a){return OE(ti(),-1+a.Wb.m.length|0)}
+function Rka(a,b){for(var d=Fa(b),d=PE(a,d),e=a.Wb.m[d];null!==e;){if(bn(cn(),e,b))return;d=(1+d|0)%a.Wb.m.length|0;e=a.Wb.m[d]}a.Wb.m[d]=b;a.Gf=1+a.Gf|0;null!==a.Qf&&(b=d>>5,d=a.Qf,d.m[b]=1+d.m[b]|0);if(a.Gf>=a.Uk)for(b=a.Wb,a.Wb=la(Wa(Ua),[a.Wb.m.length<<1]),a.Gf=0,null!==a.Qf&&(d=1+(a.Wb.m.length>>5)|0,a.Qf.m.length!==d?a.Qf=la(Wa(db),[d]):oja(WA(),a.Qf)),a.Il=Qka(a),a.Uk=Ska().hv(a.Sl,a.Wb.m.length),d=0;d<b.m.length;)e=b.m[d],null!==e&&Rka(a,e),d=1+d|0}
+function PE(a,b){var d=a.Il;b=vka(wka(),b);a=-1+a.Wb.m.length|0;return((b>>>d|0|b<<(-d|0))>>>(32-OE(ti(),a)|0)|0)&a}function Tka(a,b){b=Re(b);for(var d=Fa(b),d=PE(a,d),e=a.Wb.m[d];null!==e&&!bn(cn(),e,b);)d=(1+d|0)%a.Wb.m.length|0,e=a.Wb.m[d];return e}function QE(){}QE.prototype=new l;QE.prototype.constructor=QE;QE.prototype.b=function(){return this};
+QE.prototype.hv=function(a,b){if(!(500>a))throw(new RE).j("assertion failed: loadFactor too large; must be \x3c 0.5");var d=b>>31,e=a>>31,f=65535&b,h=b>>>16|0,k=65535&a,p=a>>>16|0,t=da(f,k),k=da(h,k),x=da(f,p),f=t+((k+x|0)<<16)|0,t=(t>>>16|0)+x|0;a=(((da(b,e)+da(d,a)|0)+da(h,p)|0)+(t>>>16|0)|0)+(((65535&t)+k|0)>>>16|0)|0;return kf(Ra(),f,a,1E3,0)};QE.prototype.$classData=g({zha:0},!1,"scala.collection.mutable.FlatHashTable$",{zha:1,d:1});var Uka=void 0;
+function Ska(){Uka||(Uka=(new QE).b());return Uka}function SE(){}SE.prototype=new l;SE.prototype.constructor=SE;SE.prototype.b=function(){return this};SE.prototype.k=function(){return"NullSentinel"};SE.prototype.r=function(){return 0};SE.prototype.$classData=g({Bha:0},!1,"scala.collection.mutable.FlatHashTable$NullSentinel$",{Bha:1,d:1});var Vka=void 0;function pba(){Vka||(Vka=(new SE).b());return Vka}function Wka(a){return OE(ti(),-1+a.Wb.m.length|0)}
+function Xka(a){for(var b=-1+a.Wb.m.length|0;0<=b;)a.Wb.m[b]=null,b=-1+b|0;a.ir(0);Yka(a,0)}function Zka(a,b,d){for(a=a.Wb.m[d];;)if(null!==a?(d=a.kj(),d=!bn(cn(),d,b)):d=!1,d)a=a.ma();else break;return a}function TE(a,b){var d=-1+a.Wb.m.length|0,e=fa(d);a=a.Il;b=vka(wka(),b);return((b>>>a|0|b<<(-a|0))>>>e|0)&d}function $ka(a){a.zz(750);UE();a.Wy(la(Wa(rba),[VE(0,16)]));a.ir(0);var b=a.Sl,d=UE();UE();a.Yy(d.hv(b,VE(0,16)));a.Sy(null);a.RF(Wka(a))}
+function ala(a,b){var d=OD(V(),b),d=TE(a,d),e=a.Wb.m[d];if(null!==e){var f=e.kj();if(bn(cn(),f,b))return a.Wb.m[d]=e.ma(),a.ir(-1+a.Gf|0),bla(a,d),e.Qs(null),e;for(f=e.ma();;){if(null!==f)var h=f.kj(),h=!bn(cn(),h,b);else h=!1;if(h)e=f,f=f.ma();else break}if(null!==f)return e.Qs(f.ma()),a.ir(-1+a.Gf|0),bla(a,d),f.Qs(null),f}return null}function cla(a){for(var b=-1+a.Wb.m.length|0;null===a.Wb.m[b]&&0<b;)b=-1+b|0;return b}
+function dla(a,b,d){var e=OD(V(),b),e=TE(a,e),f=Zka(a,b,e);if(null!==f)return f;b=a.AT(b,d);ela(a,b,e);return null}function WE(a,b){var d=OD(V(),b),d=TE(a,d);return Zka(a,b,d)}
+function ela(a,b,d){b.Qs(a.Wb.m[d]);a.Wb.m[d]=b;a.ir(1+a.Gf|0);fla(a,d);if(a.Gf>a.Uk){b=a.Wb.m.length<<1;d=a.Wb;a.Wy(la(Wa(rba),[b]));Yka(a,a.Wb.m.length);for(var e=-1+d.m.length|0;0<=e;){for(var f=d.m[e];null!==f;){var h=f.kj(),h=OD(V(),h),h=TE(a,h),k=f.ma();f.Qs(a.Wb.m[h]);a.Wb.m[h]=f;f=k;fla(a,h)}e=-1+e|0}a.Yy(UE().hv(a.Sl,b))}}function bla(a,b){null!==a.Qf&&(a=a.Qf,b>>=5,a.m[b]=-1+a.m[b]|0)}function Yka(a,b){null!==a.Qf&&(b=1+(b>>5)|0,a.Qf.m.length!==b?a.Sy(la(Wa(db),[b])):oja(WA(),a.Qf))}
+function fla(a,b){null!==a.Qf&&(a=a.Qf,b>>=5,a.m[b]=1+a.m[b]|0)}function XE(){}XE.prototype=new l;XE.prototype.constructor=XE;XE.prototype.b=function(){return this};function VE(a,b){return 1<<(-fa(-1+b|0)|0)}XE.prototype.hv=function(a,b){var d=b>>31,e=a>>31,f=65535&b,h=b>>>16|0,k=65535&a,p=a>>>16|0,t=da(f,k),k=da(h,k),x=da(f,p),f=t+((k+x|0)<<16)|0,t=(t>>>16|0)+x|0;a=(((da(b,e)+da(d,a)|0)+da(h,p)|0)+(t>>>16|0)|0)+(((65535&t)+k|0)>>>16|0)|0;return kf(Ra(),f,a,1E3,0)};
+XE.prototype.$classData=g({Jha:0},!1,"scala.collection.mutable.HashTable$",{Jha:1,d:1});var gla=void 0;function UE(){gla||(gla=(new XE).b());return gla}function YE(){this.rd=0;this.lD=this.NC=this.qe=this.Fh=null}YE.prototype=new l;YE.prototype.constructor=YE;c=YE.prototype;c.FU=function(a,b,d,e,f){this.rd=a;this.Fh=b;this.qe=d;this.NC=e;this.lD=f;return this};c.W=function(a){var b=this;for(;;){if(a<b.rd)return ZE(W(),b.Fh,a);a=a-b.rd|0;b=b.qe}};
+c.pf=function(a,b){var d=this;a:for(;;){if(a<d.rd)$E(W(),d.Fh,a,b);else{a=a-d.rd|0;d=d.qe;continue a}break}};
+c.k=function(){Je();var a=lw(Je(),this.Fh),a=lw(0,aF(a,0,this.rd)),b=(new Sb).c("Unrolled@%08x"),d=[Ka(this)];Ha();b=b.R;r();Gn();for(var e=[],f=0,h=d.length|0;f<h;){var k=d[f];e.push(hla(k)?k.cZ():k);f=1+f|0}rD();for(var d=e.length|0,d=la(Wa(Ua),[d]),k=d.m.length,h=f=0,p=e.length|0,k=p<k?p:k,p=d.m.length,k=k<p?k:p;f<k;)d.m[h]=e[f],f=1+f|0,h=1+h|0;e=(new bF).b();b=ila(jla(e,b,d)).k();e.zo();b=b+"["+this.rd+"/"+aE(W(),this.Fh)+"](";return cc(a,b,", ",")")+" -\x3e "+(null!==this.qe?this.qe.k():"")};
+c.ua=function(a){for(var b=this,d=0;null!==b;){for(var e=b.Fh,f=b.rd;d<f;){var h=ZE(W(),e,d);a.y(h);d=1+d|0}d=0;b=b.qe}};function kla(a){return null===a.NC?cF().nG:aE(W(),a.Fh)}c.$classData=g({lia:0},!1,"scala.collection.mutable.UnrolledBuffer$Unrolled",{lia:1,d:1});function ZB(){this.$G=null}ZB.prototype=new l;ZB.prototype.constructor=ZB;ZB.prototype.b=function(){YB=this;this.$G=(new ri).Mh(la(Wa(Ua),[0]));return this};
+ZB.prototype.$classData=g({mia:0},!1,"scala.collection.mutable.WrappedArray$",{mia:1,d:1});var YB=void 0;function qC(){this.yW=null}qC.prototype=new l;qC.prototype.constructor=qC;qC.prototype.b=function(){pC=this;lla||(lla=(new dF).b());mla||(mla=(new eF).b());this.yW=void 0===ba.Promise?(new fF).b():(new gF).b();return this};qC.prototype.$classData=g({oia:0},!1,"scala.scalajs.concurrent.JSExecutionContext$",{oia:1,d:1});var pC=void 0;function eF(){}eF.prototype=new l;eF.prototype.constructor=eF;
+eF.prototype.b=function(){return this};eF.prototype.$classData=g({pia:0},!1,"scala.scalajs.concurrent.QueueExecutionContext$",{pia:1,d:1});var mla=void 0;function Ou(){}Ou.prototype=new l;Ou.prototype.constructor=Ou;Ou.prototype.b=function(){return this};function Tga(a,b){var d={};b.fo(m(new n,function(){return function(a){return null!==a}}(a))).ua(m(new n,function(a,b){return function(a){if(null!==a)b[a.ja()]=a.na();else throw(new q).j(a);}}(a,d)));return d}
+Ou.prototype.$classData=g({uia:0},!1,"scala.scalajs.js.Dictionary$",{uia:1,d:1});var Nu=void 0;function hF(){this.Dm=null}hF.prototype=new l;hF.prototype.constructor=hF;hF.prototype.b=function(){iF=this;this.Dm=ba.Object.prototype.hasOwnProperty;return this};hF.prototype.$classData=g({Aia:0},!1,"scala.scalajs.js.WrappedDictionary$Cache$",{Aia:1,d:1});var iF=void 0;function Cu(){iF||(iF=(new hF).b());return iF}function jF(){this.DT=this.El=null}jF.prototype=new l;jF.prototype.constructor=jF;
+function Bha(a){var b;a:{b=y();for(var d=a.DT;!d.z();){var e=d.$().UE;if(kF(e,b)){b=(new J).j(d.$());break a}d=d.aa()}b=F()}if(b.z())throw vg(),b=(new lF).c(a.El.Bg()),a=(new mF).c(a.El.Bg()+".\x3cinit\x3e()"),b.zf=a,ug(0,b);return nla(b.X())}jF.prototype.$classData=g({Dia:0},!1,"scala.scalajs.reflect.InstantiatableClass",{Dia:1,d:1});function nF(){this.QV=this.UE=null}nF.prototype=new l;nF.prototype.constructor=nF;
+function nla(a){var b=y();Je();var d=b.Ha();oF(0,d===fn(a.UE));a=a.QV;d=vg();if(Ku(b))b=b.Rd;else if(Lu(b))b=b.pa;else{var e=[];b.ua(m(new n,function(a,b){return function(a){return b.push(a)|0}}(d,e)));b=e}return a.apply(void 0,b)}nF.prototype.$classData=g({Eia:0},!1,"scala.scalajs.reflect.InvokableConstructor",{Eia:1,d:1});function pF(){this.Ou=this.zV=null}pF.prototype=new l;pF.prototype.constructor=pF;pF.prototype.b=function(){qF=this;this.zV=(new Av).b();this.Ou=(new Av).b();return this};
+pF.prototype.$classData=g({Fia:0},!1,"scala.scalajs.reflect.Reflect$",{Fia:1,d:1});var qF=void 0;function Wv(){qF||(qF=(new pF).b());return qF}function rF(){this.sp=!1;this.uD=this.Gs=this.Lt=null;this.KC=!1;this.JE=this.DD=0}rF.prototype=new l;rF.prototype.constructor=rF;
+rF.prototype.b=function(){sF=this;this.Lt=(this.sp=!!(ba.ArrayBuffer&&ba.Int32Array&&ba.Float32Array&&ba.Float64Array))?new ba.ArrayBuffer(8):null;this.Gs=this.sp?new ba.Int32Array(this.Lt,0,2):null;this.sp&&new ba.Float32Array(this.Lt,0,2);this.uD=this.sp?new ba.Float64Array(this.Lt,0,1):null;if(this.sp)this.Gs[0]=16909060,a=1===((new ba.Int8Array(this.Lt,0,8))[0]|0);else var a=!0;this.DD=(this.KC=a)?0:1;this.JE=this.KC?1:0;return this};
+function daa(a,b){var d=b|0;if(d===b&&-Infinity!==1/b)return d;if(a.sp)a.uD[0]=b,a=(new Vb).ia(a.Gs[a.JE]|0,a.Gs[a.DD]|0);else{if(b!==b)a=!1,b=2047,d=+ba.Math.pow(2,51);else if(Infinity===b||-Infinity===b)a=0>b,b=2047,d=0;else if(0===b)a=-Infinity===1/b,d=b=0;else{var e=(a=0>b)?-b:b;if(e>=+ba.Math.pow(2,-1022)){b=+ba.Math.pow(2,52);var d=+ba.Math.log(e)/.6931471805599453,d=+ba.Math.floor(d)|0,d=1023>d?d:1023,f=+ba.Math.pow(2,d);f>e&&(d=-1+d|0,f/=2);f=e/f*b;e=+ba.Math.floor(f);f-=e;e=.5>f?e:.5<f?1+
+e:0!==e%2?1+e:e;2<=e/b&&(d=1+d|0,e=1);1023<d?(d=2047,e=0):(d=1023+d|0,e-=b);b=d;d=e}else b=e/+ba.Math.pow(2,-1074),d=+ba.Math.floor(b),e=b-d,b=0,d=.5>e?d:.5<e?1+d:0!==d%2?1+d:d}d=+d;a=(new Vb).ia(d|0,(a?-2147483648:0)|(b|0)<<20|d/4294967296|0)}return a.la^a.qa}
+function ola(a){var b=a.qa,d=0>b,e=2047&b>>20;a=4294967296*(1048575&b)+ +(a.la>>>0);return 2047===e?0!==a?NaN:d?-Infinity:Infinity:0<e?(e=+ba.Math.pow(2,-1023+e|0)*(1+a/+ba.Math.pow(2,52)),d?-e:e):0!==a?(e=+ba.Math.pow(2,-1022)*(a/+ba.Math.pow(2,52)),d?-e:e):d?-0:0}rF.prototype.$classData=g({Lia:0},!1,"scala.scalajs.runtime.Bits$",{Lia:1,d:1});var sF=void 0;function Ja(){sF||(sF=(new rF).b());return sF}function tF(){this.ya=!1}tF.prototype=new l;tF.prototype.constructor=tF;
+function Gp(a,b,d){return b.substring((b.length|0)-(d.length|0)|0)===d}tF.prototype.b=function(){return this};function uF(a,b){a=b.length|0;for(var d=la(Wa(Za),[a]),e=0;e<a;)d.m[e]=65535&(b.charCodeAt(e)|0),e=1+e|0;return d}
+function vF(a,b,d){if(null===b)throw(new ye).b();a=kg(jg(),d);b=na(b);if(""===b)for(d=(new w).f([""]),b=d.pa.length|0,b=la(Wa(qa),[b]),a=0,d=Ve(new We,d,0,d.pa.length|0);d.ta();){var e=d.ma();b.m[a]=e;a=1+a|0}else{d=lg(new mg,a,b,b.length|0);a=[];for(var f=0,e=0;2147483646>e&&Nh(d);){if(0!==d.Uj()){var h=d.Rk(),f=b.substring(f,h);a.push(null===f?null:f);e=1+e|0}f=d.Uj()}b=b.substring(f);a.push(null===b?null:b);b=ka(Wa(qa),a);for(a=b.m.length;0!==a&&""===b.m[-1+a|0];)a=-1+a|0;a!==b.m.length&&(d=la(Wa(qa),
+[a]),Oa(b,0,d,0,a),b=d)}return b}function mw(a,b,d){a=pla(d);return b.indexOf(a)|0}function qla(a,b,d,e){a=d+e|0;if(0>d||a<d||a>b.m.length)throw(new wF).b();for(e="";d!==a;)e=""+e+ba.String.fromCharCode(b.m[d]),d=1+d|0;return e}function pla(a){if(0===(-65536&a))return ba.String.fromCharCode(a);if(0>a||1114111<a)throw(new Ne).b();a=-65536+a|0;return ba.String.fromCharCode(55296|a>>10,56320|1023&a)}
+function Ga(a,b){a=0;for(var d=1,e=-1+(b.length|0)|0;0<=e;)a=a+da(65535&(b.charCodeAt(e)|0),d)|0,d=da(31,d),e=-1+e|0;return a}function Qb(a,b,d,e){if(null===b)throw(new ye).b();a=kg(jg(),d);b=lg(new mg,a,b,b.length|0);ao(b);for(a=(new bo).b();Nh(b);)co(b,a,e);eo(b,a);return a.k()}tF.prototype.$classData=g({Nia:0},!1,"scala.scalajs.runtime.RuntimeString$",{Nia:1,d:1});var rla=void 0;function Ha(){rla||(rla=(new tF).b());return rla}function xF(){this.SU=!1;this.vT=this.FT=this.ET=null;this.ya=0}
+xF.prototype=new l;xF.prototype.constructor=xF;xF.prototype.b=function(){return this};function sla(a){return(a.stack+"\n").replace(yF("^[\\s\\S]+?\\s+at\\s+")," at ").replace(zF("^\\s+(at eval )?at\\s+","gm"),"").replace(zF("^([^\\(]+?)([\\n])","gm"),"{anonymous}() ($1)$2").replace(zF("^Object.\x3canonymous\x3e\\s*\\(([^\\)]+)\\)","gm"),"{anonymous}() ($1)").replace(zF("^([^\\(]+|\\{anonymous\\}\\(\\)) \\((.+)\\)$","gm"),"$1@$2").split("\n").slice(0,-1)}
+function tla(a){0===(8&a.ya)&&0===(8&a.ya)&&(a.vT=ba.Object.keys(ula(a)),a.ya|=8);return a.vT}function vla(a){if(0===(2&a.ya)&&0===(2&a.ya)){for(var b={O:"java_lang_Object",T:"java_lang_String",V:"scala_Unit",Z:"scala_Boolean",C:"scala_Char",B:"scala_Byte",S:"scala_Short",I:"scala_Int",J:"scala_Long",F:"scala_Float",D:"scala_Double"},d=0;22>=d;)2<=d&&(b["T"+d]="scala_Tuple"+d),b["F"+d]="scala_Function"+d,d=1+d|0;a.ET=b;a.ya|=2}return a.ET}
+function wla(a,b){var d=yF("^(?:Object\\.|\\[object Object\\]\\.)?(?:ScalaJS\\.c\\.|\\$c_)([^\\.]+)(?:\\.prototype)?\\.([^\\.]+)$"),e=yF("^(?:Object\\.|\\[object Object\\]\\.)?(?:ScalaJS\\.(?:s|f)\\.|\\$(?:s|f)_)((?:_[^_]|[^_])+)__([^\\.]+)$"),f=yF("^(?:Object\\.|\\[object Object\\]\\.)?(?:ScalaJS\\.m\\.|\\$m_)([^\\.]+)$"),h=!1,d=d.exec(b);null===d&&(d=e.exec(b),null===d&&(d=f.exec(b),h=!0));if(null!==d){b=d[1];if(void 0===b)throw(new Du).c("undefined.get");b=36===(65535&(b.charCodeAt(0)|0))?b.substring(1):
+b;e=vla(a);if(Cu().Dm.call(e,b)){a=vla(a);if(!Cu().Dm.call(a,b))throw(new Du).c("key not found: "+b);a=a[b]}else a:for(f=0;;)if(f<(tla(a).length|0)){e=tla(a)[f];if(0<=(b.length|0)&&b.substring(0,e.length|0)===e){a=ula(a);if(!Cu().Dm.call(a,e))throw(new Du).c("key not found: "+e);a=""+a[e]+b.substring(e.length|0);break a}f=1+f|0}else{a=0<=(b.length|0)&&"L"===b.substring(0,1)?b.substring(1):b;break a}a=a.split("_").join(".").split("$und").join("_");if(h)h="\x3cclinit\x3e";else{h=d[2];if(void 0===h)throw(new Du).c("undefined.get");
+0<=(h.length|0)&&"init___"===h.substring(0,7)?h="\x3cinit\x3e":(d=h.indexOf("__")|0,h=0>d?h:h.substring(0,d))}return(new A).e(a,h)}return(new A).e("\x3cjscode\x3e",b)}function xla(a){var b=zF("Line (\\d+).*script (?:in )?(\\S+)","i");a=a.message.split("\n");for(var d=[],e=2,f=a.length|0;e<f;){var h=b.exec(a[e]);if(null!==h){var k=h[2];if(void 0===k)throw(new Du).c("undefined.get");h=h[1];if(void 0===h)throw(new Du).c("undefined.get");d.push("{anonymous}()@"+k+":"+h)}e=2+e|0}return d}
+function ula(a){0===(4&a.ya)&&0===(4&a.ya)&&(a.FT={sjsr_:"scala_scalajs_runtime_",sjs_:"scala_scalajs_",sci_:"scala_collection_immutable_",scm_:"scala_collection_mutable_",scg_:"scala_collection_generic_",sc_:"scala_collection_",sr_:"scala_runtime_",s_:"scala_",jl_:"java_lang_",ju_:"java_util_"},a.ya|=4);return a.FT}xF.prototype.$classData=g({Oia:0},!1,"scala.scalajs.runtime.StackTrace$",{Oia:1,d:1});var yla=void 0;function AF(){}AF.prototype=new l;AF.prototype.constructor=AF;AF.prototype.b=function(){return this};
+function zF(a,b){BF||(BF=(new AF).b());return new ba.RegExp(a,b)}function yF(a){BF||(BF=(new AF).b());return new ba.RegExp(a)}AF.prototype.$classData=g({Pia:0},!1,"scala.scalajs.runtime.StackTrace$StringRE$",{Pia:1,d:1});var BF=void 0;function CF(){}CF.prototype=new l;CF.prototype.constructor=CF;CF.prototype.b=function(){return this};function ug(a,b){return DF(b)?b.Po:b}function Un(a,b){return b&&b.$classData&&b.$classData.n.Lc?b:(new EF).j(b)}
+CF.prototype.$classData=g({Qia:0},!1,"scala.scalajs.runtime.package$",{Qia:1,d:1});var zla=void 0;function vg(){zla||(zla=(new CF).b());return zla}function FF(){}FF.prototype=new l;FF.prototype.constructor=FF;FF.prototype.b=function(){return this};function Ala(a,b){if(ie(b))return a.Y===b.Y;if(GF(b)){if("number"===typeof b)return+b===a.Y;if(Ca(b)){b=Qa(b);var d=b.qa;a=a.Y;return b.la===a&&d===a>>31}return null===b?null===a:Ea(b,a)}return null===a&&null===b}
+function bn(a,b,d){if(b===d)d=!0;else if(GF(b))a:if(GF(d))d=HF(0,b,d);else{if(ie(d)){if("number"===typeof b){d=+b===d.Y;break a}if(Ca(b)){a=Qa(b);b=a.qa;d=d.Y;d=a.la===d&&b===d>>31;break a}}d=null===b?null===d:Ea(b,d)}else d=ie(b)?Ala(b,d):null===b?null===d:Ea(b,d);return d}
+function HF(a,b,d){if("number"===typeof b)return a=+b,"number"===typeof d?a===+d:Ca(d)?(b=Qa(d),d=b.la,b=b.qa,a===IF(Ra(),d,b)):hla(d)?d.o(a):!1;if(Ca(b)){b=Qa(b);a=b.la;b=b.qa;if(Ca(d)){d=Qa(d);var e=d.qa;return a===d.la&&b===e}return"number"===typeof d?(d=+d,IF(Ra(),a,b)===d):hla(d)?d.o((new Vb).ia(a,b)):!1}return null===b?null===d:Ea(b,d)}FF.prototype.$classData=g({Tia:0},!1,"scala.runtime.BoxesRunTime$",{Tia:1,d:1});var Bla=void 0;function cn(){Bla||(Bla=(new FF).b());return Bla}
+var JF=g({aja:0},!1,"scala.runtime.Null$",{aja:1,d:1});function KF(){}KF.prototype=new l;KF.prototype.constructor=KF;KF.prototype.b=function(){return this};function vu(a,b){return Na(b)===b}KF.prototype.$classData=g({cja:0},!1,"scala.runtime.RichDouble$",{cja:1,d:1});var Cla=void 0;function wu(){Cla||(Cla=(new KF).b());return Cla}function MF(){}MF.prototype=new l;MF.prototype.constructor=MF;MF.prototype.b=function(){return this};
+MF.prototype.$classData=g({dja:0},!1,"scala.runtime.RichLong$",{dja:1,d:1});var Dla=void 0;function NF(){Dla||(Dla=(new MF).b())}function OF(){}OF.prototype=new l;OF.prototype.constructor=OF;OF.prototype.b=function(){return this};function aE(a,b){if(de(b,1)||lb(b,1)||ob(b,1)||mb(b,1)||nb(b,1)||ib(b,1)||jb(b,1)||kb(b,1)||hb(b,1)||PF(b))return b.m.length;if(null===b)throw(new ye).b();throw(new q).j(b);}
+function $E(a,b,d,e){if(de(b,1))b.m[d]=e;else if(lb(b,1))b.m[d]=e|0;else if(ob(b,1))b.m[d]=+e;else if(mb(b,1))b.m[d]=Qa(e);else if(nb(b,1))b.m[d]=+e;else if(ib(b,1))b.m[d]=null===e?0:e.Y;else if(jb(b,1))b.m[d]=e|0;else if(kb(b,1))b.m[d]=e|0;else if(hb(b,1))b.m[d]=!!e;else if(PF(b))b.m[d]=void 0;else{if(null===b)throw(new ye).b();throw(new q).j(b);}}function X(a,b){a=b.x();return cc(a,b.u()+"(",",",")")}
+function ZE(a,b,d){if(de(b,1)||lb(b,1)||ob(b,1)||mb(b,1)||nb(b,1))return b.m[d];if(ib(b,1))return(new Ke).Xa(b.m[d]);if(jb(b,1)||kb(b,1)||hb(b,1)||PF(b))return b.m[d];if(null===b)throw(new ye).b();throw(new q).j(b);}OF.prototype.$classData=g({eja:0},!1,"scala.runtime.ScalaRunTime$",{eja:1,d:1});var Ela=void 0;function W(){Ela||(Ela=(new OF).b());return Ela}function QF(){}QF.prototype=new l;QF.prototype.constructor=QF;c=QF.prototype;c.b=function(){return this};
+c.Ps=function(a,b){b=da(-862048943,b);b=da(461845907,b<<15|b>>>17|0);return a^b};function RF(a,b){a=Na(b);if(a===b)return a;var d=Ra();a=SF(d,b);d=d.Rb;return IF(Ra(),a,d)===b?a^d:daa(Ja(),b)}function OD(a,b){return null===b?0:"number"===typeof b?RF(0,+b):Ca(b)?(a=Qa(b),TF(0,(new Vb).ia(a.la,a.qa))):Fa(b)}c.da=function(a,b){a=this.Ps(a,b);return-430675100+da(5,a<<13|a>>>19|0)|0};function TF(a,b){a=b.la;b=b.qa;return b===a>>31?a:a^b}
+c.pb=function(a,b){a^=b;a=da(-2048144789,a^(a>>>16|0));a=da(-1028477387,a^(a>>>13|0));return a^(a>>>16|0)};c.$classData=g({gja:0},!1,"scala.runtime.Statics$",{gja:1,d:1});var Fla=void 0;function V(){Fla||(Fla=(new QF).b());return Fla}function UF(){this.xU=null;this.nT=0;this.pU=this.wU=this.yU=this.zU=null;this.a=0}UF.prototype=new l;UF.prototype.constructor=UF;
+UF.prototype.b=function(){VF=this;this.xU=Vg(Wg(),y());this.a|=1;this.nT=N(D())|Bj(D());this.a|=2;for(var a=N(D()),a=(new A).e("WHO",a),b=WF(this),b=(new A).e("COLOR",b),d=N(D()),d=(new A).e("HEADING",d),e=N(D()),e=(new A).e("XCOR",e),f=N(D()),f=(new A).e("YCOR",f),h=Aj(D()),h=(new A).e("SHAPE",h),k=kc(),k=(new A).e("LABEL",k),p=WF(this),p=(new A).e("LABEL-COLOR",p),t=Cj(D()),t=(new A).e("BREED",t),x=zj(D()),x=(new A).e("HIDDEN?",x),E=N(D()),E=(new A).e("SIZE",E),S=N(D()),S=(new A).e("PEN-SIZE",S),
+U=Aj(D()),a=[a,b,d,e,f,h,k,p,t,x,E,S,(new A).e("PEN-MODE",U)],b=dc(new ec,Eu()),d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.zU=b.Oa;this.a|=4;a=N(D());a=(new A).e("PXCOR",a);b=N(D());b=(new A).e("PYCOR",b);d=WF(this);d=(new A).e("PCOLOR",d);e=kc();e=(new A).e("PLABEL",e);f=WF(this);a=[a,b,d,e,(new A).e("PLABEL-COLOR",f)];b=dc(new ec,Eu());d=0;for(e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.yU=b.Oa;this.a|=8;a=Gj(D());a=(new A).e("END1",a);b=Gj(D());b=(new A).e("END2",b);d=WF(this);d=(new A).e("COLOR",
+d);e=kc();e=(new A).e("LABEL",e);f=WF(this);f=(new A).e("LABEL-COLOR",f);h=zj(D());h=(new A).e("HIDDEN?",h);k=Fj(D());k=(new A).e("BREED",k);p=N(D());p=(new A).e("THICKNESS",p);t=Aj(D());t=(new A).e("SHAPE",t);x=Aj(D());a=[a,b,d,e,f,h,k,p,t,(new A).e("TIE-MODE",x)];b=dc(new ec,Eu());d=0;for(e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.wU=b.Oa;this.a|=16;a=Gla(this);a=Hc(a);kp(a);this.a|=32;a=Hla(this);a=Hc(a);kp(a);this.a|=64;a=XF(this);a=Hc(a);kp(a);this.a|=128;a=Ila(this);a=Hc(a);kp(a);this.a|=256;
+a=Gla(this);a=Hc(a);kp(a).ve((new xn).Dg(pa(qa)));this.a|=512;a=Ila(this);a=Hc(a);this.pU=kp(a).ve((new xn).Dg(pa(qa)));this.a|=1024;return this};function Hla(a){if(0===(4&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/AgentVariables.scala: 14");return a.zU}
+function Gla(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/AgentVariables.scala: 9");return a.xU}function mga(){var a=YF(),a=XF(a),a=Hc(a);return kp(a).ve((new xn).Dg(pa(qa)))}function jga(){var a=YF(),a=Hla(a),a=Hc(a);return kp(a).ve((new xn).Dg(pa(qa)))}
+function WF(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/AgentVariables.scala: 12");return a.nT}function Ila(a){if(0===(16&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/AgentVariables.scala: 36");return a.wU}
+function iga(){var a=YF();if(0===(1024&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/AgentVariables.scala: 56");return a.pU}function XF(a){if(0===(8&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/AgentVariables.scala: 29");return a.yU}UF.prototype.$classData=g({MZ:0},!1,"org.nlogo.core.AgentVariables$",{MZ:1,d:1,pja:1});var VF=void 0;
+function YF(){VF||(VF=(new UF).b());return VF}function ZF(a){return!!(a&&a.$classData&&a.$classData.n.xH)}function et(){this.$R=this.hS=0;this.IW=this.ZV=this.$V=null;this.a=0}et.prototype=new l;et.prototype.constructor=et;
+et.prototype.b=function(){Zb=this;this.hS=14;this.a=(1|this.a)<<24>>24;if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Color.scala: 231");this.$R=da(10,this.hS);this.a=(2|this.a)<<24>>24;this.a=(4|this.a)<<24>>24;Oba(Jg());this.a=(8|this.a)<<24>>24;var a=(new w).f([140,140,140,215,48,39,241,105,19,156,109,70,237,237,47,87,176,58,42,209,57,27,158,119,82,196,196,43,140,190,50,92,168,123,78,163,166,25,105,
+224,126,149,0,0,0,255,255,255]),b=a.pa.length|0,b=la(Wa(db),[b]),d;d=0;for(a=Ve(new We,a,0,a.pa.length|0);a.ta();){var e=a.ma();b.m[d]=e|0;d=1+d|0}this.$V=b;this.a=(16|this.a)<<24>>24;a=da(10,Jla(this));if(e=0>=a)var f=0;else b=a>>31,f=(0===b?-1<(-2147483648^a):0<b)?-1:a;b=-1+a|0;$F();ek();$F();dk();d=(new aG).b();0>f&&Hn(Ln(),0,a,1,!1);if(!e)for(a=0;;){var h=a,k=h/100|0,e=Kla(this).m[da(3,k)],f=Kla(this).m[1+da(3,k)|0],k=Kla(this).m[2+da(3,k)|0],h=.012+(-50+(h%100|0)|0)/50.48;0>h?(e=e+Na(e*h)|0,
+f=f+Na(f*h)|0,k=k+Na(k*h)|0):0<h&&(e=e+Na((255-e|0)*h)|0,f=f+Na((255-f|0)*h)|0,k=k+Na((255-k|0)*h)|0);bG(d,((-16777216+(e<<16)|0)+(f<<8)|0)+k|0);if(a===b)break;a=1+a|0}b=cG(d);d=b.ra();d=la(Wa(db),[d]);$D(b,d,0);d.m[0]=-16777216;d.m[99]=-1;this.ZV=d;this.a=(32|this.a)<<24>>24;Lla||(Lla=(new dG).b());b=Vg(Lla,y());a=da(10,Jla(this));d=-1+a|0;if(!(0>=a))for(a=0;;){f=e=a/10;if(0===(32&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Color.scala: 231");
+b.vv(this.ZV.m[Na(10*f)],e);if(a===d)break;a=1+a|0}this.IW=b;this.a=(64|this.a)<<24>>24;return this};function Jla(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Color.scala: 231");return a.$R}function uaa(a){if(0===(64&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Color.scala: 231");return a.IW}
+function Kla(a){if(0===(16&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Color.scala: 231");return a.$V}et.prototype.$classData=g({XZ:0},!1,"org.nlogo.core.Color$",{XZ:1,d:1,rja:1});var Zb=void 0;function eG(){}eG.prototype=new l;eG.prototype.constructor=eG;eG.prototype.b=function(){return this};eG.prototype.$classData=g({c_:0},!1,"org.nlogo.core.DummyCompilationEnvironment",{c_:1,d:1,sja:1});
+function fG(){this.VT=null;this.a=!1}fG.prototype=new l;fG.prototype.constructor=fG;fG.prototype.b=function(){gG=this;var a=new hG;if(null===this)throw ug(vg(),null);a.Va=this;this.VT=a;this.a=!0;return this};fG.prototype.$classData=g({d_:0},!1,"org.nlogo.core.Dump$",{d_:1,d:1,vja:1});var gG=void 0;function oo(){gG||(gG=(new fG).b());return gG}function iG(){this.cj=this.nj=this.bT=null;this.a=0}iG.prototype=new l;iG.prototype.constructor=iG;function Mla(){}Mla.prototype=iG.prototype;
+iG.prototype.Dd=function(){var a=Je().$h,b=(new A).e("org.nlogo.core.prim._breed",m(new n,function(){return function(a){return(new jG).c(a)}}(this))),d=(new A).e("org.nlogo.core.prim._breedvariable",m(new n,function(){return function(a){return(new kG).c(a)}}(this))),e=(new A).e("org.nlogo.core.prim._createorderedturtles",m(new n,function(){return function(a){return(new lG).c(a)}}(this))),f=(new A).e("org.nlogo.core.prim._createturtles",m(new n,function(){return function(a){return(new mG).c(a)}}(this))),
+h=(new A).e("org.nlogo.core.prim._hatch",m(new n,function(){return function(a){return(new nG).c(a)}}(this))),k=(new A).e("org.nlogo.core.prim._lambdavariable",m(new n,function(){return function(a){return(new Um).c(a)}}(this))),p=(new A).e("org.nlogo.core.prim._linkbreedvariable",m(new n,function(){return function(a){return(new oG).c(a)}}(this))),t=(new A).e("org.nlogo.core.prim._sprout",m(new n,function(){return function(a){return(new pG).c(a)}}(this))),x=(new A).e("org.nlogo.core.prim.etc._breedat",
+m(new n,function(){return function(a){return(new rG).c(a)}}(this))),E=(new A).e("org.nlogo.core.prim.etc._breedhere",m(new n,function(){return function(a){return(new wG).c(a)}}(this))),S=(new A).e("org.nlogo.core.prim.etc._breedon",m(new n,function(){return function(a){return(new xG).c(a)}}(this))),U=(new A).e("org.nlogo.core.prim.etc._breedsingular",m(new n,function(){return function(a){return(new yG).c(a)}}(this))),ga=(new A).e("org.nlogo.core.prim.etc._inlinkfrom",m(new n,function(){return function(a){return(new zG).c(a)}}(this))),
+ma=(new A).e("org.nlogo.core.prim.etc._inlinkneighbor",m(new n,function(){return function(a){return(new AG).c(a)}}(this))),va=(new A).e("org.nlogo.core.prim.etc._inlinkneighbors",m(new n,function(){return function(a){return(new BG).c(a)}}(this))),Ia=(new A).e("org.nlogo.core.prim.etc._isbreed",m(new n,function(){return function(a){return(new CG).c(a)}}(this))),$a=(new A).e("org.nlogo.core.prim.etc._linkbreed",m(new n,function(){return function(a){return(new DG).c(a)}}(this))),ub=(new A).e("org.nlogo.core.prim.etc._linkbreedsingular",
+m(new n,function(){return function(a){return(new EG).c(a)}}(this))),vb=(new A).e("org.nlogo.core.prim.etc._linkneighbor",m(new n,function(){return function(a){return(new FG).c(a)}}(this))),Mb=(new A).e("org.nlogo.core.prim.etc._linkneighbors",m(new n,function(){return function(a){return(new GG).c(a)}}(this))),Jc=(new A).e("org.nlogo.core.prim.etc._linkwith",m(new n,function(){return function(a){return(new HG).c(a)}}(this))),ab=(new A).e("org.nlogo.core.prim.etc._myinlinks",m(new n,function(){return function(a){return(new IG).c(a)}}(this))),
+fc=(new A).e("org.nlogo.core.prim.etc._mylinks",m(new n,function(){return function(a){return(new JG).c(a)}}(this))),Cc=(new A).e("org.nlogo.core.prim.etc._myoutlinks",m(new n,function(){return function(a){return(new KG).c(a)}}(this))),rf=(new A).e("org.nlogo.core.prim.etc._outlinkneighbor",m(new n,function(){return function(a){return(new LG).c(a)}}(this))),Wf=(new A).e("org.nlogo.core.prim.etc._outlinkneighbors",m(new n,function(){return function(a){return(new MG).c(a)}}(this))),vh=(new A).e("org.nlogo.core.prim.etc._outlinkto",
+m(new n,function(){return function(a){return(new NG).c(a)}}(this))),Te=(new A).e("org.nlogo.core.prim.etc._createlinkwith",m(new n,function(){return function(a){return(new OG).c(a)}}(this))),sf=(new A).e("org.nlogo.core.prim.etc._createlinkto",m(new n,function(){return function(a){return(new PG).c(a)}}(this))),hk=(new A).e("org.nlogo.core.prim.etc._createlinkfrom",m(new n,function(){return function(a){return(new QG).c(a)}}(this))),qg=(new A).e("org.nlogo.core.prim.etc._createlinkswith",m(new n,function(){return function(a){return(new RG).c(a)}}(this))),
+wh=(new A).e("org.nlogo.core.prim.etc._createlinksto",m(new n,function(){return function(a){return(new SG).c(a)}}(this)));this.bT=Vg(a,(new w).f([b,d,e,f,h,k,p,t,x,E,S,U,ga,ma,va,Ia,$a,ub,vb,Mb,Jc,ab,fc,Cc,rf,Wf,vh,Te,sf,hk,qg,wh,(new A).e("org.nlogo.core.prim.etc._createlinksfrom",m(new n,function(){return function(a){return(new TG).c(a)}}(this)))]));this.a=(1|this.a)<<24>>24;var rg=Je().$h,bi=(new A).e("!\x3d",K(function(){return function(){return(new UG).b()}}(this))),Vi=(new A).e("*",K(function(){return function(){return(new VG).b()}}(this))),
+ik=(new A).e("+",K(function(){return function(){return(new WG).b()}}(this))),Wi=(new A).e("-",K(function(){return function(){return(new XG).b()}}(this))),jk=(new A).e("/",K(function(){return function(){return(new YG).b()}}(this))),Xi=(new A).e("\x3c",K(function(){return function(){return(new ZG).b()}}(this))),Bl=(new A).e("\x3c\x3d",K(function(){return function(){return(new $G).b()}}(this))),Yi=(new A).e("\x3d",K(function(){return function(){return(new cH).b()}}(this))),kk=(new A).e("\x3e",K(function(){return function(){return(new dH).b()}}(this))),
+Zi=(new A).e("\x3e\x3d",K(function(){return function(){return(new eH).b()}}(this))),Cl=(new A).e("^",K(function(){return function(){return(new fH).b()}}(this))),xh=(new A).e("__APPLY-RESULT",K(function(){return function(){return(new gH).b()}}(this))),Dl=(new A).e("__BOOM",K(function(){return function(){return(new hH).b()}}(this))),yh=(new A).e("__BLOCK",K(function(){return function(){return(new iH).b()}}(this))),lk=(new A).e("__CHECK-SYNTAX",K(function(){return function(){return(new jH).b()}}(this))),
+El=(new A).e("__CHECKSUM",K(function(){return function(){return(new kH).b()}}(this))),ci=(new A).e("__DUMP",K(function(){return function(){return(new lH).b()}}(this))),di=(new A).e("__DUMP-EXTENSION-PRIMS",K(function(){return function(){return(new mH).b()}}(this))),Fl=(new A).e("__DUMP-EXTENSIONS",K(function(){return function(){return(new nH).b()}}(this))),Gl=(new A).e("__DUMP1",K(function(){return function(){return(new oH).b()}}(this))),Hl=(new A).e("__NANO-TIME",K(function(){return function(){return(new pH).b()}}(this))),
+mk=(new A).e("__PROCESSORS",K(function(){return function(){return(new qH).b()}}(this))),Il=(new A).e("__RANDOM-STATE",K(function(){return function(){return(new rH).b()}}(this))),Jl=(new A).e("__REFERENCE",K(function(){return function(){return(new sH).b()}}(this))),Kl=(new A).e("__STACK-TRACE",K(function(){return function(){return(new tH).b()}}(this))),Ll=(new A).e("__SYMBOL",K(function(){return function(){return(new uH).b()}}(this))),nk=(new A).e("__TO-STRING",K(function(){return function(){return(new vH).b()}}(this))),
+Ml=(new A).e("ABS",K(function(){return function(){return(new wH).b()}}(this))),ei=(new A).e("ACOS",K(function(){return function(){return(new xH).b()}}(this))),ok=(new A).e("ALL?",K(function(){return function(){return(new yH).b()}}(this))),zh=(new A).e("AND",K(function(){return function(){return(new zH).b()}}(this))),Nl=(new A).e("ANY?",K(function(){return function(){return(new AH).b()}}(this))),$i=(new A).e("APPROXIMATE-HSB",K(function(){return function(){return(new BH).b()}}(this))),pk=(new A).e("APPROXIMATE-RGB",
+K(function(){return function(){return(new CH).b()}}(this))),Ah=(new A).e("ASIN",K(function(){return function(){return(new DH).b()}}(this))),Yf=(new A).e("AT-POINTS",K(function(){return function(){return(new EH).b()}}(this))),xe=(new A).e("ATAN",K(function(){return function(){return(new FH).b()}}(this))),Bh=(new A).e("AUTOPLOT?",K(function(){return function(){return(new GH).b()}}(this))),fi=(new A).e("BASE-COLORS",K(function(){return function(){return(new HH).b()}}(this))),qk=(new A).e("BEHAVIORSPACE-RUN-NUMBER",
+K(function(){return function(){return(new IH).b()}}(this))),aj=(new A).e("BF",K(function(){return function(){return(new JH).b()}}(this))),Ol=(new A).e("BL",K(function(){return function(){return(new KH).b()}}(this))),bj=(new A).e("BOTH-ENDS",K(function(){return function(){return(new LH).b()}}(this))),Pl=(new A).e("BUT-FIRST",K(function(){return function(){return(new JH).b()}}(this))),cj=(new A).e("BUT-LAST",K(function(){return function(){return(new KH).b()}}(this))),dj=(new A).e("BUTFIRST",K(function(){return function(){return(new JH).b()}}(this))),
+rk=(new A).e("BUTLAST",K(function(){return function(){return(new KH).b()}}(this))),Ql=(new A).e("CAN-MOVE?",K(function(){return function(){return(new MH).b()}}(this))),ej=(new A).e("CEILING",K(function(){return function(){return(new NH).b()}}(this))),gi=(new A).e("COS",K(function(){return function(){return(new OH).b()}}(this))),Rl=(new A).e("COUNT",K(function(){return function(){return(new PH).b()}}(this))),Xg=(new A).e("DATE-AND-TIME",K(function(){return function(){return(new QH).b()}}(this))),Yg=
+(new A).e("DISTANCE",K(function(){return function(){return(new RH).b()}}(this))),sk=(new A).e("DISTANCEXY",K(function(){return function(){return(new SH).b()}}(this))),fj=(new A).e("DX",K(function(){return function(){return(new TH).b()}}(this))),Ch=(new A).e("DY",K(function(){return function(){return(new UH).b()}}(this))),tk=(new A).e("EMPTY?",K(function(){return function(){return(new VH).b()}}(this))),Sl=(new A).e("ERROR-MESSAGE",K(function(){return function(){return(new WH).b()}}(this))),uk=(new A).e("EXP",
+K(function(){return function(){return(new XH).b()}}(this))),Zg=(new A).e("EXTRACT-HSB",K(function(){return function(){return(new YH).b()}}(this))),Tl=(new A).e("EXTRACT-RGB",K(function(){return function(){return(new ZH).b()}}(this))),gj=(new A).e("FILE-AT-END?",K(function(){return function(){return(new $H).b()}}(this))),hi=(new A).e("FILE-EXISTS?",K(function(){return function(){return(new aI).b()}}(this))),Dh=(new A).e("FILE-READ",K(function(){return function(){return(new bI).b()}}(this))),Ul=(new A).e("FILE-READ-CHARACTERS",
+K(function(){return function(){return(new cI).b()}}(this))),sg=(new A).e("FILE-READ-LINE",K(function(){return function(){return(new dI).b()}}(this))),ji=(new A).e("FILTER",K(function(){return function(){return(new eI).b()}}(this))),Eh=(new A).e("FIRST",K(function(){return function(){return(new fI).b()}}(this))),hj=(new A).e("FLOOR",K(function(){return function(){return(new gI).b()}}(this))),$g=(new A).e("FPUT",K(function(){return function(){return(new hI).b()}}(this))),ij=(new A).e("HSB",K(function(){return function(){return(new iI).b()}}(this))),
+jj=(new A).e("HUBNET-CLIENTS-LIST",K(function(){return function(){return(new jI).b()}}(this))),ki=(new A).e("HUBNET-ENTER-MESSAGE?",K(function(){return function(){return(new kI).b()}}(this))),li=(new A).e("HUBNET-EXIT-MESSAGE?",K(function(){return function(){return(new lI).b()}}(this))),kj=(new A).e("HUBNET-MESSAGE",K(function(){return function(){return(new mI).b()}}(this))),Zf=(new A).e("HUBNET-MESSAGE-SOURCE",K(function(){return function(){return(new nI).b()}}(this))),uf=(new A).e("HUBNET-MESSAGE-TAG",
+K(function(){return function(){return(new oI).b()}}(this))),ee=(new A).e("HUBNET-MESSAGE-WAITING?",K(function(){return function(){return(new pI).b()}}(this))),lj=(new A).e("IFELSE-VALUE",K(function(){return function(){return(new qI).b()}}(this))),tg=(new A).e("IN-CONE",K(function(){return function(){return(new rI).b()}}(this))),mj=(new A).e("IN-LINK-FROM",K(function(){return function(){return(new zG).b()}}(this))),nj=(new A).e("IN-LINK-NEIGHBOR?",K(function(){return function(){return(new AG).b()}}(this))),
+mi=(new A).e("IN-LINK-NEIGHBORS",K(function(){return function(){return(new BG).b()}}(this))),ni=(new A).e("IN-RADIUS",K(function(){return function(){return(new sI).b()}}(this))),Vl=(new A).e("INSERT-ITEM",K(function(){return function(){return(new tI).b()}}(this))),vk=(new A).e("INT",K(function(){return function(){return(new uI).b()}}(this))),ah=(new A).e("IS-AGENT?",K(function(){return function(){return(new vI).b()}}(this))),oi=(new A).e("IS-AGENTSET?",K(function(){return function(){return(new wI).b()}}(this))),
+Wl=(new A).e("IS-ANONYMOUS-COMMAND?",K(function(){return function(){return(new xI).b()}}(this))),wk=(new A).e("IS-ANONYMOUS-REPORTER?",K(function(){return function(){return(new yI).b()}}(this))),ii=(new A).e("IS-BOOLEAN?",K(function(){return function(){return(new zI).b()}}(this))),LF=(new A).e("IS-DIRECTED-LINK?",K(function(){return function(){return(new AI).b()}}(this))),Cw=(new A).e("IS-LINK-SET?",K(function(){return function(){return(new BI).b()}}(this))),gx=(new A).e("IS-LINK?",K(function(){return function(){return(new CI).b()}}(this))),
+qG=(new A).e("IS-LIST?",K(function(){return function(){return(new DI).b()}}(this))),Gr=(new A).e("IS-NUMBER?",K(function(){return function(){return(new EI).b()}}(this))),hx=(new A).e("IS-PATCH-SET?",K(function(){return function(){return(new FI).b()}}(this))),yk=(new A).e("IS-PATCH?",K(function(){return function(){return(new GI).b()}}(this))),In=(new A).e("IS-STRING?",K(function(){return function(){return(new HI).b()}}(this))),gm=(new A).e("IS-TURTLE-SET?",K(function(){return function(){return(new II).b()}}(this))),
+ix=(new A).e("IS-TURTLE?",K(function(){return function(){return(new JI).b()}}(this))),Hr=(new A).e("IS-UNDIRECTED-LINK?",K(function(){return function(){return(new KI).b()}}(this))),Jn=(new A).e("ITEM",K(function(){return function(){return(new LI).b()}}(this))),zk=(new A).e("LAST",K(function(){return function(){return(new MI).b()}}(this))),sG=(new A).e("LENGTH",K(function(){return function(){return(new NI).b()}}(this))),Ir=(new A).e("LINK",K(function(){return function(){return(new OI).b()}}(this))),
+hm=(new A).e("LINK-HEADING",K(function(){return function(){return(new PI).b()}}(this))),Jr=(new A).e("LINK-LENGTH",K(function(){return function(){return(new QI).b()}}(this))),tG=(new A).e("LINK-NEIGHBOR?",K(function(){return function(){return(new FG).b()}}(this))),uG=(new A).e("LINK-NEIGHBORS",K(function(){return function(){return(new GG).b()}}(this))),Kn=(new A).e("LINK-SET",K(function(){return function(){return(new RI).b()}}(this))),vG=(new A).e("LINK-SHAPES",K(function(){return function(){return(new SI).b()}}(this))),
+N7=(new A).e("LINK-WITH",K(function(){return function(){return(new HG).b()}}(this))),O7=(new A).e("LINKS",K(function(){return function(){return(new TI).b()}}(this))),Q7=(new A).e("LIST",K(function(){return function(){return(new UI).b()}}(this))),R7=(new A).e("LN",K(function(){return function(){return(new VI).b()}}(this))),S7=(new A).e("LOG",K(function(){return function(){return(new WI).b()}}(this))),T7=(new A).e("LPUT",K(function(){return function(){return(new XI).b()}}(this))),aH=(new A).e("MAP",
+K(function(){return function(){return(new YI).b()}}(this))),U7=(new A).e("MAX",K(function(){return function(){return(new ZI).b()}}(this))),V7=(new A).e("MAX-N-OF",K(function(){return function(){return(new $I).b()}}(this))),X7=(new A).e("MAX-ONE-OF",K(function(){return function(){return(new aJ).b()}}(this))),Y7=(new A).e("MAX-PXCOR",K(function(){return function(){return(new bJ).b()}}(this))),Z7=(new A).e("MAX-PYCOR",K(function(){return function(){return(new cJ).b()}}(this))),u_=(new A).e("MEAN",K(function(){return function(){return(new dJ).b()}}(this))),
+Vr=(new A).e("MEDIAN",K(function(){return function(){return(new eJ).b()}}(this))),$7=(new A).e("MEMBER?",K(function(){return function(){return(new fJ).b()}}(this))),bH=(new A).e("MIN",K(function(){return function(){return(new gJ).b()}}(this))),a8=(new A).e("MIN-N-OF",K(function(){return function(){return(new hJ).b()}}(this))),b8=(new A).e("MIN-ONE-OF",K(function(){return function(){return(new iJ).b()}}(this))),c8=(new A).e("MIN-PXCOR",K(function(){return function(){return(new jJ).b()}}(this))),d8=
+(new A).e("MIN-PYCOR",K(function(){return function(){return(new kJ).b()}}(this))),e8=(new A).e("MOD",K(function(){return function(){return(new lJ).b()}}(this))),f8=(new A).e("MODES",K(function(){return function(){return(new mJ).b()}}(this))),v_=(new A).e("MOUSE-DOWN?",K(function(){return function(){return(new nJ).b()}}(this))),g8=(new A).e("MOUSE-INSIDE?",K(function(){return function(){return(new oJ).b()}}(this))),h8=(new A).e("MOUSE-XCOR",K(function(){return function(){return(new pJ).b()}}(this))),
+i8=(new A).e("MOUSE-YCOR",K(function(){return function(){return(new qJ).b()}}(this))),j8=(new A).e("MY-IN-LINKS",K(function(){return function(){return(new IG).b()}}(this))),PCa=(new A).e("MY-LINKS",K(function(){return function(){return(new JG).b()}}(this))),QCa=(new A).e("MY-OUT-LINKS",K(function(){return function(){return(new KG).b()}}(this))),RCa=(new A).e("MYSELF",K(function(){return function(){return(new rJ).b()}}(this))),SCa=(new A).e("N-OF",K(function(){return function(){return(new sJ).b()}}(this))),
+TCa=(new A).e("N-VALUES",K(function(){return function(){return(new tJ).b()}}(this))),UCa=(new A).e("NEIGHBORS",K(function(){return function(){return(new uJ).b()}}(this))),VCa=(new A).e("NEIGHBORS4",K(function(){return function(){return(new vJ).b()}}(this))),WCa=(new A).e("NETLOGO-APPLET?",K(function(){return function(){return(new wJ).b()}}(this))),XCa=(new A).e("NETLOGO-VERSION",K(function(){return function(){return(new xJ).b()}}(this))),YCa=(new A).e("NETLOGO-WEB?",K(function(){return function(){return(new yJ).b()}}(this))),
+ZCa=(new A).e("NEW-SEED",K(function(){return function(){return(new zJ).b()}}(this))),$Ca=(new A).e("NO-LINKS",K(function(){return function(){return(new AJ).b()}}(this))),aDa=(new A).e("NO-PATCHES",K(function(){return function(){return(new BJ).b()}}(this))),bDa=(new A).e("NO-TURTLES",K(function(){return function(){return(new CJ).b()}}(this))),cDa=(new A).e("NOT",K(function(){return function(){return(new DJ).b()}}(this))),dDa=(new A).e("OF",K(function(){return function(){return(new EJ).b()}}(this))),
+eDa=(new A).e("ONE-OF",K(function(){return function(){return(new FJ).b()}}(this))),fDa=(new A).e("OR",K(function(){return function(){return(new GJ).b()}}(this))),gDa=(new A).e("OTHER",K(function(){return function(){return(new HJ).b()}}(this))),hDa=(new A).e("OTHER-END",K(function(){return function(){return(new IJ).b()}}(this))),iDa=(new A).e("OUT-LINK-NEIGHBOR?",K(function(){return function(){return(new LG).b()}}(this))),jDa=(new A).e("OUT-LINK-NEIGHBORS",K(function(){return function(){return(new MG).b()}}(this))),
+kDa=(new A).e("OUT-LINK-TO",K(function(){return function(){return(new NG).b()}}(this))),lDa=(new A).e("PATCH",K(function(){return function(){return(new JJ).b()}}(this))),mDa=(new A).e("PATCH-AHEAD",K(function(){return function(){return(new KJ).b()}}(this))),nDa=(new A).e("PATCH-AT",K(function(){return function(){return(new LJ).b()}}(this))),oDa=(new A).e("PATCH-AT-HEADING-AND-DISTANCE",K(function(){return function(){return(new MJ).b()}}(this))),pDa=(new A).e("PATCH-HERE",K(function(){return function(){return(new NJ).b()}}(this))),
+qDa=(new A).e("PATCH-LEFT-AND-AHEAD",K(function(){return function(){return(new OJ).b()}}(this))),rDa=(new A).e("PATCH-RIGHT-AND-AHEAD",K(function(){return function(){return(new PJ).b()}}(this))),sDa=(new A).e("PATCH-SET",K(function(){return function(){return(new QJ).b()}}(this))),tDa=(new A).e("PATCH-SIZE",K(function(){return function(){return(new RJ).b()}}(this))),uDa=(new A).e("PATCHES",K(function(){return function(){return(new SJ).b()}}(this))),vDa=(new A).e("PLOT-NAME",K(function(){return function(){return(new TJ).b()}}(this))),
+wDa=(new A).e("PLOT-PEN-EXISTS?",K(function(){return function(){return(new UJ).b()}}(this))),xDa=(new A).e("PLOT-X-MAX",K(function(){return function(){return(new VJ).b()}}(this))),yDa=(new A).e("PLOT-X-MIN",K(function(){return function(){return(new WJ).b()}}(this))),zDa=(new A).e("PLOT-Y-MAX",K(function(){return function(){return(new XJ).b()}}(this))),ADa=(new A).e("PLOT-Y-MIN",K(function(){return function(){return(new YJ).b()}}(this))),BDa=(new A).e("POSITION",K(function(){return function(){return(new ZJ).b()}}(this))),
+CDa=(new A).e("PRECISION",K(function(){return function(){return(new $J).b()}}(this))),DDa=(new A).e("RANDOM",K(function(){return function(){return(new aK).b()}}(this))),EDa=(new A).e("RANDOM-EXPONENTIAL",K(function(){return function(){return(new bK).b()}}(this))),FDa=(new A).e("RANDOM-FLOAT",K(function(){return function(){return(new cK).b()}}(this))),GDa=(new A).e("RANDOM-GAMMA",K(function(){return function(){return(new dK).b()}}(this))),HDa=(new A).e("RANDOM-NORMAL",K(function(){return function(){return(new eK).b()}}(this))),
+IDa=(new A).e("RANDOM-POISSON",K(function(){return function(){return(new fK).b()}}(this))),JDa=(new A).e("RANDOM-PXCOR",K(function(){return function(){return(new gK).b()}}(this))),KDa=(new A).e("RANDOM-PYCOR",K(function(){return function(){return(new hK).b()}}(this))),LDa=(new A).e("RANDOM-XCOR",K(function(){return function(){return(new iK).b()}}(this))),MDa=(new A).e("RANDOM-YCOR",K(function(){return function(){return(new jK).b()}}(this))),NDa=(new A).e("RANGE",K(function(){return function(){return(new kK).b()}}(this))),
+ODa=(new A).e("READ-FROM-STRING",K(function(){return function(){return(new lK).b()}}(this))),PDa=(new A).e("REDUCE",K(function(){return function(){return(new mK).b()}}(this))),QDa=(new A).e("REMAINDER",K(function(){return function(){return(new nK).b()}}(this))),RDa=(new A).e("REMOVE",K(function(){return function(){return(new oK).b()}}(this))),SDa=(new A).e("REMOVE-DUPLICATES",K(function(){return function(){return(new pK).b()}}(this))),TDa=(new A).e("REMOVE-ITEM",K(function(){return function(){return(new qK).b()}}(this))),
+UDa=(new A).e("REPLACE-ITEM",K(function(){return function(){return(new rK).b()}}(this))),VDa=(new A).e("REVERSE",K(function(){return function(){return(new sK).b()}}(this))),WDa=(new A).e("RGB",K(function(){return function(){return(new tK).b()}}(this))),XDa=(new A).e("ROUND",K(function(){return function(){return(new uK).b()}}(this))),YDa=(new A).e("RUN-RESULT",K(function(){return function(){return(new vK).b()}}(this))),ZDa=(new A).e("RUNRESULT",K(function(){return function(){return(new vK).b()}}(this))),
+$Da=(new A).e("SCALE-COLOR",K(function(){return function(){return(new wK).b()}}(this))),aEa=(new A).e("SE",K(function(){return function(){return(new xK).b()}}(this))),bEa=(new A).e("SELF",K(function(){return function(){return(new yK).b()}}(this))),cEa=(new A).e("SENTENCE",K(function(){return function(){return(new xK).b()}}(this))),dEa=(new A).e("SHADE-OF?",K(function(){return function(){return(new zK).b()}}(this))),eEa=(new A).e("SHAPES",K(function(){return function(){return(new AK).b()}}(this))),
+fEa=(new A).e("SHUFFLE",K(function(){return function(){return(new BK).b()}}(this))),gEa=(new A).e("SIN",K(function(){return function(){return(new CK).b()}}(this))),hEa=(new A).e("SORT",K(function(){return function(){return(new DK).b()}}(this))),iEa=(new A).e("SORT-BY",K(function(){return function(){return(new EK).b()}}(this))),jEa=(new A).e("SORT-ON",K(function(){return function(){return(new FK).b()}}(this))),kEa=(new A).e("SQRT",K(function(){return function(){return(new GK).b()}}(this))),lEa=(new A).e("STANDARD-DEVIATION",
+K(function(){return function(){return(new HK).b()}}(this))),mEa=(new A).e("SUBJECT",K(function(){return function(){return(new IK).b()}}(this))),nEa=(new A).e("SUBLIST",K(function(){return function(){return(new JK).b()}}(this))),oEa=(new A).e("SUBSTRING",K(function(){return function(){return(new KK).b()}}(this))),pEa=(new A).e("SUBTRACT-HEADINGS",K(function(){return function(){return(new LK).b()}}(this))),qEa=(new A).e("SUM",K(function(){return function(){return(new MK).b()}}(this))),rEa=(new A).e("TAN",
+K(function(){return function(){return(new NK).b()}}(this))),sEa=(new A).e("TICKS",K(function(){return function(){return(new OK).b()}}(this))),tEa=(new A).e("TIMER",K(function(){return function(){return(new PK).b()}}(this))),uEa=(new A).e("TOWARDS",K(function(){return function(){return(new QK).b()}}(this))),vEa=(new A).e("TOWARDSXY",K(function(){return function(){return(new RK).b()}}(this))),wEa=(new A).e("TURTLE",K(function(){return function(){return(new SK).b()}}(this))),xEa=(new A).e("TURTLE-SET",
+K(function(){return function(){return(new TK).b()}}(this))),yEa=(new A).e("TURTLES",K(function(){return function(){return(new UK).b()}}(this))),zEa=(new A).e("TURTLES-AT",K(function(){return function(){return(new VK).b()}}(this))),AEa=(new A).e("TURTLES-HERE",K(function(){return function(){return(new WK).b()}}(this))),BEa=(new A).e("TURTLES-ON",K(function(){return function(){return(new XK).b()}}(this))),CEa=(new A).e("USER-DIRECTORY",K(function(){return function(){return(new YK).b()}}(this))),DEa=
+(new A).e("USER-FILE",K(function(){return function(){return(new ZK).b()}}(this))),EEa=(new A).e("USER-INPUT",K(function(){return function(){return(new $K).b()}}(this))),FEa=(new A).e("USER-NEW-FILE",K(function(){return function(){return(new aL).b()}}(this))),GEa=(new A).e("USER-ONE-OF",K(function(){return function(){return(new bL).b()}}(this))),HEa=(new A).e("USER-YES-OR-NO?",K(function(){return function(){return(new cL).b()}}(this))),IEa=(new A).e("VARIANCE",K(function(){return function(){return(new dL).b()}}(this))),
+JEa=(new A).e("WITH",K(function(){return function(){return(new eL).b()}}(this))),KEa=(new A).e("WITH-MAX",K(function(){return function(){return(new fL).b()}}(this))),LEa=(new A).e("WITH-MIN",K(function(){return function(){return(new gL).b()}}(this))),MEa=(new A).e("WORD",K(function(){return function(){return(new hL).b()}}(this))),NEa=(new A).e("WORLD-HEIGHT",K(function(){return function(){return(new iL).b()}}(this))),OEa=(new A).e("WORLD-WIDTH",K(function(){return function(){return(new jL).b()}}(this))),
+PEa=(new A).e("WRAP-COLOR",K(function(){return function(){return(new kL).b()}}(this)));this.nj=Vg(rg,(new w).f([bi,Vi,ik,Wi,jk,Xi,Bl,Yi,kk,Zi,Cl,xh,Dl,yh,lk,El,ci,di,Fl,Gl,Hl,mk,Il,Jl,Kl,Ll,nk,Ml,ei,ok,zh,Nl,$i,pk,Ah,Yf,xe,Bh,fi,qk,aj,Ol,bj,Pl,cj,dj,rk,Ql,ej,gi,Rl,Xg,Yg,sk,fj,Ch,tk,Sl,uk,Zg,Tl,gj,hi,Dh,Ul,sg,ji,Eh,hj,$g,ij,jj,ki,li,kj,Zf,uf,ee,lj,tg,mj,nj,mi,ni,Vl,vk,ah,oi,Wl,wk,ii,LF,Cw,gx,qG,Gr,hx,yk,In,gm,ix,Hr,Jn,zk,sG,Ir,hm,Jr,tG,uG,Kn,vG,N7,O7,Q7,R7,S7,T7,aH,U7,V7,X7,Y7,Z7,u_,Vr,$7,bH,a8,b8,
+c8,d8,e8,f8,v_,g8,h8,i8,j8,PCa,QCa,RCa,SCa,TCa,UCa,VCa,WCa,XCa,YCa,ZCa,$Ca,aDa,bDa,cDa,dDa,eDa,fDa,gDa,hDa,iDa,jDa,kDa,lDa,mDa,nDa,oDa,pDa,qDa,rDa,sDa,tDa,uDa,vDa,wDa,xDa,yDa,zDa,ADa,BDa,CDa,DDa,EDa,FDa,GDa,HDa,IDa,JDa,KDa,LDa,MDa,NDa,ODa,PDa,QDa,RDa,SDa,TDa,UDa,VDa,WDa,XDa,YDa,ZDa,$Da,aEa,bEa,cEa,dEa,eEa,fEa,gEa,hEa,iEa,jEa,kEa,lEa,mEa,nEa,oEa,pEa,qEa,rEa,sEa,tEa,uEa,vEa,wEa,xEa,yEa,zEa,AEa,BEa,CEa,DEa,EEa,FEa,GEa,HEa,IEa,JEa,KEa,LEa,MEa,NEa,OEa,PEa,(new A).e("XOR",K(function(){return function(){return(new lL).b()}}(this)))]));
+this.a=(2|this.a)<<24>>24;var QEa=Je().$h,REa=(new A).e("__APPLY",K(function(){return function(){return(new mL).b()}}(this))),SEa=(new A).e("__BENCH",K(function(){return function(){return(new nL).b()}}(this))),TEa=(new A).e("__CHANGE-TOPOLOGY",K(function(){return function(){return(new oL).b()}}(this))),UEa=(new A).e("__DONE",K(function(){return function(){return(new pL).b()}}(this))),VEa=(new A).e("__EXPERIMENTSTEPEND",K(function(){return function(){return(new qL).b()}}(this))),WEa=(new A).e("__EXPORT-DRAWING",
+K(function(){return function(){return(new rL).b()}}(this))),XEa=(new A).e("__FOREVERBUTTONEND",K(function(){return function(){return(new sL).b()}}(this))),YEa=(new A).e("__IGNORE",K(function(){return function(){return(new tL).b()}}(this))),ZEa=(new A).e("__LET",K(function(){return function(){return(new uL).b()}}(this))),$Ea=(new A).e("__LINKCODE",K(function(){return function(){return(new vL).b()}}(this))),aFa=(new A).e("__MKDIR",K(function(){return function(){return(new wL).b()}}(this))),bFa=(new A).e("__OBSERVERCODE",
+K(function(){return function(){return(new xL).b()}}(this))),cFa=(new A).e("__PATCHCODE",K(function(){return function(){return(new yL).b()}}(this))),dFa=(new A).e("__PLOT-PEN-HIDE",K(function(){return function(){return(new zL).b()}}(this))),eFa=(new A).e("__PLOT-PEN-SHOW",K(function(){return function(){return(new AL).b()}}(this))),fFa=(new A).e("__PWD",K(function(){return function(){return(new BL).b()}}(this))),gFa=(new A).e("__RELOAD-EXTENSIONS",K(function(){return function(){return(new CL).b()}}(this))),
+hFa=(new A).e("__SET-LINE-THICKNESS",K(function(){return function(){return(new DL).b()}}(this))),iFa=(new A).e("__STDERR",K(function(){return function(){return(new EL).b()}}(this))),jFa=(new A).e("__STDOUT",K(function(){return function(){return(new FL).b()}}(this))),kFa=(new A).e("__THUNK-DID-FINISH",K(function(){return function(){return(new GL).b()}}(this))),lFa=(new A).e("__TURTLECODE",K(function(){return function(){return(new HL).b()}}(this))),mFa=(new A).e("ASK",K(function(){return function(){return(new IL).b()}}(this))),
+nFa=(new A).e("ASK-CONCURRENT",K(function(){return function(){return(new JL).b()}}(this))),oFa=(new A).e("AUTO-PLOT-OFF",K(function(){return function(){return(new KL).b()}}(this))),pFa=(new A).e("AUTO-PLOT-ON",K(function(){return function(){return(new LL).b()}}(this))),qFa=(new A).e("BACK",K(function(){return function(){return(new ML).b()}}(this))),rFa=(new A).e("BEEP",K(function(){return function(){return(new NL).b()}}(this))),sFa=(new A).e("BK",K(function(){return function(){return(new ML).b()}}(this))),
+tFa=(new A).e("CA",K(function(){return function(){return(new OL).b()}}(this))),uFa=(new A).e("CAREFULLY",K(function(){return function(){return(new PL).b()}}(this))),vFa=(new A).e("CD",K(function(){return function(){return(new QL).b()}}(this))),wFa=(new A).e("CLEAR-ALL",K(function(){return function(){return(new OL).b()}}(this))),xFa=(new A).e("CLEAR-ALL-PLOTS",K(function(){return function(){return(new RL).b()}}(this))),yFa=(new A).e("CLEAR-DRAWING",K(function(){return function(){return(new QL).b()}}(this))),
+zFa=(new A).e("CLEAR-GLOBALS",K(function(){return function(){return(new SL).b()}}(this))),AFa=(new A).e("CLEAR-LINKS",K(function(){return function(){return(new TL).b()}}(this))),BFa=(new A).e("CLEAR-OUTPUT",K(function(){return function(){return(new UL).b()}}(this))),CFa=(new A).e("CLEAR-PATCHES",K(function(){return function(){return(new VL).b()}}(this))),DFa=(new A).e("CLEAR-PLOT",K(function(){return function(){return(new WL).b()}}(this))),EFa=(new A).e("CLEAR-TICKS",K(function(){return function(){return(new XL).b()}}(this))),
+FFa=(new A).e("CLEAR-TURTLES",K(function(){return function(){return(new YL).b()}}(this))),GFa=(new A).e("CP",K(function(){return function(){return(new VL).b()}}(this))),HFa=(new A).e("CREATE-LINK-FROM",K(function(){return function(){return(new QG).b()}}(this))),IFa=(new A).e("CREATE-LINK-TO",K(function(){return function(){return(new PG).b()}}(this))),JFa=(new A).e("CREATE-LINK-WITH",K(function(){return function(){return(new OG).b()}}(this))),KFa=(new A).e("CREATE-LINKS-FROM",K(function(){return function(){return(new TG).b()}}(this))),
+LFa=(new A).e("CREATE-LINKS-TO",K(function(){return function(){return(new SG).b()}}(this))),MFa=(new A).e("CREATE-LINKS-WITH",K(function(){return function(){return(new RG).b()}}(this))),NFa=(new A).e("CREATE-ORDERED-TURTLES",K(function(){return function(){return(new lG).b()}}(this))),OFa=(new A).e("CREATE-TEMPORARY-PLOT-PEN",K(function(){return function(){return(new ZL).b()}}(this))),PFa=(new A).e("CREATE-TURTLES",K(function(){return function(){return(new mG).b()}}(this))),QFa=(new A).e("CRO",K(function(){return function(){return(new lG).b()}}(this))),
+RFa=(new A).e("CRT",K(function(){return function(){return(new mG).b()}}(this))),SFa=(new A).e("CT",K(function(){return function(){return(new YL).b()}}(this))),TFa=(new A).e("DIE",K(function(){return function(){return(new $L).b()}}(this))),UFa=(new A).e("DIFFUSE",K(function(){return function(){return(new aM).b()}}(this))),VFa=(new A).e("DIFFUSE4",K(function(){return function(){return(new bM).b()}}(this))),WFa=(new A).e("DISPLAY",K(function(){return function(){return(new cM).b()}}(this))),XFa=(new A).e("DOWNHILL",
+K(function(){return function(){return(new dM).b()}}(this))),YFa=(new A).e("DOWNHILL4",K(function(){return function(){return(new eM).b()}}(this))),ZFa=(new A).e("ERROR",K(function(){return function(){return(new fM).b()}}(this))),$Fa=(new A).e("EVERY",K(function(){return function(){return(new gM).b()}}(this))),aGa=(new A).e("EXPORT-ALL-PLOTS",K(function(){return function(){return(new hM).b()}}(this))),bGa=(new A).e("EXPORT-INTERFACE",K(function(){return function(){return(new iM).b()}}(this))),cGa=(new A).e("EXPORT-OUTPUT",
+K(function(){return function(){return(new jM).b()}}(this))),dGa=(new A).e("EXPORT-PLOT",K(function(){return function(){return(new kM).b()}}(this))),eGa=(new A).e("EXPORT-VIEW",K(function(){return function(){return(new lM).b()}}(this))),fGa=(new A).e("EXPORT-WORLD",K(function(){return function(){return(new mM).b()}}(this))),gGa=(new A).e("FACE",K(function(){return function(){return(new nM).b()}}(this))),hGa=(new A).e("FACEXY",K(function(){return function(){return(new oM).b()}}(this))),iGa=(new A).e("FD",
+K(function(){return function(){return(new pM).b()}}(this))),jGa=(new A).e("FILE-CLOSE",K(function(){return function(){return(new qM).b()}}(this))),kGa=(new A).e("FILE-CLOSE-ALL",K(function(){return function(){return(new rM).b()}}(this))),lGa=(new A).e("FILE-DELETE",K(function(){return function(){return(new sM).b()}}(this))),mGa=(new A).e("FILE-FLUSH",K(function(){return function(){return(new tM).b()}}(this))),nGa=(new A).e("FILE-OPEN",K(function(){return function(){return(new uM).b()}}(this))),oGa=
+(new A).e("FILE-PRINT",K(function(){return function(){return(new vM).b()}}(this))),pGa=(new A).e("FILE-SHOW",K(function(){return function(){return(new wM).b()}}(this))),qGa=(new A).e("FILE-TYPE",K(function(){return function(){return(new xM).b()}}(this))),rGa=(new A).e("FILE-WRITE",K(function(){return function(){return(new yM).b()}}(this))),sGa=(new A).e("FOLLOW",K(function(){return function(){return(new zM).b()}}(this))),tGa=(new A).e("FOLLOW-ME",K(function(){return function(){return(new AM).b()}}(this))),
+uGa=(new A).e("FOREACH",K(function(){return function(){return(new BM).b()}}(this))),vGa=(new A).e("FORWARD",K(function(){return function(){return(new pM).b()}}(this))),wGa=(new A).e("HATCH",K(function(){return function(){return(new nG).b()}}(this))),xGa=(new A).e("HIDE-LINK",K(function(){return function(){return(new CM).b()}}(this))),yGa=(new A).e("HIDE-TURTLE",K(function(){return function(){return(new DM).b()}}(this))),zGa=(new A).e("HISTOGRAM",K(function(){return function(){return(new EM).b()}}(this))),
+AGa=(new A).e("HOME",K(function(){return function(){return(new FM).b()}}(this))),BGa=(new A).e("HT",K(function(){return function(){return(new DM).b()}}(this))),CGa=(new A).e("HUBNET-BROADCAST",K(function(){return function(){return(new GM).b()}}(this))),DGa=(new A).e("HUBNET-BROADCAST-CLEAR-OUTPUT",K(function(){return function(){return(new HM).b()}}(this))),EGa=(new A).e("HUBNET-BROADCAST-MESSAGE",K(function(){return function(){return(new IM).b()}}(this))),FGa=(new A).e("HUBNET-CLEAR-OVERRIDE",K(function(){return function(){return(new JM).b()}}(this))),
+GGa=(new A).e("HUBNET-CLEAR-OVERRIDES",K(function(){return function(){return(new KM).b()}}(this))),HGa=(new A).e("HUBNET-FETCH-MESSAGE",K(function(){return function(){return(new LM).b()}}(this))),IGa=(new A).e("HUBNET-KICK-ALL-CLIENTS",K(function(){return function(){return(new MM).b()}}(this))),JGa=(new A).e("HUBNET-KICK-CLIENT",K(function(){return function(){return(new NM).b()}}(this))),KGa=(new A).e("HUBNET-RESET",K(function(){return function(){return(new OM).b()}}(this))),LGa=(new A).e("HUBNET-RESET-PERSPECTIVE",
+K(function(){return function(){return(new PM).b()}}(this))),MGa=(new A).e("HUBNET-SEND",K(function(){return function(){return(new QM).b()}}(this))),NGa=(new A).e("HUBNET-SEND-CLEAR-OUTPUT",K(function(){return function(){return(new RM).b()}}(this))),OGa=(new A).e("HUBNET-SEND-FOLLOW",K(function(){return function(){return(new SM).b()}}(this))),PGa=(new A).e("HUBNET-SEND-MESSAGE",K(function(){return function(){return(new TM).b()}}(this))),QGa=(new A).e("HUBNET-SEND-OVERRIDE",K(function(){return function(){return(new UM).b()}}(this))),
+RGa=(new A).e("HUBNET-SEND-WATCH",K(function(){return function(){return(new VM).b()}}(this))),SGa=(new A).e("IF",K(function(){return function(){return(new WM).b()}}(this))),TGa=(new A).e("IF-ELSE",K(function(){return function(){return(new XM).b()}}(this))),UGa=(new A).e("IFELSE",K(function(){return function(){return(new XM).b()}}(this))),VGa=(new A).e("IMPORT-DRAWING",K(function(){return function(){return(new YM).b()}}(this))),WGa=(new A).e("IMPORT-PCOLORS",K(function(){return function(){return(new ZM).b()}}(this))),
+XGa=(new A).e("IMPORT-PCOLORS-RGB",K(function(){return function(){return(new $M).b()}}(this))),YGa=(new A).e("IMPORT-WORLD",K(function(){return function(){return(new aN).b()}}(this))),ZGa=(new A).e("INSPECT",K(function(){return function(){return(new bN).b()}}(this))),$Ga=(new A).e("JUMP",K(function(){return function(){return(new cN).b()}}(this))),aHa=(new A).e("LAYOUT-CIRCLE",K(function(){return function(){return(new dN).b()}}(this))),bHa=(new A).e("LAYOUT-RADIAL",K(function(){return function(){return(new eN).b()}}(this))),
+cHa=(new A).e("LAYOUT-SPRING",K(function(){return function(){return(new fN).b()}}(this))),dHa=(new A).e("LAYOUT-TUTTE",K(function(){return function(){return(new gN).b()}}(this))),eHa=(new A).e("LEFT",K(function(){return function(){return(new hN).b()}}(this))),fHa=(new A).e("LET",K(function(){return function(){return(new uL).b()}}(this))),gHa=(new A).e("LOOP",K(function(){return function(){return(new iN).b()}}(this))),hHa=(new A).e("LT",K(function(){return function(){return(new hN).b()}}(this))),iHa=
+(new A).e("MOVE-TO",K(function(){return function(){return(new jN).b()}}(this))),jHa=(new A).e("NO-DISPLAY",K(function(){return function(){return(new kN).b()}}(this))),kHa=(new A).e("OUTPUT-PRINT",K(function(){return function(){return(new lN).b()}}(this))),lHa=(new A).e("OUTPUT-SHOW",K(function(){return function(){return(new mN).b()}}(this))),mHa=(new A).e("OUTPUT-TYPE",K(function(){return function(){return(new nN).b()}}(this))),nHa=(new A).e("OUTPUT-WRITE",K(function(){return function(){return(new oN).b()}}(this))),
+oHa=(new A).e("PD",K(function(){return function(){return(new pN).b()}}(this))),pHa=(new A).e("PE",K(function(){return function(){return(new qN).b()}}(this))),qHa=(new A).e("PEN-DOWN",K(function(){return function(){return(new pN).b()}}(this))),rHa=(new A).e("PEN-ERASE",K(function(){return function(){return(new qN).b()}}(this))),sHa=(new A).e("PEN-UP",K(function(){return function(){return(new rN).b()}}(this))),tHa=(new A).e("PENDOWN",K(function(){return function(){return(new pN).b()}}(this))),uHa=(new A).e("PENUP",
+K(function(){return function(){return(new rN).b()}}(this))),vHa=(new A).e("PLOT",K(function(){return function(){return(new sN).b()}}(this))),wHa=(new A).e("PLOT-PEN-DOWN",K(function(){return function(){return(new tN).b()}}(this))),xHa=(new A).e("PLOT-PEN-RESET",K(function(){return function(){return(new uN).b()}}(this))),yHa=(new A).e("PLOT-PEN-UP",K(function(){return function(){return(new vN).b()}}(this))),zHa=(new A).e("PLOTXY",K(function(){return function(){return(new wN).b()}}(this))),AHa=(new A).e("PRINT",
+K(function(){return function(){return(new xN).b()}}(this))),BHa=(new A).e("PU",K(function(){return function(){return(new rN).b()}}(this))),CHa=(new A).e("RANDOM-SEED",K(function(){return function(){return(new yN).b()}}(this))),DHa=(new A).e("REPEAT",K(function(){return function(){return(new zN).b()}}(this))),EHa=(new A).e("REPORT",K(function(){return function(){return(new AN).b()}}(this))),FHa=(new A).e("RESET-PERSPECTIVE",K(function(){return function(){return(new BN).b()}}(this))),GHa=(new A).e("RESET-TICKS",
+K(function(){return function(){return(new CN).b()}}(this))),HHa=(new A).e("RESET-TIMER",K(function(){return function(){return(new DN).b()}}(this))),IHa=(new A).e("RESIZE-WORLD",K(function(){return function(){return(new EN).b()}}(this))),JHa=(new A).e("RIDE",K(function(){return function(){return(new FN).b()}}(this))),KHa=(new A).e("RIDE-ME",K(function(){return function(){return(new GN).b()}}(this))),LHa=(new A).e("RIGHT",K(function(){return function(){return(new HN).b()}}(this))),MHa=(new A).e("RP",
+K(function(){return function(){return(new BN).b()}}(this))),NHa=(new A).e("RT",K(function(){return function(){return(new HN).b()}}(this))),OHa=(new A).e("RUN",K(function(){return function(){return(new IN).b()}}(this))),PHa=(new A).e("SET",K(function(){return function(){return(new JN).b()}}(this))),QHa=(new A).e("SET-CURRENT-DIRECTORY",K(function(){return function(){return(new KN).b()}}(this))),RHa=(new A).e("SET-CURRENT-PLOT",K(function(){return function(){return(new LN).b()}}(this))),SHa=(new A).e("SET-CURRENT-PLOT-PEN",
+K(function(){return function(){return(new MN).b()}}(this))),THa=(new A).e("SET-DEFAULT-SHAPE",K(function(){return function(){return(new NN).b()}}(this))),UHa=(new A).e("SET-HISTOGRAM-NUM-BARS",K(function(){return function(){return(new ON).b()}}(this))),VHa=(new A).e("SET-PATCH-SIZE",K(function(){return function(){return(new PN).b()}}(this))),WHa=(new A).e("SET-PLOT-PEN-COLOR",K(function(){return function(){return(new QN).b()}}(this))),XHa=(new A).e("SET-PLOT-PEN-INTERVAL",K(function(){return function(){return(new RN).b()}}(this))),
+YHa=(new A).e("SET-PLOT-PEN-MODE",K(function(){return function(){return(new SN).b()}}(this))),ZHa=(new A).e("SET-PLOT-X-RANGE",K(function(){return function(){return(new TN).b()}}(this))),$Ha=(new A).e("SET-PLOT-Y-RANGE",K(function(){return function(){return(new UN).b()}}(this))),aIa=(new A).e("SETUP-PLOTS",K(function(){return function(){return(new VN).b()}}(this))),bIa=(new A).e("SETXY",K(function(){return function(){return(new WN).b()}}(this))),cIa=(new A).e("SHOW",K(function(){return function(){return(new XN).b()}}(this))),
+dIa=(new A).e("SHOW-LINK",K(function(){return function(){return(new YN).b()}}(this))),eIa=(new A).e("SHOW-TURTLE",K(function(){return function(){return(new ZN).b()}}(this))),fIa=(new A).e("SPROUT",K(function(){return function(){return(new pG).b()}}(this))),gIa=(new A).e("ST",K(function(){return function(){return(new ZN).b()}}(this))),hIa=(new A).e("STAMP",K(function(){return function(){return(new $N).b()}}(this))),iIa=(new A).e("STAMP-ERASE",K(function(){return function(){return(new aO).b()}}(this))),
+jIa=(new A).e("STOP",K(function(){return function(){return(new bO).b()}}(this))),kIa=(new A).e("STOP-INSPECTING",K(function(){return function(){return(new cO).b()}}(this))),lIa=(new A).e("STOP-INSPECTING-DEAD-AGENTS",K(function(){return function(){return(new dO).b()}}(this))),mIa=(new A).e("TICK",K(function(){return function(){return(new eO).b()}}(this))),nIa=(new A).e("TICK-ADVANCE",K(function(){return function(){return(new fO).b()}}(this))),oIa=(new A).e("TIE",K(function(){return function(){return(new gO).b()}}(this))),
+pIa=(new A).e("TYPE",K(function(){return function(){return(new hO).b()}}(this))),qIa=(new A).e("UNTIE",K(function(){return function(){return(new iO).b()}}(this))),rIa=(new A).e("UPDATE-PLOTS",K(function(){return function(){return(new jO).b()}}(this))),sIa=(new A).e("UPHILL",K(function(){return function(){return(new kO).b()}}(this))),tIa=(new A).e("UPHILL4",K(function(){return function(){return(new lO).b()}}(this))),uIa=(new A).e("USER-MESSAGE",K(function(){return function(){return(new mO).b()}}(this))),
+vIa=(new A).e("WAIT",K(function(){return function(){return(new nO).b()}}(this))),wIa=(new A).e("WATCH",K(function(){return function(){return(new oO).b()}}(this))),xIa=(new A).e("WATCH-ME",K(function(){return function(){return(new pO).b()}}(this))),yIa=(new A).e("WHILE",K(function(){return function(){return(new qO).b()}}(this))),zIa=(new A).e("WITH-LOCAL-RANDOMNESS",K(function(){return function(){return(new rO).b()}}(this))),AIa=(new A).e("WITHOUT-INTERRUPTION",K(function(){return function(){return(new sO).b()}}(this)));
+this.cj=Vg(QEa,(new w).f([REa,SEa,TEa,UEa,VEa,WEa,XEa,YEa,ZEa,$Ea,aFa,bFa,cFa,dFa,eFa,fFa,gFa,hFa,iFa,jFa,kFa,lFa,mFa,nFa,oFa,pFa,qFa,rFa,sFa,tFa,uFa,vFa,wFa,xFa,yFa,zFa,AFa,BFa,CFa,DFa,EFa,FFa,GFa,HFa,IFa,JFa,KFa,LFa,MFa,NFa,OFa,PFa,QFa,RFa,SFa,TFa,UFa,VFa,WFa,XFa,YFa,ZFa,$Fa,aGa,bGa,cGa,dGa,eGa,fGa,gGa,hGa,iGa,jGa,kGa,lGa,mGa,nGa,oGa,pGa,qGa,rGa,sGa,tGa,uGa,vGa,wGa,xGa,yGa,zGa,AGa,BGa,CGa,DGa,EGa,FGa,GGa,HGa,IGa,JGa,KGa,LGa,MGa,NGa,OGa,PGa,QGa,RGa,SGa,TGa,UGa,VGa,WGa,XGa,YGa,ZGa,$Ga,aHa,bHa,cHa,
+dHa,eHa,fHa,gHa,hHa,iHa,jHa,kHa,lHa,mHa,nHa,oHa,pHa,qHa,rHa,sHa,tHa,uHa,vHa,wHa,xHa,yHa,zHa,AHa,BHa,CHa,DHa,EHa,FHa,GHa,HHa,IHa,JHa,KHa,LHa,MHa,NHa,OHa,PHa,QHa,RHa,SHa,THa,UHa,VHa,WHa,XHa,YHa,ZHa,$Ha,aIa,bIa,cIa,dIa,eIa,fIa,gIa,hIa,iIa,jIa,kIa,lIa,mIa,nIa,oIa,pIa,qIa,rIa,sIa,tIa,uIa,vIa,wIa,xIa,yIa,zIa,AIa,(new A).e("WRITE",K(function(){return function(){return(new tO).b()}}(this)))]));this.a=(4|this.a)<<24>>24;var BIa=Je().$h,CIa=I(r(),(new w).f(["__APPLY"])),DIa=(new A).e("etc._apply",CIa),EIa=
+I(r(),(new w).f(["__BENCH"])),FIa=(new A).e("etc._bench",EIa),GIa=I(r(),(new w).f(["__CHANGE-TOPOLOGY"])),HIa=(new A).e("etc._changetopology",GIa),IIa=I(r(),(new w).f(["__DONE"])),JIa=(new A).e("_done",IIa),KIa=I(r(),(new w).f(["__EXPERIMENTSTEPEND"])),LIa=(new A).e("etc._experimentstepend",KIa),MIa=I(r(),(new w).f(["__EXPORT-DRAWING"])),NIa=(new A).e("etc._exportdrawing",MIa),OIa=I(r(),(new w).f(["__FOREVERBUTTONEND"])),PIa=(new A).e("etc._foreverbuttonend",OIa),QIa=I(r(),(new w).f(["__IGNORE"])),
+RIa=(new A).e("etc._ignore",QIa),SIa=I(r(),(new w).f(["__LET","LET"])),TIa=(new A).e("_let",SIa),UIa=I(r(),(new w).f(["__LINKCODE"])),VIa=(new A).e("etc._linkcode",UIa),WIa=I(r(),(new w).f(["__MKDIR"])),XIa=(new A).e("etc._mkdir",WIa),YIa=I(r(),(new w).f(["__OBSERVERCODE"])),ZIa=(new A).e("etc._observercode",YIa),$Ia=I(r(),(new w).f(["__PATCHCODE"])),aJa=(new A).e("etc._patchcode",$Ia),bJa=I(r(),(new w).f(["__PLOT-PEN-HIDE"])),cJa=(new A).e("etc._plotpenhide",bJa),dJa=I(r(),(new w).f(["__PLOT-PEN-SHOW"])),
+eJa=(new A).e("etc._plotpenshow",dJa),fJa=I(r(),(new w).f(["__PWD"])),gJa=(new A).e("etc._pwd",fJa),hJa=I(r(),(new w).f(["__RELOAD-EXTENSIONS"])),iJa=(new A).e("etc._reloadextensions",hJa),jJa=I(r(),(new w).f(["__SET-LINE-THICKNESS"])),kJa=(new A).e("etc._setlinethickness",jJa),lJa=I(r(),(new w).f(["__STDERR"])),mJa=(new A).e("etc._stderr",lJa),nJa=I(r(),(new w).f(["__STDOUT"])),oJa=(new A).e("etc._stdout",nJa),pJa=I(r(),(new w).f(["__THUNK-DID-FINISH"])),qJa=(new A).e("etc._thunkdidfinish",pJa),
+rJa=I(r(),(new w).f(["__TURTLECODE"])),sJa=(new A).e("etc._turtlecode",rJa),tJa=I(r(),(new w).f(["ASK"])),uJa=(new A).e("_ask",tJa),vJa=I(r(),(new w).f(["ASK-CONCURRENT"])),wJa=(new A).e("_askconcurrent",vJa),xJa=I(r(),(new w).f(["AUTO-PLOT-OFF"])),yJa=(new A).e("etc._autoplotoff",xJa),zJa=I(r(),(new w).f(["AUTO-PLOT-ON"])),AJa=(new A).e("etc._autoploton",zJa),BJa=I(r(),(new w).f(["BACK","BK"])),CJa=(new A).e("_bk",BJa),DJa=I(r(),(new w).f(["BEEP"])),EJa=(new A).e("etc._beep",DJa),FJa=I(r(),(new w).f(["BACK",
+"BK"])),GJa=(new A).e("_bk",FJa),HJa=I(r(),(new w).f(["CA","CLEAR-ALL"])),IJa=(new A).e("etc._clearall",HJa),JJa=I(r(),(new w).f(["CAREFULLY"])),KJa=(new A).e("_carefully",JJa),LJa=I(r(),(new w).f(["CD","CLEAR-DRAWING"])),MJa=(new A).e("etc._cleardrawing",LJa),NJa=I(r(),(new w).f(["CA","CLEAR-ALL"])),OJa=(new A).e("etc._clearall",NJa),PJa=I(r(),(new w).f(["CLEAR-ALL-PLOTS"])),QJa=(new A).e("etc._clearallplots",PJa),RJa=I(r(),(new w).f(["CD","CLEAR-DRAWING"])),SJa=(new A).e("etc._cleardrawing",RJa),
+TJa=I(r(),(new w).f(["CLEAR-GLOBALS"])),UJa=(new A).e("etc._clearglobals",TJa),VJa=I(r(),(new w).f(["CLEAR-LINKS"])),WJa=(new A).e("etc._clearlinks",VJa),XJa=I(r(),(new w).f(["CLEAR-OUTPUT"])),YJa=(new A).e("etc._clearoutput",XJa),ZJa=I(r(),(new w).f(["CLEAR-PATCHES","CP"])),$Ja=(new A).e("etc._clearpatches",ZJa),aKa=I(r(),(new w).f(["CLEAR-PLOT"])),bKa=(new A).e("etc._clearplot",aKa),cKa=I(r(),(new w).f(["CLEAR-TICKS"])),dKa=(new A).e("etc._clearticks",cKa),eKa=I(r(),(new w).f(["CLEAR-TURTLES","CT"])),
+fKa=(new A).e("etc._clearturtles",eKa),gKa=I(r(),(new w).f(["CLEAR-PATCHES","CP"])),hKa=(new A).e("etc._clearpatches",gKa),iKa=I(r(),(new w).f(["CREATE-LINK-FROM"])),jKa=(new A).e("etc._createlinkfrom",iKa),kKa=I(r(),(new w).f(["CREATE-LINK-TO"])),lKa=(new A).e("etc._createlinkto",kKa),mKa=I(r(),(new w).f(["CREATE-LINK-WITH"])),nKa=(new A).e("etc._createlinkwith",mKa),oKa=I(r(),(new w).f(["CREATE-LINKS-FROM"])),pKa=(new A).e("etc._createlinksfrom",oKa),qKa=I(r(),(new w).f(["CREATE-LINKS-TO"])),rKa=
+(new A).e("etc._createlinksto",qKa),sKa=I(r(),(new w).f(["CREATE-LINKS-WITH"])),tKa=(new A).e("etc._createlinkswith",sKa),uKa=I(r(),(new w).f(["CREATE-ORDERED-TURTLES","CRO"])),vKa=(new A).e("_createorderedturtles",uKa),wKa=I(r(),(new w).f(["CREATE-TEMPORARY-PLOT-PEN"])),xKa=(new A).e("etc._createtemporaryplotpen",wKa),yKa=I(r(),(new w).f(["CREATE-TURTLES","CRT"])),zKa=(new A).e("_createturtles",yKa),AKa=I(r(),(new w).f(["CREATE-ORDERED-TURTLES","CRO"])),BKa=(new A).e("_createorderedturtles",AKa),
+CKa=I(r(),(new w).f(["CREATE-TURTLES","CRT"])),DKa=(new A).e("_createturtles",CKa),EKa=I(r(),(new w).f(["CLEAR-TURTLES","CT"])),FKa=(new A).e("etc._clearturtles",EKa),GKa=I(r(),(new w).f(["DIE"])),HKa=(new A).e("etc._die",GKa),IKa=I(r(),(new w).f(["DIFFUSE"])),JKa=(new A).e("etc._diffuse",IKa),KKa=I(r(),(new w).f(["DIFFUSE4"])),LKa=(new A).e("etc._diffuse4",KKa),MKa=I(r(),(new w).f(["DISPLAY"])),NKa=(new A).e("etc._display",MKa),OKa=I(r(),(new w).f(["DOWNHILL"])),PKa=(new A).e("etc._downhill",OKa),
+QKa=I(r(),(new w).f(["DOWNHILL4"])),RKa=(new A).e("etc._downhill4",QKa),SKa=I(r(),(new w).f(["ERROR"])),TKa=(new A).e("etc._error",SKa),UKa=I(r(),(new w).f(["EVERY"])),VKa=(new A).e("etc._every",UKa),WKa=I(r(),(new w).f(["EXPORT-ALL-PLOTS"])),XKa=(new A).e("etc._exportplots",WKa),YKa=I(r(),(new w).f(["EXPORT-INTERFACE"])),ZKa=(new A).e("etc._exportinterface",YKa),$Ka=I(r(),(new w).f(["EXPORT-OUTPUT"])),aLa=(new A).e("etc._exportoutput",$Ka),bLa=I(r(),(new w).f(["EXPORT-PLOT"])),cLa=(new A).e("etc._exportplot",
+bLa),dLa=I(r(),(new w).f(["EXPORT-VIEW"])),eLa=(new A).e("etc._exportview",dLa),fLa=I(r(),(new w).f(["EXPORT-WORLD"])),gLa=(new A).e("etc._exportworld",fLa),hLa=I(r(),(new w).f(["FACE"])),iLa=(new A).e("etc._face",hLa),jLa=I(r(),(new w).f(["FACEXY"])),kLa=(new A).e("etc._facexy",jLa),lLa=I(r(),(new w).f(["FD","FORWARD"])),mLa=(new A).e("_fd",lLa),nLa=I(r(),(new w).f(["FILE-CLOSE"])),oLa=(new A).e("etc._fileclose",nLa),pLa=I(r(),(new w).f(["FILE-CLOSE-ALL"])),qLa=(new A).e("etc._filecloseall",pLa),
+rLa=I(r(),(new w).f(["FILE-DELETE"])),sLa=(new A).e("etc._filedelete",rLa),tLa=I(r(),(new w).f(["FILE-FLUSH"])),uLa=(new A).e("etc._fileflush",tLa),vLa=I(r(),(new w).f(["FILE-OPEN"])),wLa=(new A).e("etc._fileopen",vLa),xLa=I(r(),(new w).f(["FILE-PRINT"])),yLa=(new A).e("etc._fileprint",xLa),zLa=I(r(),(new w).f(["FILE-SHOW"])),ALa=(new A).e("etc._fileshow",zLa),BLa=I(r(),(new w).f(["FILE-TYPE"])),CLa=(new A).e("etc._filetype",BLa),DLa=I(r(),(new w).f(["FILE-WRITE"])),ELa=(new A).e("etc._filewrite",
+DLa),FLa=I(r(),(new w).f(["FOLLOW"])),GLa=(new A).e("etc._follow",FLa),HLa=I(r(),(new w).f(["FOLLOW-ME"])),ILa=(new A).e("etc._followme",HLa),JLa=I(r(),(new w).f(["FOREACH"])),KLa=(new A).e("etc._foreach",JLa),LLa=I(r(),(new w).f(["FD","FORWARD"])),MLa=(new A).e("_fd",LLa),NLa=I(r(),(new w).f(["HATCH"])),OLa=(new A).e("_hatch",NLa),PLa=I(r(),(new w).f(["HIDE-LINK"])),QLa=(new A).e("etc._hidelink",PLa),RLa=I(r(),(new w).f(["HIDE-TURTLE","HT"])),SLa=(new A).e("etc._hideturtle",RLa),TLa=I(r(),(new w).f(["HISTOGRAM"])),
+ULa=(new A).e("etc._histogram",TLa),VLa=I(r(),(new w).f(["HOME"])),WLa=(new A).e("etc._home",VLa),XLa=I(r(),(new w).f(["HIDE-TURTLE","HT"])),YLa=(new A).e("etc._hideturtle",XLa),ZLa=I(r(),(new w).f(["HUBNET-BROADCAST"])),$La=(new A).e("hubnet._hubnetbroadcast",ZLa),aMa=I(r(),(new w).f(["HUBNET-BROADCAST-CLEAR-OUTPUT"])),bMa=(new A).e("hubnet._hubnetbroadcastclearoutput",aMa),cMa=I(r(),(new w).f(["HUBNET-BROADCAST-MESSAGE"])),dMa=(new A).e("hubnet._hubnetbroadcastmessage",cMa),eMa=I(r(),(new w).f(["HUBNET-CLEAR-OVERRIDE"])),
+fMa=(new A).e("hubnet._hubnetclearoverride",eMa),gMa=I(r(),(new w).f(["HUBNET-CLEAR-OVERRIDES"])),hMa=(new A).e("hubnet._hubnetclearoverrides",gMa),iMa=I(r(),(new w).f(["HUBNET-FETCH-MESSAGE"])),jMa=(new A).e("hubnet._hubnetfetchmessage",iMa),kMa=I(r(),(new w).f(["HUBNET-KICK-ALL-CLIENTS"])),lMa=(new A).e("hubnet._hubnetkickallclients",kMa),mMa=I(r(),(new w).f(["HUBNET-KICK-CLIENT"])),nMa=(new A).e("hubnet._hubnetkickclient",mMa),oMa=I(r(),(new w).f(["HUBNET-RESET"])),pMa=(new A).e("hubnet._hubnetreset",
+oMa),qMa=I(r(),(new w).f(["HUBNET-RESET-PERSPECTIVE"])),rMa=(new A).e("hubnet._hubnetresetperspective",qMa),sMa=I(r(),(new w).f(["HUBNET-SEND"])),tMa=(new A).e("hubnet._hubnetsend",sMa),uMa=I(r(),(new w).f(["HUBNET-SEND-CLEAR-OUTPUT"])),vMa=(new A).e("hubnet._hubnetsendclearoutput",uMa),wMa=I(r(),(new w).f(["HUBNET-SEND-FOLLOW"])),xMa=(new A).e("hubnet._hubnetsendfollow",wMa),yMa=I(r(),(new w).f(["HUBNET-SEND-MESSAGE"])),zMa=(new A).e("hubnet._hubnetsendmessage",yMa),AMa=I(r(),(new w).f(["HUBNET-SEND-OVERRIDE"])),
+BMa=(new A).e("hubnet._hubnetsendoverride",AMa),CMa=I(r(),(new w).f(["HUBNET-SEND-WATCH"])),DMa=(new A).e("hubnet._hubnetsendwatch",CMa),EMa=I(r(),(new w).f(["IF"])),FMa=(new A).e("etc._if",EMa),GMa=I(r(),(new w).f(["IF-ELSE","IFELSE"])),HMa=(new A).e("etc._ifelse",GMa),IMa=I(r(),(new w).f(["IF-ELSE","IFELSE"])),JMa=(new A).e("etc._ifelse",IMa),KMa=I(r(),(new w).f(["IMPORT-DRAWING"])),LMa=(new A).e("etc._importdrawing",KMa),MMa=I(r(),(new w).f(["IMPORT-PCOLORS"])),NMa=(new A).e("etc._importpatchcolors",
+MMa),OMa=I(r(),(new w).f(["IMPORT-PCOLORS-RGB"])),PMa=(new A).e("etc._importpcolorsrgb",OMa),QMa=I(r(),(new w).f(["IMPORT-WORLD"])),RMa=(new A).e("etc._importworld",QMa),SMa=I(r(),(new w).f(["INSPECT"])),TMa=(new A).e("etc._inspect",SMa),UMa=I(r(),(new w).f(["JUMP"])),VMa=(new A).e("_jump",UMa),WMa=I(r(),(new w).f(["LAYOUT-CIRCLE"])),XMa=(new A).e("etc._layoutcircle",WMa),YMa=I(r(),(new w).f(["LAYOUT-RADIAL"])),ZMa=(new A).e("etc._layoutradial",YMa),$Ma=I(r(),(new w).f(["LAYOUT-SPRING"])),aNa=(new A).e("etc._layoutspring",
+$Ma),bNa=I(r(),(new w).f(["LAYOUT-TUTTE"])),cNa=(new A).e("etc._layouttutte",bNa),dNa=I(r(),(new w).f(["LEFT","LT"])),eNa=(new A).e("etc._left",dNa),fNa=I(r(),(new w).f(["__LET","LET"])),gNa=(new A).e("_let",fNa),hNa=I(r(),(new w).f(["LOOP"])),iNa=(new A).e("etc._loop",hNa),jNa=I(r(),(new w).f(["LEFT","LT"])),kNa=(new A).e("etc._left",jNa),lNa=I(r(),(new w).f(["MOVE-TO"])),mNa=(new A).e("etc._moveto",lNa),nNa=I(r(),(new w).f(["NO-DISPLAY"])),oNa=(new A).e("etc._nodisplay",nNa),pNa=I(r(),(new w).f(["OUTPUT-PRINT"])),
+qNa=(new A).e("etc._outputprint",pNa),rNa=I(r(),(new w).f(["OUTPUT-SHOW"])),sNa=(new A).e("etc._outputshow",rNa),tNa=I(r(),(new w).f(["OUTPUT-TYPE"])),uNa=(new A).e("etc._outputtype",tNa),vNa=I(r(),(new w).f(["OUTPUT-WRITE"])),wNa=(new A).e("etc._outputwrite",vNa),xNa=I(r(),(new w).f(["PD","PEN-DOWN","PENDOWN"])),yNa=(new A).e("etc._pendown",xNa),zNa=I(r(),(new w).f(["PE","PEN-ERASE"])),ANa=(new A).e("etc._penerase",zNa),BNa=I(r(),(new w).f(["PD","PEN-DOWN","PENDOWN"])),CNa=(new A).e("etc._pendown",
+BNa),DNa=I(r(),(new w).f(["PE","PEN-ERASE"])),ENa=(new A).e("etc._penerase",DNa),FNa=I(r(),(new w).f(["PEN-UP","PENUP","PU"])),GNa=(new A).e("etc._penup",FNa),HNa=I(r(),(new w).f(["PD","PEN-DOWN","PENDOWN"])),INa=(new A).e("etc._pendown",HNa),JNa=I(r(),(new w).f(["PEN-UP","PENUP","PU"])),KNa=(new A).e("etc._penup",JNa),LNa=I(r(),(new w).f(["PLOT"])),MNa=(new A).e("etc._plot",LNa),NNa=I(r(),(new w).f(["PLOT-PEN-DOWN"])),ONa=(new A).e("etc._plotpendown",NNa),PNa=I(r(),(new w).f(["PLOT-PEN-RESET"])),
+QNa=(new A).e("etc._plotpenreset",PNa),RNa=I(r(),(new w).f(["PLOT-PEN-UP"])),SNa=(new A).e("etc._plotpenup",RNa),TNa=I(r(),(new w).f(["PLOTXY"])),UNa=(new A).e("etc._plotxy",TNa),VNa=I(r(),(new w).f(["PRINT"])),WNa=(new A).e("etc._print",VNa),XNa=I(r(),(new w).f(["PEN-UP","PENUP","PU"])),YNa=(new A).e("etc._penup",XNa),ZNa=I(r(),(new w).f(["RANDOM-SEED"])),$Na=(new A).e("etc._randomseed",ZNa),aOa=I(r(),(new w).f(["REPEAT"])),bOa=(new A).e("_repeat",aOa),cOa=I(r(),(new w).f(["REPORT"])),dOa=(new A).e("_report",
+cOa),eOa=I(r(),(new w).f(["RESET-PERSPECTIVE","RP"])),fOa=(new A).e("etc._resetperspective",eOa),gOa=I(r(),(new w).f(["RESET-TICKS"])),hOa=(new A).e("etc._resetticks",gOa),iOa=I(r(),(new w).f(["RESET-TIMER"])),jOa=(new A).e("etc._resettimer",iOa),kOa=I(r(),(new w).f(["RESIZE-WORLD"])),lOa=(new A).e("etc._resizeworld",kOa),mOa=I(r(),(new w).f(["RIDE"])),nOa=(new A).e("etc._ride",mOa),oOa=I(r(),(new w).f(["RIDE-ME"])),pOa=(new A).e("etc._rideme",oOa),qOa=I(r(),(new w).f(["RIGHT","RT"])),rOa=(new A).e("etc._right",
+qOa),sOa=I(r(),(new w).f(["RESET-PERSPECTIVE","RP"])),tOa=(new A).e("etc._resetperspective",sOa),uOa=I(r(),(new w).f(["RIGHT","RT"])),vOa=(new A).e("etc._right",uOa),wOa=I(r(),(new w).f(["RUN"])),xOa=(new A).e("_run",wOa),yOa=I(r(),(new w).f(["SET"])),zOa=(new A).e("_set",yOa),AOa=I(r(),(new w).f(["SET-CURRENT-DIRECTORY"])),BOa=(new A).e("etc._setcurdir",AOa),COa=I(r(),(new w).f(["SET-CURRENT-PLOT"])),DOa=(new A).e("etc._setcurrentplot",COa),EOa=I(r(),(new w).f(["SET-CURRENT-PLOT-PEN"])),FOa=(new A).e("etc._setcurrentplotpen",
+EOa),GOa=I(r(),(new w).f(["SET-DEFAULT-SHAPE"])),HOa=(new A).e("etc._setdefaultshape",GOa),IOa=I(r(),(new w).f(["SET-HISTOGRAM-NUM-BARS"])),JOa=(new A).e("etc._sethistogramnumbars",IOa),KOa=I(r(),(new w).f(["SET-PATCH-SIZE"])),LOa=(new A).e("etc._setpatchsize",KOa),MOa=I(r(),(new w).f(["SET-PLOT-PEN-COLOR"])),NOa=(new A).e("etc._setplotpencolor",MOa),OOa=I(r(),(new w).f(["SET-PLOT-PEN-INTERVAL"])),POa=(new A).e("etc._setplotpeninterval",OOa),QOa=I(r(),(new w).f(["SET-PLOT-PEN-MODE"])),ROa=(new A).e("etc._setplotpenmode",
+QOa),SOa=I(r(),(new w).f(["SET-PLOT-X-RANGE"])),TOa=(new A).e("etc._setplotxrange",SOa),UOa=I(r(),(new w).f(["SET-PLOT-Y-RANGE"])),VOa=(new A).e("etc._setplotyrange",UOa),WOa=I(r(),(new w).f(["SETUP-PLOTS"])),XOa=(new A).e("etc._setupplots",WOa),YOa=I(r(),(new w).f(["SETXY"])),ZOa=(new A).e("etc._setxy",YOa),$Oa=I(r(),(new w).f(["SHOW"])),aPa=(new A).e("etc._show",$Oa),bPa=I(r(),(new w).f(["SHOW-LINK"])),cPa=(new A).e("etc._showlink",bPa),dPa=I(r(),(new w).f(["SHOW-TURTLE","ST"])),ePa=(new A).e("etc._showturtle",
+dPa),fPa=I(r(),(new w).f(["SPROUT"])),gPa=(new A).e("_sprout",fPa),hPa=I(r(),(new w).f(["SHOW-TURTLE","ST"])),iPa=(new A).e("etc._showturtle",hPa),jPa=I(r(),(new w).f(["STAMP"])),kPa=(new A).e("etc._stamp",jPa),lPa=I(r(),(new w).f(["STAMP-ERASE"])),mPa=(new A).e("etc._stamperase",lPa),nPa=I(r(),(new w).f(["STOP"])),oPa=(new A).e("_stop",nPa),pPa=I(r(),(new w).f(["STOP-INSPECTING"])),qPa=(new A).e("etc._stopinspecting",pPa),rPa=I(r(),(new w).f(["STOP-INSPECTING-DEAD-AGENTS"])),sPa=(new A).e("etc._stopinspectingdeadagents",
+rPa),tPa=I(r(),(new w).f(["TICK"])),uPa=(new A).e("etc._tick",tPa),vPa=I(r(),(new w).f(["TICK-ADVANCE"])),wPa=(new A).e("etc._tickadvance",vPa),xPa=I(r(),(new w).f(["TIE"])),yPa=(new A).e("etc._tie",xPa),zPa=I(r(),(new w).f(["TYPE"])),APa=(new A).e("etc._type",zPa),BPa=I(r(),(new w).f(["UNTIE"])),CPa=(new A).e("etc._untie",BPa),DPa=I(r(),(new w).f(["UPDATE-PLOTS"])),EPa=(new A).e("etc._updateplots",DPa),FPa=I(r(),(new w).f(["UPHILL"])),GPa=(new A).e("etc._uphill",FPa),HPa=I(r(),(new w).f(["UPHILL4"])),
+IPa=(new A).e("etc._uphill4",HPa),JPa=I(r(),(new w).f(["USER-MESSAGE"])),KPa=(new A).e("etc._usermessage",JPa),LPa=I(r(),(new w).f(["WAIT"])),MPa=(new A).e("etc._wait",LPa),NPa=I(r(),(new w).f(["WATCH"])),OPa=(new A).e("etc._watch",NPa),PPa=I(r(),(new w).f(["WATCH-ME"])),QPa=(new A).e("etc._watchme",PPa),RPa=I(r(),(new w).f(["WHILE"])),SPa=(new A).e("etc._while",RPa),TPa=I(r(),(new w).f(["WITH-LOCAL-RANDOMNESS"])),UPa=(new A).e("etc._withlocalrandomness",TPa),VPa=I(r(),(new w).f(["WITHOUT-INTERRUPTION"])),
+WPa=(new A).e("etc._withoutinterruption",VPa),XPa=I(r(),(new w).f(["WRITE"])),YPa=(new A).e("etc._write",XPa),ZPa=I(r(),(new w).f(["!\x3d"])),$Pa=(new A).e("_notequal",ZPa),aQa=I(r(),(new w).f(["*"])),bQa=(new A).e("etc._mult",aQa),cQa=I(r(),(new w).f(["+"])),dQa=(new A).e("etc._plus",cQa),eQa=I(r(),(new w).f(["-"])),fQa=(new A).e("_minus",eQa),gQa=I(r(),(new w).f(["/"])),hQa=(new A).e("etc._div",gQa),iQa=I(r(),(new w).f(["\x3c"])),jQa=(new A).e("_lessthan",iQa),kQa=I(r(),(new w).f(["\x3c\x3d"])),
+lQa=(new A).e("etc._lessorequal",kQa),mQa=I(r(),(new w).f(["\x3d"])),nQa=(new A).e("_equal",mQa),oQa=I(r(),(new w).f(["\x3e"])),pQa=(new A).e("_greaterthan",oQa),qQa=I(r(),(new w).f(["\x3e\x3d"])),rQa=(new A).e("etc._greaterorequal",qQa),sQa=I(r(),(new w).f(["^"])),tQa=(new A).e("etc._pow",sQa),uQa=I(r(),(new w).f(["__APPLY-RESULT"])),vQa=(new A).e("etc._applyresult",uQa),wQa=I(r(),(new w).f(["__BOOM"])),xQa=(new A).e("etc._boom",wQa),yQa=I(r(),(new w).f(["__BLOCK"])),zQa=(new A).e("etc._block",yQa),
+AQa=I(r(),(new w).f(["__CHECK-SYNTAX"])),BQa=(new A).e("etc._checksyntax",AQa),CQa=I(r(),(new w).f(["__CHECKSUM"])),DQa=(new A).e("etc._checksum",CQa),EQa=I(r(),(new w).f(["__DUMP"])),FQa=(new A).e("etc._dump",EQa),GQa=I(r(),(new w).f(["__DUMP-EXTENSION-PRIMS"])),HQa=(new A).e("etc._dumpextensionprims",GQa),IQa=I(r(),(new w).f(["__DUMP-EXTENSIONS"])),JQa=(new A).e("etc._dumpextensions",IQa),KQa=I(r(),(new w).f(["__DUMP1"])),LQa=(new A).e("etc._dump1",KQa),MQa=I(r(),(new w).f(["__NANO-TIME"])),NQa=
+(new A).e("etc._nanotime",MQa),OQa=I(r(),(new w).f(["__PROCESSORS"])),PQa=(new A).e("etc._processors",OQa),QQa=I(r(),(new w).f(["__RANDOM-STATE"])),RQa=(new A).e("etc._randomstate",QQa),SQa=I(r(),(new w).f(["__REFERENCE"])),TQa=(new A).e("etc._reference",SQa),UQa=I(r(),(new w).f(["__STACK-TRACE"])),VQa=(new A).e("etc._stacktrace",UQa),WQa=I(r(),(new w).f(["__SYMBOL"])),XQa=(new A).e("etc._symbolstring",WQa),YQa=I(r(),(new w).f(["__TO-STRING"])),ZQa=(new A).e("etc._tostring",YQa),$Qa=I(r(),(new w).f(["ABS"])),
+aRa=(new A).e("etc._abs",$Qa),bRa=I(r(),(new w).f(["ACOS"])),cRa=(new A).e("etc._acos",bRa),dRa=I(r(),(new w).f(["ALL?"])),eRa=(new A).e("etc._all",dRa),fRa=I(r(),(new w).f(["AND"])),gRa=(new A).e("_and",fRa),hRa=I(r(),(new w).f(["ANY?"])),iRa=(new A).e("_any",hRa),jRa=I(r(),(new w).f(["APPROXIMATE-HSB"])),kRa=(new A).e("etc._approximatehsb",jRa),lRa=I(r(),(new w).f(["APPROXIMATE-RGB"])),mRa=(new A).e("etc._approximatergb",lRa),nRa=I(r(),(new w).f(["ASIN"])),oRa=(new A).e("etc._asin",nRa),pRa=I(r(),
+(new w).f(["AT-POINTS"])),qRa=(new A).e("etc._atpoints",pRa),rRa=I(r(),(new w).f(["ATAN"])),sRa=(new A).e("etc._atan",rRa),tRa=I(r(),(new w).f(["AUTOPLOT?"])),uRa=(new A).e("etc._autoplot",tRa),vRa=I(r(),(new w).f(["BASE-COLORS"])),wRa=(new A).e("etc._basecolors",vRa),xRa=I(r(),(new w).f(["BEHAVIORSPACE-RUN-NUMBER"])),yRa=(new A).e("etc._behaviorspacerunnumber",xRa),zRa=I(r(),(new w).f(["BF","BUT-FIRST","BUTFIRST"])),ARa=(new A).e("etc._butfirst",zRa),BRa=I(r(),(new w).f(["BL","BUT-LAST","BUTLAST"])),
+CRa=(new A).e("etc._butlast",BRa),DRa=I(r(),(new w).f(["BOTH-ENDS"])),ERa=(new A).e("etc._bothends",DRa),FRa=I(r(),(new w).f(["BF","BUT-FIRST","BUTFIRST"])),GRa=(new A).e("etc._butfirst",FRa),HRa=I(r(),(new w).f(["BL","BUT-LAST","BUTLAST"])),IRa=(new A).e("etc._butlast",HRa),JRa=I(r(),(new w).f(["BF","BUT-FIRST","BUTFIRST"])),KRa=(new A).e("etc._butfirst",JRa),LRa=I(r(),(new w).f(["BL","BUT-LAST","BUTLAST"])),MRa=(new A).e("etc._butlast",LRa),NRa=I(r(),(new w).f(["CAN-MOVE?"])),ORa=(new A).e("etc._canmove",
+NRa),PRa=I(r(),(new w).f(["CEILING"])),QRa=(new A).e("etc._ceil",PRa),RRa=I(r(),(new w).f(["COS"])),SRa=(new A).e("etc._cos",RRa),TRa=I(r(),(new w).f(["COUNT"])),URa=(new A).e("_count",TRa),VRa=I(r(),(new w).f(["DATE-AND-TIME"])),WRa=(new A).e("etc._dateandtime",VRa),XRa=I(r(),(new w).f(["DISTANCE"])),YRa=(new A).e("etc._distance",XRa),ZRa=I(r(),(new w).f(["DISTANCEXY"])),$Ra=(new A).e("etc._distancexy",ZRa),aSa=I(r(),(new w).f(["DX"])),bSa=(new A).e("etc._dx",aSa),cSa=I(r(),(new w).f(["DY"])),dSa=
+(new A).e("etc._dy",cSa),eSa=I(r(),(new w).f(["EMPTY?"])),fSa=(new A).e("etc._empty",eSa),gSa=I(r(),(new w).f(["ERROR-MESSAGE"])),hSa=(new A).e("_errormessage",gSa),iSa=I(r(),(new w).f(["EXP"])),jSa=(new A).e("etc._exp",iSa),kSa=I(r(),(new w).f(["EXTRACT-HSB"])),lSa=(new A).e("etc._extracthsb",kSa),mSa=I(r(),(new w).f(["EXTRACT-RGB"])),nSa=(new A).e("etc._extractrgb",mSa),oSa=I(r(),(new w).f(["FILE-AT-END?"])),pSa=(new A).e("etc._fileatend",oSa),qSa=I(r(),(new w).f(["FILE-EXISTS?"])),rSa=(new A).e("etc._fileexists",
+qSa),sSa=I(r(),(new w).f(["FILE-READ"])),tSa=(new A).e("etc._fileread",sSa),uSa=I(r(),(new w).f(["FILE-READ-CHARACTERS"])),vSa=(new A).e("etc._filereadchars",uSa),wSa=I(r(),(new w).f(["FILE-READ-LINE"])),xSa=(new A).e("etc._filereadline",wSa),ySa=I(r(),(new w).f(["FILTER"])),zSa=(new A).e("etc._filter",ySa),ASa=I(r(),(new w).f(["FIRST"])),BSa=(new A).e("etc._first",ASa),CSa=I(r(),(new w).f(["FLOOR"])),DSa=(new A).e("etc._floor",CSa),ESa=I(r(),(new w).f(["FPUT"])),FSa=(new A).e("etc._fput",ESa),GSa=
+I(r(),(new w).f(["HSB"])),HSa=(new A).e("etc._hsb",GSa),ISa=I(r(),(new w).f(["HUBNET-CLIENTS-LIST"])),JSa=(new A).e("hubnet._hubnetclientslist",ISa),KSa=I(r(),(new w).f(["HUBNET-ENTER-MESSAGE?"])),LSa=(new A).e("hubnet._hubnetentermessage",KSa),MSa=I(r(),(new w).f(["HUBNET-EXIT-MESSAGE?"])),NSa=(new A).e("hubnet._hubnetexitmessage",MSa),OSa=I(r(),(new w).f(["HUBNET-MESSAGE"])),PSa=(new A).e("hubnet._hubnetmessage",OSa),QSa=I(r(),(new w).f(["HUBNET-MESSAGE-SOURCE"])),RSa=(new A).e("hubnet._hubnetmessagesource",
+QSa),SSa=I(r(),(new w).f(["HUBNET-MESSAGE-TAG"])),TSa=(new A).e("hubnet._hubnetmessagetag",SSa),USa=I(r(),(new w).f(["HUBNET-MESSAGE-WAITING?"])),VSa=(new A).e("hubnet._hubnetmessagewaiting",USa),WSa=I(r(),(new w).f(["IFELSE-VALUE"])),XSa=(new A).e("etc._ifelsevalue",WSa),YSa=I(r(),(new w).f(["IN-CONE"])),ZSa=(new A).e("etc._incone",YSa),$Sa=I(r(),(new w).f(["IN-LINK-FROM"])),aTa=(new A).e("etc._inlinkfrom",$Sa),bTa=I(r(),(new w).f(["IN-LINK-NEIGHBOR?"])),cTa=(new A).e("etc._inlinkneighbor",bTa),
+dTa=I(r(),(new w).f(["IN-LINK-NEIGHBORS"])),eTa=(new A).e("etc._inlinkneighbors",dTa),fTa=I(r(),(new w).f(["IN-RADIUS"])),gTa=(new A).e("_inradius",fTa),hTa=I(r(),(new w).f(["INSERT-ITEM"])),iTa=(new A).e("etc._insertitem",hTa),jTa=I(r(),(new w).f(["INT"])),kTa=(new A).e("etc._int",jTa),lTa=I(r(),(new w).f(["IS-AGENT?"])),mTa=(new A).e("etc._isagent",lTa),nTa=I(r(),(new w).f(["IS-AGENTSET?"])),oTa=(new A).e("etc._isagentset",nTa),pTa=I(r(),(new w).f(["IS-ANONYMOUS-COMMAND?"])),qTa=(new A).e("etc._isanonymouscommand",
+pTa),rTa=I(r(),(new w).f(["IS-ANONYMOUS-REPORTER?"])),sTa=(new A).e("etc._isanonymousreporter",rTa),tTa=I(r(),(new w).f(["IS-BOOLEAN?"])),uTa=(new A).e("etc._isboolean",tTa),vTa=I(r(),(new w).f(["IS-DIRECTED-LINK?"])),wTa=(new A).e("etc._isdirectedlink",vTa),xTa=I(r(),(new w).f(["IS-LINK-SET?"])),yTa=(new A).e("etc._islinkset",xTa),zTa=I(r(),(new w).f(["IS-LINK?"])),ATa=(new A).e("etc._islink",zTa),BTa=I(r(),(new w).f(["IS-LIST?"])),CTa=(new A).e("etc._islist",BTa),DTa=I(r(),(new w).f(["IS-NUMBER?"])),
+ETa=(new A).e("etc._isnumber",DTa),FTa=I(r(),(new w).f(["IS-PATCH-SET?"])),GTa=(new A).e("etc._ispatchset",FTa),HTa=I(r(),(new w).f(["IS-PATCH?"])),ITa=(new A).e("etc._ispatch",HTa),JTa=I(r(),(new w).f(["IS-STRING?"])),KTa=(new A).e("etc._isstring",JTa),LTa=I(r(),(new w).f(["IS-TURTLE-SET?"])),MTa=(new A).e("etc._isturtleset",LTa),NTa=I(r(),(new w).f(["IS-TURTLE?"])),OTa=(new A).e("etc._isturtle",NTa),PTa=I(r(),(new w).f(["IS-UNDIRECTED-LINK?"])),QTa=(new A).e("etc._isundirectedlink",PTa),RTa=I(r(),
+(new w).f(["ITEM"])),STa=(new A).e("etc._item",RTa),TTa=I(r(),(new w).f(["LAST"])),UTa=(new A).e("etc._last",TTa),VTa=I(r(),(new w).f(["LENGTH"])),WTa=(new A).e("etc._length",VTa),XTa=I(r(),(new w).f(["LINK"])),YTa=(new A).e("etc._link",XTa),ZTa=I(r(),(new w).f(["LINK-HEADING"])),$Ta=(new A).e("etc._linkheading",ZTa),aUa=I(r(),(new w).f(["LINK-LENGTH"])),bUa=(new A).e("etc._linklength",aUa),cUa=I(r(),(new w).f(["LINK-NEIGHBOR?"])),dUa=(new A).e("etc._linkneighbor",cUa),eUa=I(r(),(new w).f(["LINK-NEIGHBORS"])),
+fUa=(new A).e("etc._linkneighbors",eUa),gUa=I(r(),(new w).f(["LINK-SET"])),hUa=(new A).e("etc._linkset",gUa),iUa=I(r(),(new w).f(["LINK-SHAPES"])),jUa=(new A).e("etc._linkshapes",iUa),kUa=I(r(),(new w).f(["LINK-WITH"])),lUa=(new A).e("etc._linkwith",kUa),mUa=I(r(),(new w).f(["LINKS"])),nUa=(new A).e("etc._links",mUa),oUa=I(r(),(new w).f(["LIST"])),pUa=(new A).e("_list",oUa),qUa=I(r(),(new w).f(["LN"])),rUa=(new A).e("etc._ln",qUa),sUa=I(r(),(new w).f(["LOG"])),tUa=(new A).e("etc._log",sUa),uUa=I(r(),
+(new w).f(["LPUT"])),vUa=(new A).e("etc._lput",uUa),wUa=I(r(),(new w).f(["MAP"])),xUa=(new A).e("etc._map",wUa),yUa=I(r(),(new w).f(["MAX"])),zUa=(new A).e("etc._max",yUa),AUa=I(r(),(new w).f(["MAX-N-OF"])),BUa=(new A).e("etc._maxnof",AUa),CUa=I(r(),(new w).f(["MAX-ONE-OF"])),DUa=(new A).e("etc._maxoneof",CUa),EUa=I(r(),(new w).f(["MAX-PXCOR"])),FUa=(new A).e("etc._maxpxcor",EUa),GUa=I(r(),(new w).f(["MAX-PYCOR"])),HUa=(new A).e("etc._maxpycor",GUa),IUa=I(r(),(new w).f(["MEAN"])),JUa=(new A).e("etc._mean",
+IUa),KUa=I(r(),(new w).f(["MEDIAN"])),LUa=(new A).e("etc._median",KUa),MUa=I(r(),(new w).f(["MEMBER?"])),NUa=(new A).e("etc._member",MUa),OUa=I(r(),(new w).f(["MIN"])),PUa=(new A).e("etc._min",OUa),QUa=I(r(),(new w).f(["MIN-N-OF"])),RUa=(new A).e("etc._minnof",QUa),SUa=I(r(),(new w).f(["MIN-ONE-OF"])),TUa=(new A).e("etc._minoneof",SUa),UUa=I(r(),(new w).f(["MIN-PXCOR"])),VUa=(new A).e("etc._minpxcor",UUa),WUa=I(r(),(new w).f(["MIN-PYCOR"])),XUa=(new A).e("etc._minpycor",WUa),YUa=I(r(),(new w).f(["MOD"])),
+ZUa=(new A).e("etc._mod",YUa),$Ua=I(r(),(new w).f(["MODES"])),aVa=(new A).e("etc._modes",$Ua),bVa=I(r(),(new w).f(["MOUSE-DOWN?"])),cVa=(new A).e("etc._mousedown",bVa),dVa=I(r(),(new w).f(["MOUSE-INSIDE?"])),eVa=(new A).e("etc._mouseinside",dVa),fVa=I(r(),(new w).f(["MOUSE-XCOR"])),gVa=(new A).e("etc._mousexcor",fVa),hVa=I(r(),(new w).f(["MOUSE-YCOR"])),iVa=(new A).e("etc._mouseycor",hVa),jVa=I(r(),(new w).f(["MY-IN-LINKS"])),kVa=(new A).e("etc._myinlinks",jVa),lVa=I(r(),(new w).f(["MY-LINKS"])),
+mVa=(new A).e("etc._mylinks",lVa),nVa=I(r(),(new w).f(["MY-OUT-LINKS"])),oVa=(new A).e("etc._myoutlinks",nVa),pVa=I(r(),(new w).f(["MYSELF"])),qVa=(new A).e("etc._myself",pVa),rVa=I(r(),(new w).f(["N-OF"])),sVa=(new A).e("etc._nof",rVa),tVa=I(r(),(new w).f(["N-VALUES"])),uVa=(new A).e("etc._nvalues",tVa),vVa=I(r(),(new w).f(["NEIGHBORS"])),wVa=(new A).e("_neighbors",vVa),xVa=I(r(),(new w).f(["NEIGHBORS4"])),yVa=(new A).e("_neighbors4",xVa),zVa=I(r(),(new w).f(["NETLOGO-APPLET?"])),AVa=(new A).e("etc._netlogoapplet",
+zVa),BVa=I(r(),(new w).f(["NETLOGO-VERSION"])),CVa=(new A).e("etc._netlogoversion",BVa),DVa=I(r(),(new w).f(["NETLOGO-WEB?"])),EVa=(new A).e("etc._netlogoweb",DVa),FVa=I(r(),(new w).f(["NEW-SEED"])),GVa=(new A).e("etc._newseed",FVa),HVa=I(r(),(new w).f(["NO-LINKS"])),IVa=(new A).e("etc._nolinks",HVa),JVa=I(r(),(new w).f(["NO-PATCHES"])),KVa=(new A).e("etc._nopatches",JVa),LVa=I(r(),(new w).f(["NO-TURTLES"])),MVa=(new A).e("etc._noturtles",LVa),NVa=I(r(),(new w).f(["NOT"])),OVa=(new A).e("_not",NVa),
+PVa=I(r(),(new w).f(["OF"])),QVa=(new A).e("_of",PVa),RVa=I(r(),(new w).f(["ONE-OF"])),SVa=(new A).e("_oneof",RVa),TVa=I(r(),(new w).f(["OR"])),UVa=(new A).e("_or",TVa),VVa=I(r(),(new w).f(["OTHER"])),WVa=(new A).e("_other",VVa),XVa=I(r(),(new w).f(["OTHER-END"])),YVa=(new A).e("etc._otherend",XVa),ZVa=I(r(),(new w).f(["OUT-LINK-NEIGHBOR?"])),$Va=(new A).e("etc._outlinkneighbor",ZVa),aWa=I(r(),(new w).f(["OUT-LINK-NEIGHBORS"])),bWa=(new A).e("etc._outlinkneighbors",aWa),cWa=I(r(),(new w).f(["OUT-LINK-TO"])),
+dWa=(new A).e("etc._outlinkto",cWa),eWa=I(r(),(new w).f(["PATCH"])),fWa=(new A).e("etc._patch",eWa),gWa=I(r(),(new w).f(["PATCH-AHEAD"])),hWa=(new A).e("etc._patchahead",gWa),iWa=I(r(),(new w).f(["PATCH-AT"])),jWa=(new A).e("_patchat",iWa),kWa=I(r(),(new w).f(["PATCH-AT-HEADING-AND-DISTANCE"])),lWa=(new A).e("etc._patchatheadinganddistance",kWa),mWa=I(r(),(new w).f(["PATCH-HERE"])),nWa=(new A).e("etc._patchhere",mWa),oWa=I(r(),(new w).f(["PATCH-LEFT-AND-AHEAD"])),pWa=(new A).e("etc._patchleftandahead",
+oWa),qWa=I(r(),(new w).f(["PATCH-RIGHT-AND-AHEAD"])),rWa=(new A).e("etc._patchrightandahead",qWa),sWa=I(r(),(new w).f(["PATCH-SET"])),tWa=(new A).e("etc._patchset",sWa),uWa=I(r(),(new w).f(["PATCH-SIZE"])),vWa=(new A).e("etc._patchsize",uWa),wWa=I(r(),(new w).f(["PATCHES"])),xWa=(new A).e("_patches",wWa),yWa=I(r(),(new w).f(["PLOT-NAME"])),zWa=(new A).e("etc._plotname",yWa),AWa=I(r(),(new w).f(["PLOT-PEN-EXISTS?"])),BWa=(new A).e("etc._plotpenexists",AWa),CWa=I(r(),(new w).f(["PLOT-X-MAX"])),DWa=
+(new A).e("etc._plotxmax",CWa),EWa=I(r(),(new w).f(["PLOT-X-MIN"])),FWa=(new A).e("etc._plotxmin",EWa),GWa=I(r(),(new w).f(["PLOT-Y-MAX"])),HWa=(new A).e("etc._plotymax",GWa),IWa=I(r(),(new w).f(["PLOT-Y-MIN"])),JWa=(new A).e("etc._plotymin",IWa),KWa=I(r(),(new w).f(["POSITION"])),LWa=(new A).e("etc._position",KWa),MWa=I(r(),(new w).f(["PRECISION"])),NWa=(new A).e("etc._precision",MWa),OWa=I(r(),(new w).f(["RANDOM"])),PWa=(new A).e("_random",OWa),QWa=I(r(),(new w).f(["RANDOM-EXPONENTIAL"])),RWa=(new A).e("etc._randomexponential",
+QWa),SWa=I(r(),(new w).f(["RANDOM-FLOAT"])),TWa=(new A).e("etc._randomfloat",SWa),UWa=I(r(),(new w).f(["RANDOM-GAMMA"])),VWa=(new A).e("etc._randomgamma",UWa),WWa=I(r(),(new w).f(["RANDOM-NORMAL"])),XWa=(new A).e("etc._randomnormal",WWa),YWa=I(r(),(new w).f(["RANDOM-POISSON"])),ZWa=(new A).e("etc._randompoisson",YWa),$Wa=I(r(),(new w).f(["RANDOM-PXCOR"])),aXa=(new A).e("etc._randompxcor",$Wa),bXa=I(r(),(new w).f(["RANDOM-PYCOR"])),cXa=(new A).e("etc._randompycor",bXa),dXa=I(r(),(new w).f(["RANDOM-XCOR"])),
+eXa=(new A).e("etc._randomxcor",dXa),fXa=I(r(),(new w).f(["RANDOM-YCOR"])),gXa=(new A).e("etc._randomycor",fXa),hXa=I(r(),(new w).f(["RANGE"])),iXa=(new A).e("etc._range",hXa),jXa=I(r(),(new w).f(["READ-FROM-STRING"])),kXa=(new A).e("etc._readfromstring",jXa),lXa=I(r(),(new w).f(["REDUCE"])),mXa=(new A).e("etc._reduce",lXa),nXa=I(r(),(new w).f(["REMAINDER"])),oXa=(new A).e("etc._remainder",nXa),pXa=I(r(),(new w).f(["REMOVE"])),qXa=(new A).e("etc._remove",pXa),rXa=I(r(),(new w).f(["REMOVE-DUPLICATES"])),
+sXa=(new A).e("etc._removeduplicates",rXa),tXa=I(r(),(new w).f(["REMOVE-ITEM"])),uXa=(new A).e("etc._removeitem",tXa),vXa=I(r(),(new w).f(["REPLACE-ITEM"])),wXa=(new A).e("etc._replaceitem",vXa),xXa=I(r(),(new w).f(["REVERSE"])),yXa=(new A).e("etc._reverse",xXa),zXa=I(r(),(new w).f(["RGB"])),AXa=(new A).e("etc._rgb",zXa),BXa=I(r(),(new w).f(["ROUND"])),CXa=(new A).e("etc._round",BXa),DXa=I(r(),(new w).f(["RUN-RESULT","RUNRESULT"])),EXa=(new A).e("etc._runresult",DXa),FXa=I(r(),(new w).f(["RUN-RESULT",
+"RUNRESULT"])),GXa=(new A).e("etc._runresult",FXa),HXa=I(r(),(new w).f(["SCALE-COLOR"])),IXa=(new A).e("etc._scalecolor",HXa),JXa=I(r(),(new w).f(["SE","SENTENCE"])),KXa=(new A).e("_sentence",JXa),LXa=I(r(),(new w).f(["SELF"])),MXa=(new A).e("etc._self",LXa),NXa=I(r(),(new w).f(["SE","SENTENCE"])),OXa=(new A).e("_sentence",NXa),PXa=I(r(),(new w).f(["SHADE-OF?"])),QXa=(new A).e("etc._shadeof",PXa),RXa=I(r(),(new w).f(["SHAPES"])),SXa=(new A).e("etc._shapes",RXa),TXa=I(r(),(new w).f(["SHUFFLE"])),UXa=
+(new A).e("etc._shuffle",TXa),VXa=I(r(),(new w).f(["SIN"])),WXa=(new A).e("etc._sin",VXa),XXa=I(r(),(new w).f(["SORT"])),YXa=(new A).e("etc._sort",XXa),ZXa=I(r(),(new w).f(["SORT-BY"])),$Xa=(new A).e("etc._sortby",ZXa),aYa=I(r(),(new w).f(["SORT-ON"])),bYa=(new A).e("etc._sorton",aYa),cYa=I(r(),(new w).f(["SQRT"])),dYa=(new A).e("etc._sqrt",cYa),eYa=I(r(),(new w).f(["STANDARD-DEVIATION"])),fYa=(new A).e("etc._standarddeviation",eYa),gYa=I(r(),(new w).f(["SUBJECT"])),hYa=(new A).e("etc._subject",gYa),
+iYa=I(r(),(new w).f(["SUBLIST"])),jYa=(new A).e("etc._sublist",iYa),kYa=I(r(),(new w).f(["SUBSTRING"])),lYa=(new A).e("etc._substring",kYa),mYa=I(r(),(new w).f(["SUBTRACT-HEADINGS"])),nYa=(new A).e("etc._subtractheadings",mYa),oYa=I(r(),(new w).f(["SUM"])),pYa=(new A).e("_sum",oYa),qYa=I(r(),(new w).f(["TAN"])),rYa=(new A).e("etc._tan",qYa),sYa=I(r(),(new w).f(["TICKS"])),tYa=(new A).e("etc._ticks",sYa),uYa=I(r(),(new w).f(["TIMER"])),vYa=(new A).e("etc._timer",uYa),wYa=I(r(),(new w).f(["TOWARDS"])),
+xYa=(new A).e("etc._towards",wYa),yYa=I(r(),(new w).f(["TOWARDSXY"])),zYa=(new A).e("etc._towardsxy",yYa),AYa=I(r(),(new w).f(["TURTLE"])),BYa=(new A).e("_turtle",AYa),CYa=I(r(),(new w).f(["TURTLE-SET"])),DYa=(new A).e("etc._turtleset",CYa),EYa=I(r(),(new w).f(["TURTLES"])),FYa=(new A).e("_turtles",EYa),GYa=I(r(),(new w).f(["TURTLES-AT"])),HYa=(new A).e("etc._turtlesat",GYa),IYa=I(r(),(new w).f(["TURTLES-HERE"])),JYa=(new A).e("etc._turtleshere",IYa),KYa=I(r(),(new w).f(["TURTLES-ON"])),LYa=(new A).e("etc._turtleson",
+KYa),MYa=I(r(),(new w).f(["USER-DIRECTORY"])),NYa=(new A).e("etc._userdirectory",MYa),OYa=I(r(),(new w).f(["USER-FILE"])),PYa=(new A).e("etc._userfile",OYa),QYa=I(r(),(new w).f(["USER-INPUT"])),RYa=(new A).e("etc._userinput",QYa),SYa=I(r(),(new w).f(["USER-NEW-FILE"])),TYa=(new A).e("etc._usernewfile",SYa),UYa=I(r(),(new w).f(["USER-ONE-OF"])),VYa=(new A).e("etc._useroneof",UYa),WYa=I(r(),(new w).f(["USER-YES-OR-NO?"])),XYa=(new A).e("etc._useryesorno",WYa),YYa=I(r(),(new w).f(["VARIANCE"])),ZYa=
+(new A).e("etc._variance",YYa),$Ya=I(r(),(new w).f(["WITH"])),aZa=(new A).e("_with",$Ya),bZa=I(r(),(new w).f(["WITH-MAX"])),cZa=(new A).e("etc._withmax",bZa),dZa=I(r(),(new w).f(["WITH-MIN"])),eZa=(new A).e("etc._withmin",dZa),fZa=I(r(),(new w).f(["WORD"])),gZa=(new A).e("_word",fZa),hZa=I(r(),(new w).f(["WORLD-HEIGHT"])),iZa=(new A).e("etc._worldheight",hZa),jZa=I(r(),(new w).f(["WORLD-WIDTH"])),kZa=(new A).e("etc._worldwidth",jZa),lZa=I(r(),(new w).f(["WRAP-COLOR"])),mZa=(new A).e("etc._wrapcolor",
+lZa),nZa=I(r(),(new w).f(["XOR"]));Vg(BIa,(new w).f([DIa,FIa,HIa,JIa,LIa,NIa,PIa,RIa,TIa,VIa,XIa,ZIa,aJa,cJa,eJa,gJa,iJa,kJa,mJa,oJa,qJa,sJa,uJa,wJa,yJa,AJa,CJa,EJa,GJa,IJa,KJa,MJa,OJa,QJa,SJa,UJa,WJa,YJa,$Ja,bKa,dKa,fKa,hKa,jKa,lKa,nKa,pKa,rKa,tKa,vKa,xKa,zKa,BKa,DKa,FKa,HKa,JKa,LKa,NKa,PKa,RKa,TKa,VKa,XKa,ZKa,aLa,cLa,eLa,gLa,iLa,kLa,mLa,oLa,qLa,sLa,uLa,wLa,yLa,ALa,CLa,ELa,GLa,ILa,KLa,MLa,OLa,QLa,SLa,ULa,WLa,YLa,$La,bMa,dMa,fMa,hMa,jMa,lMa,nMa,pMa,rMa,tMa,vMa,xMa,zMa,BMa,DMa,FMa,HMa,JMa,LMa,NMa,
+PMa,RMa,TMa,VMa,XMa,ZMa,aNa,cNa,eNa,gNa,iNa,kNa,mNa,oNa,qNa,sNa,uNa,wNa,yNa,ANa,CNa,ENa,GNa,INa,KNa,MNa,ONa,QNa,SNa,UNa,WNa,YNa,$Na,bOa,dOa,fOa,hOa,jOa,lOa,nOa,pOa,rOa,tOa,vOa,xOa,zOa,BOa,DOa,FOa,HOa,JOa,LOa,NOa,POa,ROa,TOa,VOa,XOa,ZOa,aPa,cPa,ePa,gPa,iPa,kPa,mPa,oPa,qPa,sPa,uPa,wPa,yPa,APa,CPa,EPa,GPa,IPa,KPa,MPa,OPa,QPa,SPa,UPa,WPa,YPa,$Pa,bQa,dQa,fQa,hQa,jQa,lQa,nQa,pQa,rQa,tQa,vQa,xQa,zQa,BQa,DQa,FQa,HQa,JQa,LQa,NQa,PQa,RQa,TQa,VQa,XQa,ZQa,aRa,cRa,eRa,gRa,iRa,kRa,mRa,oRa,qRa,sRa,uRa,wRa,yRa,ARa,
+CRa,ERa,GRa,IRa,KRa,MRa,ORa,QRa,SRa,URa,WRa,YRa,$Ra,bSa,dSa,fSa,hSa,jSa,lSa,nSa,pSa,rSa,tSa,vSa,xSa,zSa,BSa,DSa,FSa,HSa,JSa,LSa,NSa,PSa,RSa,TSa,VSa,XSa,ZSa,aTa,cTa,eTa,gTa,iTa,kTa,mTa,oTa,qTa,sTa,uTa,wTa,yTa,ATa,CTa,ETa,GTa,ITa,KTa,MTa,OTa,QTa,STa,UTa,WTa,YTa,$Ta,bUa,dUa,fUa,hUa,jUa,lUa,nUa,pUa,rUa,tUa,vUa,xUa,zUa,BUa,DUa,FUa,HUa,JUa,LUa,NUa,PUa,RUa,TUa,VUa,XUa,ZUa,aVa,cVa,eVa,gVa,iVa,kVa,mVa,oVa,qVa,sVa,uVa,wVa,yVa,AVa,CVa,EVa,GVa,IVa,KVa,MVa,OVa,QVa,SVa,UVa,WVa,YVa,$Va,bWa,dWa,fWa,hWa,jWa,lWa,nWa,
+pWa,rWa,tWa,vWa,xWa,zWa,BWa,DWa,FWa,HWa,JWa,LWa,NWa,PWa,RWa,TWa,VWa,XWa,ZWa,aXa,cXa,eXa,gXa,iXa,kXa,mXa,oXa,qXa,sXa,uXa,wXa,yXa,AXa,CXa,EXa,GXa,IXa,KXa,MXa,OXa,QXa,SXa,UXa,WXa,YXa,$Xa,bYa,dYa,fYa,hYa,jYa,lYa,nYa,pYa,rYa,tYa,vYa,xYa,zYa,BYa,DYa,FYa,HYa,JYa,LYa,NYa,PYa,RYa,TYa,VYa,XYa,ZYa,aZa,cZa,eZa,gZa,iZa,kZa,mZa,(new A).e("etc._xor",nZa)]));this.a=(8|this.a)<<24>>24;return this};
+function uea(a){if(0===(4&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-js/src/main/core/TokenMapper.scala: 20");return a.cj}function vea(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-js/src/main/core/TokenMapper.scala: 18");return a.nj}iG.prototype.$classData=g({uI:0},!1,"org.nlogo.core.TokenMapper",{uI:1,d:1,W_:1});function uO(){}uO.prototype=new l;
+uO.prototype.constructor=uO;function vO(){}vO.prototype=uO.prototype;
+uO.prototype.oG=function(a){var b=fn(a),d=this.Hh();if(b===fn(d))b=!0;else{a:{b=0;for(d=wO(this.Hh(),0);;)if(kd(d)){if(d.$().zh().ba())break a;b=1+b|0;d=d.aa()}else break;b=-1}if(-1!==b){b=fn(a);a:{for(var d=0,e=wO(this.Hh(),0);;)if(kd(e)){if(e.$().zh().ba())break a;d=1+d|0;e=e.aa()}else break;d=-1}b=b>=d}else b=!1}if(b){b=this.Hh();d=B().s;for(a=xO(b,a,d);!a.z();){b=a.$();if(null===b)throw(new q).j(b);if(!b.ja().Qi(b.na()))return!1;a=a.aa()}return!0}return!1};
+uO.prototype.jU=function(a){var b=this.Hh();a=this.Xl(a);var d=B().s;a=xO(b,a,d);b=function(){return function(a){if(null!==a)return a.ja().gi(a.na());throw(new q).j(a);}}(this);d=B().s;if(d===B().s)if(a===y())b=y();else{var d=a.$(),e=d=Ng(new Og,b(d),y());for(a=a.aa();a!==y();){var f=a.$(),f=Ng(new Og,b(f),y()),e=e.Ia=f;a=a.aa()}b=d}else{for(d=Mc(a,d);!a.z();)e=a.$(),d.Qa(b(e)),a=a.aa();b=d.Da()}return b.zb("\n")};
+uO.prototype.lW=function(a,b){var d=this.Hh(),e=B().s,d=yO(d,e);a=function(a,b){return function(a){if(null!==a){var d=a.ja();a=a.Ec();return a<fn(b)?d.pi(Bi(b,a)):d.zh().X()}throw(new q).j(a);}}(this,a);e=B().s;if(e===B().s)if(d===y())a=y();else{for(var e=d.$(),f=e=Ng(new Og,a(e),y()),d=d.aa();d!==y();)var h=d.$(),h=Ng(new Og,a(h),y()),f=f.Ia=h,d=d.aa();a=e}else{for(e=Mc(d,e);!d.z();)f=d.$(),e.Qa(a(f)),d=d.aa();a=e.Da()}return this.Yl(a,b)};function zO(){this.Mn=null;this.a=this.ZE=this.KE=0}
+zO.prototype=new l;zO.prototype.constructor=zO;zO.prototype.Oq=function(){this.Mn.Oq();rm(this,AO(this))};function om(a){Nla(a.Mn,AO(a));rm(a,AO(a))}function Ola(a){var b=new zO;b.Mn=a;b.KE=65536;b.a=(1|b.a)<<24>>24;b.ZE=0;b.a=(2|b.a)<<24>>24;return b}function rm(a,b){a.ZE=b;a.a=(2|a.a)<<24>>24}function sm(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/lex/AutoGrowingBufferedReader.scala: 9");return a.ZE}
+function AO(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/lex/AutoGrowingBufferedReader.scala: 8");return a.KE}zO.prototype.zy=function(){if(0===sm(this)){this.Mn.Oq();Nla(this.Mn,AO(this)<<1);var a=this.Mn,b=AO(this);a.Pv((new Vb).ia(b,b>>31));rm(this,AO(this));this.KE=AO(this)<<1;this.a=(1|this.a)<<24>>24}a=this.Mn.zy();rm(this,-1+sm(this)|0);return a};
+zO.prototype.$classData=g({N0:0},!1,"org.nlogo.lex.AutoGrowingBufferedReader",{N0:1,d:1,Eja:1});function Hm(){this.xk=null;this.hp=0;this.cb=null}Hm.prototype=new l;Hm.prototype.constructor=Hm;Hm.prototype.Nba=function(a,b,d){this.xk=a;this.hp=b;this.cb=d;return this};Hm.prototype.ta=function(){om(this.xk);var a=-1!==this.xk.zy();this.xk.Oq();return a};Hm.prototype.GU=function(a,b,d){Hm.prototype.Nba.call(this,Ola(a),b,d);return this};
+function Tca(a){a=a.xk.zy();return-1===a?F():(new J).j((new Ke).Xa(65535&a))}Hm.prototype.$classData=g({O0:0},!1,"org.nlogo.lex.BufferedInputWrapper",{O0:1,d:1,Hja:1});function BO(){this.uV=null;this.PV=0;this.JT=null;this.a=0;this.ga=null}BO.prototype=new l;BO.prototype.constructor=BO;
+function Vca(a){var b=new BO;if(null===a)throw ug(vg(),null);b.ga=a;b.uV=F();b.a=(1|b.a)<<24>>24;b.PV=0;b.a=(2|b.a)<<24>>24;b.JT=wl(Yl(),(new A).e(Pla(b),Qla(b)),sb(new tb,function(){return function(a,b){b=null===b?0:b.Y;if(null!==a){var f=a.ja(),h=a.Ec();if(F()===f&&0===h&&123===b)return(new A).e((new A).e((new J).j((new Ke).Xa(123)),0),tl())}return null!==a&&(f=a.Ec(),0>f)?(new A).e((new A).e(F(),f),zl()):null!==a&&(f=a.Ec(),13===b||10===b)?(new A).e((new A).e((new J).j((new Ke).Xa(b)),f),ul()):
+null!==a&&(h=a.ja(),f=a.Ec(),Fk(h)&&(h=h.U,125===(null===h?0:h.Y)&&1===f&&125===b))?(new A).e((new A).e(F(),0),ul()):null!==a&&(h=a.ja(),f=a.Ec(),Fk(h)&&(h=h.U,123===(null===h?0:h.Y)&&123===b))?(new A).e((new A).e(F(),1+f|0),tl()):null!==a&&(h=a.ja(),f=a.Ec(),Fk(h)&&(h=h.U,125===(null===h?0:h.Y)&&125===b))?(new A).e((new A).e(F(),-1+f|0),tl()):null!==a&&(h=a.ja(),f=a.Ec(),Fk(h)&&(h=h.U,h=null===h?0:h.Y,0===f&&123!==h))?(new A).e((new A).e(F(),0),zl()):null!==a?(a=a.Ec(),(new A).e((new A).e((new J).j((new Ke).Xa(b)),
+a),tl())):(new A).e((new A).e(F(),0),zl())}}(b)));b.a=(4|b.a)<<24>>24;return b}c=BO.prototype;c.y=function(a){return Rla(this,null===a?0:a.Y)};c.Fa=function(a){return Rla(this,a.Y)|0};function Qla(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/lex/TokenLexer.scala: 48");return a.PV}c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!Rla(this,a.Y)};
+function Rla(a,b){if(0===(4&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/lex/TokenLexer.scala: 49");return a.JT.y((new Ke).Xa(b))}function Pla(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/lex/TokenLexer.scala: 47");return a.uV}c.Ca=function(a){return pb(this,a)};
+c.$classData=g({V0:0},!1,"org.nlogo.lex.TokenLexer$DoubleBracePairMatcher",{V0:1,d:1,fa:1});function CO(){}CO.prototype=new l;CO.prototype.constructor=CO;CO.prototype.b=function(){return this};function Cp(a,b,d){var e=new DO,f;Sla||(Sla=(new EO).b());f=Sla;$ca||($ca=(new Em).b());b=Tla(e,f,Xca(b,d));return(new bc).Kf(b,m(new n,function(){return function(a){return a.ja()}}(a)))}CO.prototype.$classData=g({W0:0},!1,"org.nlogo.lex.Tokenizer$",{W0:1,d:1,Dja:1});var Ula=void 0;
+function FO(){this.ga=this.h=null}FO.prototype=new l;FO.prototype.constructor=FO;function Vla(a){a:for(;;){var b=a.se.H().Pq;if(Gj(D())===b||Dj(D())===b)return"-T--";if(Hj(D())===b||Ej(D())===b)return"--P-";if(Ij(D())===b||Fj(D())===b)return"---L";if(xj(D())===b||Cj(D())===b)if(a=a.za,r(),a=(new J).j(a),null!==a.U&&0<=a.U.Mb(1)&&(a=a.U.W(0),xb(a)))continue a;return"-TPL"}}
+function Wla(a,b,d){d.ua(m(new n,function(a,b,d){return function(k){if(yb(k)||zb(k)){if("?"!==b)var p=b;else a:{r();p=(new J).j(d);if(null!==p.U&&0<=p.U.Mb(1)&&(p=p.U.W(0),xb(p))){p=Vla(p);break a}p="-TPL"}p=Jm(a.ga,p)}else p=a;Nb(p,k)}}(a,b,d)))}function Xla(a){return 111===(65535&(a.charCodeAt(0)|0))?u((new v).G((new w).f(["an ",""])),(new w).f([a])):u((new v).G((new w).f(["a ",""])),(new w).f([a]))}
+FO.prototype.oZ=function(a){var b=a.zd;this.h=Yla(b,this.h);a=a.za;var d=b.H().Ma,e=r();a=a.Ge(d,e.s);d=new GO;e=r();a=a.jc(d,e.s);b.H().p.ba()?Wla(this,b.H().p.X(),a):a.ua(m(new n,function(a){return function(b){Nb(a,b)}}(this)));b.M(this.h)};
+function Zla(a,b,d){var e;e=(new Sb).c(b);for(var f=Je().Lp,f=Mc(e,f),h=0,k=e.R.length|0;h<k;){var p=e.W(h),p=null===p?0:p.Y,p=45!==p&&-1!==mw(Ha(),d,p)?p:45;f.Qa((new Ke).Xa(p));h=1+h|0}e=f.Da();"----"===e&&(f=a.K().Yb.toUpperCase(),Sg(),Ha(),b=u((new v).G((new w).f(["|You can't use "," in "," context,\n              | because "," is ","-only."])),(new w).f([f,Xla($la(b)),f,$la(d)])),b=(new Sb).c(b),b=Qb(0,dd(b),"\n",""),a=a.K().sa,Rg(b,a.Ua,a.$a,a.cb));return e}
+function Jm(a,b){var d=new FO;d.h=b;if(null===a)throw ug(vg(),null);d.ga=a;return d}function Yla(a,b){return pr(a)?Zla(a,b,a.Qh.N()):rt(a)?Zla(a,b,a.Qh.N()):Zla(a,b,a.N())}
+FO.prototype.sG=function(a){var b=a.se;this.h=Yla(b,this.h);if(kn(b.H()))var d=b.H().Sa,e=b.H().Ma,f=B(),e=e.Qc(d,f.s);else e=b.H().Ma;a:{d=0;for(e=wO(e,0);;)if(kd(e)){f=e.$()|0;if(nn(D(),vj(),f))break a;d=1+d|0;e=e.aa()}else break;d=-1}e=a.za;f=r();d=e.xj(f.s).Xf(m(new n,function(a,b){return function(a){if(null!==a)return a.Ec()!==b;throw(new q).j(a);}}(this,d)));e=m(new n,function(){return function(a){return a.ja()}}(this));f=r();e=d.xa(e,f.s);d=Jm(this.ga,"OTPL");po(b)||xt(b)?(a=a.za.$(),Nb(d,
+a)):b.H().p.ba()?Wla(this,b.H().p.X(),e):e.ua(m(new n,function(a){return function(b){Nb(a,b)}}(this)));po(b)||xt(b)?b.P((new J).j(d.h)):b.M(this.h)};
+function $la(a){for(var b=(new Ke).Xa(79),b=(new A).e(b,"observer"),d=(new Ke).Xa(84),d=(new A).e(d,"turtle"),e=(new Ke).Xa(80),e=(new A).e(e,"patch"),f=(new Ke).Xa(76),b=[b,d,e,(new A).e(f,"link")],d=dc(new ec,gc()),e=0,f=b.length|0;e<f;)hc(d,b[e]),e=1+e|0;b=d.Oa;a=(new Sb).c(a);d=(new pm).b();e=0;for(f=a.R.length|0;e<f;){var h=a.W(e);45!==(null===h?0:h.Y)!==!1&&ama(d,null===h?0:h.Y);e=1+e|0}a=(new Sb).c(d.rc.Xb);Je();d=Mc(a,new rl);e=0;for(f=a.R.length|0;e<f;)h=a.W(e),d.Qa(b.y((new Ke).Xa(null===
+h?0:h.Y))),e=1+e|0;return d.Da().zb("/")}FO.prototype.$classData=g({a1:0},!1,"org.nlogo.parse.AgentTypeChecker$AgentTypeCheckerVisitor",{a1:1,d:1,NZ:1});function vo(){this.Ty=null;this.a=!1}vo.prototype=new l;vo.prototype.constructor=vo;c=vo.prototype;c.b=function(){this.Ty=(B(),y());this.a=!0;return this};function HO(a){if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/CarefullyVisitor.scala: 15");return a.Ty}
+c.xh=function(a){var b=a.zd;if(hr(b)){var d=a.za.W(0),d=Ab(this,d),e=HO(this);this.Ty=Ng(new Og,b,e);this.a=!0;b=a.za.W(1);b=Ab(this,b);this.Ty=HO(this).aa();this.a=!0;d=I(r(),(new w).f([d,b]));return(new Hb).hj(a.zd,d,a.sa)}return Gb(this,a)};
+c.Ig=function(a){var b=a.se;if(vt(b)){if(HO(this).z()){Sg();var d=dh(),e=[b.K().Yb],d=d.im.$b("compiler.CarefullyVisitor.badNesting");if(!Fk(d)){if(F()===d)throw(new Ne).c(u((new v).G((new w).f(["coding error, bad translation key: "," for Errors"])),(new w).f(["compiler.CarefullyVisitor.badNesting"])));throw(new q).j(d);}var f=d.U,h=e.length|0;if(0>=h)var k=0;else d=h>>31,k=(0===d?-1<(-2147483648^h):0<d)?-1:h;r();Gn();var d=[],p=0,t=e.length|0;0>k&&Hn(Ln(),0,h,1,!1);for(t=t<k?t:k;p<t;){var x=e[p],
+E=p;0>k&&Hn(Ln(),0,h,1,!1);if(0>E||E>=k)throw(new P).c(""+E);x=(new A).e(x,E);d.push(x);p=1+p|0}e=d.length|0;h=0;k=f;a:for(;;){if(h!==e){f=1+h|0;k=(new A).e(k,d[h]);b:{h=k.lb;t=k.Db;if(null!==t&&(p=t.ja(),t=t.Ec(),Ag(p))){k=p;k=Qb(Ha(),h,u((new v).G((new w).f(["\\\\{","\\\\}"])),(new w).f([""+t])),k);break b}throw(new q).j(k);}h=f;continue a}break}d=a.sa;Rg(k,d.Ua,d.$a,d.cb)}d=jd().Wc(Tea(HO(this).$()));d=(new WH).Ja(d);b=hh(b,d);return(new Jb).Yf(b,a.za,a.sa)}return Ib(this,a)};
+c.dh=function(a){return Kb(this,a)};c.$classData=g({i1:0},!1,"org.nlogo.parse.CarefullyVisitor",{i1:1,d:1,eh:1});function IO(){this.tV=null}IO.prototype=new l;IO.prototype.constructor=IO;function laa(a,b,d){var e=b.se;if(Zq(e))return d.ui((new JO).As(e.Zc));if(qo(e)){var f=e.wa;if(!a.tV.ib(f))return d.ui((new KO).c(f))}return pc(e)&&(Eca||(Eca=(new jl).b()),e=(new J).j((new ac).Bd(e.ze.vk(),LO(e.ze),e.yk)),!e.z())?(a=e.X().tf,d.Bp(a)):naa(a,b,d)}IO.prototype.G=function(a){this.tV=a;return this};
+IO.prototype.$classData=g({j1:0},!1,"org.nlogo.parse.ClosedVariableFinder",{j1:1,d:1,qja:1});function wo(){}wo.prototype=new l;wo.prototype.constructor=wo;c=wo.prototype;c.b=function(){return this};c.xh=function(a){return Gb(this,a)};
+c.Ig=function(a){var b=a.se;if(xt(b)){a=Ib(this,a);var d=(new IO).G(b.ze.vk()),e=a.za.W(0),f=I(Je().Gt,y()),d=wb(d,e,f),b=bma(b,b.ze,d,b.xc);return(new Jb).Yf(b,a.za,a.sa)}return po(b)?(a=Ib(this,a),d=(new IO).G(b.ze.vk()),e=a.za.W(0),f=I(Je().Gt,y()),d=wb(d,e,f),b=cma(b,b.ze,d,b.xc),(new Jb).Yf(b,a.za,a.sa)):Ib(this,a)};c.dh=function(a){return Kb(this,a)};c.$classData=g({k1:0},!1,"org.nlogo.parse.ClosureTagger",{k1:1,d:1,eh:1});function MO(){this.a=!1}MO.prototype=new l;
+MO.prototype.constructor=MO;MO.prototype.b=function(){dma=this;for(var a=(new Ke).Xa(38),a=(new A).e(a,"\x26amp;"),b=(new Ke).Xa(60),b=(new A).e(b,"\x26lt;"),d=(new Ke).Xa(62),d=(new A).e(d,"\x26gt;"),e=(new Ke).Xa(34),a=[a,b,d,(new A).e(e,"\x26quot;")],b=dc(new ec,gc()),d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;this.a=!0;return this};MO.prototype.$classData=g({l1:0},!1,"org.nlogo.parse.Colorizer$",{l1:1,d:1,Cja:1});var dma=void 0;function zo(){this.VC=this.rC=null;this.a=!1}zo.prototype=new l;
+zo.prototype.constructor=zo;c=zo.prototype;c.b=function(){this.VC=y();this.a=!0;return this};
+c.xh=function(a){if(qr(a.zd)||NO(a.zd)||rr(a.zd)){var b=OO(this).$().Kx(),d=OO(this).aa();PO(this,Ng(new Og,b,d))}b=OO(this).$();d=a.zd;if(b&&b.$classData&&b.$classData.n.vB&&NO(d)){Sg();var e=["STOP"],b=dh().im.$b("org.nlogo.prim.etc._stop.notAllowedInsideToReport");if(!Fk(b)){if(F()===b)throw(new Ne).c(u((new v).G((new w).f(["coding error, bad translation key: "," for Errors"])),(new w).f(["org.nlogo.prim.etc._stop.notAllowedInsideToReport"])));throw(new q).j(b);}var d=b.U,f=e.length|0;if(0>=f)var h=
+0;else b=f>>31,h=(0===b?-1<(-2147483648^f):0<b)?-1:f;r();Gn();var b=[],k=0,p=e.length|0;0>h&&Hn(Ln(),0,f,1,!1);for(p=p<h?p:h;k<p;){var t=e[k],x=k;0>h&&Hn(Ln(),0,f,1,!1);if(0>x||x>=h)throw(new P).c(""+x);t=(new A).e(t,x);b.push(t);k=1+k|0}e=b.length|0;f=0;h=d;a:for(;;){if(f!==e){d=1+f|0;h=(new A).e(h,b[f]);b:{f=h.lb;p=h.Db;if(null!==p&&(k=p.ja(),p=p.Ec(),Ag(k))){h=k;h=Qb(Ha(),f,u((new v).G((new w).f(["\\\\{","\\\\}"])),(new w).f([""+p])),h);break b}throw(new q).j(h);}f=d;continue a}break}a=a.sa;Rg(h,
+a.Ua,a.$a,a.cb)}else if(qr(d)?(e=OO(this),e=ema(jn(e))?!fma(OO(this).$()):!1):e=!1,e){Sg();e=["REPORT"];b=dh().im.$b("org.nlogo.prim._report.canOnlyUseInToReport");if(!Fk(b)){if(F()===b)throw(new Ne).c(u((new v).G((new w).f(["coding error, bad translation key: "," for Errors"])),(new w).f(["org.nlogo.prim._report.canOnlyUseInToReport"])));throw(new q).j(b);}d=b.U;f=e.length|0;0>=f?h=0:(b=f>>31,h=(0===b?-1<(-2147483648^f):0<b)?-1:f);r();Gn();b=[];k=0;p=e.length|0;0>h&&Hn(Ln(),0,f,1,!1);for(p=p<h?p:
+h;k<p;){t=e[k];x=k;0>h&&Hn(Ln(),0,f,1,!1);if(0>x||x>=h)throw(new P).c(""+x);t=(new A).e(t,x);b.push(t);k=1+k|0}e=b.length|0;f=0;h=d;a:for(;;){if(f!==e){d=1+f|0;h=(new A).e(h,b[f]);b:{f=h.lb;p=h.Db;if(null!==p&&(k=p.ja(),p=p.Ec(),Ag(k))){h=k;h=Qb(Ha(),f,u((new v).G((new w).f(["\\\\{","\\\\}"])),(new w).f([""+p])),h);break b}throw(new q).j(h);}f=d;continue a}break}a=a.sa;Rg(h,a.Ua,a.$a,a.cb)}else if((b&&b.$classData&&b.$classData.n.tB||ema(b))&&qr(d)){Sg();e=["REPORT"];b=dh().im.$b("org.nlogo.prim._report.mustImmediatelyBeUsedInToReport");
+if(!Fk(b)){if(F()===b)throw(new Ne).c(u((new v).G((new w).f(["coding error, bad translation key: "," for Errors"])),(new w).f(["org.nlogo.prim._report.mustImmediatelyBeUsedInToReport"])));throw(new q).j(b);}d=b.U;f=e.length|0;0>=f?h=0:(b=f>>31,h=(0===b?-1<(-2147483648^f):0<b)?-1:f);r();Gn();b=[];k=0;p=e.length|0;0>h&&Hn(Ln(),0,f,1,!1);for(p=p<h?p:h;k<p;){t=e[k];x=k;0>h&&Hn(Ln(),0,f,1,!1);if(0>x||x>=h)throw(new P).c(""+x);t=(new A).e(t,x);b.push(t);k=1+k|0}e=b.length|0;f=0;h=d;a:for(;;){if(f!==e){d=
+1+f|0;h=(new A).e(h,b[f]);b:{f=h.lb;p=h.Db;if(null!==p&&(k=p.ja(),p=p.Ec(),Ag(k))){h=k;h=Qb(Ha(),f,u((new v).G((new w).f(["\\\\{","\\\\}"])),(new w).f([""+p])),h);break b}throw(new q).j(h);}f=d;continue a}break}a=a.sa;Rg(h,a.Ua,a.$a,a.cb)}else return a.zd.H().Hs?(b=(new QO).Dk(this,!1),d=OO(this),PO(this,Ng(new Og,b,d)),b=Gb(this,a),d=OO(this).$(),PO(this,OO(this).aa()),a=a.za,d=m(new n,function(a,b){return function(a){return yb(a)?Bb(new Cb,(new Fb).Cs(a.je.ns,a.je.eg,b.re),a.sa,a.vj):a}}(this,d)),
+e=r(),a=a.xa(d,e.s),(new Hb).hj(b.zd,a,b.sa)):Gb(this,a)};function gma(a){if(null===a.rC&&null===a.rC){var b=new RO;if(null===a)throw ug(vg(),null);b.Va=a;a.rC=b}}c.Ig=function(a){if(po(a.se)){var b=(new SO).Dk(this,!1),d=OO(this);PO(this,Ng(new Og,b,d));a=Ib(this,a);PO(this,OO(this).aa());return a}return Ib(this,a)};
+function OO(a){if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/ControlFlowVerifier.scala: 31");return a.VC}function PO(a,b){a.VC=b;a.a=!0}c.dh=function(a){if(a.qi.tv.sn)var b=(new TO).Dk(this,(gma(this),!0)),d=OO(this);else b=(new UO).Dk(this,!1),d=OO(this);b=Ng(new Og,b,d);PO(this,b);a=Kb(this,a);b=OO(this).$();PO(this,OO(this).aa());return Lb(a.qi,(new Fb).Cs(a.je.ns,a.je.eg,b.re),a.xz)};
+c.$classData=g({p1:0},!1,"org.nlogo.parse.ControlFlowVerifier",{p1:1,d:1,eh:1});function VO(){}VO.prototype=new l;VO.prototype.constructor=VO;VO.prototype.b=function(){return this};function Kaa(a){return m(new n,function(a){return function(d){return m(new n,function(a,b){return function(a){return Sc(b,a)}}(a,d))}}(a))}
+function Yc(a,b,d,e){var f=e.ck.$b(d);f.z()?f=F():(f=f.X(),f=(new J).j(Rc(f,a,b,d,e)));if(f.z()){var f=Sc(e.rf,d),h=(new A).e(kn(b.se.H()),b.se),k=h.Db;if(!0===!!h.lb){h=b.za.$();h=Nc(a,h,d,0,e);b=b.za;var p=r();return b.xj(p.s).aa().Gb(Tc(Uc(h),""+f+e.om.y(k)),sb(new tb,function(a,b){return function(d,e){d=(new A).e(d,e);e=d.lb;var f=d.Db;if(null!==f)return Nc(a,f.ja(),b,f.Ec(),e);throw(new q).j(d);}}(a,d)))}if(hma(h.Db))return e=Tc(Uc(e),""+Sc(e.rf,d)+ima(e.rf,d)),Oc(a,b,d,e);k=h.Db;if(!1===!!h.lb&&
+no(k))return e=Tc(Uc(e),""+Sc(e.rf,d)+ima(e.rf,d)),Oc(a,b,d,e);k=h.Db;if(!1===!!h.lb&&pc(k)){f=(new Sb).c(e.Yb);f=WO(f);f.z()?f=!0:(f=f.X(),f=32===(null===f?0:f.Y));f=f?"":" ";h=e.ck;p=e.rf;Pda();h=Oda(ro(),h,p);b=Oc(a,b,d,h).Yb;var h=!1,p=null,t=k.ze;a:{if(t&&t.$classData&&t.$classData.n.kA&&(h=!0,p=t,!0===p.sr)){a="[ -\x3e";break a}if(h&&!1===p.sr)a="[";else if(LO(t))a="";else if(t&&t.$classData&&t.$classData.n.lA)a=t.ri,a=u((new v).G((new w).f(["[ "," -\x3e"])),(new w).f([a.Yb]));else if(t&&t.$classData&&
+t.$classData.n.jA)h=t.Or,p=(new v).G((new w).f(["[ [","] -\x3e"])),a=m(new n,function(){return function(a){return a.Yb}}(a)),t=r(),a=u(p,(new w).f([h.xa(a,t.s).zb(" ")]));else throw(new q).j(t);}h=!Gp(Ha(),a,"\x3e")||0<=(b.length|0)&&" "===b.substring(0,1)?"":" ";p=$c(e.rf,d);d=LO(k.ze)?"":"]";k=(new Sb).c(b);WO(k).ib((new Ke).Xa(32))?(k=(new Sb).c(p),k=Ek(k).ib((new Ke).Xa(32))):k=!1;k?(k=(new Sb).c(p),p=k.R.length|0,k=He(Ie(),k.R,1,p)):k=p;return Tc(Uc(e),f+a+h+b+k+d)}k=h.Db;if(!1===!!h.lb)return f=
+Tc(Uc(e),""+f+e.om.y(k)),d=Oc(a,b,d,f),Vc(new Wc,d.Yb,d.ck,e.om,d.rf);throw(new q).j(h);}return f.X()}function Laa(a){return m(new n,function(a){return function(d){return m(new n,function(a,b){return function(a){return $c(b,a)}}(a,d))}}(a))}VO.prototype.$classData=g({u1:0},!1,"org.nlogo.parse.Formatter",{u1:1,d:1,Oja:1});function XO(){this.Uy=null}XO.prototype=new l;XO.prototype.constructor=XO;
+function ima(a,b){a=jma(a.Uy,b.Lj);return Fk(a)&&(a=a.U,xb(a))?(b=a.se,no(b)&&(a=b.Y,Eg(a))?(b=oo(),$b(b,a,!0,!1)):b.K().Yb):""}function $c(a,b){var d=!1,e=null,f=b.Lj.wn();return Fk(f)&&(d=!0,e=f,YO(e.U))?(b=(new ZO).G(b.Lj.Wd(1)),a=jma(a.Uy,b.Lj),Fk(a)&&(a=a.U,xb(a)&&(a=Uh().ce(a),!a.z()&&(a=a.X().fb,po(a))))?" ":" ]"):d&&$O(e.U)?" ]":" "}
+function Sc(a,b){var d=!1,e=null,f=b.Lj.wn();return Fk(f)&&(d=!0,e=f,kma(e.U))||d&&aP(e.U)?" ":d&&(f=e.U,YO(f))?(d=f.wc,e=!1,f=null,b=(new ZO).G(b.Lj.Wd(1)),a=jma(a.Uy,b.Lj),Fk(a)&&(e=!0,f=a,a=f.U,xb(a)&&(a=Uh().ce(a),!a.z()&&(a=a.X().fb,po(a))))||e&&(a=f.U,ZF(a)&&(d=a.za.W(d),yb(d)&&d.vj))?"":" ["):d&&$O(e.U)?" [":""}function lma(a){var b=new XO;b.Uy=a;return b}XO.prototype.$classData=g({y1:0},!1,"org.nlogo.parse.LambdaWhitespace",{y1:1,d:1,Jja:1});function vc(){}vc.prototype=new l;
+vc.prototype.constructor=vc;vc.prototype.b=function(){return this};vc.prototype.NU=function(){return!1};vc.prototype.ZY=function(a,b){a:{b=!!b;if(null!==a){var d=a.kb;if(mm()===d&&b){b=(new bP).b();d=bg();a=(new A).e(ih(a,b,a.Yb,d),!1);break a}}b:{if(null!==a&&(b=a.kb,d=a.Y,mm()===b&&"LET"===d)){b=!0;break b}if(null!==a&&(b=a.kb,d=a.Y,mm()===b&&"__LET"===d)){b=!0;break b}b=!1}a=b?(new A).e(a,!0):(new A).e(a,!1)}return a};vc.prototype.$classData=g({z1:0},!1,"org.nlogo.parse.LetNamer$",{z1:1,d:1,w2:1});
+var uc=void 0;function uo(){}uo.prototype=new l;uo.prototype.constructor=uo;c=uo.prototype;c.b=function(){return this};c.xh=function(a){if(Xn(a.zd)){var b=a.za.aa();return Gb(this,(new Hb).hj(a.zd,b,a.sa))}return Gb(this,a)};c.Ig=function(a){return Ib(this,a)};c.dh=function(a){return Kb(this,a)};c.$classData=g({A1:0},!1,"org.nlogo.parse.LetReducer",{A1:1,d:1,eh:1});function yo(){this.Ax=null;this.a=!1}yo.prototype=new l;yo.prototype.constructor=yo;yo.prototype.b=function(){this.Ax=F();this.a=!0;return this};
+yo.prototype.oZ=function(a){var b=a.zd;Xn(b)?(this.Ax=b.Zc,this.a=!0,paa(this,a),this.Ax=F(),this.a=!0):paa(this,a)};function mma(a){if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/LetVerifier.scala: 13");return a.Ax}
+yo.prototype.sG=function(a){var b=a.se;if(Zq(b)){Sg();var d=mma(this).z()||mma(this).X()!==b.Zc,e=b.K();if(!d){var f=dh(),d=[b.K().Yb.toUpperCase()],b=f.im.$b("compiler.LetVariable.notDefined");if(!Fk(b)){if(F()===b)throw(new Ne).c(u((new v).G((new w).f(["coding error, bad translation key: "," for Errors"])),(new w).f(["compiler.LetVariable.notDefined"])));throw(new q).j(b);}var f=b.U,h=d.length|0;if(0>=h)var k=0;else b=h>>31,k=(0===b?-1<(-2147483648^h):0<b)?-1:h;r();Gn();var b=[],p=0,t=d.length|
+0;0>k&&Hn(Ln(),0,h,1,!1);for(t=t<k?t:k;p<t;){var x=d[p],E=p;0>k&&Hn(Ln(),0,h,1,!1);if(0>E||E>=k)throw(new P).c(""+E);x=(new A).e(x,E);b.push(x);p=1+p|0}d=b.length|0;h=0;k=f;a:for(;;){if(h!==d){f=1+h|0;k=(new A).e(k,b[h]);b:{h=k.lb;t=k.Db;if(null!==t&&(p=t.ja(),t=t.Ec(),Ag(p))){k=p;k=Qb(Ha(),h,u((new v).G((new w).f(["\\\\{","\\\\}"])),(new w).f([""+t])),k);break b}throw(new q).j(k);}h=f;continue a}break}e=e.sa;Rg(k,e.Ua,e.$a,e.cb)}}qaa(this,a)};
+yo.prototype.$classData=g({E1:0},!1,"org.nlogo.parse.LetVerifier",{E1:1,d:1,NZ:1});function xc(){this.Jh=this.qi=this.ae=this.dc=this.gj=null;this.ya=!1}xc.prototype=new l;xc.prototype.constructor=xc;
+function Eaa(a){var b=cP(a.qi),d=Aaa(a.qi),e=r();d.Qc(b,e.s).ua(m(new n,function(a){return function(b){var d=nma(a,b);d.z()?d=F():(d=d.X(),d=(new J).j(d.Y));var d=d.X(),e=pr(d)||rt(d)||br(d);Sg();e||(d=sr(d)?"an extension command":yt(d)?"an extension reporter":u((new v).G((new w).f(["a ",""])),(new w).f([Iq(oa(d))])),e=b.Yb.toUpperCase(),b=b.sa,Rg("There is already "+d+" called "+e,b.Ua,b.$a,b.cb))}}(a)))}
+function oma(a){if(!a.ya){var b=r(),d=(new dP).QD(wp(a.dc.zg));a.gj=I(b,(new w).f([d,(new eP).QD(wp(a.dc.zg)),(new fP).MD(a.dc),(new gP).MD(a.dc),pma(a.Jh),(new hP).G(rc(a.qi)),(new iP).ac(a.ae)]));a.ya=!0}a.ae=null;a.Jh=null;return a.gj}xc.prototype.NU=function(){};
+function nma(a,b){var d=a.ya?a.gj:oma(a);a=m(new n,function(a,b){return function(a){return a.y(b).ob()}}(a,b));var e=r(),d=d.fj(a,e.s).Cg();if(d.z())return F();a=d.X();if(null!==a)d=a.na(),b=tm(new um,b.Yb,a.ja(),d,b.sa),d.L(b);else throw(new q).j(a);return(new J).j(b)}xc.prototype.ZY=function(a){var b=a.kb;if(mm()===b)if(b=nma(this,a),b.z()){var b=(new jP).b(),d=bg();a=ih(a,b,a.Yb,d)}else a=b.X();a=(new A).e(a,void 0);return a};
+xc.prototype.$classData=g({G1:0},!1,"org.nlogo.parse.Namer",{G1:1,d:1,w2:1});function kP(){}kP.prototype=new l;kP.prototype.constructor=kP;c=kP.prototype;c.b=function(){return this};c.y=function(a){return qma(a)};
+function qma(a){var b=a.kb,d=ym();if(null!==b&&b===d)throw(new hd).Jf(a);kh||(kh=(new jh).b());b=a.Yb;d=kh;if(!d.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Keywords.scala: 8");if(d.sV.ib(b.toUpperCase())||Gp(Ha(),b.toUpperCase(),"-OWN"))b=lP(),a=tm(new um,a.Yb,b,a.Y,a.sa);else if(Ym||(Ym=(new Xm).b()),b=Ym.us(a.Yb),Fk(b))b=b.U,d=Bm(),a=tm(new um,a.Yb,d,b,a.sa);else if(F()!==b)throw(new q).j(b);return a}
+c.Fa=function(a){return qma(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!qma(a)};c.Ca=function(a){return pb(this,a)};c.$classData=g({H1:0},!1,"org.nlogo.parse.Namer0$",{H1:1,d:1,fa:1});var rma=void 0;function Dp(){rma||(rma=(new kP).b());return rma}function mP(){this.XG=null;this.a=!1}mP.prototype=new l;mP.prototype.constructor=mP;mP.prototype.b=function(){this.XG="Can only have literal agents and agentsets if importing.";this.a=!0;return this};
+function Rda(a){if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/NullImportHandler.scala: 10");return a.XG}mP.prototype.$classData=g({I1:0},!1,"org.nlogo.parse.NullImportHandler$",{I1:1,d:1,zja:1});var sma=void 0;function wda(){sma||(sma=(new mP).b());return sma}function nP(){this.za=this.h=this.wa=this.XS=this.NV=this.tv=null;this.a=0}nP.prototype=new l;nP.prototype.constructor=nP;
+nP.prototype.M=function(a){this.h=a;this.a=(8|this.a)<<24>>24};function Caa(a,b){a.za=b;a.a=(16|a.a)<<24>>24}function cP(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/RawProcedure.scala: 12");return a.NV}function Aaa(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/RawProcedure.scala: 13");return a.XS}
+nP.prototype.pe=function(){if(0===(4&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/RawProcedure.scala: 21");return this.wa};function rc(a){if(0===(16&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/RawProcedure.scala: 9");return a.za}
+function tma(a){var b=new nP;b.tv=a;Baa(b);b.NV=a.si.aa().$();b.a=(1|b.a)<<24>>24;var d=a.pn,e=m(new n,function(){return function(a){return a.g}}(b)),f=r();b.XS=d.xa(e,f.s);b.a=(2|b.a)<<24>>24;a=a.pn;d=m(new n,function(){return function(a){return a.wa}}(b));e=r();Caa(b,a.xa(d,e.s).gg());b.wa=cP(b).Y;b.a=(4|b.a)<<24>>24;return b}
+nP.prototype.N=function(){if(0===(8&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/RawProcedure.scala: 9");return this.h};nP.prototype.$classData=g({L1:0},!1,"org.nlogo.parse.RawProcedure",{L1:1,d:1,yja:1});function ve(){this.vD=this.Lm=null}ve.prototype=new xka;ve.prototype.constructor=ve;function hba(a,b,d){a.Lm=b;a.vD=d;return a}
+function oP(a){return a.Lm.z()?uma(new pP,a,2147483647):uma(new pP,a,a.vD.y(a.Lm.$())|0)}ve.prototype.$classData=g({N1:0},!1,"org.nlogo.parse.SeqReader",{N1:1,Mpa:1,d:1});function xo(){}xo.prototype=new l;xo.prototype.constructor=xo;xo.prototype.xh=function(a){return Gb(this,a)};
+xo.prototype.Ig=function(a){var b=a.se;if(pc(b)){var d=Ib(this,a);a=Yc((new VO).b(),d,(new ZO).G(y()),Vc(new Wc,"",Vg(Je().$h,y()),m(new n,function(){return function(a){return mo(ro(),a)}}(this)),lma(a))).Yb.trim();if(xt(b))a=(new J).j(a),b=bma(b,b.ze,b.yk,a);else{if(!po(b))throw(new q).j(b);a=(new J).j(a);b=cma(b,b.ze,b.yk,a)}return(new Jb).Yf(b,d.za,d.sa)}return Ib(this,a)};xo.prototype.dh=function(a){return Kb(this,a)};
+xo.prototype.$classData=g({P1:0},!1,"org.nlogo.parse.SourceTagger",{P1:1,d:1,eh:1});function ip(){this.bx=this.qX=null;this.ya=!1}ip.prototype=new l;ip.prototype.constructor=ip;function qP(a){return rP(sP(a,"identifier",mm()),m(new n,function(){return function(a){return vma(a.Y,a)}}(a)))}ip.prototype.b=function(){return this};
+function wma(a){return rP(tP(uP(a,"UNDIRECTED-LINK-BREED"),K(function(a){return function(){return xma(a,"UNDIRECTED-LINK-BREED")}}(a))),m(new n,function(){return function(a){var d=a.Eb.Dl,e=a.Eb.Ff;a.Eb;return yma(d,e,!0,!1)}}(a)))}function zma(a){return rP(tP(ue(a,"\x3cbreed\x3e-own",(new vP).qq(a)),K(function(a){return function(){return wP(a)}}(a))),m(new n,function(){return function(a){if(null!==a){var d=a.fb,e=new xP,d=vma(d.Y,d);a=a.Eb;e.Fg=d;e.Of=a;return e}throw(new q).j(a);}}(a)))}
+function xma(a,b){var d=rP(qP(a).ur(K(function(a){return function(){return qP(a)}}(a))),m(new n,function(){return function(a){if(null!==a)return yma(a.fb,a.Eb,!1,!1);throw(new q).j(a);}}(a)));b=De(qP(a),m(new n,function(a,b){return function(d){d=u((new v).G((new w).f(["Breed declarations must have plural and singular. "," [","] has only one name."])),(new w).f([b,d.wa]));return se(a,d)}}(a,b)));return yP(Ama(sP(a,"opening bracket",km()),K(function(a,b,d){return function(){return Be(b,K(function(a,
+b){return function(){return b}}(a,d)))}}(a,d,b))),K(function(a){return function(){return sP(a,"closing bracket",lm())}}(a)))}function Bma(a){return Ama(sP(a,"opening bracket",km()),K(function(a){return function(){return me(a,K(function(a){return function(){return yP(Ae(a,K(function(a){return function(){return ue(a,"string",(new zP).qq(a))}}(a))),K(function(a){return function(){return sP(a,"closing bracket",lm())}}(a)))}}(a)))}}(a)))}function sP(a,b,d){var e=new AP;e.iG=d;return ue(a,b,e)}
+function kea(a){null===a.bx&&null===a.bx&&(a.bx=(new TD).bp(a));return a.bx}function uP(a,b){var d=new BP;d.Eq=b;return ue(a,b,d)}function iea(a){var b=Ae(a,K(function(a){return function(){return Cma(a)}}(a))).ur(K(function(a){return function(){return Be(Dma(a),K(function(a){return function(){return Ema(a)}}(a)))}}(a)));return rP(Fma(a,b),m(new n,function(){return function(a){if(null!==a){var b=a.fb;a=a.Eb;var f=B();return b.Vc(a,f.s)}throw(new q).j(a);}}(a)))}
+function Gma(a){return rP(tP(uP(a,"EXTENSIONS"),K(function(a){return function(){return wP(a)}}(a))),m(new n,function(){return function(a){if(null!==a)return(new CP).RD(a.fb,a.Eb);throw(new q).j(a);}}(a)))}function Hma(a){return rP(tP(ue(a,"BREED",(new DP).qq(a)),K(function(a){return function(){return xma(a,"BREED")}}(a))),m(new n,function(){return function(a){return a.Eb}}(a)))}
+function Cma(a){return Be(Be(Be(Be(Be(Be(Be(Be(Be(Ima(a),K(function(a){return function(){return Gma(a)}}(a))),K(function(a){return function(){return Hma(a)}}(a))),K(function(a){return function(){return Jma(a)}}(a))),K(function(a){return function(){return wma(a)}}(a))),K(function(a){return function(){return EP(a,"GLOBALS")}}(a))),K(function(a){return function(){return EP(a,"TURTLES-OWN")}}(a))),K(function(a){return function(){return EP(a,"PATCHES-OWN")}}(a))),K(function(a){return function(){return EP(a,
+"LINKS-OWN")}}(a))),K(function(a){return function(){return zma(a)}}(a)))}function Dma(a){var b=K(function(a){return function(){return Kma(a)}}(a));return yP(iba(a,b,b),K(function(a){return function(){return Be(sP(a,"eof",Bc()),K(function(a){return function(){return se(a,"TO or TO-REPORT expected")}}(a)))}}(a)))}function FP(a){a.ya||a.ya||(a.qX=(new zD).j(F()),a.ya=!0);return a.qX}
+function wP(a){return Ama(sP(a,"opening bracket",km()),K(function(a){return function(){return me(a,K(function(a){return function(){return yP(Ae(a,K(function(a){return function(){return qP(a)}}(a))),K(function(a){return function(){return sP(a,"closing bracket",lm())}}(a)))}}(a)))}}(a)))}
+function EP(a,b){return rP(tP(uP(a,b),K(function(a){return function(){return wP(a)}}(a))),m(new n,function(a,b){return function(a){if(null!==a){var d=new xP,k=vma(b,a.fb);a=a.Eb;d.Fg=k;d.Of=a;return d}throw(new q).j(a);}}(a,b)))}function Ima(a){return rP(tP(uP(a,"__INCLUDES"),K(function(a){return function(){return Bma(a)}}(a))),m(new n,function(){return function(a){if(null!==a)return(new GP).RD(a.fb,a.Eb);throw(new q).j(a);}}(a)))}
+function Kma(a){return rP(tP(Be(uP(a,"TO"),K(function(a){return function(){return uP(a,"TO-REPORT")}}(a))),K(function(a){return function(){return qP(a)}}(a))).ur(K(function(a){return function(){return Be(rP(wP(a),m(new n,function(){return function(a){return(new J).j(a)}}(a))),K(function(a){return function(){var b=F();return gba(a,b)}}(a)))}}(a))).ur(K(function(a){return function(){return Ae(a,K(function(a){return function(){return ue(a,"?",(new HP).qq(a))}}(a)))}}(a))).ur(K(function(a){return function(){return Be(uP(a,
+"END"),K(function(a){return function(){return se(a,"END expected")}}(a)))}}(a))),m(new n,function(){return function(a){if(null!==a){var d=a.fb,e=a.Eb;if(null!==d){var f=d.fb,h=d.Eb;if(null!==f&&(d=f.fb,f=f.Eb,null!==d)){var k=d.fb;a=d.Eb;var d=k.Y,d=null!==d&&Ea(d,"TO-REPORT"),f=f.z()?I(r(),y()):f.X(),p=a.g,t=B(),h=h.Qc(p,t.s),p=B(),k=h.Qc(k,p.s),p=B(),h=new IP,e=k.mc(e,p.s);h.wa=a;h.sn=d;h.pn=f;h.si=e;return h}}}throw(new q).j(a);}}(a)))}
+function Jma(a){return rP(tP(uP(a,"DIRECTED-LINK-BREED"),K(function(a){return function(){return xma(a,"DIRECTED-LINK-BREED")}}(a))),m(new n,function(){return function(a){var d=a.Eb.Dl,e=a.Eb.Ff;a.Eb;return yma(d,e,!0,!0)}}(a)))}function Ema(a){return Be(rP(sP(a,"eof",Bc()),m(new n,function(){return function(){return I(r(),y())}}(a))),K(function(a){return function(){return se(a,"keyword expected")}}(a)))}ip.prototype.$classData=g({R1:0},!1,"org.nlogo.parse.StructureCombinators",{R1:1,d:1,Jpa:1});
+function Lp(){this.Mi=null;this.qr=0}Lp.prototype=new l;Lp.prototype.constructor=Lp;function fea(a,b){return Kp(new Lp,a.Mi.sk(b.Mi),a.qr+b.qr|0)}function Kp(a,b,d){a.Mi=b;a.qr=d;return a}function Wm(a,b){a=a.Mi;b=b.toUpperCase();return a.ib(b)}c=Lp.prototype;c.o=function(a){if(a&&a.$classData&&a.$classData.n.pQ){a=a.Mi;var b=this.Mi;return null===a?null===b:JP(a,b)}return this===a};c.k=function(){return cc(this.Mi,"",", ","")};c.fo=function(a){return Kp(new Lp,this.Mi.Xf(a),this.qr)};c.ua=function(a){this.Mi.ua(a)};
+function Nda(a){for(var b=Pm(),d=F(),e=a.qr;d.z();){var f=("_"+e).toUpperCase();Wm(a,f)?e=1+e|0:d=(new J).j((new A).e(f,e))}a:{if(Fk(d)&&(e=d.U,null!==e)){d=e.Ec();e=e.ja();break a}throw(new q).j(d);}d|=0;return(new A).e(e,Kp(new Lp,a.Mi.Aj((new A).e(e,b)),1+d|0))}function Ida(a,b,d){var e=a.Mi;b=b.toUpperCase();return Kp(new Lp,e.Aj((new A).e(b,d)),a.qr)}c.us=function(a){return this.Mi.$b(a.toUpperCase())};function Om(a,b){return a.Mi.y(b.toUpperCase())}
+function qc(a,b,d){var e=a.Mi;d=m(new n,function(a,b){return function(a){a=a.toUpperCase();return(new A).e(a,b)}}(a,d));var f=Lc();return Kp(new Lp,e.sk(b.xa(d,f.s).we(Je().Qk)),a.qr)}c.xa=function(a,b){b=b.hh();var d=this.Mi,e=el().s;b.Zb(Cr(d,a,e));return b.Da()};c.$classData=g({pQ:0},!1,"org.nlogo.parse.SymbolTable",{pQ:1,d:1,mb:1});function KP(){this.oT=null}KP.prototype=new l;KP.prototype.constructor=KP;function fga(a){var b=new KP;b.oT=a;return b}
+KP.prototype.$e=function(){var a;a=Lma();var b=this.oT,d=new LP;d.pZ=b.Ri;d=d.$e();b=b.Ap;if(Zp(b))a=Mma(0,d,b.ha);else{if(!aq(b))throw(new q).j(b);a=Nma(a,d,b.fc)}return a};KP.prototype.$classData=g({P2:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget$$anon$1",{P2:1,d:1,Tl:1});function MP(){this.lU=this.aW=this.bW=null;this.a=0}MP.prototype=new l;MP.prototype.constructor=MP;
+MP.prototype.b=function(){NP=this;this.bW=(new OP).b();this.a=(1|this.a)<<24>>24;this.aW=(new PP).b();this.a=(2|this.a)<<24>>24;this.lU=QP();this.a=(4|this.a)<<24>>24;return this};
+function Oma(a){for(var b=Or(fd(),I(r(),(new w).f(["filename"])),""),b=(new A).e("exportOutput",b),d=Or(fd(),I(r(),(new w).f(["filename"])),""),d=(new A).e("exportView",d),e=fd(),f=I(r(),(new w).f(["str"])),h=(new Sb).c("    return function(filepath) {\n                                                   |      var Paths \x3d Java.type('java.nio.file.Paths');\n                                                   |      var Files \x3d Java.type('java.nio.file.Files');\n                                                   |      var UTF8  \x3d Java.type('java.nio.charset.StandardCharsets').UTF_8;\n                                                   |      Files.createDirectories(Paths.get(filepath).getParent());\n                                                   |      var path  \x3d Files.write(Paths.get(filepath), str.getBytes());\n                                                   |    }"),e=
+Or(e,f,dd(h)),e=(new A).e("exportFile",e),f=fd(),h=I(r(),(new w).f(["trueImportWorld"])),k=(new Sb).c("    return function(filename) {\n                                                  |      var Paths \x3d Java.type('java.nio.file.Paths');\n                                                  |      var Files \x3d Java.type('java.nio.file.Files');\n                                                  |      var UTF8  \x3d Java.type('java.nio.charset.StandardCharsets').UTF_8;\n                                                  |      var lines \x3d Files.readAllLines(Paths.get(filename), UTF8);\n                                                  |      var out   \x3d [];\n                                                  |      lines.forEach(function(line) { out.push(line); });\n                                                  |      var fileText \x3d out.join(\"\\n\");\n                                                  |      trueImportWorld(fileText);\n                                                  |    }"),
+f=Or(f,h,dd(k)),b=[b,d,e,(new A).e("importWorld",f)],d=dc(new ec,gc()),e=0,f=b.length|0;e<f;)hc(d,b[e]),e=1+e|0;return RP(a,"importExport",d.Oa)}function SP(a){if(0===(4&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Compiler.scala: 57");return a.lU}
+function Pma(a,b,d){var e=$fa(lga(b.dc,b.Hc,b.Nf,d.Jq)),f=Kfa(bt(),b.Hc);jt||(jt=(new it).b());var h=Tfa(b.Zr);b=b.Pu;d=m(new n,function(a){return function(b){if(Zp(b))return b.ha;if(!aq(b))throw(new q).j(b);var d=b.fc;b=(new v).G((new w).f(['modelConfig.dialog.notify("Error(s) in interface global init: ','")']));var e=function(){return function(a){return a.Nc}}(a);eq();var f=e(d.Gc),d=d.Pc,h=fq().$d,d=gq(d);a:for(;;){if(!hq(d)){if(iq(d)){var k=d,d=k.fd,k=e(k.bd),h=(new jq).Sb(k,h);continue a}throw(new q).j(d);
+}break}e=dt((new kq).Sb(f,h)).ob();return u(b,(new w).f([cc(e,"",", ","")]))}}(a));var k=r();b=b.xa(d,k.s).zb("\n");b=(new $s).Ek("interfaceInit",b,I(r(),(new w).f(["world","procedures","modelConfig"])));Mt||(Mt=(new It).b());d=Mt;k=r();e=e.Vc(f,k.s);f=r();h=e.Vc(h,f.s);e=Qma(a);f=r();h=h.mc(e,f.s);e=Rma(a);f=r();h=h.mc(e,f.s);e=Sma(a);f=r();h=h.mc(e,f.s);a=Oma(a);e=r();a=h.mc(a,e.s);h=r();return zga(d,a.mc(b,h.s))}
+function Dfa(a,b,d){var e=Tma(Uma()),f=Vma(b),e=mp(f,e.pk,e.Pi,e.mj,e.Di,e.ig,e.Lf,e.zg),f=bh(),f=Wma(a,b,e,f);if(null===f)throw(new q).j(f);var h=f.fb,e=f.Eb,f=f.tf,k=(new Nr).c(b.de),h=Rfa(Qfa(new gt,TP(a),d,k),h),k=Wea(),k=pb(m(new n,function(a,b){return function(a){return Xma(b,a)}}(a,m(new n,function(a,b,d,e){return function(f){return UP(a,f,!0,d,b,!1,e)}}(a,e,f,Yma(new VP,d.Uo,d.Jq,k,d.kp))))),m(new n,function(a){return function(b){if(Zp(b))return b;if(aq(b)){var d=b.fc;b=function(){return function(a){return a}}(a);
+eq();var e=b(d.Gc),d=d.Pc,f=fq().$d,d=gq(d);a:for(;;){if(!hq(d)){if(iq(d)){var h=d,d=h.fd,h=b(h.bd),f=(new jq).Sb(h,f);continue a}throw(new q).j(d);}break}return(new bq).j((new kq).Sb(e,f))}throw(new q).j(b);}}(a))),p=pb(m(new n,function(a,b){return function(a){return Xma(b,a)}}(a,m(new n,function(a,b,d,e){return function(f){return UP(a,f,!1,e,d,!1,b)}}(a,d,e,f)))),m(new n,function(a){return function(b){if(Zp(b))return b;if(aq(b)){var d=b.fc;b=function(){return function(a){return a}}(a);eq();var e=
+b(d.Gc),d=d.Pc,f=fq().$d,d=gq(d);a:for(;;){if(!hq(d)){if(iq(d)){var h=d,d=h.fd,h=b(h.bd),f=(new jq).Sb(h,f);continue a}throw(new q).j(d);}break}return(new bq).j((new kq).Sb(e,f))}throw(new q).j(b);}}(a))),k=Oga(Nga(k,p),b.Hc);a=m(new n,function(a,b){return function(a){return Xma(b,a)}}(a,m(new n,function(a,b,d,e){return function(f){return UP(a,f,!0,e,d,!0,b)}}(a,d,e,f))));d=Zma(b);p=r();a=d.xa(a,p.s);return $ma(h,k,a,b,f,e)}
+function RP(a,b,d){b=u((new v).G((new w).f(["modelConfig.",""])),(new w).f([b]));a=m(new n,function(){return function(a){if(null!==a){var b=a.ja();a=a.na();return u((new v).G((new w).f(["",": ",""])),(new w).f([b,a]))}throw(new q).j(a);}}(a));var e=el().s;d=Cr(d,a,e).Mc("{\n|    ",",\n|    ","\n|  }");d=u((new v).G((new w).f(['|if (typeof javax !\x3d\x3d "undefined") {\n          |  '," \x3d ","\n          |}"])),(new w).f([b,d]));d=(new Sb).c(d);d=dd(d);return(new $s).Ek(b,d,I(r(),(new w).f(["modelConfig"])))}
+function Wma(a,b,d,e){b=b.de;var f=ana();SP(a);var h=F();SP(a);var k=(new eG).b();a=SP(a);d=xaa(a,b,h,d,!1,e,f,k);if(null===d)throw(new q).j(d);e=d.na();return(new ac).Bd(d.ja(),e.dc,e.ae)}function Xma(a,b){try{Aq();var d=a.y(b);return Jq().y(d)}catch(e){if(uq(e))return Aq(),Bq(pq(),e);throw e;}}function Sma(a){for(var b=Or(fd(),I(r(),(new w).f(["agent"])),""),b=[(new A).e("resizeWorld",b)],d=dc(new ec,gc()),e=0,f=b.length|0;e<f;)hc(d,b[e]),e=1+e|0;return RP(a,"world",d.Oa)}
+function TP(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Compiler.scala: 55");return a.aW}
+function Rma(a){for(var b=Or(fd(),I(r(),(new w).f(["str"])),"return true;"),b=(new A).e("confirm",b),d=Or(fd(),I(r(),(new w).f(["str"])),"return 'dummy implementation';"),d=(new A).e("input",d),e=Or(fd(),I(r(),(new w).f(["str"])),""),e=(new A).e("notify",e),f=Or(fd(),I(r(),(new w).f(["str"])),"return true;"),b=[b,d,e,(new A).e("yesOrNo",f)],d=dc(new ec,gc()),e=0,f=b.length|0;e<f;)hc(d,b[e]),e=1+e|0;return RP(a,"dialog",d.Oa)}
+function Qma(a){for(var b=Or(fd(),I(r(),y()),""),b=(new A).e("clear",b),d=Or(fd(),I(r(),(new w).f(["str"])),"context.getWriter().print(str);"),b=[b,(new A).e("write",d)],d=dc(new ec,gc()),e=0,f=b.length|0;e<f;)hc(d,b[e]),e=1+e|0;return RP(a,"output",d.Oa)}
+function UP(a,b,d,e,f,h,k){var p;p=qca();var t=Ni();if(!p.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/SourceWrapping.scala: 7");p=p.TS.y(t);p=d?"to __evaluator [] "+p+" ":"to-report __evaluator [] "+p+" report ( ";qca();t=d?"\n__done end":"\n) __done end";t=u((new v).G((new w).f(["","","",""])),(new w).f([p,b,t]));b=(new Nr).c(t);p=new ht;var x=I(r(),y());p.yq=!h;p.lp=x;x=ana();SP(a);var E=F();SP(a);SP(a);var S=(new eG).b(),
+U=SP(a);e=xaa(U,t,E,f,!0,e,x,S);if(null===e)throw(new q).j(e);e=e.ja();e=k.kp?Ifa(Jfa(),e.$()):e.$();if(d)return a=TP(a),dr(a,e.je,!0,!h,k,b,p);h=TP(a);a=e.je.eg.W(1).za.W(0);return Uq(h,a,k,b,p)}MP.prototype.$classData=g({U2:0},!1,"org.nlogo.tortoise.compiler.Compiler$",{U2:1,d:1,Qja:1});var NP=void 0;function sq(){NP||(NP=(new MP).b());return NP}function WP(){this.yE=null}WP.prototype=new l;WP.prototype.constructor=WP;
+WP.prototype.Bg=function(){var a=zr(wr(),(new xr).ji(this.yE),"name"),b=yr();return sd(a,b)};function bna(a){try{var b=zr(wr(),(new xr).ji(a.yE),"prims"),d=Yea(),e=sd(b,d).Y,f=m(new n,function(){return function(a){return Xea(cfa(),a)}}(a)),h=ek().nc;return Cr(e,f,h)}catch(k){a=Un(vg(),k);if(gs(a))throw ug(vg(),(new Kr).gc(u((new v).G((new w).f(["Problem parsing extension definition JSON.  ",""])),(new w).f([a.Lh()])),a));throw k;}}WP.prototype.ji=function(a){this.yE=a;return this};
+WP.prototype.$classData=g({d3:0},!1,"org.nlogo.tortoise.compiler.CreateExtension$$anon$3",{d3:1,d:1,Sja:1});function XP(){this.rW=this.aU=null;this.a=0}XP.prototype=new l;XP.prototype.constructor=XP;
+XP.prototype.b=function(){YP=this;var a;dfa||(dfa=(new Mr).b());a=I(r(),(new w).f(['{ "name": "codap", "prims": [ { "name": "init", "actionName": "init", "argTypes": ["command"] }, { "name": "call", "actionName": "call", "argTypes": ["wildcard"] } ] }','{ "name": "nlmap", "prims": [ { "name": "from-list", "actionName": "from-list", "argTypes": ["list"], "returnType": "wildcard" }, { "name": "to-list", "actionName": "to-list", "argTypes": ["wildcard"], "returnType": "list" }, { "name": "is-map?", "actionName": "is-map?", "argTypes": ["wildcard"], "returnType": "boolean" }, { "name": "get", "actionName": "get", "argTypes": ["wildcard", "string"], "returnType": "wildcard" }, { "name": "remove", "actionName": "remove", "argTypes": ["wildcard", "string"], "returnType": "wildcard" }, { "name": "add", "actionName": "add", "argTypes": ["wildcard", "string", "wildcard"], "returnType": "wildcard" }, { "name": "to-json", "actionName": "to-json", "argTypes": ["wildcard"], "returnType": "string" }, { "name": "to-urlenc", "actionName": "to-urlenc", "argTypes": ["wildcard"], "returnType": "string" }, { "name": "from-json", "actionName": "from-json", "argTypes": ["string"], "returnType": "wildcard" } ] }','{ "name": "logging", "prims": [ { "name": "all-logs", "actionName": "all-logs", "argTypes": [], "returnType": "list" }, { "name": "clear-logs", "actionName": "clear-logs", "argTypes": [], "returnType": "unit" }, { "name": "log-globals", "actionName": "log-globals", "argTypes": [{ "type": "string", "isRepeatable": true }], "returnType": "unit" }, { "name": "log-message", "actionName": "log-message", "argTypes": ["string"], "returnType": "unit" } ] }',
+'{ "name": "http-req", "prims": [ { "name": "get", "actionName": "get", "argTypes": ["string"], "returnType": "list" }, { "name": "post", "actionName": "post", "argTypes": ["string", "string", "string"], "returnType": "list" } ] }']));var b=m(new n,function(){return function(a){cfa();var b=Jha();a=$w(b,ba.JSON.parse(a));return(new WP).ji(a)}}(this)),d=r();a=a.xa(b,d.s);b=m(new n,function(){return function(a){return(new A).e(a.Bg(),a)}}(this));d=r();this.aU=a.xa(b,d.s).we(Je().Qk);this.a=(1|this.a)<<
+24>>24;cna||(cna=(new ZP).b());this.rW=Vg(cna,y());this.a=(2|this.a)<<24>>24;return this};function Hp(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/NLWExtensionManager.scala: 120");return a.rW}function dna(a){var b=xm().sa.Ua,d=xm().sa.$a,e=xm();throw(new hd).Bs(a,b,d,e.sa.cb);}
+function ena(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/NLWExtensionManager.scala: 119");return a.aU}
+function Aea(a,b){var d=ena(a).$b(b);if(!Fk(d))throw F()===d&&dna(u((new v).G((new w).f(["No such extension: ",""])),(new w).f([b]))),(new q).j(d);d=d.U;b=bna(d);var d=m(new n,function(a,b){return function(a){return(new A).e(b.Bg(),a)}}(a,d)),e=r();b=b.xa(d,e.s);d=m(new n,function(){return function(a){if(null!==a){var b=a.ja(),d=a.na();if(null!==d)return a=d.sv,d=d.wa,b=u((new v).G((new w).f(["",":",""])),(new w).f([b,d])),(new A).e(b.toUpperCase(),a)}throw(new q).j(a);}}(a));e=r();b=b.xa(d,e.s);
+a=Hp(a);oE(a,b)}XP.prototype.$classData=g({p3:0},!1,"org.nlogo.tortoise.compiler.NLWExtensionManager$",{p3:1,d:1,wja:1});var YP=void 0;function ana(){YP||(YP=(new XP).b());return YP}function Js(){}Js.prototype=new l;Js.prototype.constructor=Js;c=Js.prototype;c.b=function(){return this};c.xh=function(a){return Gb(this,a)};
+c.Ig=function(a){var b=Uh().ce(a);if(!b.z()){var d=b.X().fb,b=b.X().Eb;if(tt(d)&&(r(),d=(new J).j(b),null!==d.U&&0===d.U.Mb(1)&&(d=d.U.W(0),xb(d)&&(b=Uh().ce(d),!b.z()&&(d=b.X().fb,b=b.X().Eb,$P(d))))))return d=(new aQ).b(),(new Jb).Yf(d,b,a.sa)}return Ib(this,a)};c.dh=function(a){return Kb(this,a)};c.$classData=g({s3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$AnyOtherTransformer$",{s3:1,d:1,eh:1});var Is=void 0;function rs(){}rs.prototype=new l;rs.prototype.constructor=rs;c=rs.prototype;c.b=function(){return this};
+c.xh=function(a){return Gb(this,a)};c.Ig=function(a){var b=Uh().ce(a);if(!b.z()){var d=b.X().fb,b=b.X().Eb;if(st(d)&&(r(),d=(new J).j(b),null!==d.U&&0===d.U.Mb(1)&&(d=d.U.W(0),xb(d)&&(b=Uh().ce(d),!b.z()&&(d=b.X().fb,b=b.X().Eb,$P(d))))))return d=(new bQ).b(),(new Jb).Yf(d,b,a.sa)}return Ib(this,a)};c.dh=function(a){return Kb(this,a)};c.$classData=g({t3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$CountOtherTransformer$",{t3:1,d:1,eh:1});var qs=void 0;function xs(){}xs.prototype=new l;
+xs.prototype.constructor=xs;c=xs.prototype;c.b=function(){return this};c.xh=function(a){var b=Si(Ui(),a);if(!b.z()){var d=b.X().fb,b=b.X().Eb;if(jr(d)&&(r(),b=(new J).j(b),null!==b.U&&0===b.U.Mb(2)&&(b=b.U.W(1),yb(b)&&b.je.eg.z())))return d=(new cQ).c(d.ka),(new Hb).hj(d,a.za,a.sa)}return Gb(this,a)};c.Ig=function(a){return Ib(this,a)};c.dh=function(a){return Kb(this,a)};c.$classData=g({u3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$CroFastTransformer$",{u3:1,d:1,eh:1});var ws=void 0;
+function vs(){}vs.prototype=new l;vs.prototype.constructor=vs;c=vs.prototype;c.b=function(){return this};c.xh=function(a){var b=Si(Ui(),a);if(!b.z()){var d=b.X().fb,b=b.X().Eb;if(ir(d)&&(r(),b=(new J).j(b),null!==b.U&&0===b.U.Mb(2)&&(b=b.U.W(1),yb(b)&&b.je.eg.z())))return d=(new dQ).c(d.ka),(new Hb).hj(d,a.za,a.sa)}return Gb(this,a)};c.Ig=function(a){return Ib(this,a)};c.dh=function(a){return Kb(this,a)};
+c.$classData=g({v3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$CrtFastTransformer$",{v3:1,d:1,eh:1});var us=void 0;function ns(){}ns.prototype=new l;ns.prototype.constructor=ns;c=ns.prototype;c.b=function(){return this};c.xh=function(a){var b=Si(Ui(),a);if(!b.z()){var d=b.X().fb,b=b.X().Eb;if(eQ(d)&&(r(),d=(new J).j(b),null!==d.U&&0===d.U.Mb(1)&&(d=d.U.W(0),xb(d)&&(d=Uh().ce(d),!d.z()&&(d=d.X().fb,no(d)&&bn(cn(),d.Y,1))))))return d=(new fQ).b(),b=I(r(),y()),(new Hb).hj(d,b,a.sa)}return Gb(this,a)};
+c.Ig=function(a){return Ib(this,a)};c.dh=function(a){return Kb(this,a)};c.$classData=g({w3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$Fd1Transformer$",{w3:1,d:1,eh:1});var ms=void 0;function ps(){}ps.prototype=new l;ps.prototype.constructor=ps;c=ps.prototype;c.b=function(){return this};
+c.xh=function(a){var b=Si(Ui(),a);if(!b.z()){var d=b.X().fb,b=b.X().Eb;if(eQ(d)&&(r(),d=(new J).j(b),null!==d.U&&0===d.U.Mb(1)&&(d=d.U.W(0),xb(d)&&(d=Uh().ce(d),!d.z()&&(d=d.X().fb,no(d)&&(d=d.Y,"number"===typeof d&&-1<+d&&1>+d))))))return d=(new gQ).b(),(new Hb).hj(d,a.za,a.sa)}return Gb(this,a)};c.Ig=function(a){return Ib(this,a)};c.dh=function(a){return Kb(this,a)};c.$classData=g({x3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$FdLessThan1Transformer$",{x3:1,d:1,eh:1});var os=void 0;
+function zs(){}zs.prototype=new l;zs.prototype.constructor=zs;c=zs.prototype;c.b=function(){return this};c.xh=function(a){var b=Si(Ui(),a);if(!b.z()){var d=b.X().fb,b=b.X().Eb;if(nr(d)&&(r(),b=(new J).j(b),null!==b.U&&0===b.U.Mb(2)&&(b=b.U.W(1),yb(b)&&b.je.eg.z())))return d=(new hQ).c(d.ka),(new Hb).hj(d,a.za,a.sa)}return Gb(this,a)};c.Ig=function(a){return Ib(this,a)};c.dh=function(a){return Kb(this,a)};
+c.$classData=g({y3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$HatchFastTransformer$",{y3:1,d:1,eh:1});var ys=void 0;function iQ(){}iQ.prototype=new l;iQ.prototype.constructor=iQ;function fna(){}fna.prototype=iQ.prototype;iQ.prototype.xh=function(a){return Gb(this,a)};iQ.prototype.dh=function(a){return Kb(this,a)};function Hs(){}Hs.prototype=new l;Hs.prototype.constructor=Hs;c=Hs.prototype;c.b=function(){return this};c.xh=function(a){return Gb(this,a)};
+c.Ig=function(a){var b=Uh().ce(a);if(!b.z()){var d=b.X().Eb;if(jQ(b.X().fb)&&(r(),b=(new J).j(d),null!==b.U&&0===b.U.Mb(1)&&(b=b.U.W(0),xb(b)&&(d=Uh().ce(b),!d.z()&&(b=d.X().Eb,wt(d.X().fb))))))return d=(new kQ).b(),(new Jb).Yf(d,b,a.sa)}return Ib(this,a)};c.dh=function(a){return Kb(this,a)};c.$classData=g({C3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$OneOfWithTransformer$",{C3:1,d:1,eh:1});var Gs=void 0;function Ns(){}Ns.prototype=new l;Ns.prototype.constructor=Ns;c=Ns.prototype;c.b=function(){return this};
+c.xh=function(a){return Gb(this,a)};c.Ig=function(a){var b=Uh().ce(a);if(!b.z()){var d=b.X().Eb;if($P(b.X().fb)&&(r(),b=(new J).j(d),null!==b.U&&0===b.U.Mb(1)&&(b=b.U.W(0),xb(b)&&(d=Uh().ce(b),!d.z()&&(b=d.X().Eb,wt(d.X().fb))))))return d=(new lQ).b(),(new Jb).Yf(d,b,a.sa)}return Ib(this,a)};c.dh=function(a){return Kb(this,a)};c.$classData=g({D3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$OtherWithTransformer$",{D3:1,d:1,eh:1});var Ms=void 0;function Bs(){}Bs.prototype=new l;
+Bs.prototype.constructor=Bs;c=Bs.prototype;c.b=function(){return this};c.xh=function(a){var b=Si(Ui(),a);if(!b.z()){var d=b.X().fb,b=b.X().Eb;if(kr(d)&&(r(),b=(new J).j(b),null!==b.U&&0===b.U.Mb(2)&&(b=b.U.W(1),yb(b)&&b.je.eg.z())))return d=(new mQ).c(d.ka),(new Hb).hj(d,a.za,a.sa)}return Gb(this,a)};c.Ig=function(a){return Ib(this,a)};c.dh=function(a){return Kb(this,a)};c.$classData=g({E3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$SproutFastTransformer$",{E3:1,d:1,eh:1});var As=void 0;
+function Ls(){}Ls.prototype=new l;Ls.prototype.constructor=Ls;c=Ls.prototype;c.b=function(){return this};c.xh=function(a){return Gb(this,a)};c.Ig=function(a){var b=Uh().ce(a);if(!b.z()){var d=b.X().Eb;if(wt(b.X().fb)&&(r(),b=(new J).j(d),null!==b.U&&0===b.U.Mb(2)&&(d=b.U.W(0),b=b.U.W(1),xb(d)))){var e=Uh().ce(d);if(!e.z()&&(d=e.X().Eb,$P(e.X().fb))){var e=(new lQ).b(),f=r(),b=d.mc(b,f.s);return(new Jb).Yf(e,b,a.sa)}}}return Ib(this,a)};c.dh=function(a){return Kb(this,a)};
+c.$classData=g({F3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$WithOtherTransformer$",{F3:1,d:1,eh:1});var Ks=void 0;function ts(){this.a=this.xW=this.wW=0}ts.prototype=new l;ts.prototype.constructor=ts;function gna(a){var b=Uh().ce(a);if(!b.z()&&(b=b.X().fb,no(b)))return!0;b=Uh().ce(a);if(!b.z()&&(b=b.X().fb,nQ(b)))return!0;a=Uh().ce(a);return!a.z()&&(a=a.X().fb,br(a))?!0:!1}c=ts.prototype;
+c.b=function(){ss=this;var a=XF(oQ(pQ())),a=Hc(a),b=B().s,a=L(a,b);this.wW=qQ(a,"PXCOR",0);this.a=(1|this.a)<<24>>24;a=XF(oQ(pQ()));a=Hc(a);b=B().s;a=L(a,b);this.xW=qQ(a,"PYCOR",0);this.a=(2|this.a)<<24>>24;return this};c.xh=function(a){return Gb(this,a)};
+c.Ig=function(a){var b=Uh().ce(a);if(!b.z()){var d=b.X().fb,b=b.X().Eb;if(wt(d)&&(r(),d=(new J).j(b),null!==d.U&&0===d.U.Mb(2)&&(b=d.U.W(0),d=d.U.W(1),xb(b)&&(b=Uh().ce(b),!b.z()&&(b=b.X().fb,rQ(b)&&zb(d)&&(d=Wh(Yh(),d),!d.z()&&(d=d.X().ja(),Rs||(Rs=(new Ps).b()),d=Rs.ce(d),!d.z()))))))){b=d.X().ja();d=d.X().na();b=b.Vd;if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 230");if(this.wW===b&&gna(d))b=(new sQ).b(),d=
+I(r(),(new w).f([d])),a=(new Jb).Yf(b,d,a.sa);else{if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 231");this.xW===b&&gna(d)?(b=(new tQ).b(),d=I(r(),(new w).f([d])),a=(new Jb).Yf(b,d,a.sa)):a=Ib(this,a)}return a}}return Ib(this,a)};c.dh=function(a){return Kb(this,a)};c.$classData=g({G3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$WithTransformer$",{G3:1,d:1,eh:1});var ss=void 0;function uQ(){this.ga=null}
+uQ.prototype=new l;uQ.prototype.constructor=uQ;uQ.prototype.mG=function(a){a=Oaa(a,"get");if(a.z())return F();a=a.X();a:{if(null!==a){var b=a.ja(),d=a.na();if(null!==b&&null!==d){a=u((new v).G((new w).f(["","(",")"])),(new w).f([b,ed(fd(),d)]));break a}}throw(new q).j(a);}return(new J).j(a)};uQ.prototype.SD=function(a){if(null===a)throw ug(vg(),null);this.ga=a;return this};uQ.prototype.$classData=g({Q3:0},!1,"org.nlogo.tortoise.compiler.PrimUtils$VariableReporter$",{Q3:1,d:1,O3:1});
+function cr(){this.ga=null}cr.prototype=new l;cr.prototype.constructor=cr;cr.prototype.mG=function(a){a=Oaa(a,"set");if(a.z())return F();a=a.X();a:{if(null!==a){var b=a.ja(),d=a.na();if(null!==b&&null!==d){a=m(new n,function(a,b,d){return function(a){return u((new v).G((new w).f(["","(",", ",");"])),(new w).f([b,ed(fd(),d),a]))}}(this,b,d));break a}}throw(new q).j(a);}return(new J).j(a)};cr.prototype.SD=function(a){if(null===a)throw ug(vg(),null);this.ga=a;return this};
+cr.prototype.$classData=g({R3:0},!1,"org.nlogo.tortoise.compiler.PrimUtils$VariableSetter$",{R3:1,d:1,O3:1});
+function vQ(a){var b=(new zu).c(a.iw()),b=(new A).e("type",b),d,e=a.Vh.Bb;d=e.Mq;var f=e.eq,h=e.Sp,e=e.Op/255;d=(new zu).c(u((new v).G((new w).f(["rgba(",", ",", ",", ",")"])),(new w).f([d,f,h,e])));d=(new A).e("color",d);f=(new Au).od(a.Vh.ll());f=(new A).e("filled",f);a=(new Au).od(a.Vh.hc);a=[b,d,f,(new A).e("marked",a)];b=dc(new ec,Eu());d=0;for(f=a.length|0;d<f;)hc(b,a[d]),d=1+d|0;return(new su).ac(b.Oa)}function wQ(){this.fz=this.gz=this.hz=this.ez=this.cz=this.dz=this.ux=null}
+wQ.prototype=new l;wQ.prototype.constructor=wQ;wQ.prototype.b=function(){return this};function xQ(){var a=Hq();null===Hq().ux&&null===Hq().ux&&(Hq().ux=(new yQ).Yj(a));return Hq().ux}function Yp(){var a=Hq();null===Hq().gz&&null===Hq().gz&&(Hq().gz=(new zQ).Yj(a));return Hq().gz}function AQ(){var a=Hq();null===Hq().dz&&null===Hq().dz&&(Hq().dz=(new BQ).Yj(a));return Hq().dz}function CQ(){var a=Hq();null===Hq().cz&&null===Hq().cz&&(Hq().cz=(new DQ).Yj(a));return Hq().cz}
+function Pea(){var a=Hq();null===Hq().fz&&null===Hq().fz&&(Hq().fz=(new EQ).Yj(a));return Hq().fz}function FQ(a,b,d,e){return e.Dc(d,b.Tg.$b(d))}function Gq(a){null===Hq().ez&&null===Hq().ez&&(Hq().ez=(new GQ).Yj(a));return Hq().ez}wQ.prototype.$classData=g({L4:0},!1,"org.nlogo.tortoise.compiler.json.JsonReader$",{L4:1,d:1,Xja:1});var hna=void 0;function Hq(){hna||(hna=(new wQ).b());return hna}
+function HQ(a,b){a=a.jz().y(b);if(Zp(a))return(new dq).j((new J).j(a.ha));if(aq(a))return a;throw(new q).j(a);}function IQ(a,b){b.z()?a=F():(b=b.X(),a=(new J).j(HQ(a,b)));return a.z()?(Aq(),a=F(),Jq().y(a)):a.X()}function JQ(){this.tx=this.Ex=this.Yx=this.Vy=null}JQ.prototype=new l;JQ.prototype.constructor=JQ;JQ.prototype.b=function(){return this};function KQ(){var a=LQ();null===LQ().tx&&null===LQ().tx&&(LQ().tx=(new MQ).rq(a));return LQ().tx}
+function NQ(){var a=LQ();null===LQ().Ex&&null===LQ().Ex&&(LQ().Ex=(new OQ).rq(a));return LQ().Ex}function PQ(){var a=LQ();null===LQ().Vy&&null===LQ().Vy&&(LQ().Vy=(new QQ).rq(a));return LQ().Vy}function RQ(){var a=LQ();null===LQ().Yx&&null===LQ().Yx&&(LQ().Yx=(new SQ).rq(a));return LQ().Yx}JQ.prototype.$classData=g({Q4:0},!1,"org.nlogo.tortoise.compiler.json.JsonWriter$",{Q4:1,d:1,Yja:1});var ina=void 0;function LQ(){ina||(ina=(new JQ).b());return ina}function TQ(){this.ZT=this.TY=null}
+TQ.prototype=new l;TQ.prototype.constructor=TQ;function nq(a,b){var d=new TQ;d.TY=a;d.ZT=b;return d}TQ.prototype.$e=function(){return this.ZT.vc(this.TY)};TQ.prototype.$classData=g({R4:0},!1,"org.nlogo.tortoise.compiler.json.JsonWriter$$anon$1",{R4:1,d:1,Tl:1});function UQ(){this.XY=null;this.a=!1}UQ.prototype=new l;UQ.prototype.constructor=UQ;
+function jna(a){var b=new UQ,d=(new yu).Xj(a.tG()),d=(new A).e("x-offset",d),e=(new Au).od(a.tE()),e=(new A).e("is-visible",e);a=a.YC();var f=m(new n,function(){return function(a){return(new yu).Xj(+a)}}(b)),h=r();a=(new Bu).G(a.xa(f,h.s));d=[d,e,(new A).e("dash-pattern",a)];e=dc(new ec,Eu());a=0;for(f=d.length|0;a<f;)hc(e,d[a]),a=1+a|0;b.XY=(new su).ac(e.Oa);b.a=!0;return b}
+UQ.prototype.$e=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ShapeToJsonConverters.scala: 36");return this.XY};UQ.prototype.$classData=g({i5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$$anon$3",{i5:1,d:1,Tl:1});function LP(){this.pZ=null}LP.prototype=new l;LP.prototype.constructor=LP;
+LP.prototype.$e=function(){var a=this.pZ;if(Vt(a)){var b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new VQ).lg(this))}return WQ(a)}if(a&&a.$classData&&a.$classData.n.Oz){b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new XQ).lg(this))}return YQ(a)}if(a&&a.$classData&&a.$classData.n.Qz){b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new ZQ).lg(this))}return $Q(a)}if(Xt(a)){b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,
+(new aR).lg(this))}return bR(a)}if(a&&a.$classData&&a.$classData.n.Sz){b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new cR).lg(this))}return dR(a)}if(a&&a.$classData&&a.$classData.n.Tz)return b=(new we).b(),(b.Na?b.jb:kna(this,b)).Tf(a);if(Pt(a)){b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new eR).lg(this))}return fR(a)}if(Yt(a)){b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new gR).lg(this))}return hR(a)}if(a&&a.$classData&&a.$classData.n.Zz){b=
+(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new iR).lg(this))}return jR(a)}if(a&&a.$classData&&a.$classData.n.$z){b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new kR).lg(this))}return lR(a)}if(!mR(a))throw(new q).j(a);b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new nR).lg(this))}return oR(a)};function kna(a,b){if(null===b)throw(new ye).b();return b.Na?b.jb:ze(b,(new pR).lg(a))}
+LP.prototype.$classData=g({S5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1",{S5:1,d:1,Tl:1});function qR(a,b){if(b.z())return F();b=b.X();b=(new J).j(b);return(new J).j(a.Nr(b))}function rR(){this.hT=null}rR.prototype=new l;rR.prototype.constructor=rR;rR.prototype.b=function(){sR=this;this.hT=lna(ba);return this};function mna(a,b){return!!b.Gb(!0,sb(new tb,function(){return function(a,b){return!!a&&!!b}}(a)))}
+function nna(a,b,d){d=m(new n,function(a,b){return function(d){d=ona(a,d,b);var e=m(new n,function(){return function(a){return null!==a}}(a)),t=nC();return d.rD(e,t).nl(m(new n,function(a,b){return function(d){if(null!==d){var e=!!d.ja();d=d.na();return nna(a,Et(Je(),d),b).Oh(m(new n,function(a,b){return function(a){return b&&!!a}}(a,e)),nC())}throw(new q).j(d);}}(a,b)),nC())}}(a,d));var e=r();b=b.xa(d,e.s);d=mA();e=r();return tC(d,b,e.s,nC()).Oh(m(new n,function(a){return function(b){return mna(a,
+b)}}(a)),nC())}
+function pna(a,b,d,e){for(var f=y(),h=fn(f),h=la(Wa(qa),[h]),k=0,k=0,f=iv(f);f.ta();){var p=f.ma();h.m[k]=p;k=1+k|0}p=y();k=fn(p);k=la(Wa(qa),[k]);f=f=0;for(p=iv(p);p.ta();){var t=p.ma();k.m[f]=t;f=1+f|0}h=qna(b,h,a.hT);d=rna(h,d.ve((new xn).Dg(pa(sna))));return nna(a,Et(Je(),d),e).Oh(m(new n,function(a,b,d,e){return function(a){a=!!a;var b=e.Cx(),f=(new Sb).c(b);kd(f)&&(f=d.Hn,b=u((new v).G((new w).f([""," reported ",""])),(new w).f(["utest",b])),Ev(f.Jg,b,Dv(a)));return a}}(a,b,e,h)),nC())}
+function tna(a){for(var b=(new Sb).c(ba.document.location.search),d=una(b),e=!1,b=null,d=vF(Ha(),d,"\x26"),f=null,f=[],h=0,k=d.m.length;h<k;){var p=ba.decodeURIComponent(d.m[h]);f.push(null===p?null:p);h=1+h|0}d=ka(Wa(qa),f);f=B().s.hh();h=d.m.length;switch(h){case -1:break;default:f.qc(h)}f.Zb((new ri).Mh(d));d=f.Da();a:{if(si(d)&&(e=!0,b=d,d=b.Ia,"i"===b.Cb&&si(d))){b=d.Cb;e=d.Ia;d=ol();d=pl(d);e=L(e,d);e=m(new n,function(a,b){return function(a){return b.ib(a.tk)}}(a,e));b=(new Sb).c(b);d=ti();
+d=(new J).j(vi(d,b.R,10));b=e;e=d;break a}if(e&&(e=b.Ia,"e"===b.Cb)){b=ol();b=pl(b);b=L(e,b);b=m(new n,function(a,b){return function(a){return!b.ib(a.tk)}}(a,b));e=F();break a}b=m(new n,function(){return function(){return!0}}(a));e=F()}d=e;f=oha();e=m(new n,function(){return function(a){return a.na().Ha()}}(a));h=r();e=f.xa(e,h.s).fg(Jv())|0;h=m(new n,function(a,b){return function(a){return a.na().Af(b)}}(a,b));k=r();h=f.fj(h,k.s);e=kha(h,e);(d.z()?0:(d.X()|0)!==vna(a,h))&&gha(e);d=f.fo(m(new n,function(){return function(a){return null!==
+a}}(a)));b=m(new n,function(a,b,d){return function(e){if(null!==e)return pna(a,e.ja(),e.na().ml(b,!1),d);throw(new q).j(e);}}(a,b,e));f=r();b=d.xa(b,f.s);d=mA();f=r();tC(d,b,f.s,nC()).Oh(m(new n,function(a){return function(b){return mna(a,b)}}(a)),nC()).jp(m(new n,function(a,b){return function(a){b.dD(a)}}(a,e)),nC())}function vna(a,b){V();a=m(new n,function(){return function(a){return a.tk}}(a));var d=r();return OD(0,b.xa(a,d.s).gd())}
+function ona(a,b,d){d=iha(d,b.Zv.tk);var e=(new tR).b(),f=(new uR).b();b=lA(mA(),K(function(a,b,d,e,f){return function(){for(var E=(new w).f([d.gy]),S=E.pa.length|0,S=la(Wa(Raa),[S]),U=0,U=0,E=Ve(new We,E,0,E.pa.length|0);E.ta();){var ga=E.ma();S.m[U]=ga;U=1+U|0}wna(b,e,S,m(new n,function(a,b){return function(a){a=(new rA).j(a);ge(b,a)}}(a,f)))}}(a,b,d,e,f)),(new fF).b()).nl(m(new n,function(a,b,d){return function(){return d.Oh(m(new n,function(a,b){return function(a){return(new A).e(!b.zw,a)}}(a,
+b)),nC())}}(a,e,f)),nC());b.Oh(m(new n,function(){return function(a){return!!a.ja()}}(a)),nC()).jp(m(new n,function(a,b){return function(a){b.dD(a)}}(a,d)),nC());return b.Us((new vR).b(),nC())}rR.prototype.main=function(){tna(this)};rR.prototype.$classData=g({H6:0},!1,"org.scalajs.testinterface.HTMLRunner$",{H6:1,d:1,hqa:1});var sR=void 0;function tR(){this.zw=!1}tR.prototype=new l;tR.prototype.constructor=tR;tR.prototype.b=function(){this.zw=!1;return this};
+tR.prototype.tU=function(a){a=a.XF;this.zw=this.zw?!0:Bv().cW.ib(a);Bv().au.rr(a,1+(Bv().au.y(a)|0)|0)};tR.prototype.$classData=g({K6:0},!1,"org.scalajs.testinterface.HTMLRunner$EventCounter$Handler",{K6:1,d:1,K7:1});function wR(){this.ga=this.eW=this.Kq=null}wR.prototype=new l;wR.prototype.constructor=wR;wR.prototype.Ov=function(a){this.Kq.Ov(a)};
+function lha(a){var b=new wR;if(null===a)throw ug(vg(),null);b.ga=a;var d=a.RE.Ha();b.Kq=(new Ov).Du(a,u((new v).G((new w).f(["Excluded Test Suites (",")"])),(new w).f([d])));b.eW=jha(a,a.lv,b.Kq.di);b.Kq.di.checked=!1;b.Kq.di.onclick=hha(a,a.lv,b.Kq.di);a.RE.ua(m(new n,function(a){return function(b){return a.ga.lv.zj(xna(a,b.tk))}}(b)));return b}wR.prototype.$classData=g({M6:0},!1,"org.scalajs.testinterface.HTMLRunner$UI$ExcludedTestBox",{M6:1,d:1,gR:1});
+function xR(){this.ga=this.di=this.IE=this.ht=null}xR.prototype=new l;xR.prototype.constructor=xR;xR.prototype.dU=function(){return!1};xR.prototype.DY=function(a){this.di.checked=a};xR.prototype.Oy=function(){return!!this.di.checked};function xna(a,b){var d=new xR;d.ht=b;if(null===a)throw ug(vg(),null);d.ga=a;d.IE=Ev(a.Kq,"","info");d.di=mha(Gv(),d.IE,!1);d.di.onclick=a.eW;Fv(Gv(),d.IE," "+b);return d}
+xR.prototype.$classData=g({N6:0},!1,"org.scalajs.testinterface.HTMLRunner$UI$ExcludedTestBox$ExcludedTest",{N6:1,d:1,R6:1});function Nv(){this.ga=this.eZ=this.XC=this.Jg=null}Nv.prototype=new l;Nv.prototype.constructor=Nv;Nv.prototype.Ov=function(a){this.Jg.Ov(a)};
+function yna(a,b){var d=a.ga.mv,e=a.ga.lv,f=Dc().s,d=Ht(d,e,f).Gi(b);if(null===d)throw(new q).j(d);b=d.ja();d=d.na();b.Ha()<d.Ha()?(V(),e=m(new n,function(){return function(a){return a.ht}}(a)),f=Dc().s,d=""+OD(0,Cr(d,e,f).gd()),d=I(r(),(new w).f(["i",d])),e=m(new n,function(){return function(a){return a.ht}}(a)),f=Dc().s,b=Cr(b,e,f),e=r(),b=d.Vc(b,e.s)):(b=m(new n,function(){return function(a){return a.ht}}(a)),e=Dc().s,b=Cr(d,b,e),d=Dc(),b=b.Qc("e",d.s));a=m(new n,function(){return function(a){return ba.encodeURIComponent(a)}}(a));
+d=r();return b.xa(a,d.s).Mc("?","\x26","")}Nv.prototype.Dx=function(a){this.Jg.Dx(a);this.XC.className="log "+Dv(a);var b=Ev(this.Jg,"Next: ",Dv(a));a||(Hv(Gv(),b,yna(this,m(new n,function(){return function(a){return a.dU()}}(this))),"Run failed"),Fv(Gv(),b," | "));Hv(Gv(),b,"#","Run selected").onclick=function(a){return function(){return zna(a)}}(this);Fv(Gv(),b," | ");Hv(Gv(),b,"?","Run all")};
+function zna(a){ba.document.location.search=yna(a,m(new n,function(){return function(a){return a.Oy()}}(a)));return!1}Nv.prototype.$classData=g({O6:0},!1,"org.scalajs.testinterface.HTMLRunner$UI$RootBox",{O6:1,d:1,gR:1});function yR(){this.ga=null}yR.prototype=new l;yR.prototype.constructor=yR;yR.prototype.kD=function(a){Ev(this.ga.zl,a,"error");Pv(this.ga.zl)};yR.prototype.jG=function(a){this.kD(a.k())};yR.prototype.ID=function(a){Ev(this.ga.zl,a,"info")};
+yR.prototype.$classData=g({Q6:0},!1,"org.scalajs.testinterface.HTMLRunner$UI$RunningTest$$anon$1",{Q6:1,d:1,VB:1});function Ov(){this.wg=this.di=this.CD=this.nD=this.vs=this.Jg=null;this.ks=!1;this.ga=null}Ov.prototype=new l;Ov.prototype.constructor=Ov;Ov.prototype.Ov=function(a){this.Jg.insertAdjacentElement("afterend",a.Jg)};function Ana(a){a.ks=!a.ks;a.nD.textContent=a.ks?"[-]":"[+]";a.wg.style.display=a.ks?"block":"none"}function Pv(a){a.ks||Ana(a)}
+Ov.prototype.Dx=function(a){this.vs.className=this.vs.className+" "+Dv(a);this.CD.textContent+=a?" - Passed":" - Failed"};
+Ov.prototype.Du=function(a,b){if(null===a)throw ug(vg(),null);this.ga=a;a=a.dW;a=this.Jg=Mv(Gv(),a,"test-box","","div");this.vs=Mv(Gv(),a,"test-box-header","","div");this.nD=Hv(Gv(),this.vs,"#","[+]");this.nD.onclick=function(a){return function(){Ana(a);return!1}}(this);this.CD=Fv(Gv(),this.vs," "+b);this.di=mha(Gv(),this.vs,!0);b=this.Jg;this.wg=Mv(Gv(),b,"test-box-body","","div");this.ks=!1;return this};
+function Ev(a,b,d){return Mv(Gv(),a.wg,u((new v).G((new w).f(["log ",""])),(new w).f([d])),b,"pre")}Ov.prototype.$classData=g({S6:0},!1,"org.scalajs.testinterface.HTMLRunner$UI$TestBox",{S6:1,d:1,gR:1});function zR(){this.OV=null}zR.prototype=new kja;zR.prototype.constructor=zR;function lna(a){var b=new zR;b.OV=a;return b}zR.prototype.$classData=g({hR:0},!1,"org.scalajs.testinterface.ScalaJSClassLoader",{hR:1,Yoa:1,d:1});function AR(){this.fk=this.su=null}AR.prototype=new fw;
+AR.prototype.constructor=AR;c=AR.prototype;c.cy=function(a){return ba.JSON.parse(ne(a))};
+c.sU=function(a,b){if("newRunner"===a){var d;a:{var e=this.cy(b),f=e.args,h=f.length|0,h=la(Wa(qa),[h]);a=h.m.length;var k=0,p=0;b=f.length|0;a=b<a?b:a;b=h.m.length;for(a=a<b?a:b;k<a;)h.m[p]=f[k],k=1+k|0,p=1+p|0;e=e.remoteArgs;f=e.length|0;f=la(Wa(qa),[f]);a=f.m.length;p=k=0;b=e.length|0;a=b<a?b:a;b=f.m.length;for(a=a<b?a:b;k<a;)f.m[p]=e[k],k=1+k|0,p=1+p|0;e=lna(aa.exportsNamespace);try{this.fk=qna(this.su,h,e),d=(new rA).j(void 0)}catch(x){d=Un(vg(),x);if(null!==d){h=nw(ow(),d);if(!h.z()){d=h.X();
+d=(new qA).wd(d);break a}throw ug(vg(),d);}throw x;}}gw(d)}else if("runnerDone"===a){this.Yp();try{var t=(new rA).j(this.fk.Cx())}catch(x){if(d=Un(vg(),x),null!==d){h=nw(ow(),d);if(h.z())throw ug(vg(),d);d=h.X();t=(new qA).wd(d)}else throw x;}this.fk=null;gw(t)}else if("tasks"===a){a:{f=this.cy(b);this.Yp();d=[];k=0;for(p=f.length|0;k<p;)a=f[k],a=$v(aw(),a),d.push(a),k=1+k|0;f=d.length|0;f=la(Wa(sna),[f]);a=f.m.length;p=k=0;b=d.length|0;a=b<a?b:a;b=f.m.length;for(a=a<b?a:b;k<a;)f.m[p]=d[k],k=1+k|
+0,p=1+p|0;try{e=rna(this.fk,f),h=(new rA).j(ba.JSON.stringify(wha(e)))}catch(x){d=Un(vg(),x);if(null!==d){h=nw(ow(),d);if(!h.z()){d=h.X();h=(new qA).wd(d);break a}throw ug(vg(),d);}throw x;}}gw(h)}else if("msg"===a){a:{d=ne(b);this.Yp();try{k=this.fk.YE(d),p=k.z()?":n":":s:"+k.X(),f=(new rA).j(p)}catch(x){d=Un(vg(),x);if(null!==d){h=nw(ow(),d);if(!h.z()){d=h.X();f=(new qA).wd(d);break a}throw ug(vg(),d);}throw x;}}gw(f)}else throw(new Ne).c(u((new v).G((new w).f(["Unknown command: ",""])),(new w).f([a])));
+};c.Yp=function(){if(null===this.fk)throw(new he).c("No runner created");};c.c=function(a){ew.prototype.c.call(this,a);return this};c.$classData=g({f7:0},!1,"org.scalajs.testinterface.internal.Master",{f7:1,Y6:1,d:1});function BR(){this.DW=this.ZS=this.su=null;this.St=!1;this.fk=this.ky=null}BR.prototype=new fw;BR.prototype.constructor=BR;c=BR.prototype;c.cy=function(a){return ba.JSON.parse(ne(a))};
+c.sU=function(a,b){try{for(this.St=!0;!this.ky.z();){var d=this.ky;if(d.z())throw(new Du).c("queue empty");var e=d.jg.dj;d.jg=d.jg.oi;var f=d;f.ni=-1+f.ni|0;0===f.ni&&(f.bk=f.jg);Bna(this,e)}if("newRunner"===a)gw(Cna(this));else if("execute"===a)Dna(this,this.cy(b));else if("stopSlave"===a){this.Yp();try{var h=(new rA).j((this.fk.Cx(),void 0))}catch(ma){var k=Un(vg(),ma);if(null!==k){var p=nw(ow(),k);if(p.z())throw ug(vg(),k);var t=p.X(),h=(new qA).wd(t)}else throw ma;}this.fk=null;gw(h)}else if("msg"===
+a){var x;a:{var E=ne(b);this.Yp();try{x=(new rA).j((this.fk.YE(E),void 0))}catch(ma){var S=Un(vg(),ma);if(null!==S){var U=nw(ow(),S);if(!U.z()){var ga=U.X();x=(new qA).wd(ga);break a}throw ug(vg(),S);}throw ma;}}x.pE()&&gw(x)}else throw(new Ne).c(u((new v).G((new w).f(["Unknown command: ",""])),(new w).f([a])));}finally{this.St=!1}};function Bna(a,b){un(Je(),a.St);ba.scalajsCom.send(u((new v).G((new w).f(["msg:",""])),(new w).f([b])))}
+function Cna(a){var b=lna(aa.exportsNamespace);try{for(var d=a.su,e=a.ZS,f=e.length|0,h=la(Wa(qa),[f]),k=h.m.length,p=f=0,t=e.length|0,k=t<k?t:k,x=h.m.length,x=k<x?k:x;f<x;)h.m[p]=e[f],f=1+f|0,p=1+p|0;for(var E=a.DW,S=E.length|0,U=la(Wa(qa),[S]),ga=U.m.length,S=e=0,ma=E.length|0,ga=ma<ga?ma:ga,va=U.m.length,va=ga<va?ga:va;e<va;)U.m[S]=E[e],e=1+e|0,S=1+S|0;a.fk=Ena(d,h,b,m(new n,function(a){return function(b){if(a.St)Bna(a,b);else{var d=a.ky;b=[b];for(var e=0,f=b.length|0;e<f;)Fna(d,b[e]),e=1+e|0}}}(a)));
+return(new rA).j(void 0)}catch(Ia){a=Un(vg(),Ia);if(null!==a){b=nw(ow(),a);if(!b.z())return a=b.X(),(new qA).wd(a);throw ug(vg(),a);}throw Ia;}}c.Yp=function(){if(null===this.fk)throw(new he).c("No runner created");};c.Oba=function(a,b,d){this.ZS=b;this.DW=d;ew.prototype.c.call(this,a);this.St=!1;this.ky=Gna().db().Da();return this};
+function Dna(a,b){a.Yp();var d=b.serializedTask,d=Hna(a.fk,$v(aw(),ba.JSON.parse(d))),e=(new CR).Vx(a);b=b.loggerColorSupport;for(var f=[],h=b.length|0,k=0;k<h;){var p=(new A).e(b[k],k);f.push(p);k=1+k|0}b=Xb(new Yb,(new Tv).f(f),m(new n,function(){return function(a){return null!==a}}(a)));f=m(new n,function(a){return function(b){if(null!==b){var d=new DR;d.Se=b.Ec();Iw.prototype.Vx.call(d,a);return d}throw(new q).j(b);}}(a));h=(new Tv).b();b.ga.ua(m(new n,function(a,b,d){return function(e){return a.Bl.y(e)?
+d.Qa(b.y(e)):void 0}}(b,f,h)));b=h.Rd;try{for(var t=b.length|0,x=la(Wa(Raa),[t]),E=x.m.length,f=t=0,S=b.length|0,E=S<E?S:E,U=x.m.length,U=E<U?E:U;t<U;)x.m[f]=b[t],t=1+t|0,f=1+f|0;wna(d,e,x,m(new n,function(a,b,d){return function(a){try{var e=(new rA).j(ba.JSON.stringify(wha(a)))}catch(f){if(e=Un(vg(),f),null!==e){a=nw(ow(),e);if(a.z())throw ug(vg(),e);e=a.X();e=(new qA).wd(e)}else throw f;}b.pz=!1;a=0;for(var h=d.length|0;a<h;)d[a].pz=!1,a=1+a|0;gw(e)}}(a,e,b)));var ga=(new rA).j(void 0)}catch(ma){if(a=
+Un(vg(),ma),null!==a){x=nw(ow(),a);if(x.z())throw ug(vg(),a);a=x.X();ga=(new qA).wd(a)}else throw ma;}ga.pE()&&gw(ga)}c.$classData=g({h7:0},!1,"org.scalajs.testinterface.internal.Slave",{h7:1,Y6:1,d:1});
+function Ina(a){ER();a.Iba=(new FR).mn(m(new n,function(){return function(a){if(rx(a)){a=a.Y;var d=Jna();try{var e,f=oc();0===(1&f.ya)&&0===(1&f.ya)&&(f.CG=bx(),f.ya|=1);e=f.CG;var h=(new GR).c(a),k=(new J).j(HR(new IR,JR(new KR,h,e.Nj)))}catch(t){var p=Un(vg(),t);if(null!==p){if(d.Dy.y(p))throw ug(vg(),p);if(d.Cl.Ya(p))k=d.Cl.y(p);else throw ug(vg(),p);}else throw t;}finally{e=d.Ox,e.z()||e.X().Uba()}return k.z()?Ww(Tw(),Uw(Vw(),"error.expected.numberformatexception")):k.X()}return sx(a)?(k=a.Y,
+e=bx(),HR(new IR,JR(new KR,k.Fc,e.Nj))):Ww(Tw(),Uw(Vw(),"error.expected.jsnumberorjsstring"))}}(a)));ER();a.Vba=(new FR).mn(m(new n,function(){return function(a){if(rx(a)){a=a.Y;var d=Jna();try{var e=(new J).j(HR(new IR,(new GR).c(a)))}catch(h){var f=Un(vg(),h);if(null!==f){if(d.Dy.y(f))throw ug(vg(),f);if(d.Cl.Ya(f))e=d.Cl.y(f);else throw ug(vg(),f);}else throw h;}finally{f=d.Ox,f.z()||f.X().Uba()}return e.z()?Ww(Tw(),Uw(Vw(),"error.expected.numberformatexception")):e.X()}return sx(a)?HR(new IR,
+a.Y.Fc):Ww(Tw(),Uw(Vw(),"error.expected.jsnumberorjsstring"))}}(a)));a.ija=Kna(a)}function LR(){}LR.prototype=new l;LR.prototype.constructor=LR;LR.prototype.sq=function(){return this};LR.prototype.Mk=function(a){if(a&&a.$classData&&a.$classData.n.PB)return a=!!(new J).j(a.Y).U,HR(new IR,a);a=r();var b=MR(),d=I(r(),(new w).f([Uw(Vw(),"error.expected.jsboolean")]));return(new NR).G(I(a,(new w).f([(new A).e(b,d)])))};
+LR.prototype.$classData=g({o7:0},!1,"play.api.libs.json.DefaultReads$BooleanReads$",{o7:1,d:1,vt:1});function OR(){}OR.prototype=new l;OR.prototype.constructor=OR;OR.prototype.sq=function(){return this};OR.prototype.Mk=function(a){var b=!1;return sx(a)&&(b=!0,a=a.Y,a.Xu())?HR(new IR,a.Fc.Bi()):b?Lna("error.expected.int"):Lna("error.expected.jsnumber")};OR.prototype.$classData=g({p7:0},!1,"play.api.libs.json.DefaultReads$IntReads$",{p7:1,d:1,vt:1});function PR(){}PR.prototype=new l;
+PR.prototype.constructor=PR;PR.prototype.sq=function(){return this};PR.prototype.Mk=function(a){if(tx(a))return HR(new IR,a);a=r();var b=MR(),d=I(r(),(new w).f([Uw(Vw(),"error.expected.jsarray")]));return(new NR).G(I(a,(new w).f([(new A).e(b,d)])))};PR.prototype.$classData=g({q7:0},!1,"play.api.libs.json.DefaultReads$JsArrayReads$",{q7:1,d:1,vt:1});function QR(){}QR.prototype=new l;QR.prototype.constructor=QR;QR.prototype.sq=function(){return this};
+QR.prototype.Mk=function(a){if(rx(a))return HR(new IR,a.Y);a=r();var b=MR(),d=I(r(),(new w).f([Uw(Vw(),"error.expected.jsstring")]));return(new NR).G(I(a,(new w).f([(new A).e(b,d)])))};QR.prototype.$classData=g({r7:0},!1,"play.api.libs.json.DefaultReads$StringReads$",{r7:1,d:1,vt:1});function RR(){this.fT=!1;this.ga=null}RR.prototype=new l;RR.prototype.constructor=RR;
+RR.prototype.Mk=function(a){if(rx(a)){a=a.Y;try{var b=(new rA).j(Mna(Nna(),a))}catch(e){if(b=Un(vg(),e),null!==b){var d=nw(ow(),b);if(d.z())throw ug(vg(),b);b=d.X();b=(new qA).wd(b)}else throw e;}b=b.dw();this.fT?(b.z()?a=!0:(d=b.X(),a=null!==d&&a===d.k()),a=a?b:F()):a=b;a.z()?a=F():(a=a.X(),a=(new J).j(HR(new IR,a)));return a.z()?(a=r(),b=MR(),d=I(r(),(new w).f([Uw(Vw(),"error.expected.uuid")])),(new NR).G(I(a,(new w).f([(new A).e(b,d)])))):a.X()}a=r();b=MR();d=I(r(),(new w).f([Uw(Vw(),"error.expected.uuid")]));
+return(new NR).G(I(a,(new w).f([(new A).e(b,d)])))};function Kna(a){var b=new RR;b.fT=!1;if(null===a)throw ug(vg(),null);b.ga=a;return b}RR.prototype.$classData=g({s7:0},!1,"play.api.libs.json.DefaultReads$UUIDReader",{s7:1,d:1,vt:1});function FR(){this.ej=null}FR.prototype=new l;FR.prototype.constructor=FR;FR.prototype.Mk=function(a){return this.ej.y(a)};FR.prototype.mn=function(a){this.ej=a;return this};FR.prototype.$classData=g({F7:0},!1,"play.api.libs.json.Reads$$anon$8",{F7:1,d:1,vt:1});
+function SR(){}SR.prototype=new l;SR.prototype.constructor=SR;SR.prototype.b=function(){return this};SR.prototype.$classData=g({G7:0},!1,"play.api.libs.json.Reads$JsArrayMonoid$",{G7:1,d:1,n7:1});var Ona=void 0;function TR(){}TR.prototype=new l;TR.prototype.constructor=TR;TR.prototype.b=function(){return this};TR.prototype.$classData=g({H7:0},!1,"play.api.libs.json.Reads$JsObjectMonoid$",{H7:1,d:1,n7:1});var Pna=void 0;function Lw(){this.Cp=this.tk=null;this.xr=!1;this.yr=null}Lw.prototype=new l;
+Lw.prototype.constructor=Lw;Lw.prototype.o=function(a){return a&&a.$classData&&a.$classData.n.sR?this.tk===a.tk&&this.Cp===a.Cp&&this.xr===a.xr?lja(WA(),this.yr,a.yr):!1:!1};Lw.prototype.k=function(){var a=this.tk,b=this.Cp,d=this.xr,e=this.yr,f=(new pm).b(),h;h=!0;Ur(f,"[");for(var k=0,p=e.m.length;k<p;){var t=e.m[k];h?(Wr(f,t),h=!1):(Ur(f,", "),Wr(f,t));k=1+k|0}Ur(f,"]");return"TaskDef("+a+", "+b+", "+d+", "+f.rc.Xb+")"};
+Lw.prototype.r=function(){var a;a=this.tk;a=da(31,17)+Ga(Ha(),a)|0;var b=this.Cp;a=da(31,a)+Ka(b)|0;a=da(31,a)+(this.xr?1:0)|0;a=da(31,a);var b=WA(),d=this.yr,b=mja(b);if(null===d)b=0;else{var d=lw(Je(),d),e=d.ra(),f=0,h=1;b:for(;;){if(f!==e){var k=1+f|0,f=d.W(f),h=da(31,h|0)+(null===f?0:b.y(f)|0)|0,f=k;continue b}break}b=h|0}return a+b|0};var sna=g({sR:0},!1,"sbt.testing.TaskDef",{sR:1,d:1,i:1});Lw.prototype.$classData=sna;function UR(a){a.tp(Qna(a))}function VR(){this.ga=null}VR.prototype=new l;
+VR.prototype.constructor=VR;function Rna(a){var b=new VR;if(null===a)throw ug(vg(),null);b.ga=a;return b}VR.prototype.$classData=g({c8:0},!1,"scalaz.Associative$$anon$2",{c8:1,d:1,Kma:1});function WR(){this.ga=null}WR.prototype=new l;WR.prototype.constructor=WR;function Saa(a){var b=new WR;if(null===a)throw ug(vg(),null);b.ga=a;return b}WR.prototype.$classData=g({f8:0},!1,"scalaz.Bifoldable$$anon$8",{f8:1,d:1,Taa:1});function XR(){this.ga=null}XR.prototype=new l;XR.prototype.constructor=XR;
+function Qha(a){var b=new XR;if(null===a)throw ug(vg(),null);b.ga=a;return b}XR.prototype.$classData=g({g8:0},!1,"scalaz.Bifunctor$$anon$7",{g8:1,d:1,Uaa:1});function YR(a){a.Em(Sna(a))}function ZR(){this.ga=null}ZR.prototype=new l;ZR.prototype.constructor=ZR;function Taa(a){var b=new ZR;if(null===a)throw ug(vg(),null);b.ga=a;return b}ZR.prototype.$classData=g({p8:0},!1,"scalaz.Compose$$anon$4",{p8:1,d:1,Xw:1});function $R(){}$R.prototype=new l;$R.prototype.constructor=$R;c=$R.prototype;
+c.b=function(){Jd(this);return this};c.Sd=function(a){return a};c.ah=function(a){return a.k()};c.Xg=function(){};c.$classData=g({t8:0},!1,"scalaz.Cord$$anon$2",{t8:1,d:1,gh:1});function aS(){}aS.prototype=new l;aS.prototype.constructor=aS;aS.prototype.b=function(){zd(this);return this};aS.prototype.ag=function(){};aS.prototype.$classData=g({u8:0},!1,"scalaz.Cord$$anon$3",{u8:1,d:1,hg:1});function bS(){this.ga=null}bS.prototype=new l;bS.prototype.constructor=bS;
+function cS(a){var b=new bS;if(null===a)throw ug(vg(),null);b.ga=a;return b}bS.prototype.$classData=g({v8:0},!1,"scalaz.Cozip$$anon$1",{v8:1,d:1,Qma:1});function dS(){}dS.prototype=new Sha;dS.prototype.constructor=dS;function Tna(){}Tna.prototype=dS.prototype;function Cx(){}Cx.prototype=new l;Cx.prototype.constructor=Cx;Cx.prototype.mF=function(){};Cx.prototype.UD=function(){this.mF(Rna(this));return this};Cx.prototype.$classData=g({x8:0},!1,"scalaz.DisjunctionInstances2$$anon$8",{x8:1,d:1,b8:1});
+function eS(){}eS.prototype=new Tha;eS.prototype.constructor=eS;function Una(){}Una.prototype=eS.prototype;function fS(){}fS.prototype=new Vha;fS.prototype.constructor=fS;function Vna(){}Vna.prototype=fS.prototype;function gS(a){a.Rh(Wna(a))}function hS(){this.ga=null}hS.prototype=new l;hS.prototype.constructor=hS;function Uaa(a){var b=new hS;if(null===a)throw ug(vg(),null);b.ga=a;return b}hS.prototype.$classData=g({G8:0},!1,"scalaz.Equal$$anon$4",{G8:1,d:1,TR:1});function iS(){}iS.prototype=new fia;
+iS.prototype.constructor=iS;function Xx(a,b,d,e,f){var h=f.Oe(f.Oe(f.Nl(b),d),e);return Xna(new jS,h,K(function(a,b){return function(){return b}}(a,b)),K(function(a,b){return function(){return b}}(a,d)),K(function(a,b){return function(){return b}}(a,e)),f)}iS.prototype.b=function(){return this};function ly(a,b,d,e){return Yna(new kS,e.Oe(e.Nl(b),d),b,d,e)}
+function Ux(a,b,d,e){var f=e.Oe(e.Nl(b),d);return Zna(new lS,f,K(function(a,b){return function(){return b}}(a,b)),K(function(a,b){return function(){return b}}(a,d)),e)}function ky(a,b,d){a=new mS;var e=d.Nl(b);a.qf=e;a.Aa=b;a.Ug=d;a.Fi=e;return a}function $na(a,b,d){var e=d.Nl(b);return iy(new jy,e,K(function(a,b){return function(){return b}}(a,b)),d)}iS.prototype.$classData=g({H8:0},!1,"scalaz.FingerTree$",{H8:1,zka:1,d:1});var aoa=void 0;function Vx(){aoa||(aoa=(new iS).b());return aoa}
+function lS(){this.PS=this.NS=this.hZ=this.Fi=null}lS.prototype=new jz;lS.prototype.constructor=lS;lS.prototype.wD=function(a){var b=this.hZ,d=this.NS,e=this.PS;return(0,a.yi)(b,d,e)};function Zna(a,b,d,e,f){a.hZ=b;a.NS=d;a.PS=e;iz.prototype.ij.call(a,f);a.Fi=b;return a}lS.prototype.$classData=g({I8:0},!1,"scalaz.FingerTree$$anon$11",{I8:1,w9:1,d:1});function jS(){this.RS=this.QS=this.OS=this.iZ=this.Fi=null}jS.prototype=new jz;jS.prototype.constructor=jS;
+jS.prototype.wD=function(a,b){return Rc(b,this.iZ,this.OS,this.QS,this.RS)};function Xna(a,b,d,e,f,h){a.iZ=b;a.OS=d;a.QS=e;a.RS=f;iz.prototype.ij.call(a,h);a.Fi=b;return a}jS.prototype.$classData=g({J8:0},!1,"scalaz.FingerTree$$anon$12",{J8:1,w9:1,d:1});function Hd(){this.LV=this.ea=null}Hd.prototype=new Kx;Hd.prototype.constructor=Hd;Hd.prototype.ij=function(a){this.LV=a;Jx.prototype.ij.call(this,a);return this};Hd.prototype.Kh=function(a){return a.y(this.LV.wl().xe())};
+Hd.prototype.$classData=g({K8:0},!1,"scalaz.FingerTree$$anon$17",{K8:1,AR:1,d:1});function jy(){this.MS=this.fZ=this.ea=null}jy.prototype=new Kx;jy.prototype.constructor=jy;jy.prototype.Kh=function(a,b){return qb(b,this.fZ,ne(this.MS))};function iy(a,b,d,e){a.fZ=b;a.MS=d;Jx.prototype.ij.call(a,e);return a}jy.prototype.$classData=g({L8:0},!1,"scalaz.FingerTree$$anon$18",{L8:1,AR:1,d:1});function Rx(){this.EY=this.pW=this.gZ=this.MV=this.ea=null}Rx.prototype=new Kx;Rx.prototype.constructor=Rx;
+function Qx(a,b,d,e,f,h){a.gZ=b;a.pW=d;a.EY=f;Jx.prototype.ij.call(a,h);hy(Vx(),h);a.MV=(Lx(),(new Mx).Ac(e));return a}Rx.prototype.Kh=function(a,b,d){return Rc(d,this.gZ,this.pW,K(function(a){return function(){return T(a.MV)}}(this)),this.EY)};Rx.prototype.$classData=g({M8:0},!1,"scalaz.FingerTree$$anon$19",{M8:1,AR:1,d:1});function dy(){this.Br=this.fx=this.Bz=null}dy.prototype=new l;dy.prototype.constructor=dy;dy.prototype.Sd=function(a){return boa(this,a)};dy.prototype.ah=function(a){return this.Sd(a).k()};
+dy.prototype.Xg=function(){};
+function boa(a,b){return b.Kh(m(new n,function(a){return function(b){var f=Ed();b=[a.fx.Sd(b),Fd(Ed()," []")];var h=b.length|0,k=0,p=Gd((new Hd).ij(f.dr));a:for(;;){if(k!==h){f=1+k|0;p=Id(p,b[k]);k=f;continue a}return p}}}(a)),sb(new tb,function(a){return function(b,f){var h=Ed();b=[a.fx.Sd(b),Fd(Ed()," ["),a.Br.Sd(f),Fd(Ed(),"]")];f=b.length|0;var k=0,p=Gd((new Hd).ij(h.dr));a:for(;;){if(k!==f){h=1+k|0;p=Id(p,b[k]);k=h;continue a}return p}}}(a)),Ox(function(a){return function(b,f,h,k){h=Ed();b=[a.fx.Sd(b),
+Fd(Ed()," ["),a.Bz.Sd(f.ob()),Fd(Ed(),", ?, "),a.Bz.Sd(k.ob()),Fd(Ed(),"]")];f=b.length|0;k=0;var p=Gd((new Hd).ij(h.dr));a:for(;;){if(k!==f){h=1+k|0;p=Id(p,b[k]);k=h;continue a}return p}}}(a)))}dy.prototype.$classData=g({N8:0},!1,"scalaz.FingerTreeInstances$$anon$9",{N8:1,d:1,gh:1});function nS(){this.ga=null}nS.prototype=new l;nS.prototype.constructor=nS;function gia(a){var b=new nS;if(null===a)throw ug(vg(),null);b.ga=a;return b}
+nS.prototype.$classData=g({O8:0},!1,"scalaz.Foldable$$anon$6",{O8:1,d:1,nC:1});function coa(a,b,d,e){var f=(new oS).b();b.ua(m(new n,function(a,b){return function(a){return pS(b,a)}}(a,f)));for(b=e.xe();!f.z();){var h=b;b=doa(f);h=K(function(a,b){return function(){return b}}(a,h));b=e.sc(d.y(b),h)}return b}
+function eoa(a,b,d,e){a=a.zi(b,(Tu(),F()),sb(new tb,function(a,b,d){return function(a,e){a=(new A).e(a,e);e=a.lb;var f=a.Db;if(F()===e)return Tu(),a=b.y(f),(new J).j(a);f=a.lb;e=a.Db;if(Fk(f))return a=f.U,Tu(),a=qb(d,a,e),(new J).j(a);throw(new q).j(a);}}(a,d,e)));return a.z()?Bn(Cn(),"foldMapLeft1"):a.X()}function foa(a,b,d){return a.Px(b,m(new n,function(){return function(a){return a}}(a)),d)}function qS(){}qS.prototype=new nia;qS.prototype.constructor=qS;function goa(){}goa.prototype=qS.prototype;
+function rS(){this.jE=null}rS.prototype=new pia;rS.prototype.constructor=rS;function hoa(){}hoa.prototype=rS.prototype;rS.prototype.b=function(){var a=new sS;Ad(a);Ky(a);ry(a);oz(a);tS(a);uS(a);vS(a);wS(a);Bd(a);xz(a);xS(a);yS(a);zS(a);Ld(a);Kd(a);UR(a);AS(a);YR(a);this.jE=a;return this};function BS(){this.Br=null}BS.prototype=new l;BS.prototype.constructor=BS;
+function ioa(a,b){if(hq(b))b=joa(Ed());else{if(!iq(b))throw(new q).j(b);b=koa(a,b.fd,a.Br.Sd(b.bd))}Ed();b=Nx(b.tc,K(function(a,b){return function(){return b}}(b,"[")));return loa(Gd(b),K(function(){return function(){return"]"}}(a)))}BS.prototype.Sd=function(a){return ioa(this,a)};function koa(a,b,d){for(;;){if(hq(b))return d;if(iq(b)){var e=b;b=e.bd;e=e.fd;d=Id(loa(d,K(function(){return function(){return","}}(a))),a.Br.Sd(b));b=e}else throw(new q).j(b);}}BS.prototype.ah=function(a){return this.Sd(a).k()};
+BS.prototype.Xg=function(){};BS.prototype.$classData=g({X8:0},!1,"scalaz.IListInstances$$anon$6",{X8:1,d:1,gh:1});function Yz(){this.Tx=null}Yz.prototype=new l;Yz.prototype.constructor=Yz;Yz.prototype.b=function(){Xz=this;this.oF(moa());return this};Yz.prototype.oF=function(a){this.Tx=a};Yz.prototype.$classData=g({Y8:0},!1,"scalaz.Id$",{Y8:1,d:1,Z8:1});var Xz=void 0;function CS(){}CS.prototype=new qia;CS.prototype.constructor=CS;function noa(){}noa.prototype=CS.prototype;
+function Lz(){this.fH=this.Ro=null}Lz.prototype=new Oy;Lz.prototype.constructor=Lz;function Kz(a,b,d){a.Ro=b;a.fH=d;return a}Lz.prototype.yD=function(){return m(new n,function(a){return function(){return a.fH.Qd(K(function(a){return function(){return a.Ro}}(a)))}}(this))};Lz.prototype.$classData=g({d9:0},!1,"scalaz.IndexedStateT$$anon$11",{d9:1,c9:1,d:1});function Py(){this.cU=null}Py.prototype=new Oy;Py.prototype.constructor=Py;Py.prototype.mn=function(a){this.cU=a;return this};
+Py.prototype.yD=function(){return m(new n,function(a){return function(b){return b.Qd(K(function(a,b){return function(){return a.cU.y(b)}}(a,b)))}}(this))};Py.prototype.$classData=g({e9:0},!1,"scalaz.IndexedStateT$$anon$12",{e9:1,c9:1,d:1});function DS(){}DS.prototype=new via;DS.prototype.constructor=DS;function ooa(){}ooa.prototype=DS.prototype;function ES(){this.ga=null}ES.prototype=new l;ES.prototype.constructor=ES;function Vaa(a){var b=new ES;if(null===a)throw ug(vg(),null);b.ga=a;return b}
+ES.prototype.$classData=g({f9:0},!1,"scalaz.InvariantFunctor$$anon$2",{f9:1,d:1,$i:1});function AS(a){a.at(poa(a))}function Uy(){this.ga=null}Uy.prototype=new l;Uy.prototype.constructor=Uy;Uy.prototype.WD=function(a){if(null===a)throw ug(vg(),null);this.ga=a;return this};Uy.prototype.$classData=g({h9:0},!1,"scalaz.Isomorphisms$IsoBifunctorTemplate$$anon$16",{h9:1,d:1,e8:1});function Vy(){this.ga=null}Vy.prototype=new l;Vy.prototype.constructor=Vy;
+Vy.prototype.WD=function(a){if(null===a)throw ug(vg(),null);this.ga=a;return this};Vy.prototype.$classData=g({i9:0},!1,"scalaz.Isomorphisms$IsoBifunctorTemplate$$anon$17",{i9:1,d:1,e8:1});function Xy(){this.ga=null}Xy.prototype=new l;Xy.prototype.constructor=Xy;Xy.prototype.XD=function(a){if(null===a)throw ug(vg(),null);this.ga=a;return this};Xy.prototype.$classData=g({j9:0},!1,"scalaz.Isomorphisms$IsoFunctorTemplate$$anon$13",{j9:1,d:1,LR:1});function Yy(){this.ga=null}Yy.prototype=new l;
+Yy.prototype.constructor=Yy;Yy.prototype.XD=function(a){if(null===a)throw ug(vg(),null);this.ga=a;return this};Yy.prototype.$classData=g({k9:0},!1,"scalaz.Isomorphisms$IsoFunctorTemplate$$anon$14",{k9:1,d:1,LR:1});function FS(){}FS.prototype=new wia;FS.prototype.constructor=FS;function qoa(){}qoa.prototype=FS.prototype;function GS(){}GS.prototype=new yia;GS.prototype.constructor=GS;GS.prototype.b=function(){az.prototype.b.call(this);return this};
+GS.prototype.$classData=g({m9:0},!1,"scalaz.Leibniz$",{m9:1,cla:1,d:1});var roa=void 0;function HS(){}HS.prototype=new xia;HS.prototype.constructor=HS;HS.prototype.b=function(){return this};HS.prototype.$classData=g({n9:0},!1,"scalaz.Leibniz$$anon$2",{n9:1,bla:1,d:1});function IS(){}IS.prototype=new l;IS.prototype.constructor=IS;IS.prototype.Zs=function(){};IS.prototype.$classData=g({p9:0},!1,"scalaz.MapInstances$$anon$7",{p9:1,d:1,xt:1});function JS(){}JS.prototype=new zia;
+JS.prototype.constructor=JS;function soa(){}soa.prototype=JS.prototype;function KS(){}KS.prototype=new Bia;KS.prototype.constructor=KS;function toa(){}toa.prototype=KS.prototype;function LS(){this.NE=null}LS.prototype=new Gia;LS.prototype.constructor=LS;function uoa(){}uoa.prototype=LS.prototype;LS.prototype.b=function(){this.NE=(new MS).tq(this);return this};function Mq(){}Mq.prototype=new l;Mq.prototype.constructor=Mq;Mq.prototype.sc=function(a,b){return Nq(a,ne(b))};
+Mq.prototype.tq=function(){Cd(this);return this};Mq.prototype.hf=function(){};Mq.prototype.$classData=g({z9:0},!1,"scalaz.NonEmptyListInstances$$anon$2",{z9:1,d:1,vf:1});function qq(){}qq.prototype=new l;qq.prototype.constructor=qq;qq.prototype.b=function(){return this};qq.prototype.$classData=g({A9:0},!1,"scalaz.NotNothing$$anon$1",{A9:1,d:1,mla:1});function NS(){}NS.prototype=new Hia;NS.prototype.constructor=NS;function voa(){}voa.prototype=NS.prototype;function OS(){this.ga=null}OS.prototype=new l;
+OS.prototype.constructor=OS;function woa(a){var b=new OS;if(null===a)throw ug(vg(),null);b.ga=a;return b}OS.prototype.$classData=g({F9:0},!1,"scalaz.Optional$$anon$1",{F9:1,d:1,Vma:1});function PS(){this.ga=null}PS.prototype=new l;PS.prototype.constructor=PS;function Waa(a){var b=new PS;if(null===a)throw ug(vg(),null);b.ga=a;return b}PS.prototype.$classData=g({H9:0},!1,"scalaz.Plus$$anon$5",{H9:1,d:1,Yw:1});function QS(){this.ga=null}QS.prototype=new l;QS.prototype.constructor=QS;
+function xoa(a){var b=new QS;if(null===a)throw ug(vg(),null);b.ga=a;return b}QS.prototype.$classData=g({L9:0},!1,"scalaz.Profunctor$$anon$6",{L9:1,d:1,pC:1});function Fz(){}Fz.prototype=new Kia;Fz.prototype.constructor=Fz;Fz.prototype.b=function(){Az.prototype.b.call(this);return this};Fz.prototype.$classData=g({N9:0},!1,"scalaz.Reducer$",{N9:1,yla:1,d:1});var Ez=void 0;function RS(){this.HV=this.BT=this.lG=this.JV=null}RS.prototype=new zz;RS.prototype.constructor=RS;c=RS.prototype;c.wl=function(){return this.JV};
+c.Nl=function(a){return this.lG.y(a)};c.Oe=function(a,b){return this.HV.sc(a,K(function(a,b){return function(){return a.lG.y(b)}}(this,b)))};c.Bo=function(a,b){return this.BT.y(a).y(b)};function Mia(a,b,d){var e=new RS;e.lG=a;e.BT=b;e.HV=d;e.JV=d;return e}c.$classData=g({O9:0},!1,"scalaz.ReducerInstances$$anon$6",{O9:1,M9:1,d:1});function SS(){this.ga=null}SS.prototype=new l;SS.prototype.constructor=SS;function Xaa(a){var b=new SS;if(null===a)throw ug(vg(),null);b.ga=a;return b}
+SS.prototype.$classData=g({R9:0},!1,"scalaz.Semigroup$$anon$9",{R9:1,d:1,qC:1});function TS(){this.ga=null}TS.prototype=new l;TS.prototype.constructor=TS;function Yaa(a){var b=new TS;if(null===a)throw ug(vg(),null);b.ga=a;return b}TS.prototype.$classData=g({U9:0},!1,"scalaz.Show$$anon$2",{U9:1,d:1,Yma:1});function cy(){}cy.prototype=new l;cy.prototype.constructor=cy;c=cy.prototype;c.b=function(){Jd(this);return this};c.Sd=function(a){return Dd(this,a)};c.ah=function(a){return na(a)};c.Xg=function(){};
+c.$classData=g({V9:0},!1,"scalaz.Show$$anon$3",{V9:1,d:1,gh:1});function Oz(){}Oz.prototype=new l;Oz.prototype.constructor=Oz;Oz.prototype.b=function(){return this};Oz.prototype.$classData=g({b$:0},!1,"scalaz.Tag$TagOf",{b$:1,d:1,LR:1});function US(){this.FS=null}US.prototype=new l;US.prototype.constructor=US;function yoa(a){var b=new US;b.FS=a;return b}US.prototype.$classData=g({i$:0},!1,"scalaz.Unapply_0$$anon$14",{i$:1,d:1,Lla:1});function VS(){}VS.prototype=new Oia;VS.prototype.constructor=VS;
+function zoa(){}zoa.prototype=VS.prototype;function WS(){}WS.prototype=new zz;WS.prototype.constructor=WS;function Aoa(){}Aoa.prototype=WS.prototype;WS.prototype.Oe=function(a,b){return this.wl().sc(a,K(function(a,b){return function(){return a.Nl(b)}}(this,b)))};WS.prototype.Bo=function(a,b){return this.wl().sc(this.Nl(a),K(function(a,b){return function(){return b}}(this,b)))};function XS(){this.ga=null}XS.prototype=new l;XS.prototype.constructor=XS;
+function Zaa(a){var b=new XS;if(null===a)throw ug(vg(),null);b.ga=a;return b}XS.prototype.$classData=g({k$:0},!1,"scalaz.Unzip$$anon$3",{k$:1,d:1,Doa:1});function YS(){}YS.prototype=new Pia;YS.prototype.constructor=YS;function Boa(){}Boa.prototype=YS.prototype;function ZS(){this.ga=null}ZS.prototype=new l;ZS.prototype.constructor=ZS;function $aa(a){var b=new ZS;if(null===a)throw ug(vg(),null);b.ga=a;return b}ZS.prototype.$classData=g({p$:0},!1,"scalaz.Zip$$anon$5",{p$:1,d:1,Eoa:1});
+function Coa(a){a.HX((new $S).YD(a));a.IX((new aT).YD(a))}function fy(){this.mu=null}fy.prototype=new l;fy.prototype.constructor=fy;fy.prototype.Sd=function(a){return Doa(this,a)};fy.prototype.ah=function(a){return this.Sd(a).k()};fy.prototype.Xg=function(){};
+function Doa(a,b){var d=Ed(),e=Fd(Ed(),","),f=m(new n,function(a){return function(b){by();return a.mu.Sd(b)}}(a)),h=Lc();b=Eoa(d,e,b.xa(f,h.s).Ic());Ed();b=Nx(b.tc,K(function(a,b){return function(){return b}}(b,"[")));return loa(Gd(b),K(function(){return function(){return"]"}}(a)))}fy.prototype.$classData=g({daa:0},!1,"scalaz.std.IterableInstances$$anon$3",{daa:1,d:1,gh:1});function bT(){}bT.prototype=new l;bT.prototype.constructor=bT;bT.prototype.mF=function(){};
+bT.prototype.Fu=function(){this.mF(Rna(this));return this};bT.prototype.$classData=g({uaa:0},!1,"scalaz.std.TupleInstances1$$anon$72",{uaa:1,d:1,b8:1});function cT(){this.Zx=this.Pt=null}cT.prototype=new l;cT.prototype.constructor=cT;c=cT.prototype;c.FX=function(){};c.wX=function(){};c.xX=function(){};c.b=function(){dT=this;aba(this);return this};c.AX=function(a){this.Zx=a};c.GX=function(){};c.uX=function(){};c.EX=function(){};c.tX=function(){};c.yX=function(){};c.vX=function(){};c.zX=function(){};
+c.DX=function(){};c.BX=function(){};c.CX=function(){};c.sX=function(){};c.$classData=g({zaa:0},!1,"scalaz.std.anyVal$",{zaa:1,d:1,w$:1});var dT=void 0;function Bz(){dT||(dT=(new cT).b());return dT}function ey(){}ey.prototype=new l;ey.prototype.constructor=ey;ey.prototype.b=function(){return this};ey.prototype.$classData=g({Baa:0},!1,"scalaz.std.iterable$",{Baa:1,d:1,ema:1});var cia=void 0;function eT(){this.ej=null}eT.prototype=new l;eT.prototype.constructor=eT;
+eT.prototype.bE=function(a,b,d){this.ej=d;return this};eT.prototype.$classData=g({Gaa:0},!1,"scalaz.std.java.util.concurrent.CallableInstances$$anon$1$$anon$3",{Gaa:1,d:1,jV:1});function fT(){this.Lx=null}fT.prototype=new l;fT.prototype.constructor=fT;fT.prototype.bE=function(a,b,d){this.Lx=d;return this};fT.prototype.$classData=g({Haa:0},!1,"scalaz.std.java.util.concurrent.CallableInstances$$anon$1$$anon$4",{Haa:1,d:1,jV:1});function gT(){}gT.prototype=new l;gT.prototype.constructor=gT;
+gT.prototype.$classData=g({Iaa:0},!1,"scalaz.std.java.util.concurrent.CallableInstances$$anon$1$$anon$5",{Iaa:1,d:1,jV:1});function Dz(){}Dz.prototype=new l;Dz.prototype.constructor=Dz;Dz.prototype.b=function(){Cz=this;bba(this);return this};Dz.prototype.LX=function(){};Dz.prototype.KX=function(){};Dz.prototype.$classData=g({Paa:0},!1,"scalaz.std.math.bigInt$",{Paa:1,d:1,Maa:1});var Cz=void 0;function hT(){this.pt=this.tc=null}hT.prototype=new l;hT.prototype.constructor=hT;
+function Cfa(a,b){var d=new hT;d.tc=a;d.pt=b;return d}hT.prototype.$classData=g({Xaa:0},!1,"scalaz.syntax.FoldableOps",{Xaa:1,d:1,$aa:1});function iT(){}iT.prototype=new l;iT.prototype.constructor=iT;iT.prototype.Gu=function(){return this};iT.prototype.$classData=g({eba:0},!1,"scalaz.syntax.Syntaxes$nel$",{eba:1,d:1,kba:1});function jT(){this.pt=this.tc=null}jT.prototype=new l;jT.prototype.constructor=jT;
+function Foa(a,b){return b.FS.wh(a.tc,m(new n,function(){return function(a){roa||(roa=(new GS).b());(new HS).b();return a}}(a,b)),a.pt)}function Goa(a,b){var d=new jT;d.tc=a;d.pt=b;return d}jT.prototype.$classData=g({nba:0},!1,"scalaz.syntax.TraverseOps",{nba:1,d:1,$aa:1});function kT(){this.ME=this.kG=this.xD=null}kT.prototype=new l;kT.prototype.constructor=kT;kT.prototype.b=function(){return this};function Hoa(){var a=lT();null===lT().kG&&null===lT().kG&&(lT().kG=(new mT).Gu(a));lT()}
+function Bfa(){var a=lT();null===lT().xD&&null===lT().xD&&(lT().xD=(new nT).Gu(a));lT()}kT.prototype.$classData=g({pba:0},!1,"scalaz.syntax.package$",{pba:1,d:1,Zma:1});var Ioa=void 0;function lT(){Ioa||(Ioa=(new kT).b());return Ioa}function oT(){}oT.prototype=new l;oT.prototype.constructor=oT;oT.prototype.b=function(){return this};
+oT.prototype.Vs=function(a){var b=Joa().jD.uc;pT(b,"Failure in RunNow async execution: "+a);qT(b,"\n");b=Joa().jD.uc;a=Qw(a);var d=(new pm).b(),e;e=!0;Ur(d,"");for(var f=0,h=a.m.length;f<h;){var k=a.m[f];e?(Wr(d,k),e=!1):(Ur(d,"\n"),Wr(d,k));f=1+f|0}Ur(d,"");pT(b,d.rc.Xb);qT(b,"\n")};oT.prototype.nu=function(a){try{a.Bm()}catch(b){a=Un(vg(),b);if(null!==a)throw ug(vg(),a);throw b;}};oT.prototype.$classData=g({sba:0},!1,"utest.framework.ExecutionContext$RunNow$",{sba:1,d:1,Fy:1});var Koa=void 0;
+function Loa(){Koa||(Koa=(new oT).b());return Koa}function rT(){this.UY=this.za=null}rT.prototype=new l;rT.prototype.constructor=rT;function Moa(){}Moa.prototype=rT.prototype;
+function Noa(a,b,d,e,f){rha||(rha=(new dw).b());var h=qha(e,a.UY),k=b.zb("."),p=""+u((new v).G((new w).f(["Starting Suite "])),y())+e,t=(new Sb).c("-"),t=Ooa(t,(80-(p.length|0)|0)/2|0);d.ua(m(new n,function(a,b,d){return function(a){a.ID(""+d+b+d)}}(a,p,t)));wA||(wA=(new vA).b());p=h.hja();p=bja(kA(p),b);if(null===p)throw(new q).j(p);a.SS(p.na().ra());for(var p=a.za,t=p.m.length,x=0;;){if(x<t)var E=p.m[x],E=!(0<=(E.length|0)&&"--parallel"===E.substring(0,10));else E=!1;if(E)x=1+x|0;else break}t=x;
+p=t<p.m.length?(new J).j(p.m[t]):F();p.z()?p=!1:(p=p.X(),p=(new Sb).c(p),t=10,x=p.R.length|0,p=He(Ie(),p.R,t,x),0===(p.length|0)?p=!0:(p=(new Sb).c(p),t=p.R.length|0,p=He(Ie(),p.R,1,t),p=(new Sb).c(p),p=wi(p.R)));p=p?nC():Loa();wA||(wA=(new vA).b());t=h.hja();t=kA(t);d=sb(new tb,function(a,b,d,e,f,h,k){return function(p,t){t.Y.$x()?a.BU():a.AU();var x=r();p=h.Uoa(b.Vc(p,x.s),t);Poa((new sT).b(),zv().sC,f,k);p.z()||(x=p.X(),d.ua(m(new n,function(a,b,d){return function(a){a.ID(""+b+d)}}(a,e,x))));t=
+t.Y;if(iw(t)){t=t.Bk;Poa((new sT).wd(t),zv().Fw,f,k);for(var x=Qw(t),E=x.m.length,ab=0;;)if(ab<E&&"utest.framework.TestThunkTree"!==x.m[ab].Go)ab=1+ab|0;else break;E=ab;E=0<E?E:0;ab=x.m.length;E=E<ab?E:ab;E=0<E?E:0;ab=OA(QA(),AA(oa(x)),E);0<E&&Kv(Bf(),x,0,ab,0,E);Qoa(t,ab);a.AC(""+e+(p.z()?"":p.X()));if(Roa(t))p="";else{p=Qw(t);t=null;t=[];x=0;for(E=p.m.length;x<E;)ab=p.m[x].k(),t.push(null===ab?null:ab),x=1+x|0;p=ka(Wa(qa),t);t=(new pm).b();x=!1;x=!0;Ur(t,"");E=0;for(ab=p.m.length;E<ab;){var fc=
+p.m[E];x?(Wr(t,fc),x=!1):(Ur(t,"\n"),Wr(t,fc));E=1+E|0}Ur(t,"");p=t.rc.Xb}a.CC(p)}}}(a,b,d,e,f,h,k));e=m(new n,function(a,b,d){return function(a){return b.sqa(a,d)}}(a,h,p));f=y();return eja(t,d,f,b,e,p).Oh(m(new n,function(a,b){return function(a){return b.Woa(a)}}(a,h)),p).Oh(m(new n,function(a){return function(b){b.z()||(b=b.X(),a.BC(b))}}(a)),p)}function Poa(a,b,d,e){d.tU(Soa(e,a,b))}
+function rna(a,b){var d;d=[];for(var e=0,f=b.m.length;e<f;){var h=Hna(a,b.m[e]);d.push(null===h?null:h);e=1+e|0}return ka(Wa(wd),d)}rT.prototype.DU=function(a,b,d){this.za=a;this.UY=d;return this};function Hna(a,b){var d=Et(Je(),a.za),d=md(new nd,d).Wc(0),d=d.z()||45!==(65535&(d.X().charCodeAt(0)|0))?d:F(),d=d.z()?"":d.X();return Toa(new tT,b,d,Ox(function(a){return function(b,d,k,p){return Noa(a,b,d,k,p)}}(a)))}function uT(){this.XF=this.XV=this.SF=null}uT.prototype=new l;
+uT.prototype.constructor=uT;function Soa(a,b,d){var e=new uT;e.SF=a;e.XV=b;e.XF=d;return e}uT.prototype.$classData=g({yba:0},!1,"utest.runner.BaseRunner$$anon$2",{yba:1,d:1,fka:1});function vT(){}vT.prototype=new l;vT.prototype.constructor=vT;vT.prototype.b=function(){return this};function pha(){var a=(new w).f([new wT]),b=a.pa.length|0,b=la(Wa(Qaa),[b]),d;d=0;for(a=Ve(new We,a,0,a.pa.length|0);a.ta();){var e=a.ma();b.m[d]=e;d=1+d|0}return b}
+function qna(a,b,d){return Uoa(new xT,b,d,K(function(){return function(){}}(a)),K(function(){return function(){}}(a)))}function Ena(a,b,d,e){return Voa(new yT,b,d,e,K(function(){return function(){}}(a)),K(function(){return function(){}}(a)))}var Woa=g({Aba:0},!1,"utest.runner.Framework",{Aba:1,d:1,UB:1});vT.prototype.$classData=Woa;function tT(){this.bF=this.Sg=this.Zv=null}tT.prototype=new l;tT.prototype.constructor=tT;
+function wna(a,b,d,e){var f=Loa();Xoa(a,b,d).Us(Yoa(d),f).jp(m(new n,function(a,b){return function(){var a=y(),d=fn(a),d=la(Wa(wd),[d]),e;e=0;for(a=iv(a);a.ta();){var f=a.ma();d.m[e]=f;e=1+e|0}b.y(d)}}(a,e)),f)}function Toa(a,b,d,e){a.Zv=b;a.Sg=d;a.bF=e;return a}
+function Xoa(a,b,d){if(Gp(Ha(),a.Sg,"}")){var e=(new Sb).c(a.Sg),f=a.Sg.lastIndexOf("{")|0,f=rj(e,f);if(null===f)throw(new q).j(f);var e=f.ja(),f=(new Sb).c(f.na()),h=f.R.length|0,f=He(Ie(),f.R,1,h),f=(new Sb).c(f),f=Cm(f,1),f=vF(Ha(),f,",");Bf();(new hC).b();var h=Zoa().db(),k=f.m.length;switch(k){case -1:break;default:h.qc(k)}for(var k=0,p=f.m.length;k<p;)h.Qa(""+e+f.m[k].trim()),k=1+k|0;f=h.Da()}else f=I(r(),(new w).f([a.Sg]));h=a.Zv.tk;if(f.oe(m(new n,function(a,b){return function(a){return 0<=
+(b.length|0)&&b.substring(0,a.length|0)===a}}(a,h))))return Rc(a.bF,y(),Et(Je(),d),h,b);e=Loa();f=f.ml(m(new n,function(a,b){return function(a){return 0<=(a.length|0)&&a.substring(0,b.length|0)===b}}(a,h)),!1);a=m(new n,function(a,b,d,e){return function(f){var h=a.bF;Je();f=(new Sb).c(f);var k=e.length|0,p=f.R.length|0;f=He(Ie(),f.R,k,p);f=vF(Ha(),f,"\\.");for(var k=(new zT).ap($oa(apa(),AA(oa(f)))),p=0,Ia=f.m.length;p<Ia;){var $a=f.m[p];!1!==0<($a.length|0)&&bpa(k,$a);p=1+p|0}return Rc(h,Et(0,cpa(k)),
+Et(Je(),d),e,b)}}(a,b,d,h));b=r();a=f.xa(a,b.s);b=mA();d=r();return tC(b,a,d.s,e)}tT.prototype.$classData=g({Fba:0},!1,"utest.runner.Task",{Fba:1,d:1,rR:1});function AT(){}AT.prototype=new l;AT.prototype.constructor=AT;function BT(){}BT.prototype=AT.prototype;function GF(a){return!!(a&&a.$classData&&a.$classData.n.Gk||"number"===typeof a)}function CT(){this.os=this.Ns=this.Go=null;this.Vt=this.Ls=0}CT.prototype=new l;CT.prototype.constructor=CT;
+CT.prototype.o=function(a){return a&&a.$classData&&a.$classData.n.hV?this.os===a.os&&this.Ls===a.Ls&&this.Go===a.Go&&this.Ns===a.Ns:!1};CT.prototype.k=function(){var a="";"\x3cjscode\x3e"!==this.Go&&(a=""+a+this.Go+".");a=""+a+this.Ns;null===this.os?a+="(Unknown Source)":(a=""+a+u((new v).G((new w).f(["(",""])),(new w).f([this.os])),0<=this.Ls&&(a=""+a+u((new v).G((new w).f([":",""])),(new w).f([this.Ls])),0<=this.Vt&&(a=""+a+u((new v).G((new w).f([":",""])),(new w).f([this.Vt])))),a+=")");return a};
+CT.prototype.r=function(){var a=this.Go,a=Ga(Ha(),a),b=this.Ns;return a^Ga(Ha(),b)};CT.prototype.setColumnNumber=function(a){this.Vt=a|0};CT.prototype.getColumnNumber=function(){return this.Vt};var dpa=g({hV:0},!1,"java.lang.StackTraceElement",{hV:1,d:1,i:1});CT.prototype.$classData=dpa;function KA(){this.wa=null}KA.prototype=new l;KA.prototype.constructor=KA;KA.prototype.Bm=function(){};KA.prototype.$classData=g({yca:0},!1,"java.lang.Thread",{yca:1,d:1,gV:1});
+function DT(){this.fr=this.zf=this.Nc=null}DT.prototype=new l;DT.prototype.constructor=DT;function ET(){}ET.prototype=DT.prototype;DT.prototype.ru=function(){if(void 0===ba.Error.captureStackTrace){try{var a={}.undef()}catch(b){if(a=Un(vg(),b),null!==a)if(DF(a))a=a.Po;else throw ug(vg(),a);else throw b;}this.stackdata=a}else ba.Error.captureStackTrace(this),this.stackdata=this;return this};DT.prototype.Lh=function(){return this.Nc};
+DT.prototype.k=function(){var a=oa(this).Bg(),b=this.Lh();return null===b?a:a+": "+b};function Qoa(a,b){for(var d=0;d<b.m.length;){if(null===b.m[d])throw(new ye).b();d=1+d|0}a.fr=b.jT()}
+function Qw(a){if(null===a.fr){yla||(yla=(new xF).b());var b=yla,d=a.stackdata,e;if(d){if(0===(1&b.ya)&&0===(1&b.ya)){a:try{ba.Packages.org.mozilla.javascript.JavaScriptException,e=!0}catch(U){e=Un(vg(),U);if(null!==e){if(DF(e)){e=!1;break a}throw ug(vg(),e);}throw U;}b.SU=e;b.ya|=1}if(b.SU)e=d.stack,e=(void 0===e?"":e).replace(zF("^\\s+at\\s+","gm"),"").replace(zF("^(.+?)(?: \\((.+)\\))?$","gm"),"$2@$1").replace(zF("\\r\\n?","gm"),"\n").split("\n");else if(d.arguments&&d.stack)e=sla(d);else if(d.stack&&
+d.sourceURL)e=d.stack.replace(zF("\\[native code\\]\\n","m"),"").replace(zF("^(?\x3d\\w+Error\\:).*$\\n","m"),"").replace(zF("^@","gm"),"{anonymous}()@").split("\n");else if(d.stack&&d.number)e=d.stack.replace(zF("^\\s*at\\s+(.*)$","gm"),"$1").replace(zF("^Anonymous function\\s+","gm"),"{anonymous}() ").replace(zF("^([^\\(]+|\\{anonymous\\}\\(\\))\\s+\\((.+)\\)$","gm"),"$1@$2").split("\n").slice(1);else if(d.stack&&d.fileName)e=d.stack.replace(zF("(?:\\n@:0)?\\s+$","m"),"").replace(zF("^(?:\\((\\S*)\\))?@",
+"gm"),"{anonymous}($1)@").split("\n");else if(d.message&&d["opera#sourceloc"])if(d.stacktrace)if(-1<d.message.indexOf("\n")&&d.message.split("\n").length>d.stacktrace.split("\n").length)e=xla(d);else{e=zF("Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$","i");for(var d=d.stacktrace.split("\n"),f=[],h=0,k=d.length|0;h<k;){var p=e.exec(d[h]);if(null!==p){var t=p[3],t=void 0===t?"{anonymous}":t,x=p[2];if(void 0===x)throw(new Du).c("undefined.get");p=p[1];if(void 0===p)throw(new Du).c("undefined.get");
+f.push(t+"()@"+x+":"+p)}h=2+h|0}e=f}else e=xla(d);else if(d.message&&d.stack&&d.stacktrace){if(0>d.stacktrace.indexOf("called from line"))for(e=yF("^(.*)@(.+):(\\d+)$"),d=d.stacktrace.split("\n"),f=[],h=0,k=d.length|0;h<k;){p=e.exec(d[h]);if(null!==p){t=p[1];t=void 0===t?"global code":t+"()";x=p[2];if(void 0===x)throw(new Du).c("undefined.get");p=p[3];if(void 0===p)throw(new Du).c("undefined.get");f.push(t+"@"+x+":"+p)}h=1+h|0}else for(e=yF("^.*line (\\d+), column (\\d+)(?: in (.+))? in (\\S+):$"),
+d=d.stacktrace.split("\n"),f=[],h=0,k=d.length|0;h<k;){p=e.exec(d[h]);if(null!==p){t=p[4];if(void 0===t)throw(new Du).c("undefined.get");x=p[1];if(void 0===x)throw(new Du).c("undefined.get");var E=p[2];if(void 0===E)throw(new Du).c("undefined.get");t=t+":"+x+":"+E;p=p[2];p=(void 0===p?"global code":p).replace(yF("\x3canonymous function: (\\S+)\x3e"),"$1").replace(yF("\x3canonymous function\x3e"),"{anonymous}");f.push(p+"@"+t)|0}h=2+h|0}e=f}else e=d.stack&&!d.fileName?sla(d):[]}else e=[];f=e;h=yF("^([^\\@]*)\\@(.*):([0-9]+)$");
+k=yF("^([^\\@]*)\\@(.*):([0-9]+):([0-9]+)$");d=[];for(e=0;e<(f.length|0);){p=f[e];if(null===p)throw(new ye).b();if(""!==p)if(t=k.exec(p),null!==t){p=t[1];if(void 0===p)throw(new Du).c("undefined.get");x=wla(b,p);if(null===x)throw(new q).j(x);p=x.ja();x=x.na();E=t[2];if(void 0===E)throw(new Du).c("undefined.get");var S=t[3];if(void 0===S)throw(new Du).c("undefined.get");S=(new Sb).c(S);S=vi(ti(),S.R,10);t=t[4];if(void 0===t)throw(new Du).c("undefined.get");t=(new Sb).c(t);t=vi(ti(),t.R,10);d.push({declaringClass:p,
+methodName:x,fileName:E,lineNumber:S,columnNumber:void 0===t?void 0:t})}else if(t=h.exec(p),null!==t){p=t[1];if(void 0===p)throw(new Du).c("undefined.get");x=wla(b,p);if(null===x)throw(new q).j(x);p=x.ja();x=x.na();E=t[2];if(void 0===E)throw(new Du).c("undefined.get");t=t[3];if(void 0===t)throw(new Du).c("undefined.get");t=(new Sb).c(t);t=vi(ti(),t.R,10);d.push({declaringClass:p,methodName:x,fileName:E,lineNumber:t,columnNumber:void 0})}else d.push({declaringClass:"\x3cjscode\x3e",methodName:p,fileName:null,
+lineNumber:-1,columnNumber:void 0})|0;e=1+e|0}b=aa.sourceMapper;b=void 0===b?d:b(d);d=la(Wa(dpa),[b.length|0]);for(e=0;e<(b.length|0);)f=b[e],h=f.methodName,k=f.fileName,p=f.lineNumber|0,t=new CT,t.Go=f.declaringClass,t.Ns=h,t.os=k,t.Ls=p,t.Vt=-1,h=t,f=f.columnNumber,void 0!==f&&h.setColumnNumber(f|0),d.m[e]=h,e=1+e|0;a.fr=d}return a.fr}DT.prototype.gc=function(a,b){this.Nc=a;this.zf=b;this.ru();return this};
+function FT(a){var b=HA().No,b=function(a,b){return function(a){pT(b,a);qT(b,"\n")}}(a,b);Qw(a);var d=a.k();b(d);if(0!==a.fr.m.length)for(d=0;d<a.fr.m.length;)b("  at "+a.fr.m[d]),d=1+d|0;else b("  \x3cno stack trace available\x3e");for(;;)if(a!==a.zf&&null!==a.zf){var e=Qw(a);a=a.zf;var d=Qw(a),f=d.m.length,h=e.m.length,k="Caused by: "+a.k();b(k);if(0!==f){for(k=0;;){if(k<f&&k<h)var p=d.m[-1+(f-k|0)|0],t=e.m[-1+(h-k|0)|0],p=null===p?null===t:p.o(t);else p=!1;if(p)k=1+k|0;else break}0<k&&(k=-1+k|
+0);e=f-k|0;for(f=0;f<e;)b("  at "+d.m[f]),f=1+f|0;0<k&&b("  ... "+k+" more")}else b("  \x3cno stack trace available\x3e")}else break}var zq=g({Lc:0},!1,"java.lang.Throwable",{Lc:1,d:1,i:1});DT.prototype.$classData=zq;function mg(){this.OU=this.VE=null;this.BW=this.CW=0;this.pm=this.cp=this.Nq=null;this.xx=!1;this.Mr=0;this.Qv=null}mg.prototype=new l;mg.prototype.constructor=mg;
+function Nh(a){if(a.xx){a.pm=a.Nq.exec(a.cp);if(null!==a.pm){var b=a.pm[0];if(void 0===b)throw(new Du).c("undefined.get");if(null===b)throw(new ye).b();""===b&&(b=a.Nq,b.lastIndex=1+(b.lastIndex|0)|0)}else a.xx=!1;a.Qv=F();return null!==a.pm}return!1}function GT(a){if(null===a.pm)throw(new he).c("No match available");return a.pm}function epa(a,b){a=GT(a)[b];return void 0===a?null:a}c=mg.prototype;
+c.gr=function(a){if(0===a)a=this.Rk();else{var b;b=this.Qv;b.z()?(lB(),b=this.Rk(),b=vja(this.cp,b,this.VE).FV,this.Qv=(new J).j(b)):b=b.X();a=b.Fa(a)}return a};function Hba(a){ao(a);Nh(a);null===a.pm||0===a.Rk()&&a.Uj()===(a.cp.length|0)||ao(a);return null!==a.pm}function fpa(a){return-1+(GT(a).length|0)|0}function eo(a,b){gpa(b,a.cp.substring(a.Mr));a.Mr=a.cp.length|0}c.Uj=function(){var a=this.Rk(),b=Oh(this);return a+(b.length|0)|0};
+function lg(a,b,d,e){a.VE=b;a.OU=d;a.CW=0;a.BW=e;b=a.VE;d=new ba.RegExp(b.zq);b=d!==b.zq?d:new ba.RegExp(b.zq.source,(b.zq.global?"g":"")+(b.zq.ignoreCase?"i":"")+(b.zq.multiline?"m":""));a.Nq=b;a.cp=na(Ma(a.OU,a.CW,a.BW));a.pm=null;a.xx=!0;a.Mr=0;a.Qv=F();return a}
+function co(a,b,d){var e=a.cp,f=a.Mr,h=a.Rk();gpa(b,e.substring(f,h));e=d.length|0;for(f=0;f<e;)switch(h=65535&(d.charCodeAt(f)|0),h){case 36:for(h=f=1+f|0;;){if(f<e)var k=65535&(d.charCodeAt(f)|0),k=48<=k&&57>=k;else k=!1;if(k)f=1+f|0;else break}k=ti();h=d.substring(h,f);h=vi(k,h,10);gpa(b,epa(a,h));break;case 92:f=1+f|0;f<e&&hpa(b,65535&(d.charCodeAt(f)|0));f=1+f|0;break;default:hpa(b,h),f=1+f|0}a.Mr=a.Uj()}function Oh(a){a=GT(a)[0];if(void 0===a)throw(new Du).c("undefined.get");return a}
+c.Rk=function(){return GT(this).index|0};c.lu=function(a){var b=this.gr(a);if(-1===b)return-1;a=epa(this,a);return b+(a.length|0)|0};function ao(a){a.Nq.lastIndex=0;a.pm=null;a.xx=!0;a.Mr=0;a.Qv=F()}c.$classData=g({ida:0},!1,"java.util.regex.Matcher",{ida:1,d:1,dpa:1});function rl(){}rl.prototype=new l;rl.prototype.constructor=rl;rl.prototype.hh=function(){$F();dk();return(new aG).b()};rl.prototype.cf=function(){$F();dk();return(new aG).b()};
+rl.prototype.$classData=g({oda:0},!1,"scala.LowPriorityImplicits$$anon$4",{oda:1,d:1,et:1});function HT(){}HT.prototype=new l;HT.prototype.constructor=HT;HT.prototype.b=function(){return this};HT.prototype.hh=function(){return(new pm).b()};HT.prototype.cf=function(){return(new pm).b()};HT.prototype.$classData=g({Cda:0},!1,"scala.Predef$$anon$3",{Cda:1,d:1,et:1});function IT(){this.vr=null}IT.prototype=new l;IT.prototype.constructor=IT;c=IT.prototype;
+c.Tv=function(a,b){return(new JT).Wo(this.vr,a,b)};c.k=function(){var a=this.vr,b=(new pm).b(),d;d=!0;Ur(b,"");for(var e=0,f=a.m.length;e<f;){var h=(new Ke).Xa(a.m[e]);d?(Wr(b,h),d=!1):(Ur(b,""),Wr(b,h));e=1+e|0}Ur(b,"");return b.rc.Xb};c.lm=function(a){this.vr=a;return this};c.ra=function(){return this.vr.m.length};c.$classData=g({Dda:0},!1,"scala.Predef$ArrayCharSequence",{Dda:1,d:1,Zu:1});
+function ipa(a,b){switch(b){case 0:return a.fb;case 1:return a.Eb;case 2:return a.tf;case 3:return a.wr;default:throw(new P).c(""+b);}}function KT(){}KT.prototype=new l;KT.prototype.constructor=KT;KT.prototype.b=function(){return this};KT.prototype.$classData=g({Nda:0},!1,"scala.concurrent.BlockContext$DefaultBlockContext$",{Nda:1,d:1,QW:1});var jpa=void 0;function xA(){this.Ys=0}xA.prototype=new l;xA.prototype.constructor=xA;
+xA.prototype.o=function(a){zA();return a&&a.$classData&&a.$classData.n.VW?this.Ys===a.Ys:!1};xA.prototype.qb=function(a){this.Ys=a;return this};xA.prototype.r=function(){return this.Ys};xA.prototype.$classData=g({VW:0},!1,"scala.concurrent.duration.package$DurationInt",{VW:1,d:1,upa:1});function LT(){}LT.prototype=new Tja;LT.prototype.constructor=LT;LT.prototype.Ju=function(){return this};LT.prototype.$classData=g({hea:0},!1,"scala.io.Source$RelaxedPosition$",{hea:1,wpa:1,d:1});
+function MT(){LC.call(this)}MT.prototype=new Wja;MT.prototype.constructor=MT;MT.prototype.Ju=function(a){LC.prototype.Rba.call(this,a,kpa(a));return this};MT.prototype.$classData=g({iea:0},!1,"scala.io.Source$RelaxedPositioner$",{iea:1,ypa:1,d:1});function PC(){}PC.prototype=new l;PC.prototype.constructor=PC;PC.prototype.b=function(){return this};PC.prototype.k=function(){return"object AnyRef"};PC.prototype.$classData=g({wea:0},!1,"scala.package$$anon$1",{wea:1,d:1,spa:1});
+function FD(){this.jF=this.wa=this.Dy=this.Ox=this.Cl=null}FD.prototype=new l;FD.prototype.constructor=FD;FD.prototype.k=function(){return this.wa+"("+this.jF+")"};function ED(a,b,d,e){a.Cl=b;a.Ox=d;a.Dy=e;a.jF="";a.wa="Catch";return a}function lpa(a,b){var d=new NT;if(null===a)throw ug(vg(),null);d.ga=a;d.Lx=b;return ED(new FD,d,a.Ox,a.Dy)}function Jna(){var a=rka();return lpa(a,m(new n,function(){return function(){return F()}}(a)))}
+FD.prototype.$classData=g({bfa:0},!1,"scala.util.control.Exception$Catch",{bfa:1,d:1,Gpa:1});function OT(){this.Qy=this.CV=this.mk=0}OT.prototype=new tka;OT.prototype.constructor=OT;OT.prototype.b=function(){PT=this;this.mk=Ga(Ha(),"Seq");this.CV=Ga(Ha(),"Map");this.Qy=Ga(Ha(),"Set");return this};function QT(a,b){if(Mg(b)){for(var d=0,e=a.mk,f=b;!f.z();)b=f.$(),f=f.aa(),e=a.da(e,OD(V(),b)),d=1+d|0;a=a.pb(e,d)}else a=uka(a,b,a.mk);return a}
+OT.prototype.$classData=g({hfa:0},!1,"scala.util.hashing.MurmurHash3$",{hfa:1,Hpa:1,d:1});var PT=void 0;function Q(){PT||(PT=(new OT).b());return PT}function RT(){this.fv=this.xc=this.XT=this.MY=null;this.ya=this.$a=this.Ua=0}RT.prototype=new l;RT.prototype.constructor=RT;c=RT.prototype;c.gr=function(a){return mpa(this).m[a]};c.k=function(){return 0<=this.Rk()?na(Ma(this.UF(),this.Rk(),this.Uj())):null};c.Uj=function(){return this.$a};
+function npa(a){if(0===(2&a.ya)&&0===(2&a.ya)){var b=fpa(a.fv),d=0>b;if(d)var e=0;else var e=b>>31,f=1+b|0,e=0===f?1+e|0:e,e=(0===e?-1<(-2147483648^f):0<e)?-1:f;$F();ek();$F();dk();f=(new aG).b();0>e&&Hn(Ln(),0,b,1,!0);if(!d)for(d=0;;){e=a.fv.lu(d);bG(f,e);if(d===b)break;d=1+d|0}b=cG(f);d=b.ra();d=la(Wa(db),[d]);$D(b,d,0);a.XT=d;a.ya|=2}return a.XT}c.UF=function(){return this.xc};c.Rk=function(){return this.Ua};c.lu=function(a){return npa(this).m[a]};
+function mpa(a){if(0===(1&a.ya)&&0===(1&a.ya)){var b=fpa(a.fv),d=0>b;if(d)var e=0;else var e=b>>31,f=1+b|0,e=0===f?1+e|0:e,e=(0===e?-1<(-2147483648^f):0<e)?-1:f;$F();ek();$F();dk();f=(new aG).b();0>e&&Hn(Ln(),0,b,1,!0);if(!d)for(d=0;;){e=a.fv.gr(d);bG(f,e);if(d===b)break;d=1+d|0}b=cG(f);d=b.ra();d=la(Wa(db),[d]);$D(b,d,0);a.MY=d;a.ya|=1}return a.MY}c.$classData=g({lfa:0},!1,"scala.util.matching.Regex$Match",{lfa:1,d:1,mfa:1});function ST(){this.fe=this.Kk=this.ga=null}ST.prototype=new VD;
+ST.prototype.constructor=ST;function opa(){}opa.prototype=ST.prototype;ST.prototype.on=function(a,b,d){this.Kk=b;this.fe=d;UD.prototype.bp.call(this,a);b=FP(a).uc;b.z()?b=!1:(b=b.X(),b.z()?b=!0:(d=b.X(),b=oP(this.fe),d=oP(d.fe),b=!(b.wc<d.wc)));b&&(FP(a).uc=(new J).j((new J).j(this)));return this};ST.prototype.hU=function(){return this};ST.prototype.EV=function(){return this};function TT(){this.ga=this.wa=null}TT.prototype=new l;TT.prototype.constructor=TT;function UT(){}UT.prototype=TT.prototype;
+function ppa(a,b){var d=(new we).b();return(new je).ql(a.ga,m(new n,function(a,b,d){return function(k){return a.bi(k).EC(K(function(a,b,d,e){return function(){return(e.Na?e.jb:qpa(b,e)).bi(d)}}(a,b,k,d)))}}(a,b,d)))}function rP(a,b){return Ce(Ee(a,b),a.k()+"^^")}function rpa(a,b){if(null===b)throw(new ye).b();return b.Na?b.jb:ze(b,ne(a))}c=TT.prototype;c.Fa=function(a){return this.bi(a)|0};
+function Ama(a,b){var d=(new we).b();return Ce(De(a,m(new n,function(a,b,d){return function(){return Ee(d.Na?d.jb:spa(b,d),m(new n,function(){return function(a){return a}}(a)))}}(a,b,d))),"~\x3e")}c.k=function(){return"Parser ("+this.wa+")"};function Ce(a,b){a.wa=b;return a}function spa(a,b){if(null===b)throw(new ye).b();return b.Na?b.jb:ze(b,ne(a))}
+function yP(a,b){var d=(new we).b();return Ce(De(a,m(new n,function(a,b,d){return function(k){return Ee(d.Na?d.jb:rpa(b,d),m(new n,function(a,b){return function(){return b}}(a,k)))}}(a,b,d))),"\x3c~")}c.ur=function(a){var b=(new we).b();return Ce(De(this,m(new n,function(a,b,f){return function(h){return Ee(f.Na?f.jb:tpa(b,f),m(new n,function(a,b){return function(d){return Fe(a.ga,b,d)}}(a,h)))}}(this,a,b))),"~")};c.Ga=function(a){return!!this.bi(a)};
+function tP(a,b){var d=a.ga;a=Ce(De(a,m(new n,function(a,b){return function(d){return Ee(me(a.ga,b),m(new n,function(a,b){return function(d){return Fe(a.ga,b,d)}}(a,d)))}}(a,b))),"~!");return(new Ge).ql(d,a)}function De(a,b){return(new je).ql(a.ga,m(new n,function(a,b){return function(f){return a.bi(f).hU(b)}}(a,b)))}function tpa(a,b){if(null===b)throw(new ye).b();return b.Na?b.jb:ze(b,ne(a))}
+function Ee(a,b){return(new je).ql(a.ga,m(new n,function(a,b){return function(f){return a.bi(f).EV(b)}}(a,b)))}c.bp=function(a){if(null===a)throw ug(vg(),null);this.ga=a;this.wa="";return this};c.Ca=function(a){return pb(this,a)};function Be(a,b){return Ce(ppa(a,b),"|")}function qpa(a,b){if(null===b)throw(new ye).b();return b.Na?b.jb:ze(b,ne(a))}function upa(a,b){for(var d=!1;!d&&a.ta();)d=!!b.y(a.ma());return d}function VT(a){return(a.ta()?"non-empty":"empty")+" iterator"}
+function WT(a,b){for(var d=!0;d&&a.ta();)d=!!b.y(a.ma());return d}function XT(a,b){for(;a.ta();)b.y(a.ma())}function vpa(a,b){for(;a.ta();){var d=a.ma();if(b.y(d))return(new J).j(d)}return F()}function Vv(a){if(a.ta()){var b=a.ma();return sE(new tE,b,K(function(a){return function(){return a.Jc()}}(a)))}xg();return YT()}function ZT(a,b,d,e){var f=d,h=aE(W(),b)-d|0;for(d=d+(e<h?e:h)|0;f<d&&a.ta();)$E(W(),b,f,a.ma()),f=1+f|0}function $T(a,b){for(var d=0;d<b&&a.ta();)a.ma(),d=1+d|0;return a}
+function Yb(){this.ga=this.Bl=null}Yb.prototype=new l;Yb.prototype.constructor=Yb;Yb.prototype.ua=function(a){this.ga.ua(m(new n,function(a,d){return function(e){return a.Bl.y(e)?d.y(e):void 0}}(this,a)))};Yb.prototype.xa=function(a,b){b=b.cf(this.ga.Fd());this.ga.ua(m(new n,function(a,b,f){return function(h){return a.Bl.y(h)?f.Qa(b.y(h)):void 0}}(this,a,b)));return b.Da()};function Xb(a,b,d){a.Bl=d;if(null===b)throw ug(vg(),null);a.ga=b;return a}
+Yb.prototype.$classData=g({Qfa:0},!1,"scala.collection.TraversableLike$WithFilter",{Qfa:1,d:1,mb:1});function aU(){}aU.prototype=new Bka;aU.prototype.constructor=aU;function wpa(){}wpa.prototype=aU.prototype;function bU(){}bU.prototype=new nE;bU.prototype.constructor=bU;function xpa(){}xpa.prototype=bU.prototype;function cU(){this.ga=null}cU.prototype=new l;cU.prototype.constructor=cU;cU.prototype.hh=function(){return this.ga.db()};
+cU.prototype.cf=function(a){return a&&a.$classData&&a.$classData.n.qj?a.nd().db():this.ga.db()};function pl(a){var b=new cU;if(null===a)throw ug(vg(),null);b.ga=a;return b}cU.prototype.$classData=g({Sfa:0},!1,"scala.collection.generic.GenSetFactory$$anon$1",{Sfa:1,d:1,et:1});function dU(){this.s=null}dU.prototype=new nE;dU.prototype.constructor=dU;function eU(){}eU.prototype=dU.prototype;dU.prototype.b=function(){this.s=(new fU).Lu(this);return this};function gU(){this.ga=null}gU.prototype=new l;
+gU.prototype.constructor=gU;function hU(){}hU.prototype=gU.prototype;gU.prototype.hh=function(){return this.ga.db()};gU.prototype.cf=function(a){return a.nd().db()};gU.prototype.Lu=function(a){if(null===a)throw ug(vg(),null);this.ga=a;return this};function iU(){}iU.prototype=new Aka;iU.prototype.constructor=iU;function ypa(){}ypa.prototype=iU.prototype;function jU(){this.LE=null}jU.prototype=new qE;jU.prototype.constructor=jU;
+function zpa(a,b){a.LE=b;b=new kU;if(null===a)throw ug(vg(),null);b.Va=a}jU.prototype.JC=function(a,b){return qb(this.LE,a,b)};jU.prototype.$classData=g({Xfa:0},!1,"scala.collection.immutable.HashMap$$anon$2",{Xfa:1,bga:1,d:1});function kU(){this.Va=null}kU.prototype=new qE;kU.prototype.constructor=kU;kU.prototype.JC=function(a,b){return qb(this.Va.LE,b,a)};kU.prototype.$classData=g({Yfa:0},!1,"scala.collection.immutable.HashMap$$anon$2$$anon$3",{Yfa:1,bga:1,d:1});function lU(){}lU.prototype=new l;
+lU.prototype.constructor=lU;c=lU.prototype;c.b=function(){return this};c.y=function(){return this};c.Fa=function(){return this|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(){return!!this};c.Ca=function(a){return pb(this,a)};c.$classData=g({kga:0},!1,"scala.collection.immutable.List$$anon$1",{kga:1,d:1,fa:1});function mU(){this.Nc=this.Bl=this.Nx=null;this.ya=!1}mU.prototype=new l;mU.prototype.constructor=mU;mU.prototype.ua=function(a){(this.ya?this.Nx:Apa(this)).ua(a)};
+function Bpa(a,b,d){a.Bl=d;a.Nc=ne(b);return a}mU.prototype.xa=function(a,b){return(this.ya?this.Nx:Apa(this)).xa(a,b)};function Apa(a){if(!a.ya){var b=nU(a.Nc,a.Bl,!1);a.Nc=null;a.Nx=b;a.ya=!0}return a.Nx}mU.prototype.$classData=g({Sga:0},!1,"scala.collection.immutable.Stream$StreamWithFilter",{Sga:1,d:1,mb:1});function Cpa(a,b){b=b.nf();switch(b){case -1:break;default:a.qc(b)}}function oU(a,b,d){b=b.nf();switch(b){case -1:break;default:a.qc(b+d|0)}}
+function pU(a,b,d){d=d.nf();switch(d){case -1:break;default:a.qc(b<d?b:d)}}var yw=g({via:0},!1,"scala.scalajs.js.Dynamic",{via:1,tia:1,ipa:1},!0,void 0,function(){throw new ba.TypeError("Cannot call isInstance() on a Class representing a raw JS trait/object");}),yha=g({wia:0},!1,"scala.scalajs.js.Object",{wia:1,d:1,tia:1},!0,void 0,function(a){return a instanceof ba.Object});function mx(){}mx.prototype=new l;mx.prototype.constructor=mx;mx.prototype.b=function(){return this};mx.prototype.hh=function(){return(new qU).b()};
+mx.prototype.cf=function(){return(new qU).b()};mx.prototype.$classData=g({zia:0},!1,"scala.scalajs.js.WrappedDictionary$$anon$1",{zia:1,d:1,et:1});function rU(){}rU.prototype=new l;rU.prototype.constructor=rU;function Dpa(){}Dpa.prototype=rU.prototype;rU.prototype.k=function(){return"\x3cfunction0\x3e"};function sU(){}sU.prototype=new l;sU.prototype.constructor=sU;function tU(){}tU.prototype=sU.prototype;sU.prototype.Fa=function(a){return this.y(a)|0};sU.prototype.k=function(){return"\x3cfunction1\x3e"};
+sU.prototype.Ga=function(a){return!!this.y(a)};sU.prototype.Ca=function(a){return pb(this,a)};function uU(){}uU.prototype=new l;uU.prototype.constructor=uU;function Epa(){}Epa.prototype=uU.prototype;uU.prototype.k=function(){return"\x3cfunction2\x3e"};function vU(){}vU.prototype=new l;vU.prototype.constructor=vU;function Fpa(){}Fpa.prototype=vU.prototype;vU.prototype.k=function(){return"\x3cfunction3\x3e"};function wU(){}wU.prototype=new l;wU.prototype.constructor=wU;function Gpa(){}
+Gpa.prototype=wU.prototype;wU.prototype.k=function(){return"\x3cfunction4\x3e"};function JT(){this.rw=null;this.$a=this.Ua=0}JT.prototype=new l;JT.prototype.constructor=JT;c=JT.prototype;c.Tv=function(a,b){if(0>a)throw(new xU).qb(a);if(b>this.ra())throw(new xU).qb(b);if(b<=a)return(new JT).Wo(this.rw,0,0);var d=this.Ua+a|0;return(new JT).Wo(this.rw,d,d+(b-a|0)|0)};c.k=function(){var a=this.Ua,a=0<a?a:0,b=this.rw.m.length,d=a+this.ra()|0,b=b<d?b:d;return a>=b?"":qla(Ha(),this.rw,a,b-a|0)};
+c.ra=function(){var a=this.$a-this.Ua|0;return 0>a?0:a};c.Wo=function(a,b,d){this.rw=a;this.Ua=b;this.$a=d;return this};c.$classData=g({Ria:0},!1,"scala.runtime.ArrayCharSequence",{Ria:1,d:1,Zu:1});function gE(){this.Ba=!1}gE.prototype=new l;gE.prototype.constructor=gE;gE.prototype.k=function(){return""+this.Ba};gE.prototype.od=function(a){this.Ba=a;return this};gE.prototype.$classData=g({Sia:0},!1,"scala.runtime.BooleanRef",{Sia:1,d:1,i:1});
+function PF(a){return!!(a&&a.$classData&&1===a.$classData.Rr&&a.$classData.Qr.n.KY)}var Ba=g({KY:0},!1,"scala.runtime.BoxedUnit",{KY:1,d:1,i:1},void 0,void 0,function(a){return void 0===a});function Wb(){this.Ba=0}Wb.prototype=new l;Wb.prototype.constructor=Wb;Wb.prototype.Xj=function(a){this.Ba=a;return this};Wb.prototype.k=function(){return""+this.Ba};Wb.prototype.$classData=g({Uia:0},!1,"scala.runtime.DoubleRef",{Uia:1,d:1,i:1});function QD(){this.Ba=0}QD.prototype=new l;
+QD.prototype.constructor=QD;QD.prototype.k=function(){return""+this.Ba};QD.prototype.qb=function(a){this.Ba=a;return this};QD.prototype.$classData=g({Via:0},!1,"scala.runtime.IntRef",{Via:1,d:1,i:1});function Ub(){this.Ba=DA()}Ub.prototype=new l;Ub.prototype.constructor=Ub;Ub.prototype.JD=function(a){this.Ba=a;return this};Ub.prototype.k=function(){var a=this.Ba,b=a.la,a=a.qa;return yU(Ra(),b,a)};Ub.prototype.$classData=g({Zia:0},!1,"scala.runtime.LongRef",{Zia:1,d:1,i:1});
+function Al(){this.Ba=null}Al.prototype=new l;Al.prototype.constructor=Al;Al.prototype.k=function(){return""+this.Ba};Al.prototype.j=function(a){this.Ba=a;return this};Al.prototype.$classData=g({bja:0},!1,"scala.runtime.ObjectRef",{bja:1,d:1,i:1});function zU(){this.UU=this.yC=this.DG=this.VU=this.Ep=this.vE=this.Mp=this.Wm=this.Hj=null}zU.prototype=new l;zU.prototype.constructor=zU;function AU(a,b,d){return 0===d?Hpa(a,b):0===b.la&&0===b.qa&&0<=d&&d<a.yC.m.length?a.yC.m[d]:(new GR).KD(b,d)}
+zU.prototype.b=function(){BU=this;this.Hj=(new GR).ia(0,0);this.Wm=(new GR).ia(1,0);this.Mp=(new GR).ia(10,0);this.vE=Ipa(28,5);var a=this.vE.m.length,b;b=[];for(var d=0;d<a;){var e=d,e=CU(DU(),DU().vE.m[e]);b.push(e);d=1+d|0}ka(Wa(db),b);this.Ep=Ipa(19,10);a=this.Ep.m.length;b=[];for(d=0;d<a;)e=d,e=CU(DU(),DU().Ep.m[e]),b.push(e),d=1+d|0;this.VU=ka(Wa(db),b);a=[];for(b=0;11>b;)d=b,d=(new GR).ia(d,0),a.push(d),b=1+b|0;this.DG=ka(Wa(Jpa),a);a=[];for(b=0;11>b;)d=b,d=(new GR).ia(0,d),a.push(d),b=1+b|
+0;this.yC=ka(Wa(Jpa),a);a=[];for(b=0;100>b;)a.push(48),b=1+b|0;this.UU=ka(Wa(Za),a);return this};
+function Kpa(a,b,d,e){var f;if(f=e<a.Ep.m.length){f=b.Ee;var h=d.Ee+a.VU.m[e]|0;f=64>(1+(f>h?f:h)|0)}if(f){f=d.Od;d=f.la;f=f.qa;var h=a.Ep.m[e],k=h.la;e=65535&d;var p=d>>>16|0,t=65535&k,x=k>>>16|0,E=da(e,t),t=da(p,t),S=da(e,x);e=E+((t+S|0)<<16)|0;E=(E>>>16|0)+S|0;d=(((da(d,h.qa)+da(f,k)|0)+da(p,x)|0)+(E>>>16|0)|0)+(((65535&E)+t|0)>>>16|0)|0;h=b.Od;f=h.la;h=h.qa;e=f+e|0;return AU(a,(new Vb).ia(e,(-2147483648^e)<(-2147483648^f)?1+(h+d|0)|0:h+d|0),b.Jb)}a=qf();f=EU(d);d=(new Vb).ia(e,e>>31);e=a.vC.m.length;
+h=e>>31;k=d.qa;(k===h?(-2147483648^d.la)<(-2147483648^e):k<h)?(d=a.vC.m[d.la],a=f.Vb,e=f.cc,f=f.Ab,0===a?a=cf().Hj:1===e?(e=f.m[0],f=65535&e,e=e>>>16|0,k=65535&d,d=d>>>16|0,h=da(f,k),k=da(e,k),p=da(f,d),f=h+((k+p|0)<<16)|0,h=(h>>>16|0)+p|0,d=(da(e,d)+(h>>>16|0)|0)+(((65535&h)+k|0)>>>16|0)|0,a=0===d?(new af).ia(a,f):$e(new af,a,2,Af(Bf(),f,(new w).f([d])))):(h=1+e|0,k=la(Wa(db),[h]),k.m[e]=Pf(0,k,f,e,d),a=$e(new af,a,h,k),bf(a))):a=Nf(f,Sf(a,d));d=EU(b);return(new GR).oq(zf(Ef(),d,a),b.Jb)}
+function Lpa(a,b,d,e){a=0>d?-d|0:d;var f=0===d?0:0>d?-1:1;if(Kf().xC===e)return f;if(Kf().Dz===e)return 0;if(Kf().Cz===e)return 0<f?f:0;if(Kf().Fz===e)return 0>f?f:0;if(Kf().Hz===e)return 5<=a?f:0;if(Kf().Gz===e)return 5<a?f:0;if(Kf().Hw===e)return 5<(a+b|0)?f:0;if(Kf().wC===e){if(0===d)return 0;throw(new FU).c("Rounding necessary");}throw(new q).j(e);}
+function GU(a,b){a=b.qa;(-1===a?0>(-2147483648^b.la):-1>a)?a=!0:(a=b.qa,a=0===a?-1<(-2147483648^b.la):0<a);if(a)throw(new FU).c("Out of int range: "+b);return b.la}function Hpa(a,b){if(0<=b.qa)var d=b.qa,d=0===d?-2147483637>(-2147483648^b.la):0>d;else d=!1;return d?a.DG.m[b.la]:(new GR).KD(b,0)}function CU(a,b){b=0>b.qa?(new Vb).ia(~b.la,~b.qa):b;a=b.la;b=b.qa;return 64-(0!==b?fa(b):32+fa(a)|0)|0}
+function Ipa(a,b){a=la(Wa(eb),[-1+a|0]);var d;d=[];var e,f=e=(new Vb).ia(1,0);d.push(null===f?null:f);for(var f=0,h=a.m.length;f<h;){var k=a.m[f],p=k.la,t=k.qa,k=Qa(e);e=k.la;k=k.qa;Qa((new Vb).ia(p,t));var p=b>>31,x=65535&e,t=e>>>16|0,E=65535&b,S=b>>>16|0,U=da(x,E),E=da(t,E),ga=da(x,S),x=U+((E+ga|0)<<16)|0,U=(U>>>16|0)+ga|0;e=(((da(e,p)+da(k,b)|0)+da(t,S)|0)+(U>>>16|0)|0)+(((65535&U)+E|0)>>>16|0)|0;k=e=(new Vb).ia(x,e);d.push(null===k?null:k);f=1+f|0}return ka(Wa(eb),d)}
+function Mpa(a,b){var d=b.la;return b.la===d&&b.qa===d>>31?AU(a,DA(),b.la):0<=b.qa?(new GR).ia(0,2147483647):(new GR).ia(0,-2147483648)}zU.prototype.$classData=g({xZ:0},!1,"java.math.BigDecimal$",{xZ:1,d:1,l:1,i:1});var BU=void 0;function DU(){BU||(BU=(new zU).b());return BU}function HU(){this.uC=this.wS=this.$w=this.Hj=this.Mp=this.Wm=null}HU.prototype=new l;HU.prototype.constructor=HU;
+HU.prototype.b=function(){IU=this;this.Wm=(new af).ia(1,1);this.Mp=(new af).ia(1,10);this.Hj=(new af).ia(0,0);this.$w=(new af).ia(-1,1);var a=(new w).f([this.Hj,this.Wm,(new af).ia(1,2),(new af).ia(1,3),(new af).ia(1,4),(new af).ia(1,5),(new af).ia(1,6),(new af).ia(1,7),(new af).ia(1,8),(new af).ia(1,9),this.Mp]),b=a.pa.length|0,b=la(Wa(Ue),[b]),d;d=0;for(a=Ve(new We,a,0,a.pa.length|0);a.ta();){var e=a.ma();b.m[d]=e;d=1+d|0}this.wS=b;b=[];for(d=0;32>d;)a=d,a=Cf(cf(),(new Vb).ia(0===(32&a)?1<<a:0,
+0===(32&a)?0:1<<a)),b.push(null===a?null:a),d=1+d|0;this.uC=ka(Wa(Ue),b);return this};function Npa(a,b){if(b<a.uC.m.length)return a.uC.m[b];a=b>>5;b&=31;var d=la(Wa(db),[1+a|0]);d.m[a]=1<<b;return $e(new af,1,1+a|0,d)}function Cf(a,b){if(0>b.qa)return-1!==b.la||-1!==b.qa?(a=b.la,b=b.qa,Opa(new af,-1,(new Vb).ia(-a|0,0!==a?~b:-b|0))):a.$w;var d=b.qa;return(0===d?-2147483638>=(-2147483648^b.la):0>d)?a.wS.m[b.la]:Opa(new af,1,b)}
+HU.prototype.$classData=g({yZ:0},!1,"java.math.BigInteger$",{yZ:1,d:1,l:1,i:1});var IU=void 0;function cf(){IU||(IU=(new HU).b());return IU}function JU(){this.Ar=this.wC=this.Hw=this.Gz=this.Hz=this.Fz=this.Cz=this.Dz=this.xC=null}JU.prototype=new l;JU.prototype.constructor=JU;
+JU.prototype.b=function(){KU=this;this.xC=(new LU).Cd("UP",0);this.Dz=(new LU).Cd("DOWN",1);this.Cz=(new LU).Cd("CEILING",2);this.Fz=(new LU).Cd("FLOOR",3);this.Hz=(new LU).Cd("HALF_UP",4);this.Gz=(new LU).Cd("HALF_DOWN",5);this.Hw=(new LU).Cd("HALF_EVEN",6);this.wC=(new LU).Cd("UNNECESSARY",7);var a=(new w).f([this.xC,this.Dz,this.Cz,this.Fz,this.Hz,this.Gz,this.Hw,this.wC]),b=a.pa.length|0,b=la(Wa(Ppa),[b]),d;d=0;for(a=Ve(new We,a,0,a.pa.length|0);a.ta();){var e=a.ma();b.m[d]=e;d=1+d|0}this.Ar=
+b;return this};JU.prototype.$classData=g({HZ:0},!1,"java.math.RoundingMode$",{HZ:1,d:1,l:1,i:1});var KU=void 0;function Kf(){KU||(KU=(new JU).b());return KU}function MU(){iG.call(this)}MU.prototype=new Mla;MU.prototype.constructor=MU;MU.prototype.b=function(){iG.prototype.Dd.call(this,"/system/tokens-core.txt","org.nlogo.core.prim.");return this};MU.prototype.$classData=g({b_:0},!1,"org.nlogo.core.DefaultTokenMapper$",{b_:1,uI:1,d:1,W_:1});var Qpa=void 0;function NU(){this.ZG=null;this.a=!1}
+NU.prototype=new l;NU.prototype.constructor=NU;NU.prototype.b=function(){OU=this;this.ZG=(new PU).Es(I(oc().ai,y()));this.a=!0;return this};function Qda(a,b){return(new PU).Es(I(oc().ai,y()).Vc(b,(dk(),ek().nc)))}function Rpa(){var a=Ao();if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/LogoList.scala: 9");return a.ZG}NU.prototype.$classData=g({m_:0},!1,"org.nlogo.core.LogoList$",{m_:1,d:1,l:1,i:1});var OU=void 0;
+function Ao(){OU||(OU=(new NU).b());return OU}function QU(){this.GT=this.IT=null;this.ya=0}QU.prototype=new l;QU.prototype.constructor=QU;QU.prototype.b=function(){return this};function Spa(){var a=Tpa();if(0===(2&a.ya)&&0===(2&a.ya)){var b=Ki(),d=I(r(),(new w).f("default;0.0;-0.2 0 0.0 1.0;0.0 1 1.0 0.0;0.2 0 0.0 1.0;link direction;true;0;Line -7500403 true 150 150 90 180;Line -7500403 true 150 150 210 180".split(";"))).Ta();a.GT=hca(b,d.Jc()).ob();a.ya=(2|a.ya)<<24>>24}return a.GT}
+function Upa(){var a=Tpa();if(0===(1&a.ya)&&0===(1&a.ya)){var b=Ki(),d=I(r(),(new w).f("default;true;0;Polygon -7500403 true true 150 5 40 250 150 205 260 250;;airplane;true;0;Polygon -7500403 true true 150 0 135 15 120 60 120 105 15 165 15 195 120 180 135 240 105 270 120 285 150 270 180 285 210 270 165 240 180 180 285 195 285 165 180 105 180 60 165 15;;arrow;true;0;Polygon -7500403 true true 150 0 0 150 105 150 105 293 195 293 195 150 300 150;;box;false;0;Polygon -7500403 true true 150 285 285 225 285 75 150 135;Polygon -7500403 true true 150 135 15 75 150 15 285 75;Polygon -7500403 true true 15 75 15 225 150 285 150 135;Line -16777216 false 150 285 150 135;Line -16777216 false 150 135 15 75;Line -16777216 false 150 135 285 75;;bug;true;0;Circle -7500403 true true 96 182 108;Circle -7500403 true true 110 127 80;Circle -7500403 true true 110 75 80;Line -7500403 true 150 100 80 30;Line -7500403 true 150 100 220 30;;butterfly;true;0;Polygon -7500403 true true 150 165 209 199 225 225 225 255 195 270 165 255 150 240;Polygon -7500403 true true 150 165 89 198 75 225 75 255 105 270 135 255 150 240;Polygon -7500403 true true 139 148 100 105 55 90 25 90 10 105 10 135 25 180 40 195 85 194 139 163;Polygon -7500403 true true 162 150 200 105 245 90 275 90 290 105 290 135 275 180 260 195 215 195 162 165;Polygon -16777216 true false 150 255 135 225 120 150 135 120 150 105 165 120 180 150 165 225;Circle -16777216 true false 135 90 30;Line -16777216 false 150 105 195 60;Line -16777216 false 150 105 105 60;;car;false;0;Polygon -7500403 true true 300 180 279 164 261 144 240 135 226 132 213 106 203 84 185 63 159 50 135 50 75 60 0 150 0 165 0 225 300 225 300 180;Circle -16777216 true false 180 180 90;Circle -16777216 true false 30 180 90;Polygon -16777216 true false 162 80 132 78 134 135 209 135 194 105 189 96 180 89;Circle -7500403 true true 47 195 58;Circle -7500403 true true 195 195 58;;circle;false;0;Circle -7500403 true true 0 0 300;;circle 2;false;0;Circle -7500403 true true 0 0 300;Circle -16777216 true false 30 30 240;;cow;false;0;Polygon -7500403 true true 200 193 197 249 179 249 177 196 166 187 140 189 93 191 78 179 72 211 49 209 48 181 37 149 25 120 25 89 45 72 103 84 179 75 198 76 252 64 272 81 293 103 285 121 255 121 242 118 224 167;Polygon -7500403 true true 73 210 86 251 62 249 48 208;Polygon -7500403 true true 25 114 16 195 9 204 23 213 25 200 39 123;;cylinder;false;0;Circle -7500403 true true 0 0 300;;dot;false;0;Circle -7500403 true true 90 90 120;;face happy;false;0;Circle -7500403 true true 8 8 285;Circle -16777216 true false 60 75 60;Circle -16777216 true false 180 75 60;Polygon -16777216 true false 150 255 90 239 62 213 47 191 67 179 90 203 109 218 150 225 192 218 210 203 227 181 251 194 236 217 212 240;;face neutral;false;0;Circle -7500403 true true 8 7 285;Circle -16777216 true false 60 75 60;Circle -16777216 true false 180 75 60;Rectangle -16777216 true false 60 195 240 225;;face sad;false;0;Circle -7500403 true true 8 8 285;Circle -16777216 true false 60 75 60;Circle -16777216 true false 180 75 60;Polygon -16777216 true false 150 168 90 184 62 210 47 232 67 244 90 220 109 205 150 198 192 205 210 220 227 242 251 229 236 206 212 183;;fish;false;0;Polygon -1 true false 44 131 21 87 15 86 0 120 15 150 0 180 13 214 20 212 45 166;Polygon -1 true false 135 195 119 235 95 218 76 210 46 204 60 165;Polygon -1 true false 75 45 83 77 71 103 86 114 166 78 135 60;Polygon -7500403 true true 30 136 151 77 226 81 280 119 292 146 292 160 287 170 270 195 195 210 151 212 30 166;Circle -16777216 true false 215 106 30;;flag;false;0;Rectangle -7500403 true true 60 15 75 300;Polygon -7500403 true true 90 150 270 90 90 30;Line -7500403 true 75 135 90 135;Line -7500403 true 75 45 90 45;;flower;false;0;Polygon -10899396 true false 135 120 165 165 180 210 180 240 150 300 165 300 195 240 195 195 165 135;Circle -7500403 true true 85 132 38;Circle -7500403 true true 130 147 38;Circle -7500403 true true 192 85 38;Circle -7500403 true true 85 40 38;Circle -7500403 true true 177 40 38;Circle -7500403 true true 177 132 38;Circle -7500403 true true 70 85 38;Circle -7500403 true true 130 25 38;Circle -7500403 true true 96 51 108;Circle -16777216 true false 113 68 74;Polygon -10899396 true false 189 233 219 188 249 173 279 188 234 218;Polygon -10899396 true false 180 255 150 210 105 210 75 240 135 240;;house;false;0;Rectangle -7500403 true true 45 120 255 285;Rectangle -16777216 true false 120 210 180 285;Polygon -7500403 true true 15 120 150 15 285 120;Line -16777216 false 30 120 270 120;;leaf;false;0;Polygon -7500403 true true 150 210 135 195 120 210 60 210 30 195 60 180 60 165 15 135 30 120 15 105 40 104 45 90 60 90 90 105 105 120 120 120 105 60 120 60 135 30 150 15 165 30 180 60 195 60 180 120 195 120 210 105 240 90 255 90 263 104 285 105 270 120 285 135 240 165 240 180 270 195 240 210 180 210 165 195;Polygon -7500403 true true 135 195 135 240 120 255 105 255 105 285 135 285 165 240 165 195;;line;true;0;Line -7500403 true 150 0 150 300;;line half;true;0;Line -7500403 true 150 0 150 150;;pentagon;false;0;Polygon -7500403 true true 150 15 15 120 60 285 240 285 285 120;;person;false;0;Circle -7500403 true true 110 5 80;Polygon -7500403 true true 105 90 120 195 90 285 105 300 135 300 150 225 165 300 195 300 210 285 180 195 195 90;Rectangle -7500403 true true 127 79 172 94;Polygon -7500403 true true 195 90 240 150 225 180 165 105;Polygon -7500403 true true 105 90 60 150 75 180 135 105;;plant;false;0;Rectangle -7500403 true true 135 90 165 300;Polygon -7500403 true true 135 255 90 210 45 195 75 255 135 285;Polygon -7500403 true true 165 255 210 210 255 195 225 255 165 285;Polygon -7500403 true true 135 180 90 135 45 120 75 180 135 210;Polygon -7500403 true true 165 180 165 210 225 180 255 120 210 135;Polygon -7500403 true true 135 105 90 60 45 45 75 105 135 135;Polygon -7500403 true true 165 105 165 135 225 105 255 45 210 60;Polygon -7500403 true true 135 90 120 45 150 15 180 45 165 90;;sheep;false;15;Circle -1 true true 203 65 88;Circle -1 true true 70 65 162;Circle -1 true true 150 105 120;Polygon -7500403 true false 218 120 240 165 255 165 278 120;Circle -7500403 true false 214 72 67;Rectangle -1 true true 164 223 179 298;Polygon -1 true true 45 285 30 285 30 240 15 195 45 210;Circle -1 true true 3 83 150;Rectangle -1 true true 65 221 80 296;Polygon -1 true true 195 285 210 285 210 240 240 210 195 210;Polygon -7500403 true false 276 85 285 105 302 99 294 83;Polygon -7500403 true false 219 85 210 105 193 99 201 83;;square;false;0;Rectangle -7500403 true true 30 30 270 270;;square 2;false;0;Rectangle -7500403 true true 30 30 270 270;Rectangle -16777216 true false 60 60 240 240;;star;false;0;Polygon -7500403 true true 151 1 185 108 298 108 207 175 242 282 151 216 59 282 94 175 3 108 116 108;;target;false;0;Circle -7500403 true true 0 0 300;Circle -16777216 true false 30 30 240;Circle -7500403 true true 60 60 180;Circle -16777216 true false 90 90 120;Circle -7500403 true true 120 120 60;;tree;false;0;Circle -7500403 true true 118 3 94;Rectangle -6459832 true false 120 195 180 300;Circle -7500403 true true 65 21 108;Circle -7500403 true true 116 41 127;Circle -7500403 true true 45 90 120;Circle -7500403 true true 104 74 152;;triangle;false;0;Polygon -7500403 true true 150 30 15 255 285 255;;triangle 2;false;0;Polygon -7500403 true true 150 30 15 255 285 255;Polygon -16777216 true false 151 99 225 223 75 224;;truck;false;0;Rectangle -7500403 true true 4 45 195 187;Polygon -7500403 true true 296 193 296 150 259 134 244 104 208 104 207 194;Rectangle -1 true false 195 60 195 105;Polygon -16777216 true false 238 112 252 141 219 141 218 112;Circle -16777216 true false 234 174 42;Rectangle -7500403 true true 181 185 214 194;Circle -16777216 true false 144 174 42;Circle -16777216 true false 24 174 42;Circle -7500403 false true 24 174 42;Circle -7500403 false true 144 174 42;Circle -7500403 false true 234 174 42;;turtle;true;0;Polygon -10899396 true false 215 204 240 233 246 254 228 266 215 252 193 210;Polygon -10899396 true false 195 90 225 75 245 75 260 89 269 108 261 124 240 105 225 105 210 105;Polygon -10899396 true false 105 90 75 75 55 75 40 89 31 108 39 124 60 105 75 105 90 105;Polygon -10899396 true false 132 85 134 64 107 51 108 17 150 2 192 18 192 52 169 65 172 87;Polygon -10899396 true false 85 204 60 233 54 254 72 266 85 252 107 210;Polygon -7500403 true true 119 75 179 75 209 101 224 135 220 225 175 261 128 261 81 224 74 135 88 99;;wheel;false;0;Circle -7500403 true true 3 3 294;Circle -16777216 true false 30 30 240;Line -7500403 true 150 285 150 15;Line -7500403 true 15 150 285 150;Circle -7500403 true true 120 120 60;Line -7500403 true 216 40 79 269;Line -7500403 true 40 84 269 221;Line -7500403 true 40 216 269 79;Line -7500403 true 84 40 221 269;;wolf;false;0;Polygon -16777216 true false 253 133 245 131 245 133;Polygon -7500403 true true 2 194 13 197 30 191 38 193 38 205 20 226 20 257 27 265 38 266 40 260 31 253 31 230 60 206 68 198 75 209 66 228 65 243 82 261 84 268 100 267 103 261 77 239 79 231 100 207 98 196 119 201 143 202 160 195 166 210 172 213 173 238 167 251 160 248 154 265 169 264 178 247 186 240 198 260 200 271 217 271 219 262 207 258 195 230 192 198 210 184 227 164 242 144 259 145 284 151 277 141 293 140 299 134 297 127 273 119 270 105;Polygon -7500403 true true -1 195 14 180 36 166 40 153 53 140 82 131 134 133 159 126 188 115 227 108 236 102 238 98 268 86 269 92 281 87 269 103 269 113;;x;false;0;Polygon -7500403 true true 270 75 225 30 30 225 75 270;Polygon -7500403 true true 30 75 75 30 270 225 225 270".split(";"))).Ta();
+a.IT=jca(b,d.Jc()).ob();a.ya=(1|a.ya)<<24>>24}return a.IT}QU.prototype.$classData=g({n_:0},!1,"org.nlogo.core.Model$",{n_:1,d:1,l:1,i:1});var Vpa=void 0;function Tpa(){Vpa||(Vpa=(new QU).b());return Vpa}function RU(){}RU.prototype=new l;RU.prototype.constructor=RU;RU.prototype.b=function(){return this};RU.prototype.$classData=g({x_:0},!1,"org.nlogo.core.NumericInput$",{x_:1,d:1,l:1,i:1});var Wpa=void 0;function SU(){this.je=this.qi=null;this.xz=0;this.sa=null;this.a=!1}SU.prototype=new l;
+SU.prototype.constructor=SU;SU.prototype.Oc=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/AstNode.scala: 65");return this.sa};function Lb(a,b,d){var e=new SU;e.qi=a;e.je=b;e.xz=d;b=cP(a).sa.Ua;a=cP(a);e.sa=vm(new wm,b,d,a.sa.cb);e.a=!0;return e}SU.prototype.$classData=g({SH:0},!1,"org.nlogo.core.ProcedureDefinition",{SH:1,d:1,Fp:1,no:1});function TU(){}TU.prototype=new l;TU.prototype.constructor=TU;
+TU.prototype.b=function(){return this};function Tma(){var a=pQ(),b=Hla(oQ(a)),d=XF(oQ(a)),e=Ila(oQ(a)),f=I(r(),y()),h=I(r(),y()),k=Vg(Wg(),y()),p=Vg(Wg(),y());return mp(f,h,b,d,e,k,p,a)}TU.prototype.$classData=g({E_:0},!1,"org.nlogo.core.Program$",{E_:1,d:1,l:1,i:1});var Xpa=void 0;function Uma(){Xpa||(Xpa=(new TU).b());return Xpa}function UU(){this.SG=null;this.a=!1}UU.prototype=new l;UU.prototype.constructor=UU;UU.prototype.b=function(){this.SG="default";this.a=!0;return this};
+function Ypa(a){if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/ShapeList.scala: 10");return a.SG}function cga(a,b){a=m(new n,function(){return function(a){var b=a.pe();return(new A).e(b,a)}}(a));var d=Lc();return b.xa(a,d.s).we(Je().Qk)}UU.prototype.$classData=g({J_:0},!1,"org.nlogo.core.ShapeList$",{J_:1,d:1,l:1,i:1});var Zpa=void 0;function Bt(){Zpa||(Zpa=(new UU).b());return Zpa}
+function Fb(){this.eg=this.ns=null;this.re=!1}Fb.prototype=new l;Fb.prototype.constructor=Fb;c=Fb.prototype;c.Cs=function(a,b,d){this.ns=a;this.eg=b;this.re=d;return this};c.$o=function(a,b){Fb.prototype.Cs.call(this,a,b,!1);return this};c.Oc=function(){if(this.eg.z())return vm(new wm,0,0,this.ns);var a=this.eg.W(0).Oc().Ua,b=this.eg.hd();return vm(new wm,a,b.Oc().$a,this.ns)};c.k=function(){return this.eg.zb(" ")};c.c=function(a){Fb.prototype.Cs.call(this,a,I(r(),y()),!1);return this};
+c.$classData=g({Yz:0},!1,"org.nlogo.core.Statements",{Yz:1,d:1,Fp:1,no:1});function VU(){}VU.prototype=new l;VU.prototype.constructor=VU;VU.prototype.b=function(){return this};VU.prototype.$classData=g({P_:0},!1,"org.nlogo.core.StringInput$",{P_:1,d:1,l:1,i:1});var $pa=void 0;function WU(){this.Xd=null;this.a=!1}WU.prototype=new l;WU.prototype.constructor=WU;
+WU.prototype.b=function(){aqa=this;Uma();this.Xd=qp(new rp,Tma(),(up(),bh()),(up(),Vg(Je().$h,y())),(up(),I(r(),y())),(up(),I(r(),y())),(up(),I(r(),y())));this.a=!0;return this};WU.prototype.$classData=g({T_:0},!1,"org.nlogo.core.StructureResults$",{T_:1,d:1,l:1,i:1});var aqa=void 0;function up(){aqa||(aqa=(new WU).b())}
+function XU(){this.a=this.gS=this.OG=this.CS=this.KG=this.kS=this.rS=this.IG=this.sS=this.lS=this.iS=this.GG=this.NG=this.qS=this.LS=this.pS=this.AG=this.tS=this.PG=this.pH=this.mS=this.GS=this.fS=this.BG=this.qH=this.nS=this.HS=this.rH=this.BS=this.HG=this.jS=this.JS=0}XU.prototype=new l;XU.prototype.constructor=XU;
+function Dj(a){if(0===(32&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 203");return a.HS}
+XU.prototype.b=function(){YU=this;this.JS=0;this.a|=1;this.jS=1;this.a|=2;this.HG=2;this.a|=4;this.BS=4;this.a|=8;this.rH=8;this.a|=16;this.HS=16;this.a|=32;this.nS=32;this.a|=64;this.qH=64;this.a|=128;this.BG=Dj(this)|Ej(this)|Fj(this);this.a|=256;this.fS=128;this.a|=512;this.GS=256;this.a|=1024;this.mS=512;this.a|=2048;this.pH=1024;this.a|=4096;this.PG=2048;this.a|=8192;this.tS=4096;this.a|=16384;this.AG=Gj(this)|Hj(this)|Ij(this);this.a|=32768;this.pS=N(this)|zj(this)|Aj(this)|Bj(this)|yj(this);
+this.a|=65536;this.LS=N(this)|zj(this)|Aj(this)|Bj(this)|xj(this)|Cj(this)|yj(this)|Kj(this)|Jj(this);this.a|=131072;this.qS=8192;this.a|=262144;this.NG=16384;this.a|=524288;this.GG=32768;this.a|=1048576;this.iS=65536;this.a|=2097152;this.lS=131072;this.a|=4194304;this.sS=Oj(this)|Pj(this)|Nj(this);this.a|=8388608;this.IG=Bj(this)|Lj(this)|Mj(this);this.a|=16777216;this.rS=262144;this.a|=33554432;this.kS=524288;this.a|=67108864;this.KG=1048576;this.a|=134217728;this.CS=2097152;this.a|=268435456;this.OG=
+0;this.a|=536870912;this.gS=10;this.a|=1073741824;return this};function vj(){var a=D();if(0===(262144&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 270");return a.qS}
+function nc(a,b,d,e,f,h,k,p){var t=new H;if(0===(536870912&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 318");return G(t,a.OG,mc(),b,mc(),d,e,!1,f,h,k||h.ba(),p)}function Qj(){var a=D();if(0===(134217728&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 311");return a.KG}
+function Oj(a){if(0===(1048576&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 278");return a.GG}function wj(){var a=D();if(0===(16777216&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 292");return a.IG}function nn(a,b,d){return 0!==(b&d)}
+function C(){var a=D();if(0===(1073741824&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 319");return a.gS}function Mj(a){if(0===(8388608&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 291");return a.sS}
+function Ej(a){if(0===(64&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 208");return a.nS}function uj(){var a=D();if(0===(33554432&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 299");return a.rS}
+function Fr(){var a=D();if(0===(65536&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 261");return a.pS}function xj(a){if(0===(32768&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 255");return a.AG}
+function Rj(){var a=D();if(0===(268435456&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 316");return a.CS}function Bj(a){if(0===(16&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 198");return a.rH}
+function Ij(a){if(0===(4096&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 239");return a.pH}function Sj(){var a=D();if(0===(67108864&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 306");return a.kS}
+function Gj(a){if(0===(1024&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 229");return a.GS}function Lj(a){if(0===(524288&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 274");return a.NG}
+function Nj(a){if(0===(4194304&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 286");return a.lS}function N(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 183");return a.jS}
+function Jj(a){if(0===(16384&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 249");return a.tS}function Aj(a){if(0===(8&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 193");return a.BS}
+function yj(a){if(0===(512&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 224");return a.fS}function zj(a){if(0===(4&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 188");return a.HG}
+function Fj(a){if(0===(128&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 213");return a.qH}function mc(){var a=D();if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 180");return a.JS}
+function Hj(a){if(0===(2048&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 234");return a.mS}function Cj(a){if(0===(256&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 219");return a.BG}
+function Pj(a){if(0===(2097152&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 282");return a.iS}function kc(){var a=D();if(0===(131072&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 268");return a.LS}
+function Kj(a){if(0===(8192&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Syntax.scala: 244");return a.PG}XU.prototype.$classData=g({U_:0},!1,"org.nlogo.core.Syntax$",{U_:1,d:1,l:1,i:1});var YU=void 0;function D(){YU||(YU=(new XU).b());return YU}function ZU(){this.aH=null;this.a=!1}ZU.prototype=new l;ZU.prototype.constructor=ZU;
+ZU.prototype.b=function(){$U=this;this.aH=tm(new um,"",Bc(),"",vm(new wm,2147483647,2147483647,""));this.a=!0;return this};function xm(){var a;$U||($U=(new ZU).b());a=$U;if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Token.scala: 15");return a.aH}ZU.prototype.$classData=g({V_:0},!1,"org.nlogo.core.Token$",{V_:1,d:1,l:1,i:1});var $U=void 0;function aV(){}aV.prototype=new l;aV.prototype.constructor=aV;
+function bqa(){}bqa.prototype=aV.prototype;aV.prototype.qb=function(){return this};function Mk(){}Mk.prototype=new vO;Mk.prototype.constructor=Mk;c=Mk.prototype;c.b=function(){return this};c.Xl=function(a){B();a=(new w).f([void 0,a.Sa,a.hb,a.Ma,a.gb,a.ab,a.xc,a.To,void 0,void 0,a.an,void 0,a.so,void 0,void 0,a.Io?0:1]);var b=B().s;return L(a,b)};
+c.Yl=function(a){a:{B();var b=(new J).j(a);if(null!==b.U&&0===og(b.U,16)){var d=b.U.W(1),e=b.U.W(2),f=b.U.W(3),h=b.U.W(4),k=b.U.W(5),p=b.U.W(6),t=b.U.W(7),x=b.U.W(10),E=b.U.W(12),b=b.U.W(15);if(Pa(d)&&(d|=0,Pa(e)&&(e|=0,Pa(f)&&(f|=0,Pa(h)&&(h|=0,bV(k)&&bV(p)&&"boolean"===typeof t&&(t=!!t,x&&x.$classData&&x.$classData.n.Lw&&bV(E)&&Pa(b)))))))break a}throw(new q).j(a);}return cqa(p,d|0,e|0,f|0,h|0,k,!!t,x,E,0===(b|0))};c.cm=function(){return(new xn).Dg(pa(dqa))};
+c.Hh=function(){B();var a=(new cV).c("BUTTON"),b=(new dV).Ja(F()),d=(new dV).Ja(F()),e=(new dV).Ja(F()),f=(new dV).Ja(F()),h=eV(new fV,(new gV).Ja(F())),k=eV(new fV,(new hV).Ja(F())),p=(new iV).Ja(F()),t=(new jV).c("1"),x=(new jV).c("T");B();var E=Ni(),E=(new A).e("OBSERVER",E),S=Pi(),S=(new A).e("PATCH",S),U=Oi(),U=(new A).e("TURTLE",U),ga=Qi(),E=(new w).f([E,S,U,(new A).e("LINK",ga)]),S=B().s,a=(new w).f([a,b,d,e,f,h,k,p,t,x,(new kV).uq(L(E,S)),(new jV).c("NIL"),eV(new fV,(new lV).Ja(F())),(new jV).c("NIL"),
+(new jV).c("NIL"),(new dV).Ja(F())]),b=B().s;return L(a,b)};c.$classData=g({q0:0},!1,"org.nlogo.core.model.ButtonReader$",{q0:1,Rm:1,d:1,Sm:1});var Lk=void 0;function Yk(){}Yk.prototype=new vO;Yk.prototype.constructor=Yk;c=Yk.prototype;c.b=function(){return this};function eqa(a,b){if(rh()===b)return"nobody";if(Eg(b)){Ao();var d=ek().nc,d=Mc(b,d);for(b=gk(b.uc);b.Yh;){var e=b.ma();d.Qa(eqa(a,e))}return Qda(0,d.Da())}return b}
+function fqa(a,b){B();var d=b.Sa,e=b.hb,f=b.Ma,h=b.gb,k=b.ab,p=b.ld,t=b.yo;a=function(){return function(a){var b=oo();a=a.Pl();return $b(b,a,!0,!1)}}(a);var x=B().s;if(x===B().s)if(t===y())a=y();else{for(var x=t.$(),E=x=Ng(new Og,a(x),y()),t=t.aa();t!==y();)var S=t.$(),S=Ng(new Og,a(S),y()),E=E.Ia=S,t=t.aa();a=x}else{for(x=Mc(t,x);!t.z();)E=t.$(),x.Qa(a(E)),t=t.aa();a=x.Da()}b=(new w).f([void 0,d,e,f,h,k,p,a.zb(" "),b.Eo]);d=B().s;return L(b,d)}c.Xl=function(a){return fqa(this,a)};
+c.Yl=function(a){return gqa(this,a)};
+function gqa(a,b){a:{B();var d=(new J).j(b);if(null!==d.U&&0===og(d.U,9)){var e=d.U.W(1),f=d.U.W(2),h=d.U.W(3),k=d.U.W(4),p=d.U.W(5),t=d.U.W(6),x=d.U.W(7),d=d.U.W(8);if(Pa(e)&&(e|=0,Pa(f)&&(f|=0,Pa(h)&&(h|=0,Pa(k))))){var E=k|0;if(bV(p)&&bV(t)&&Ag(x)&&Pa(d))break a}}throw(new q).j(b);}b=e|0;k=f|0;h|=0;e=E|0;f=x;x=d|0;f=Gfa(0,u((new v).G((new w).f(["[","]"])),(new w).f([f])));d=ek().nc;d=Mc(f,d);for(f=gk(f.uc);f.Yh;)E=f.ma(),d.Qa(eqa(a,E));d=d.Da();a=m(new n,function(){return function(a){return Kba(Mba(),a)}}(a));
+f=ek();return hqa(new mV,t,b,k,h,e,p,d.xa(a,f.nc).ob(),x)}c.cm=function(){return(new xn).Dg(pa(iqa))};c.Hh=function(){B();var a=(new w).f([(new cV).c("CHOOSER"),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),eV(new fV,(new hV).Ja(F())),eV(new fV,(new gV).Ja(F())),(new gV).Ja(F()),(new dV).Ja(F())]),b=B().s;return L(a,b)};c.$classData=g({r0:0},!1,"org.nlogo.core.model.ChooserReader$",{r0:1,Rm:1,d:1,Sm:1});var Xk=void 0;function dl(){}dl.prototype=new vO;
+dl.prototype.constructor=dl;c=dl.prototype;c.b=function(){return this};c.Xl=function(a){B();a=(new w).f([void 0,a.Sa,a.hb,a.Ma,a.gb,a.ld,a.am.aT(),void 0,jqa(a),a.am.pe()]);var b=B().s;return L(a,b)};
+c.Yl=function(a){a:{B();var b=(new J).j(a);if(null!==b.U&&0===og(b.U,10)){var d=b.U.W(0),e=b.U.W(1),f=b.U.W(2),h=b.U.W(3),k=b.U.W(4),p=b.U.W(5),t=b.U.W(6),x=b.U.W(8),b=b.U.W(9);if(void 0===d&&Pa(e)&&(d=e|0,Pa(f)&&(e=f|0,Pa(h)&&(h|=0,Pa(k))))){var E=k|0;if(bV(p)&&Ag(t)&&"boolean"===typeof x&&(f=!!x,Ag(b)))break a}}throw(new q).j(a);}a=d|0;x=e|0;k=h|0;h=E|0;f=!!f;if("Number"===b||"Color"===b){f=(new Sb).c(t);d=Ih();t=new nV;f=Hh(d,f.R);Wpa||(Wpa=(new RU).b());if("Number"===b)b=oV();else if("Color"===
+b)b=pV();else throw(new q).j(b);b=qV(t,f,b)}else{if("String"!==b&&"String (reporter)"!==b&&"String (commands)"!==b)throw ug(vg(),(new Fg).c("Couldn't find corresponding input box type for "+b));d=new rV;$pa||($pa=(new VU).b());if("String"===b)b=kqa();else if("String (reporter)"===b)b=lqa();else if("String (commands)"===b)b=mqa();else throw(new q).j(b);b=nqa(d,t,b,f)}return oqa(p,a,x,k,h,b)};c.cm=function(){return(new xn).Dg(pa(pqa))};
+c.Hh=function(){B();var a=(new w).f([(new cV).c("INPUTBOX"),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),eV(new fV,(new gV).Ja(F())),(new sV).Ja(F()),(new jV).c("1"),(new tV).Ja(F()),(new gV).Ja(F())]),b=B().s;return L(a,b)};c.$classData=g({s0:0},!1,"org.nlogo.core.model.InputBoxReader$",{s0:1,Rm:1,d:1,Sm:1});var cl=void 0;function Sk(){}Sk.prototype=new vO;Sk.prototype.constructor=Sk;c=Sk.prototype;c.b=function(){return this};
+c.Xl=function(a){B();a=(new w).f([void 0,a.Sa,a.hb,a.Ma,a.gb,a.ab,a.xc,a.Ph,void 0,a.Nd]);var b=B().s;return L(a,b)};c.Yl=function(a){a:{B();var b=(new J).j(a);if(null!==b.U&&0===og(b.U,10)){var d=b.U.W(1),e=b.U.W(2),f=b.U.W(3),h=b.U.W(4),k=b.U.W(5),p=b.U.W(6),t=b.U.W(7),b=b.U.W(9);if(Pa(d)&&(d|=0,Pa(e)&&(e|=0,Pa(f)&&(f|=0,Pa(h)&&(h|=0,bV(k)&&bV(p)&&Pa(t)&&(t|=0,Pa(b)))))))break a}throw(new q).j(a);}return qqa(p,d|0,e|0,f|0,h|0,k,t|0,b|0)};c.cm=function(){return(new xn).Dg(pa(rqa))};
+c.Hh=function(){B();var a=(new w).f([(new cV).c("MONITOR"),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),eV(new fV,(new gV).Ja(F())),eV(new fV,(new hV).Ja(F())),(new dV).Ja(F()),(new jV).c("1"),(new dV).Ja(F())]),b=B().s;return L(a,b)};c.$classData=g({w0:0},!1,"org.nlogo.core.model.MonitorReader$",{w0:1,Rm:1,d:1,Sm:1});var Rk=void 0;function $k(){}$k.prototype=new vO;$k.prototype.constructor=$k;c=$k.prototype;c.b=function(){return this};
+c.Xl=function(a){B();a=(new w).f([void 0,a.Sa,a.hb,a.Ma,a.gb,a.Nd]);var b=B().s;return L(a,b)};c.Yl=function(a){a:{B();var b=(new J).j(a);if(null!==b.U&&0===og(b.U,6)){var d=b.U.W(1),e=b.U.W(2),f=b.U.W(3),h=b.U.W(4),b=b.U.W(5);if(Pa(d)&&(d|=0,Pa(e)&&(e|=0,Pa(f)&&(f|=0,Pa(h)&&(h|=0,Pa(b))))))break a}throw(new q).j(a);}return sqa(d|0,e|0,f|0,h|0,b|0)};c.cm=function(){return(new xn).Dg(pa(tqa))};
+c.Hh=function(){B();var a=(new w).f([(new cV).c("OUTPUT"),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F())]),b=B().s;return L(a,b)};c.$classData=g({x0:0},!1,"org.nlogo.core.model.OutputReader$",{x0:1,Rm:1,d:1,Sm:1});var Zk=void 0;function Wk(){}Wk.prototype=new vO;Wk.prototype.constructor=Wk;c=Wk.prototype;c.b=function(){return this};
+c.oG=function(a){for(var b=(new jc).b();;)if(a.z()?0:"PENS"!==a.$())lc(b,a.$()),a=a.aa();else break;b=b.ob();return uO.prototype.oG.call(this,b)};function uqa(a){B();a=(new w).f([void 0,a.Sa,a.hb,a.Ma,a.gb,a.ab,a.go,a.io,a.Ti,a.Si,a.Vi,a.Ui,a.Zm,a.xn,'"'+Kg(Lg(),a.sg)+'" "'+Kg(Lg(),a.tg)+'"']);var b=B().s;return L(a,b)}
+function vqa(a,b,d){for(var e=(new jc).b();;)if(b.z()?0:"PENS"!==b.$())lc(e,b.$()),b=b.aa();else break;e=e.ob();if(1<fn(b)){b=b.aa();d=function(){return function(a){var b=Ik();Je();var d=(new Sb).c(a),d=Uj(d);oF(0,34===(null===d?0:d.Y));a=(new Sb).c(a);d=Cca(Ck(a));if(null===d)throw(new q).j(d);a=d.ja();for(var d=(new Sb).c(d.na()),e=d.R.length|0,f=0;;){if(f<e)var h=d.W(f),h=34!==(null===h?0:h.Y);else h=!1;if(h)f=1+f|0;else break}d=rj(d,f);if(null===d)throw(new q).j(d);var k=d.na(),d=d.ja().trim(),
+d=vF(Ha(),d,"\\s+"),e=B().s.hh(),f=d.m.length;switch(f){case -1:break;default:e.qc(f)}e.Zb((new ri).Mh(d));d=e.Da();B();f=(new J).j(d);if(null!==f.U&&0===og(f.U,4))var h=f.U.W(0),e=f.U.W(1),d=f.U.W(2),ma=f.U.W(3);else throw(new q).j(d);f=e;e=d;d=ma;Je();Rh||(Rh=(new Qh).b());var ma=(new Sb).c(f),va=ti(),ma=vi(va,ma.R,10);oF(0,0<=ma&&2>=ma);b=Dk(b,k);B();k=(new J).j(b);null!==k.U&&0===og(k.U,2)?(b=k.U.W(0),k=k.U.W(1)):k=b="";a=qj(Lg(),a);h=(new Sb).c(h);h=Hh(Ih(),h.R);f=(new Sb).c(f);f=vi(ti(),f.R,
+10);e=(new Sb).c(e);e=vi(ti(),e.R,10);d=(new Sb).c(d);return wqa(new uV,a,h,f,e,wi(d.R),qj(Lg(),b),qj(Lg(),k))}}(a,d);var f=B().s;if(f===B().s)if(b===y())d=y();else{var f=b.$(),h=f=Ng(new Og,d(f),y());for(b=b.aa();b!==y();){var k=b.$(),k=Ng(new Og,d(k),y()),h=h.Ia=k;b=b.aa()}d=f}else{for(f=Mc(b,f);!b.z();)h=b.$(),f.Qa(d(h)),b=b.aa();d=f.Da()}}else d=y();b=a.Hh();f=B().s;b=yO(b,f);a=function(a,b){return function(a){if(null!==a){var d=a.ja();a=a.Ec();return a<fn(b)?d.pi(Bi(b,a)):d.zh().X()}throw(new q).j(a);
+}}(a,e);e=B().s;if(e===B().s)if(b===y())a=y();else{e=b.$();f=e=Ng(new Og,a(e),y());for(b=b.aa();b!==y();)h=b.$(),h=Ng(new Og,a(h),y()),f=f.Ia=h,b=b.aa();a=e}else{for(e=Mc(b,e);!b.z();)f=b.$(),e.Qa(a(f)),b=b.aa();a=e.Da()}e=B();return xqa(a.mc(d,e.s))}c.jU=function(a){return yqa(this,a)};c.Yl=function(a){return xqa(a)};c.Xl=function(a){return uqa(a)};c.cm=function(){return(new xn).Dg(pa(zqa))};
+function xqa(a){a:{B();var b=(new J).j(a);if(null!==b.U&&0===og(b.U,16)){var d=b.U.W(1),e=b.U.W(2),f=b.U.W(3),h=b.U.W(4),k=b.U.W(5),p=b.U.W(6),t=b.U.W(7),x=b.U.W(8),E=b.U.W(9),S=b.U.W(10),U=b.U.W(11),ga=b.U.W(12),ma=b.U.W(13),va=b.U.W(14),b=b.U.W(15);if(Pa(d)&&(d|=0,Pa(e)&&(e|=0,Pa(f)))){var Ia=f|0;if(Pa(h)){var $a=h|0;if(bV(k)&&bV(p)&&bV(t)&&"number"===typeof x&&(x=+x,"number"===typeof E&&(E=+E,"number"===typeof S&&(S=+S,"number"===typeof U&&(U=+U,"boolean"===typeof ga&&(h=!!ga,"boolean"===typeof ma&&
+(f=!!ma,Ag(va)&&Mg(b))))))))break a}}}throw(new q).j(a);}a=d|0;ma=e|0;ga=Ia|0;d=$a|0;x=+x;E=+E;S=+S;U=+U;h=!!h;f=!!f;e=va;va=b;b=Dk(Ik(),e);a:{B();Ia=(new J).j(b);if(null!==Ia.U&&0===og(Ia.U,2)&&(e=Ia.U.W(0),Ia=Ia.U.W(1),null!==e&&null!==Ia))break a;throw(new q).j(b);}b=e;e=Ia;return Aqa(new vV,k,a,ma,ga,d,p,t,x,E,S,U,h,f,qj(Lg(),b),qj(Lg(),e),va)}c.lW=function(a,b){return vqa(this,a,b)};
+function yqa(a,b){var d=a.Hh(),e=uqa(b),f=B().s,e=xO(d,e,f),d=function(){return function(a){if(null!==a)return a.ja().gi(a.na());throw(new q).j(a);}}(a),f=B().s;if(f===B().s)if(e===y())d=y();else{for(var f=e.$(),h=f=Ng(new Og,d(f),y()),e=e.aa();e!==y();)var k=e.$(),k=Ng(new Og,d(k),y()),h=h.Ia=k,e=e.aa();d=f}else{for(f=Mc(e,f);!e.z();)h=e.$(),f.Qa(d(h)),e=e.aa();d=f.Da()}d=d.zb("\n");b=b.Jn;a=function(){return function(a){Ik();return Gk(a.ab)+" "+a.rl+" "+a.vl+" "+a.Bb+" "+a.jm+" "+Gk(Kg(Lg(),a.sg))+
+" "+Gk(Kg(Lg(),a.tg))}}(a);e=B().s;if(e===B().s)if(b===y())a=y();else{e=b.$();f=e=Ng(new Og,a(e),y());for(b=b.aa();b!==y();)h=b.$(),h=Ng(new Og,a(h),y()),f=f.Ia=h,b=b.aa();a=e}else{for(e=Mc(b,e);!b.z();)f=b.$(),e.Qa(a(f)),b=b.aa();a=e.Da()}return d+"\nPENS\n"+a.zb("\n")}
+c.Hh=function(){B();var a=(new w).f([(new cV).c("PLOT"),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),eV(new fV,(new gV).Ja(F())),eV(new fV,(new gV).Ja(F())),eV(new fV,(new gV).Ja(F())),(new wV).Ja(F()),(new wV).Ja(F()),(new wV).Ja(F()),(new wV).Ja(F()),(new xV).Ja(F()),(new xV).Ja(F()),(new gV).Ja((new J).j('"" ""'))]),b=B().s;return L(a,b)};c.$classData=g({z0:0},!1,"org.nlogo.core.model.PlotReader$",{z0:1,Rm:1,d:1,Sm:1});var Vk=void 0;function Ok(){}Ok.prototype=new vO;
+Ok.prototype.constructor=Ok;c=Ok.prototype;c.b=function(){return this};c.Xl=function(a){B();a=(new w).f([void 0,a.Sa,a.hb,a.Ma,a.gb,a.ab,a.ld,a.Bn,a.rm,a.Fb,a.Im,void 0,a.yp,a.Ho]);var b=B().s;return L(a,b)};
+c.Yl=function(a){a:{B();var b=(new J).j(a);if(null!==b.U&&0===og(b.U,14)){var d=b.U.W(1),e=b.U.W(2),f=b.U.W(3),h=b.U.W(4),k=b.U.W(5),p=b.U.W(6),t=b.U.W(7),x=b.U.W(8),E=b.U.W(9),S=b.U.W(10),U=b.U.W(12),b=b.U.W(13);if(Pa(d)&&(d|=0,Pa(e)&&(e|=0,Pa(f)&&(f|=0,Pa(h)&&(h|=0,bV(k)&&bV(p)&&Ag(t)&&Ag(x)&&"number"===typeof E&&(E=+E,Ag(S)&&bV(U)&&b&&b.$classData&&b.$classData.n.KH))))))break a}throw(new q).j(a);}return Bqa(p,d|0,e|0,f|0,h|0,k,t,x,+E,S,U,b)};c.cm=function(){return(new xn).Dg(pa(Cqa))};
+c.Hh=function(){B();var a=(new cV).c("SLIDER"),b=(new dV).Ja(F()),d=(new dV).Ja(F()),e=(new dV).Ja(F()),f=(new dV).Ja(F()),h=eV(new fV,(new gV).Ja(F())),k=eV(new fV,(new gV).Ja(F())),p=(new gV).Ja(F()),t=(new gV).Ja(F()),x=(new wV).Ja(F()),E=(new gV).Ja(F()),S=(new jV).c("1"),U=eV(new fV,(new gV).Ja(F()));B();var ga=(new w).f([(new A).e("HORIZONTAL",Dqa()),(new A).e("VERTICAL",Eqa())]),ma=B().s,a=(new w).f([a,b,d,e,f,h,k,p,t,x,E,S,U,(new kV).uq(L(ga,ma))]),b=B().s;return L(a,b)};
+c.$classData=g({A0:0},!1,"org.nlogo.core.model.SliderReader$",{A0:1,Rm:1,d:1,Sm:1});var Nk=void 0;function Uk(){}Uk.prototype=new vO;Uk.prototype.constructor=Uk;c=Uk.prototype;c.b=function(){return this};c.Xl=function(a){B();a=(new w).f([void 0,a.Sa,a.hb,a.Ma,a.gb,a.ab,a.ld,a.ip,void 0,void 0]);var b=B().s;return L(a,b)};
+c.Yl=function(a){a:{B();var b=(new J).j(a);if(null!==b.U&&0===og(b.U,10)){var d=b.U.W(1),e=b.U.W(2),f=b.U.W(3),h=b.U.W(4),k=b.U.W(5),p=b.U.W(6),b=b.U.W(7);if(Pa(d)&&(d|=0,Pa(e)&&(e|=0,Pa(f)&&(f|=0,Pa(h)&&(h|=0,bV(k)&&bV(p)&&"boolean"===typeof b)))))break a}throw(new q).j(a);}return Fqa(p,d|0,e|0,f|0,h|0,k,!!b)};c.cm=function(){return(new xn).Dg(pa(Gqa))};
+c.Hh=function(){B();var a=(new w).f([(new cV).c("SWITCH"),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),eV(new fV,(new gV).Ja(F())),eV(new fV,(new gV).Ja(F())),(new yV).Ja(F()),(new jV).c("1"),(new jV).c("-1000")]),b=B().s;return L(a,b)};c.$classData=g({B0:0},!1,"org.nlogo.core.model.SwitchReader$",{B0:1,Rm:1,d:1,Sm:1});var Tk=void 0;function bl(){}bl.prototype=new vO;bl.prototype.constructor=bl;c=bl.prototype;c.b=function(){return this};
+c.Xl=function(a){B();a=(new w).f([void 0,a.Sa,a.hb,a.Ma,a.gb,a.ab,a.Nd,a.Bb,a.pr]);var b=B().s;return L(a,b)};c.Yl=function(a){a:{B();var b=(new J).j(a);if(null!==b.U&&0===og(b.U,9)){var d=b.U.W(1),e=b.U.W(2),f=b.U.W(3),h=b.U.W(4),k=b.U.W(5),p=b.U.W(6),t=b.U.W(7),b=b.U.W(8);if(Pa(d)&&(d|=0,Pa(e)&&(e|=0,Pa(f)&&(f|=0,Pa(h)&&(h|=0,bV(k)&&Pa(p)&&(p|=0,"number"===typeof t&&(t=+t,"boolean"===typeof b)))))))break a}throw(new q).j(a);}return Hqa(k,d|0,e|0,f|0,h|0,p|0,+t,!!b)};c.cm=function(){return(new xn).Dg(pa(Iqa))};
+c.Hh=function(){B();var a=(new w).f([(new cV).c("TEXTBOX"),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),(new dV).Ja(F()),eV(new fV,(new hV).Ja(F())),(new dV).Ja(F()),(new wV).Ja(F()),(new tV).Ja(F())]),b=B().s;return L(a,b)};c.$classData=g({C0:0},!1,"org.nlogo.core.model.TextBoxReader$",{C0:1,Rm:1,d:1,Sm:1});var al=void 0;function Qk(){}Qk.prototype=new vO;Qk.prototype.constructor=Qk;c=Qk.prototype;c.b=function(){return this};
+c.Xl=function(a){B();a=(new w).f([void 0,a.Sa,a.hb,a.Ma,a.gb,void 0,void 0,sga(a),void 0,a.Nd,void 0,void 0,void 0,void 0,tga(a),uga(a),void 0,oga(a),pga(a),qga(a),rga(a),a.zp,a.zp,a.cr,a.jr,a.dq]);var b=B().s;return L(a,b)};
+c.Yl=function(a){a:{var b,d,e,f;if(si(a)){var h=a.Ia;if(si(h)){var k=h.Cb,h=h.Ia;if(Pa(k)&&(k|=0,si(h))){var p=h.Cb,t=h.Ia;if(Pa(p)&&(h=p|0,si(t))){var x=t.Cb,p=t.Ia;if(Pa(x)&&(t=x|0,si(p)&&(x=p.Cb,b=p.Ia,Pa(x)&&(p=x|0,si(b)&&(x=b.Ia,si(x)&&(b=x.Ia,si(b)&&(x=b.Cb,b=b.Ia,"number"===typeof x&&(x=+x,si(b))))))))){var E=b.Ia;if(si(E)&&(b=E.Cb,E=E.Ia,Pa(b)&&(b|=0,si(E)&&(E=E.Ia,si(E)&&(E=E.Ia,si(E)&&(E=E.Ia,si(E))))))){var S=E.Ia;if(si(S)&&(E=S.Cb,S=S.Ia,"boolean"===typeof E&&(E=!!E,si(S)))){var U=S.Cb,
+ga=S.Ia;if("boolean"===typeof U&&(S=!!U,si(ga)&&(ga=ga.Ia,si(ga)&&(U=ga.Cb,ga=ga.Ia,Pa(U)&&(U|=0,si(ga)))))){var ma=ga.Cb,va=ga.Ia;if(Pa(ma)&&(ga=ma|0,si(va)&&(d=va.Cb,ma=va.Ia,Pa(d)&&(va=d|0,si(ma)&&(d=ma.Cb,e=ma.Ia,Pa(d)&&(ma=d|0,si(e)&&(d=e.Cb,e=e.Ia,d&&d.$classData&&d.$classData.n.vI&&si(e)&&(f=e.Ia,si(f))))))))){e=f.Cb;var Ia=f.Ia;if("boolean"===typeof e&&(f=!!e,si(Ia))){e=Ia.Cb;var $a=Ia.Ia;if(bV(e)&&si($a)&&(Ia=$a.Cb,$a=$a.Ia,"number"===typeof Ia&&(Ia=+Ia,y().o($a)))){a=b;b=d;d=f;f=Ia;break a}}}}}}}}}}}throw(new q).j(a);
+}return Jqa(new zV,k|0,h|0,t|0,p|0,Kqa(U|0,ga|0,va|0,ma|0,+x,!!E,!!S),a|0,b,!!d,e,+f)};c.cm=function(){return(new xn).Dg(pa(Lqa))};
+c.Hh=function(){B();var a=(new cV).c("GRAPHICS-WINDOW"),b=(new dV).Ja(F()),d=(new dV).Ja(F()),e=(new dV).Ja(F()),f=(new dV).Ja(F()),h=(new jV).c("-1"),k=(new jV).c("-1"),p=(new wV).Ja(F()),t=(new jV).c("1"),x=(new dV).Ja(F()),E=(new jV).c("1"),S=(new jV).c("1"),U=(new jV).c("1"),ga=(new jV).c("0"),ma=(new tV).Ja(F()),va=(new tV).Ja(F()),Ia=(new jV).c("1"),$a=(new dV).Ja(F()),ub=(new dV).Ja(F()),vb=(new dV).Ja(F()),Mb=(new dV).Ja(F());B();var Jc=(new w).f([(new A).e("0",Mqa()),(new A).e("1",Nqa())]),
+ab=B().s,Jc=(new kV).uq(L(Jc,ab));B();var ab=(new w).f([(new A).e("0",Mqa()),(new A).e("1",Nqa())]),fc=B().s,a=(new w).f([a,b,d,e,f,h,k,p,t,x,E,S,U,ga,ma,va,Ia,$a,ub,vb,Mb,Jc,(new kV).uq(L(ab,fc)),(new tV).Ja(F()),eV(new fV,(new gV).Ja(F())),(new wV).Ja((new J).j(30))]),b=B().s;return L(a,b)};c.$classData=g({D0:0},!1,"org.nlogo.core.model.ViewReader$",{D0:1,Rm:1,d:1,Sm:1});var Pk=void 0;
+function AV(a){B();a=(new w).f([a.Fs(),Lj(D())|Sj()]);var b=B().s;a=L(a,b);b=jd().Wc("---L");D();var d=F();D();var e=F();D();D();return nc(D(),a,d,e,"-T--",b,!1,!0)}function EO(){bm.call(this)}EO.prototype=new Jca;EO.prototype.constructor=EO;EO.prototype.b=function(){bm.prototype.b.call(this);return this};
+EO.prototype.IC=function(a){om(a.xk);var b=(new pm).b();a:for(;;){var d=Tca(a);if(Fk(d)){var d=d.U,d=null===d?0:d.Y,e=Gh(),f=d;if(((256>f?9===f||10===f||11===f||12===f||13===f||28<=f&&31>=f||160!==f&&Oqa(Pqa(e).m[f]):8199!==f&&8239!==f&&Oqa(Qqa(e,f)))?tl():ul()).Bw()){b=qm(b,d);continue a}}b=b.rc.Xb;break}a.xk.Oq();e=b.length|0;d=a.xk;e=(new Vb).ia(e,e>>31);d.Mn.Pv(e);rm(d,sm(d)-e.la|0);a.hp=a.hp+(b.length|0)|0;a=(new A).e(b.length|0,a);if(null===a)throw(new q).j(a);return bm.prototype.IC.call(this,
+a.na())};EO.prototype.$classData=g({U0:0},!1,"org.nlogo.lex.StandardLexer$",{U0:1,Gja:1,d:1,Fja:1});var Sla=void 0;function gP(){this.dc=null}gP.prototype=new l;gP.prototype.constructor=gP;c=gP.prototype;c.y=function(a){return this.bf(a)};c.Fa=function(a){return this.bf(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.bf(a)};c.MD=function(a){this.dc=a;return this};c.Ca=function(a){return pb(this,a)};
+c.bf=function(a){a=a.Y;for(var b=(new Kc).mg(this.dc.ig).ti.wj(),d=!1;!d&&b.ta();)d=b.ma().Al.ib(a);b=d?(new J).j((new kG).c(a)):F();if(b.z()){b=(new Kc).mg(this.dc.Lf).ti.wj();for(d=!1;!d&&b.ta();)d=b.ma().Al.ib(a);b=d?(new J).j((new oG).c(a)):F()}b=b.z()?Ap(this.dc).ib(a)&&Bp(this.dc).ib(a)?(new J).j((new BV).Cd(a,this.dc.Pi.y(a)|0|this.dc.Di.y(a)|0)):F():b;b.z()&&(b=this.dc.Pi,b.ib(a)?(d=Hc(b),d=kp(d).pl(a),b=b.y(a)|0,b=(new J).j((new CV).ia(d,b))):b=F());b.z()&&(b=this.dc.mj,b.ib(a)?(d=Hc(b),
+d=kp(d).pl(a),b=b.y(a)|0,b=(new J).j((new DV).ia(d,b))):b=F());b.z()&&(b=this.dc.Di,b.ib(a)?(d=Hc(b),d=kp(d).pl(a),b=b.y(a)|0,b=(new J).j((new EV).ia(d,b))):b=F());b.z()&&(b=Rqa(this.dc),b.ib(a)?(d=Hc(b),d=kp(d).pl(a),b=b.y(a)|0,b=(new J).j((new FV).ia(d,b))):b=F());b.z()?(ld(),a=zp(this.dc).pl(a),a=md(new nd,new GV).Wc(a)):a=b;if(a.z())return F();a=a.X();return(new J).j((new A).e(bg(),a))};c.$classData=g({c1:0},!1,"org.nlogo.parse.AgentVariableReporterHandler",{c1:1,d:1,Fr:1,fa:1});
+function fP(){this.dc=null}fP.prototype=new l;fP.prototype.constructor=fP;c=fP.prototype;c.y=function(a){return this.bf(a)};c.Fa=function(a){return this.bf(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.bf(a)};c.MD=function(a){this.dc=a;return this};c.Ca=function(a){return pb(this,a)};
+c.bf=function(a){a=Jba(Rb(),a,this.dc);if(a.z())return F();a=a.X();if(null===a)throw(new q).j(a);var b=a.fb,d=a.Eb;a=a.tf;var e=wp(this.dc.zg);if(0===(1&e.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-js/src/main/core/TokenMapper.scala: 16");b=e.bT.$b(u((new v).G((new w).f(["org.nlogo.core.prim.",""])),(new w).f([b])));b.z()?d=F():(b=b.X(),d=(new J).j(b.y(d)));if(d.z())return F();d=d.X();return(new J).j((new A).e(a,d))};
+c.$classData=g({g1:0},!1,"org.nlogo.parse.BreedHandler",{g1:1,d:1,Fr:1,fa:1});function iP(){this.ae=null}iP.prototype=new l;iP.prototype.constructor=iP;c=iP.prototype;c.y=function(a){return this.bf(a)};c.ac=function(a){this.ae=a;return this};c.Fa=function(a){return this.bf(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.bf(a)};c.Ca=function(a){return pb(this,a)};
+c.bf=function(a){a=(new J).j(a.Y).U;a=this.ae.$b(a);if(a.z())return F();a=a.X();return(new J).j(a.tv.sn?(new A).e(bg(),(new HV).LD(a)):(new A).e(ag(),(new IV).LD(a)))};c.$classData=g({h1:0},!1,"org.nlogo.parse.CallHandler",{h1:1,d:1,Fr:1,fa:1});function JV(){this.a=!1}JV.prototype=new l;JV.prototype.constructor=JV;JV.prototype.b=function(){KV=this;dma||(dma=(new MO).b());this.a=!0;return this};
+function Qea(a,b,d,e){a=ana();try{var f=Cp(Gc(QP()),"to __is-reporter? report "+b+"\nend",(Gc(QP()),"")),h=Dp(),k=(new bc).Kf(f,h),p=sea(tea(new tp,F(),!0),k,qp(new rp,d,e,(up(),Vg(Je().$h,y())),(up(),I(r(),y())),(up(),I(r(),y())),(up(),I(r(),y())))),t=(new Kc).mg(p.ae).ti.wj().ma(),x=new xc,E=yc(e,p.ae);x.dc=d;x.ae=E;x.qi=t;x.Jh=a;Eaa(x);for(var S=wc(tc(),p.np.y(t.pe()).Ta(),x),U=LV(Vv(S),1);;){if(U.z())va=!1;else var ga=U.$().kb,ma=im(),va=null!==ga&&ga===ma;if(va)U=U.aa();else break}var Ia=Ek(U);
+if(Ia.z())return!1;var $a=Ia.X(),ub=$a.kb;return km()===ub||Bm()===ub||mm()===ub?!0:bg()===ub?!(Zq($a.Y)||Dn($a.Y)||Sm($a.Y)):!1}catch(vb){if(uq(vb))return!1;throw vb;}}
+function Gfa(a,b){a=wda();var d=uh(Ph(),b),d=MV(d).zf;if(Am(d))return d.U;a=vda(new rn,a);b=Cp(Gc(QP()),b,(Gc(QP()),""));d=Dp();d=(new bc).Kf(b,d);b=Co(a,d.ma(),d);d=d.ma();Sg();var e=d.kb,f=Bc();if(null===e||e!==f){if(0===(8&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/LiteralParser.scala: 23");d=d.sa;Rg(a.WG,d.Ua,d.$a,d.cb)}return b}
+JV.prototype.$classData=g({n1:0},!1,"org.nlogo.parse.CompilerUtilities$",{n1:1,d:1,tja:1,Aja:1});var KV=void 0;function Zj(){KV||(KV=(new JV).b());return KV}function NV(){this.Jh=null}NV.prototype=new l;NV.prototype.constructor=NV;c=NV.prototype;c.y=function(a){return this.bf(a)};function pma(a){var b=new NV;b.Jh=a;return b}c.Fa=function(a){return this.bf(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.bf(a)};
+function Sqa(a){if(a&&a.$classData&&a.$classData.n.RH)return(new OV).PD(a.BD());if(a&&a.$classData&&a.$classData.n.D_)return(new PV).PD(a.BD());throw(new q).j(a);}c.Ca=function(a){return pb(this,a)};
+c.bf=function(a){var b=a.kb,d=mm();if(null===b||b!==d||null===this.Jh)return F();a=a.Y;b=Hp(this.Jh).$b(a);if(Fk(b))a=b.U;else{if(F()!==b)throw(new q).j(b);-1!==(a.indexOf(":")|0)&&dna(u((new v).G((new w).f(["No such primitive: ",""])),(new w).f([a])));a=null}if(null===a)return F();b=a&&a.$classData&&a.$classData.n.RH?ag():bg();return(new J).j((new A).e(b,Sqa(a)))};c.$classData=g({t1:0},!1,"org.nlogo.parse.ExtensionPrimitiveHandler",{t1:1,d:1,Fr:1,fa:1});function QV(){}QV.prototype=new l;
+QV.prototype.constructor=QV;function Tqa(){}Tqa.prototype=QV.prototype;QV.prototype.Fa=function(a){return this.bf(a)|0};QV.prototype.k=function(){return"\x3cfunction1\x3e"};QV.prototype.Ga=function(a){return!!this.bf(a)};QV.prototype.Ca=function(a){return pb(this,a)};function hP(){this.za=null}hP.prototype=new l;hP.prototype.constructor=hP;c=hP.prototype;c.y=function(a){return this.bf(a)};c.Fa=function(a){return this.bf(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.bf(a)};
+c.G=function(a){this.za=a;return this};c.Ca=function(a){return pb(this,a)};c.bf=function(a){a=(new J).j(a.Y);a=this.za.ib(a.U)?a:F();if(a.z())return F();a=a.X();return(new J).j((new A).e(bg(),(new RV).Yo(this.za.pl(a),a)))};c.$classData=g({K1:0},!1,"org.nlogo.parse.ProcedureVariableHandler",{K1:1,d:1,Fr:1,fa:1});function SV(){}SV.prototype=new l;SV.prototype.constructor=SV;SV.prototype.b=function(){return this};
+function xq(a,b){a=new Wp;var d=(Aq(),Jq().y(b)),e=Uqa(b).de,f=Uqa(b).Ue;if(0===(1&b.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/CompiledModel.scala: 23");return Vp(a,d,e,f,b.Hc,I(r(),y()),I(r(),y()))}SV.prototype.$classData=g({A2:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$ModelCompilation$",{A2:1,d:1,l:1,i:1});var Vqa=void 0;function yq(){Vqa||(Vqa=(new SV).b());return Vqa}function Rq(){}Rq.prototype=new l;
+Rq.prototype.constructor=Rq;c=Rq.prototype;c.vc=function(a){return TV(a)};c.b=function(){return this};c.y=function(a){return TV(a)};c.Fa=function(a){return TV(a)|0};c.k=function(){return"\x3cfunction1\x3e"};function TV(a){var b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new UV).b())}return VV(a)}c.Ga=function(a){return!!TV(a)};c.Ca=function(a){return pb(this,a)};c.$classData=g({B2:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$compilation2JsonWriter$",{B2:1,d:1,yc:1,fa:1});
+var Qq=void 0;function UV(){}UV.prototype=new l;UV.prototype.constructor=UV;c=UV.prototype;c.b=function(){return this};c.vc=function(a){return VV(a)};c.y=function(a){return VV(a)};c.Fa=function(a){return VV(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!VV(a)};
+function VV(a){var b=r();Wqa||(Wqa=(new WV).b());var d=$u(Wqa,a.Nf),d=(new A).e("model",d),e=PQ(),e=$u(e,a.de),e=(new A).e("code",e),f=PQ(),f=$u(f,a.Ue),f=(new A).e("info",f);Xqa||(Xqa=(new XV).b());var h=$u(Xqa,a.Hc),h=(new A).e("widgets",h),k=Yqa(),k=$u(k,a.cj),k=(new A).e("commands",k),p=Yqa();a=$u(p,a.nj);a=(new A).e("reporters",a);p=(new J).j((PQ(),(new zu).c("modelCompilation")));b=I(b,(new w).f([d,e,f,h,k,a,(new A).e("type",p)]));d=Wg();a=new YV;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))}
+c.Ca=function(a){return pb(this,a)};c.$classData=g({C2:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$compilation2JsonWriter$writer$macro$20$2$",{C2:1,d:1,yc:1,fa:1});function ZV(){}ZV.prototype=new l;ZV.prototype.constructor=ZV;c=ZV.prototype;c.vc=function(a){return this.aj(a)};c.b=function(){return this};c.y=function(a){return this.aj(a)};c.Fa=function(a){return this.aj(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.aj(a)};
+c.aj=function(a){if(Zp(a)){a=a.ha;var b=(new Au).od(!0),b=(new A).e("success",b);a=(new zu).c(a);a=[b,(new A).e("result",a)];for(var b=dc(new ec,Eu()),d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;return(new su).ac(b.Oa)}if(!aq(a))throw(new q).j(a);b=a.fc;a=(new Au).od(!1);a=(new A).e("success",a);d=dt(b).ob();b=function(){return function(a){var b=Zqa();return nq(a,b).$e()}}(this);e=B().s;if(e===B().s)if(d===y())b=y();else{for(var e=d.$(),f=e=Ng(new Og,b(e),y()),d=d.aa();d!==y();)var h=d.$(),h=Ng(new Og,
+b(h),y()),f=f.Ia=h,d=d.aa();b=e}else{for(e=Mc(d,e);!d.z();)f=d.$(),e.Qa(b(f)),d=d.aa();b=e.Da()}b=(new Bu).G(b);a=[a,(new A).e("result",b)];b=dc(new ec,Eu());d=0;for(e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;return(new su).ac(b.Oa)};c.Ca=function(a){return pb(this,a)};c.$classData=g({E2:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$compileResult2Json$",{E2:1,d:1,yc:1,fa:1});var $qa=void 0;function $V(){}$V.prototype=new l;$V.prototype.constructor=$V;c=$V.prototype;c.vc=function(a){return this.bj(a)};
+c.b=function(){return this};c.y=function(a){return this.bj(a)};c.Fa=function(a){return this.bj(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.bj=function(a){var b;$qa||($qa=(new ZV).b());b=$qa;var d=r();return(new Bu).G(a.xa(b,d.s))};c.Ga=function(a){return!!this.bj(a)};c.Ca=function(a){return pb(this,a)};c.$classData=g({F2:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$compiledCommands2Json$",{F2:1,d:1,yc:1,fa:1});var ara=void 0;function Yqa(){ara||(ara=(new $V).b());return ara}
+function XV(){}XV.prototype=new l;XV.prototype.constructor=XV;c=XV.prototype;c.vc=function(a){return this.bj(a)};c.b=function(){return this};c.y=function(a){return this.bj(a)};c.Fa=function(a){return this.bj(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.bj=function(a){return(new zu).c(Pga(Qt(),a))};c.Ga=function(a){return!!this.bj(a)};c.Ca=function(a){return pb(this,a)};c.$classData=g({G2:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$compiledWidgets2JsonString$",{G2:1,d:1,yc:1,fa:1});
+var Xqa=void 0;function mq(){}mq.prototype=new l;mq.prototype.constructor=mq;c=mq.prototype;c.b=function(){return this};c.vc=function(a){return this.aj(a)};c.y=function(a){return this.aj(a)};c.Fa=function(a){return this.aj(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.aj(a)};
+c.qD=function(a){var b=(new Au).od(!1),b=(new A).e("success",b),d=dt(a).ob();a=function(){return function(a){var b=bra();return nq(a,b).$e()}}(this);var e=B().s;if(e===B().s)if(d===y())a=y();else{for(var e=d.$(),f=e=Ng(new Og,a(e),y()),d=d.aa();d!==y();)var h=d.$(),h=Ng(new Og,a(h),y()),f=f.Ia=h,d=d.aa();a=e}else{for(e=Mc(d,e);!d.z();)f=d.$(),e.Qa(a(f)),d=d.aa();a=e.Da()}a=(new Bu).G(a);b=[b,(new A).e("result",a)];a=dc(new ec,Eu());d=0;for(e=b.length|0;d<e;)hc(a,b[d]),d=1+d|0;return(new su).ac(a.Oa)};
+c.aj=function(a){if(Zp(a)){a=(new zu).c(a.ha);a=[(new A).e("result",a)];for(var b=dc(new ec,Eu()),d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;a=(new su).ac(b.Oa).Tg;b=(new Au).od(!0);return(new su).ac(a.Om((new A).e("success",b)))}if(!aq(a))throw(new q).j(a);return this.qD(a.fc)};c.Ca=function(a){return pb(this,a)};c.$classData=g({H2:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$export2JsonWriter$",{H2:1,d:1,yc:1,fa:1});var lq=void 0;function WV(){}WV.prototype=new l;WV.prototype.constructor=WV;
+c=WV.prototype;c.b=function(){return this};c.vc=function(a){return this.aj(a)};c.y=function(a){return this.aj(a)};c.Fa=function(a){return this.aj(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.aj(a)};
+c.qD=function(a){var b=(new Au).od(!1),b=(new A).e("success",b),d=dt(a).ob();a=function(){return function(a){var b=bra();return nq(a,b).$e()}}(this);var e=B().s;if(e===B().s)if(d===y())a=y();else{for(var e=d.$(),f=e=Ng(new Og,a(e),y()),d=d.aa();d!==y();)var h=d.$(),h=Ng(new Og,a(h),y()),f=f.Ia=h,d=d.aa();a=e}else{for(e=Mc(d,e);!d.z();)f=d.$(),e.Qa(a(f)),d=d.aa();a=e.Da()}a=(new Bu).G(a);b=[b,(new A).e("result",a)];a=dc(new ec,Eu());d=0;for(e=b.length|0;d<e;)hc(a,b[d]),d=1+d|0;return(new su).ac(a.Oa)};
+c.aj=function(a){if(Zp(a)){a=a.ha;var b=(new Au).od(!0),b=(new A).e("success",b);a=(new zu).c(a.Xt);a=[b,(new A).e("result",a)];for(var b=dc(new ec,Eu()),d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;return(new su).ac(b.Oa)}if(!aq(a))throw(new q).j(a);return this.qD(a.fc)};c.Ca=function(a){return pb(this,a)};c.$classData=g({I2:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$modelCompilationNel2Json$",{I2:1,d:1,yc:1,fa:1});var Wqa=void 0;function aW(){}aW.prototype=new l;aW.prototype.constructor=aW;
+c=aW.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"code",Gq(Hq()));if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"info",oq().jv());if(Zp(d)){var d=d.ha,e=FQ(Hq(),a,"version",oq().jv());if(Zp(e)){var e=e.ha,f=FQ(Hq(),a,"widgets",cra());if(Zp(f)){var f=f.ha,h=FQ(Hq(),a,"commands",dra());if(Zp(h)){var h=h.ha,k=FQ(Hq(),a,"reporters",dra());if(Zp(k)){var k=k.ha,p=FQ(Hq(),a,"turtleShapes",oq().PE());if(Zp(p)){p=p.ha;a=FQ(Hq(),a,"linkShapes",oq().OE());if(Zp(a))return(new dq).j(Ffa(b,d,e,f,h,k,p,a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(p))throw(new q).j(p);
+return p}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({M2:0},!1,"org.nlogo.tortoise.compiler.CompilationRequest$reader$macro$18$2$",{M2:1,d:1,ic:1,fa:1});function bW(){this.a=!1}bW.prototype=new l;bW.prototype.constructor=bW;
+bW.prototype.b=function(){this.a=!0;return this};function Nea(a,b){sq();var d=tq();try{var e=Iea(0,vca(Yj(),b),sq(),d)}catch(h){if((b=Un(vg(),h))&&b.$classData&&b.$classData.n.ef)Aq(),e=Bq(pq(),b);else throw h;}if(Zp(e))return e;if(aq(e)){d=e.fc;a=function(){return function(a){return a}}(a);eq();b=a(d.Gc);d=d.Pc;e=fq().$d;d=gq(d);a:for(;;){if(!hq(d)){if(iq(d)){var f=d,d=f.fd,f=a(f.bd),e=(new jq).Sb(f,e);continue a}throw(new q).j(d);}break}return(new bq).j((new kq).Sb(b,e))}throw(new q).j(e);}
+function Iea(a,b,d,e){try{Aq();var f=Dfa(d,b,e),h=era(new cW,Pma(d,f,e),f,d);return Jq().y(h)}catch(k){if(uq(k))return Aq(),Bq(pq(),k);throw k;}}bW.prototype.$classData=g({N2:0},!1,"org.nlogo.tortoise.compiler.CompiledModel$",{N2:1,d:1,l:1,i:1});var fra=void 0;function rq(){fra||(fra=(new bW).b());return fra}function dW(){}dW.prototype=new l;dW.prototype.constructor=dW;dW.prototype.b=function(){return this};
+function Mma(a,b,d){a=yc;gra||(gra=(new eW).b());b=a(fW(d).Tg,b.Tg);d=(new Au).od(!0);d=(new A).e("success",d);a=(new Bu).G(I(r(),y()));d=[d,(new A).e("messages",a)];a=dc(new ec,Eu());for(var e=0,f=d.length|0;e<f;)hc(a,d[e]),e=1+e|0;d=[(new A).e("compilation",(new su).ac(a.Oa))];a=dc(new ec,Eu());e=0;for(f=d.length|0;e<f;)hc(a,d[e]),e=1+e|0;return(new su).ac(yc(b,a.Oa))}
+function Nma(a,b,d){b=b.Tg;var e=(new Au).od(!1),e=(new A).e("success",e);d=dt(d).ob();a=function(){return function(a){return(new zu).c(a.Lh())}}(a);var f=B().s;if(f===B().s)if(d===y())a=y();else{var f=d.$(),h=f=Ng(new Og,a(f),y());for(d=d.aa();d!==y();){var k=d.$(),k=Ng(new Og,a(k),y()),h=h.Ia=k;d=d.aa()}a=f}else{for(f=Mc(d,f);!d.z();)h=d.$(),f.Qa(a(h)),d=d.aa();a=f.Da()}a=(new Bu).G(a);e=[e,(new A).e("messages",a)];a=dc(new ec,Eu());d=0;for(f=e.length|0;d<f;)hc(a,e[d]),d=1+d|0;e=[(new A).e("compilation",
+(new su).ac(a.Oa))];a=dc(new ec,Eu());d=0;for(f=e.length|0;d<f;)hc(a,e[d]),d=1+d|0;return(new su).ac(yc(b,a.Oa))}dW.prototype.$classData=g({O2:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget$",{O2:1,d:1,l:1,i:1});var hra=void 0;function Lma(){hra||(hra=(new dW).b());return hra}function gW(){}gW.prototype=new l;gW.prototype.constructor=gW;c=gW.prototype;c.b=function(){return this};c.vc=function(a){return hW(a)};c.y=function(a){return hW(a)};
+function ira(a){if(null===a)throw(new ye).b();return a.Na?a.jb:ze(a,(new iW).b())}c.Fa=function(a){return hW(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!hW(a)};function hW(a){var b=(new we).b(),b=(b.Na?b.jb:ira(b)).Tf(a.Ss);a=a.it;if(Zp(a))return a=a.ha,Mma(Lma(),b,a);if(!aq(a))throw(new q).j(a);a=a.fc;return Nma(Lma(),b,a)}c.Ca=function(a){return pb(this,a)};c.$classData=g({Q2:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget$compiledPen2Json$",{Q2:1,d:1,yc:1,fa:1});
+var jra=void 0;function iW(){}iW.prototype=new l;iW.prototype.constructor=iW;c=iW.prototype;c.b=function(){return this};c.vc=function(a){return this.Tf(a)};c.y=function(a){return this.Tf(a)};c.Fa=function(a){return this.Tf(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Tf(a)};c.Ca=function(a){return pb(this,a)};
+c.Tf=function(a){var b=r(),d=PQ(),d=$u(d,a.ab),d=(new A).e("display",d),e=NQ(),e=$u(e,a.rl),e=(new A).e("interval",e),f=RQ(),f=$u(f,a.vl),f=(new A).e("mode",f),h=RQ(),h=$u(h,a.Bb),h=(new A).e("color",h),k=KQ(),k=$u(k,a.jm),k=(new A).e("inLegend",k),p=PQ(),p=$u(p,a.sg),p=(new A).e("setupCode",p),t=PQ();a=$u(t,a.tg);a=(new A).e("updateCode",a);t=(new J).j((PQ(),(new zu).c("pen")));b=I(b,(new w).f([d,e,f,h,k,p,a,(new A).e("type",t)]));d=Wg();a=new jW;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))};
+c.$classData=g({R2:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget$compiledPen2Json$writer$macro$22$2$",{R2:1,d:1,yc:1,fa:1});function kW(){}kW.prototype=new l;kW.prototype.constructor=kW;c=kW.prototype;c.vc=function(a){return this.bj(a)};c.b=function(){return this};c.y=function(a){return this.bj(a)};c.Fa=function(a){return this.bj(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+c.bj=function(a){var b=m(new n,function(){return function(a){jra||(jra=(new gW).b());return hW(a)}}(this)),d=r();return(new Bu).G(a.xa(b,d.s))};c.Ga=function(a){return!!this.bj(a)};c.Ca=function(a){return pb(this,a)};c.$classData=g({T2:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget$compiledPens2Json$",{T2:1,d:1,yc:1,fa:1});var kra=void 0;function PP(){this.ry=this.wy=null;this.a=this.ya=!1}PP.prototype=new l;PP.prototype.constructor=PP;
+PP.prototype.b=function(){this.ry=(new A).e(0,"");this.a=!0;return this};function gfa(a){if(!a.ya){var b=sq();if(0===(1&b.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Compiler.scala: 54");a.wy=b.bW;a.ya=!0}return a.wy}PP.prototype.$classData=g({W2:0},!1,"org.nlogo.tortoise.compiler.Compiler$$anon$2",{W2:1,d:1,Tja:1,Rja:1});function lW(){this.RG=null;this.a=!1}lW.prototype=new l;lW.prototype.constructor=lW;
+lW.prototype.b=function(){mW=this;var a=new VP,b=(nW(),"function(){}");nW();lra||(lra=(new oW).b());this.RG=Yma(a,!1,b,lra,(nW(),!0));this.a=!0;return this};function tq(){var a=nW();if(!a.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/CompilerLike.scala: 56");return a.RG}lW.prototype.$classData=g({X2:0},!1,"org.nlogo.tortoise.compiler.CompilerFlags$",{X2:1,d:1,l:1,i:1});var mW=void 0;function nW(){mW||(mW=(new lW).b());return mW}
+function pW(){this.vV=this.HW=0;this.JW=null;this.qW=0}pW.prototype=new l;pW.prototype.constructor=pW;pW.prototype.BD=function(){var a=this.vV,b=this.JW,d=B().s,b=L(b,d),d=this.HW,e=this.qW;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};function afa(a,b,d,e){var f=new pW;f.HW=a;f.vV=b;f.JW=d;f.qW=e;return f}pW.prototype.$classData=g({b3:0},!1,"org.nlogo.tortoise.compiler.CreateExtension$$anon$1",{b3:1,d:1,D_:1,C_:1});
+function Dr(){this.YS=null}Dr.prototype=new l;Dr.prototype.constructor=Dr;Dr.prototype.Wx=function(a){this.YS=a;return this};Dr.prototype.BD=function(){var a=D(),b=this.YS,d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};Dr.prototype.$classData=g({c3:0},!1,"org.nlogo.tortoise.compiler.CreateExtension$$anon$2",{c3:1,d:1,RH:1,C_:1});function qW(){}qW.prototype=new l;qW.prototype.constructor=qW;c=qW.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};
+c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"code",Gq(Hq()));if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"info",$p().jv());if(Zp(d)){var d=d.ha,e=FQ(Hq(),a,"widgets",cra());if(Zp(e)){var e=e.ha,f=FQ(Hq(),a,"turtleShapes",$p().PE());if(Zp(f)){var f=f.ha,h=FQ(Hq(),a,"linkShapes",$p().OE());if(Zp(h)){h=h.ha;a=FQ(Hq(),a,"version",$p().jv());if(Zp(a))return(new dq).j(mra(b,d,e,f,h,a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);
+return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({f3:0},!1,"org.nlogo.tortoise.compiler.ExportRequest$reader$macro$8$2$",{f3:1,d:1,ic:1,fa:1});function fs(){DT.call(this);this.GV=null}fs.prototype=new ET;fs.prototype.constructor=fs;fs.prototype.c=function(a){this.GV=a;DT.prototype.gc.call(this,null,null);return this};
+Object.defineProperty(fs.prototype,"message",{get:function(){return this.GV},configurable:!0});fs.prototype.$classData=g({o3:0},!1,"org.nlogo.tortoise.compiler.LiteralConverter$WrappedException",{o3:1,Lc:1,d:1,i:1});function Fs(){}Fs.prototype=new fna;Fs.prototype.constructor=Fs;Fs.prototype.b=function(){return this};
+Fs.prototype.Ig=function(a){var b=Uh().ce(a);if(!b.z()){var d=b.X().Eb;if(rW(b.X().fb)&&(r(),b=(new J).j(d),null!==b.U&&0===b.U.Mb(1)&&(b=b.U.W(0),xb(b)&&(b=Uh().ce(b),!b.z()&&(d=b.X().Eb,ut(b.X().fb)&&(r(),b=(new J).j(d),null!==b.U&&0===b.U.Mb(2)&&(d=b.U.W(0),b=b.U.W(1),zb(d)&&(d=Wh(Yh(),d),!d.z()&&(d=d.X().ja(),d=Uh().ce(d),!d.z()&&(d=d.X().fb,tr(d)&&xb(b)&&sW(b.se)))))))))))return b=gh(d).toLowerCase(),b=(new tW).c(b),(new Jb).Yf(b,a.za,a.sa)}return Ib(this,a)};
+Fs.prototype.$classData=g({z3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$NSum4Transformer$",{z3:1,B3:1,d:1,eh:1});var Es=void 0;function Ds(){}Ds.prototype=new fna;Ds.prototype.constructor=Ds;Ds.prototype.b=function(){return this};
+Ds.prototype.Ig=function(a){var b=Uh().ce(a);if(!b.z()){var d=b.X().Eb;if(rW(b.X().fb)&&(r(),b=(new J).j(d),null!==b.U&&0===b.U.Mb(1)&&(b=b.U.W(0),xb(b)&&(b=Uh().ce(b),!b.z()&&(d=b.X().Eb,ut(b.X().fb)&&(r(),b=(new J).j(d),null!==b.U&&0===b.U.Mb(2)&&(d=b.U.W(0),b=b.U.W(1),zb(d)&&(d=Wh(Yh(),d),!d.z()&&(d=d.X().ja(),d=Uh().ce(d),!d.z()&&(d=d.X().fb,tr(d)&&xb(b)&&uW(b.se)))))))))))return b=gh(d).toLowerCase(),b=(new vW).c(b),(new Jb).Yf(b,a.za,a.sa)}return Ib(this,a)};
+Ds.prototype.$classData=g({A3:0},!1,"org.nlogo.tortoise.compiler.Optimizer$NSumTransformer$",{A3:1,B3:1,d:1,eh:1});var Cs=void 0;function wW(){}wW.prototype=new l;wW.prototype.constructor=wW;c=wW.prototype;c.b=function(){return this};c.vc=function(a){return xW(a)};c.y=function(a){return xW(a)};c.Fa=function(a){return xW(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!xW(a)};c.Ca=function(a){return pb(this,a)};
+function xW(a){if(uq(a)){var b=(new zu).c(a.Nc),b=(new A).e("message",b),d=(new xu).qb(a.ie),d=(new A).e("start",d);a=(new xu).qb(a.hm);a=[b,d,(new A).e("end",a)];for(var b=dc(new ec,Eu()),d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;return(new su).ac(b.Oa)}a=(new zu).c(a.Lh());a=[(new A).e("message",a)];b=dc(new ec,Eu());d=0;for(e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;return(new su).ac(b.Oa)}c.$classData=g({f4:0},!1,"org.nlogo.tortoise.compiler.TortoiseFailure$compileError2Json$",{f4:1,d:1,yc:1,fa:1});
+var nra=void 0;function Zqa(){nra||(nra=(new wW).b());return nra}function yW(){}yW.prototype=new l;yW.prototype.constructor=yW;c=yW.prototype;c.b=function(){return this};c.vc=function(a){return zW(a)};c.y=function(a){return zW(a)};c.Fa=function(a){return zW(a)|0};
+function zW(a){if(a&&a.$classData&&a.$classData.n.AB){a=a.Wf;var b=Zqa();return nq(a,b).$e()}if(a&&a.$classData&&a.$classData.n.BB)return a=a.Wf,b=Zqa(),nq(a,b).$e();if(a&&a.$classData&&a.$classData.n.CB){a=(new zu).c(a.Sk);a=[(new A).e("message",a)];for(var b=dc(new ec,Eu()),d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;return(new su).ac(b.Oa)}throw(new q).j(a);}c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!zW(a)};c.Ca=function(a){return pb(this,a)};
+c.$classData=g({g4:0},!1,"org.nlogo.tortoise.compiler.TortoiseFailure$compileFailure2Json$",{g4:1,d:1,yc:1,fa:1});var ora=void 0;function bra(){ora||(ora=(new yW).b());return ora}function eW(){}eW.prototype=new l;eW.prototype.constructor=eW;c=eW.prototype;c.b=function(){return this};c.vc=function(a){return fW(a)};c.y=function(a){return fW(a)};c.Fa=function(a){return fW(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+function fW(a){if(Hga()===a)return a=y(),(new su).ac(Vg(Wg(),a));if(fu(a)){var b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new AW).b())}return BW(a)}if(a&&a.$classData&&a.$classData.n.NB){b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new CW).b())}return DW(a)}if(a&&a.$classData&&a.$classData.n.MB){b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();b.Na||ze(b,(new EW).b())}return FW(a)}if(gu(a)){b=(new we).b();if(!b.Na){if(null===b)throw(new ye).b();
+b.Na||ze(b,(new GW).b())}return HW(a)}throw(new q).j(a);}c.Ga=function(a){return!!fW(a)};c.Ca=function(a){return pb(this,a)};c.$classData=g({l4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$",{l4:1,d:1,yc:1,fa:1});var gra=void 0;function AW(){}AW.prototype=new l;AW.prototype.constructor=AW;c=AW.prototype;c.b=function(){return this};c.vc=function(a){return BW(a)};c.y=function(a){return BW(a)};c.Fa=function(a){return BW(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+c.Ga=function(a){return!!BW(a)};c.Ca=function(a){return pb(this,a)};function BW(a){var b=r(),d=PQ();a=$u(d,a.$r);a=(new A).e("compiledSource",a);d=(new J).j((PQ(),(new zu).c("sourceCompilation")));b=I(b,(new w).f([a,(new A).e("type",d)]));a=Wg();var d=new IW,e=r();return(new su).ac(Vg(a,b.jc(d,e.s)))}c.$classData=g({m4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$24$2$",{m4:1,d:1,yc:1,fa:1});function CW(){}CW.prototype=new l;CW.prototype.constructor=CW;
+c=CW.prototype;c.b=function(){return this};c.vc=function(a){return DW(a)};c.y=function(a){return DW(a)};c.Fa=function(a){return DW(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!DW(a)};c.Ca=function(a){return pb(this,a)};
+function DW(a){var b=r(),d=PQ(),d=$u(d,a.Jj),d=(new A).e("compiledSetupCode",d),e=PQ();a=$u(e,a.Kj);a=(new A).e("compiledUpdateCode",a);e=(new J).j((PQ(),(new zu).c("updateableCompilation")));b=I(b,(new w).f([d,a,(new A).e("type",e)]));d=Wg();a=new JW;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))}c.$classData=g({o4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$26$2$",{o4:1,d:1,yc:1,fa:1});function EW(){}EW.prototype=new l;EW.prototype.constructor=EW;c=EW.prototype;
+c.b=function(){return this};c.vc=function(a){return FW(a)};c.y=function(a){return FW(a)};c.Fa=function(a){return FW(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+function FW(a){var b=r(),d=PQ(),d=$u(d,a.Jj),d=(new A).e("compiledSetupCode",d),e=PQ(),e=$u(e,a.Kj),e=(new A).e("compiledUpdateCode",e);kra||(kra=(new kW).b());a=$u(kra,a.Yr);a=(new A).e("compiledPens",a);var f=(new J).j((PQ(),(new zu).c("plotWidgetCompilation"))),b=I(b,(new w).f([d,e,a,(new A).e("type",f)])),d=Wg();a=new KW;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))}c.Ga=function(a){return!!FW(a)};c.Ca=function(a){return pb(this,a)};
+c.$classData=g({q4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$28$2$",{q4:1,d:1,yc:1,fa:1});function GW(){}GW.prototype=new l;GW.prototype.constructor=GW;c=GW.prototype;c.b=function(){return this};c.vc=function(a){return HW(a)};c.y=function(a){return HW(a)};c.Fa=function(a){return HW(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!HW(a)};
+function HW(a){var b=r(),d=PQ(),d=$u(d,a.Xr),d=(new A).e("compiledMin",d),e=PQ(),e=$u(e,a.Wr),e=(new A).e("compiledMax",e),f=PQ();a=$u(f,a.as);a=(new A).e("compiledStep",a);f=(new J).j((PQ(),(new zu).c("sliderCompilation")));b=I(b,(new w).f([d,e,a,(new A).e("type",f)]));d=Wg();a=new LW;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))}c.Ca=function(a){return pb(this,a)};c.$classData=g({s4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$30$2$",{s4:1,d:1,yc:1,fa:1});
+function mu(){}mu.prototype=new l;mu.prototype.constructor=mu;c=mu.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"color",MW());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"filled",xQ());if(Zp(d)){var d=!!d.ha,e=FQ(Hq(),a,"marked",xQ());if(Zp(e)){var e=!!e.ha,f=FQ(Hq(),a,"x1",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"y1",AQ());if(Zp(h)){var h=h.ha|0,k=FQ(Hq(),a,"x2",AQ());if(Zp(k)){k=k.ha|0;a=FQ(Hq(),a,"y2",AQ());if(Zp(a))return(new dq).j((new NW).OD(b,d,e,f,h,k,a.ha|0));if(!aq(a))throw(new q).j(a);return a}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);
+return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({E4:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$reader$macro$39$2$",{E4:1,d:1,ic:1,fa:1});function nu(){}nu.prototype=new l;nu.prototype.constructor=nu;c=nu.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"color",MW());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"filled",xQ());if(Zp(d)){var d=!!d.ha,e=FQ(Hq(),a,"marked",xQ());if(Zp(e)){var e=!!e.ha,f=FQ(Hq(),a,"x",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"y",AQ());if(Zp(h)){h=h.ha|0;a=FQ(Hq(),a,"diam",AQ());if(Zp(a))return(new dq).j((new OW).ND(b,d,e,f,h,a.ha|0));if(!aq(a))throw(new q).j(a);return a}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);
+return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({F4:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$reader$macro$47$2$",{F4:1,d:1,ic:1,fa:1});function ou(){}ou.prototype=new l;ou.prototype.constructor=ou;c=ou.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"color",MW());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"filled",xQ());if(Zp(d)){var d=!!d.ha,e=FQ(Hq(),a,"marked",xQ());if(Zp(e)){var e=!!e.ha,f=FQ(Hq(),a,"xmin",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"ymin",AQ());if(Zp(h)){var h=h.ha|0,k=FQ(Hq(),a,"xmax",AQ());if(Zp(k)){k=k.ha|0;a=FQ(Hq(),a,"ymax",AQ());if(Zp(a))return(new dq).j((new PW).OD(b,d,e,f,h,k,a.ha|0));if(!aq(a))throw(new q).j(a);return a}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);
+return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({G4:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$reader$macro$56$2$",{G4:1,d:1,ic:1,fa:1});function pu(){}pu.prototype=new l;pu.prototype.constructor=pu;c=pu.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"color",MW());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"filled",xQ());if(Zp(d)){var d=!!d.ha,e=FQ(Hq(),a,"marked",xQ());if(Zp(e)){var e=!!e.ha,f=FQ(Hq(),a,"xcors",pra());if(Zp(f)){f=f.ha;a=FQ(Hq(),a,"ycors",pra());if(Zp(a))return(new dq).j(qra(b,d,e,f,a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};
+c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({H4:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$reader$macro$63$2$",{H4:1,d:1,ic:1,fa:1});function QW(){}QW.prototype=new l;QW.prototype.constructor=QW;c=QW.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};
+c.Ra=function(a){var b=(new Sb).c("rgba\\((\\d+), (\\d+), (\\d+), ([.0-9]+)\\)"),d=y(),b=(new Tb).$o(b.R,d);if(Hu(a)&&(b=ng(b,a.Nc),b.z()?d=!1:null!==b.X()?(d=b.X(),d=0===og(d,4)):d=!1,d)){a=b.X().W(0);var d=b.X().W(1),e=b.X().W(2),b=b.X().W(3);pq();try{var f=(new Sb).c(a),h=vi(ti(),f.R,10),k=(new Sb).c(d),p=vi(ti(),k.R,10),t=(new Sb).c(e),x=vi(ti(),t.R,10),E=(new Sb).c(b),S=Ih(),U=(new dq).j(nca(new Fi,h,p,x,Na(255*Hh(S,E.R))))}catch(ga){if(f=Un(vg(),ga),null!==f){h=nw(ow(),f);if(h.z())throw ug(vg(),
+f);f=h.X();U=(new bq).j(f)}else throw ga;}if(Zp(U))return U;if(aq(U))return f=U.fc,aja||(aja=(new hA).b()),h=lT(),null===lT().ME&&null===lT().ME&&(lT().ME=(new iT).Gu(h)),lT(),f=u((new v).G((new w).f(["problem deserializing RGBA color value: ",""])),(new w).f([f.Lh()])),(new bq).j($ia(f));throw(new q).j(U);}Aq();f=u((new v).G((new w).f(["could not convert "," to RGBA color"])),(new w).f([a]));return Bq(pq(),f)};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};
+c.$classData=g({I4:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$tortoiseJs2RgbColor$",{I4:1,d:1,ic:1,fa:1});var rra=void 0;function MW(){rra||(rra=(new QW).b());return rra}function RW(){}RW.prototype=new l;RW.prototype.constructor=RW;function SW(){}c=SW.prototype=RW.prototype;c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+c.Ra=function(a){if(Ju(a)){a=a.Oa;Hoa();var b=m(new n,function(a){return function(b){return a.Do(b)}}(this)),d=r();a=a.xa(b,d.s).ob();b=Kq().fy;a=Goa(a,b);sra||(sra=(new TW).b());pq();b=eq();b=(new Mq).tq(b);b=Tt(b);return Foa(a,yoa(b))}Aq();a=this.gp(a);return Bq(pq(),a)};c.Ga=function(a){return!!this.Ra(a)};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};function UW(){this.ga=this.dG=null}UW.prototype=new l;UW.prototype.constructor=UW;function tra(){}
+c=tra.prototype=UW.prototype;c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ra=function(a){if(Fu(a))return this.yT(a.hi);if(Gu(a))return this.xT(a.em);a=oa(a);var b=this.dG.Gd();return Uga(a,b)};c.Ga=function(a){return!!this.Ra(a)};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};function yQ(){}yQ.prototype=new l;yQ.prototype.constructor=yQ;c=yQ.prototype;c.y=function(a){return this.Ra(a)};
+c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};c.Ra=function(a){if(Iu(a))return a=a.Zl,Aq(),Jq().y(a);a=oa(a);return Uga(a,pa(Ya))};c.Yj=function(){return this};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({T4:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$boolean2TortoiseJs$",{T4:1,d:1,ic:1,fa:1});function GQ(){}GQ.prototype=new l;GQ.prototype.constructor=GQ;c=GQ.prototype;
+c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};c.Ra=function(a){if(Hu(a))return a=a.Nc,Aq(),Jq().y(a);Aq();a=u((new v).G((new w).f(["could not convert "," to String"])),(new w).f([a]));return Bq(pq(),a)};c.Yj=function(){return this};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};
+c.$classData=g({W4:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$tortoiseJs2String$",{W4:1,d:1,ic:1,fa:1});function EQ(){}EQ.prototype=new l;EQ.prototype.constructor=EQ;c=EQ.prototype;c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};
+c.Ra=function(a){if(Ju(a))return Aq(),Jq().y(a);Aq();a=u((new v).G((new w).f(["Expected Javascript Array, found ",""])),(new w).f([a]));return Bq(pq(),a)};c.Yj=function(){return this};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({X4:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$tortoiseJsAsJsArray$",{X4:1,d:1,ic:1,fa:1});function zQ(){}zQ.prototype=new l;zQ.prototype.constructor=zQ;c=zQ.prototype;c.y=function(a){return this.Ra(a)};
+c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};c.Ra=function(a){if(Mu(a))return Aq(),Jq().y(a);Aq();a=u((new v).G((new w).f(["Expected Javascript Object, found ",""])),(new w).f([a]));return Bq(pq(),a)};c.Yj=function(){return this};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};
+c.$classData=g({Y4:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$tortoiseJsAsJsObject$",{Y4:1,d:1,ic:1,fa:1});function VW(){this.ga=this.YT=null}VW.prototype=new l;VW.prototype.constructor=VW;function ura(){}c=ura.prototype=VW.prototype;c.vc=function(a){return WW(this,a)};c.y=function(a){return WW(this,a)};c.Fa=function(a){return WW(this,a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!WW(this,a)};c.Ca=function(a){return pb(this,a)};
+function WW(a,b){a=a.YT;var d=B();return(new Bu).G(b.xa(a,d.s))}c.JU=function(a,b){this.YT=b;if(null===a)throw ug(vg(),null);this.ga=a;return this};function MQ(){}MQ.prototype=new l;MQ.prototype.constructor=MQ;c=MQ.prototype;c.vc=function(a){return(new Au).od(!!a)};c.y=function(a){return(new Au).od(!!a)};c.Fa=function(a){return(new Au).od(!!a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!(new Au).od(!!a)};c.rq=function(){return this};c.Ca=function(a){return pb(this,a)};
+c.$classData=g({a5:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityWriterImplicits$bool2TortoiseJs$",{a5:1,d:1,yc:1,fa:1});function OQ(){}OQ.prototype=new l;OQ.prototype.constructor=OQ;c=OQ.prototype;c.vc=function(a){return(new yu).Xj(+a)};c.y=function(a){return(new yu).Xj(+a)};c.Fa=function(a){return(new yu).Xj(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!(new yu).Xj(a)};c.rq=function(){return this};c.Ca=function(a){return pb(this,a)};
+c.$classData=g({b5:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityWriterImplicits$double2TortoiseJs$",{b5:1,d:1,yc:1,fa:1});function SQ(){}SQ.prototype=new l;SQ.prototype.constructor=SQ;c=SQ.prototype;c.vc=function(a){return(new xu).qb(a|0)};c.y=function(a){return(new xu).qb(a|0)};c.Fa=function(a){return(new xu).qb(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!(new xu).qb(a)};c.rq=function(){return this};c.Ca=function(a){return pb(this,a)};
+c.$classData=g({c5:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityWriterImplicits$int2TortoiseJs$",{c5:1,d:1,yc:1,fa:1});function QQ(){}QQ.prototype=new l;QQ.prototype.constructor=QQ;c=QQ.prototype;c.vc=function(a){return(new zu).c(a)};c.y=function(a){return(new zu).c(a)};c.Fa=function(a){return(new zu).c(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!(new zu).c(a)};c.rq=function(){return this};c.Ca=function(a){return pb(this,a)};
+c.$classData=g({d5:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityWriterImplicits$string2TortoiseJs$",{d5:1,d:1,yc:1,fa:1});function fv(){}fv.prototype=new l;fv.prototype.constructor=fv;c=fv.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"name",Gq(Hq()));if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"rotate",xQ());if(Zp(d)){var d=!!d.ha,e=FQ(Hq(),a,"editableColorIndex",AQ());if(Zp(e)){e=e.ha|0;Hq();vra||(vra=(new XW).b());a=FQ(0,a,"elements",vra);if(Zp(a))return(new dq).j((new YW).fE(b,d,e,a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};
+c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({l5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$reader$macro$69$2$",{l5:1,d:1,ic:1,fa:1});function ZW(){}ZW.prototype=new l;ZW.prototype.constructor=ZW;c=ZW.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"name",Gq(Hq()));if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"curviness",CQ());if(Zp(d)){d=+d.ha;Hq();wra||(wra=(new $W).b());var e=FQ(0,a,"lines",wra);if(Zp(e)){e=e.ha;Hq();xra||(xra=(new aX).b());a=FQ(0,a,"direction-indicator",xra);if(Zp(a))return(new dq).j(yra(b,d,e,a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};
+c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({m5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$reader$macro$75$2$",{m5:1,d:1,ic:1,fa:1});function bX(){}bX.prototype=new l;bX.prototype.constructor=bX;c=bX.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"x-offset",CQ());if(Zp(b)){var b=+b.ha,d=FQ(Hq(),a,"is-visible",xQ());if(Zp(d)){d=!!d.ha;Hq();zra||(zra=(new cX).b());a=FQ(0,a,"dash-pattern",zra);if(Zp(a))return(new dq).j((new dX).yu(b,d,a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};
+c.$classData=g({n5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$reader$macro$80$2$",{n5:1,d:1,ic:1,fa:1});function aX(){}aX.prototype=new l;aX.prototype.constructor=aX;c=aX.prototype;c.b=function(){return this};c.y=function(a){return ev(jv(),a)};c.Fa=function(a){return ev(jv(),a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!ev(jv(),a)};c.Ra=function(a){return ev(jv(),a)};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};
+c.$classData=g({r5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$tortoiseJs2VectorShape$",{r5:1,d:1,ic:1,fa:1});var xra=void 0;function nv(){}nv.prototype=new l;nv.prototype.constructor=nv;c=nv.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ra=function(a){return this.Pa(a)};c.Ga=function(a){return!!this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"source",eX());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"left",AQ());if(Zp(d)){var d=d.ha|0,e=FQ(Hq(),a,"top",AQ());if(Zp(e)){var e=e.ha|0,f=FQ(Hq(),a,"right",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"bottom",AQ());if(Zp(h)){var h=h.ha|0,k=FQ(Hq(),a,"display",eX());if(Zp(k)){var k=k.ha,p=FQ(Hq(),a,"forever",xQ());if(Zp(p)){p=!!p.ha;Hq();Ara||(Ara=(new fX).b());var t=FQ(0,a,"buttonKind",Ara);if(Zp(t)){t=t.ha;Hq();Bra||(Bra=(new gX).b());var x=FQ(0,a,"actionKey",Bra);if(Zp(x)){x=
+x.ha;a=FQ(Hq(),a,"disableUntilTicksStart",xQ());if(Zp(a))return(new dq).j(cqa(b,d,e,f,h,k,p,t,x,!!a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(x))throw(new q).j(x);return x}if(!aq(t))throw(new q).j(t);return t}if(!aq(p))throw(new q).j(p);return p}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};
+c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({w5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$110$2$",{w5:1,d:1,ic:1,fa:1});function ov(){}ov.prototype=new l;ov.prototype.constructor=ov;c=ov.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"variable",eX());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"left",AQ());if(Zp(d)){var d=d.ha|0,e=FQ(Hq(),a,"top",AQ());if(Zp(e)){var e=e.ha|0,f=FQ(Hq(),a,"right",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"bottom",AQ());if(Zp(h)){var h=h.ha|0,k=FQ(Hq(),a,"display",eX());if(Zp(k)){k=k.ha;Hq();Cra||(Cra=(new hX).b());var p=FQ(0,a,"choices",Cra);if(Zp(p)){p=p.ha;a=FQ(Hq(),a,"currentChoice",AQ());if(Zp(a))return(new dq).j(hqa(new mV,b,d,e,f,h,k,p,a.ha|0));if(!aq(a))throw(new q).j(a);
+return a}if(!aq(p))throw(new q).j(p);return p}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({x5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$120$2$",{x5:1,d:1,ic:1,fa:1});function pv(){}pv.prototype=new l;
+pv.prototype.constructor=pv;c=pv.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"variable",eX());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"left",AQ());if(Zp(d)){var d=d.ha|0,e=FQ(Hq(),a,"top",AQ());if(Zp(e)){var e=e.ha|0,f=FQ(Hq(),a,"right",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"bottom",AQ());if(Zp(h)){h=h.ha|0;Hq();iX||(iX=(new jX).b());a=FQ(0,a,"boxedValue",iX);if(Zp(a))return(new dq).j(oqa(b,d,e,f,h,a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);
+return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({y5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$128$2$",{y5:1,d:1,ic:1,fa:1});function qv(){}qv.prototype=new l;qv.prototype.constructor=qv;c=qv.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"source",eX());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"left",AQ());if(Zp(d)){var d=d.ha|0,e=FQ(Hq(),a,"top",AQ());if(Zp(e)){var e=e.ha|0,f=FQ(Hq(),a,"right",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"bottom",AQ());if(Zp(h)){var h=h.ha|0,k=FQ(Hq(),a,"display",eX());if(Zp(k)){var k=k.ha,p=FQ(Hq(),a,"precision",AQ());if(Zp(p)){p=p.ha|0;a=FQ(Hq(),a,"fontSize",AQ());if(Zp(a))return(new dq).j(qqa(b,d,e,f,h,k,p,a.ha|0));if(!aq(a))throw(new q).j(a);return a}if(!aq(p))throw(new q).j(p);
+return p}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({z5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$138$2$",{z5:1,d:1,ic:1,fa:1});function rv(){}rv.prototype=new l;rv.prototype.constructor=rv;c=rv.prototype;
+c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"left",AQ());if(Zp(b)){var b=b.ha|0,d=FQ(Hq(),a,"top",AQ());if(Zp(d)){var d=d.ha|0,e=FQ(Hq(),a,"right",AQ());if(Zp(e)){var e=e.ha|0,f=FQ(Hq(),a,"bottom",AQ());if(Zp(f)){f=f.ha|0;a=FQ(Hq(),a,"fontSize",AQ());if(Zp(a))return(new dq).j(sqa(b,d,e,f,a.ha|0));if(!aq(a))throw(new q).j(a);return a}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};
+c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({A5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$145$2$",{A5:1,d:1,ic:1,fa:1});function sv(){}sv.prototype=new l;sv.prototype.constructor=sv;c=sv.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ra=function(a){return this.Pa(a)};c.Ga=function(a){return!!this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"display",eX());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"left",AQ());if(Zp(d)){var d=d.ha|0,e=FQ(Hq(),a,"top",AQ());if(Zp(e)){var e=e.ha|0,f=FQ(Hq(),a,"right",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"bottom",AQ());if(Zp(h)){var h=h.ha|0,k=FQ(Hq(),a,"xAxis",eX());if(Zp(k)){var k=k.ha,p=FQ(Hq(),a,"yAxis",eX());if(Zp(p)){var p=p.ha,t=FQ(Hq(),a,"xmin",CQ());if(Zp(t)){var t=+t.ha,x=FQ(Hq(),a,"xmax",CQ());if(Zp(x)){var x=+x.ha,E=FQ(Hq(),a,"ymin",CQ());if(Zp(E)){var E=+E.ha,S=
+FQ(Hq(),a,"ymax",CQ());if(Zp(S)){var S=+S.ha,U=FQ(Hq(),a,"autoPlotOn",xQ());if(Zp(U)){var U=!!U.ha,ga=FQ(Hq(),a,"legendOn",xQ());if(Zp(ga)){var ga=!!ga.ha,ma=FQ(Hq(),a,"setupCode",kX());if(Zp(ma)){var ma=ma.ha,va=FQ(Hq(),a,"updateCode",kX());if(Zp(va)){va=va.ha;Hq();Dra||(Dra=(new lX).b());a=FQ(0,a,"pens",Dra);if(Zp(a))return(new dq).j(Aqa(new vV,b,d,e,f,h,k,p,t,x,E,S,U,ga,ma,va,a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(va))throw(new q).j(va);return va}if(!aq(ma))throw(new q).j(ma);return ma}if(!aq(ga))throw(new q).j(ga);
+return ga}if(!aq(U))throw(new q).j(U);return U}if(!aq(S))throw(new q).j(S);return S}if(!aq(E))throw(new q).j(E);return E}if(!aq(x))throw(new q).j(x);return x}if(!aq(t))throw(new q).j(t);return t}if(!aq(p))throw(new q).j(p);return p}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};
+c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({B5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$163$2$",{B5:1,d:1,ic:1,fa:1});function tv(){}tv.prototype=new l;tv.prototype.constructor=tv;c=tv.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ra=function(a){return this.Pa(a)};c.Ga=function(a){return!!this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"variable",eX());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"left",AQ());if(Zp(d)){var d=d.ha|0,e=FQ(Hq(),a,"top",AQ());if(Zp(e)){var e=e.ha|0,f=FQ(Hq(),a,"right",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"bottom",AQ());if(Zp(h)){var h=h.ha|0,k=FQ(Hq(),a,"display",eX());if(Zp(k)){var k=k.ha,p=FQ(Hq(),a,"min",kX());if(Zp(p)){var p=p.ha,t=FQ(Hq(),a,"max",kX());if(Zp(t)){var t=t.ha,x=FQ(Hq(),a,"default",CQ());if(Zp(x)){var x=+x.ha,E=FQ(Hq(),a,"step",kX());if(Zp(E)){var E=E.ha,S=
+FQ(Hq(),a,"units",eX());if(Zp(S)){S=S.ha;Hq();Era||(Era=(new mX).b());a=FQ(0,a,"direction",Era);if(Zp(a))return(new dq).j(Bqa(b,d,e,f,h,k,p,t,x,E,S,a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(S))throw(new q).j(S);return S}if(!aq(E))throw(new q).j(E);return E}if(!aq(x))throw(new q).j(x);return x}if(!aq(t))throw(new q).j(t);return t}if(!aq(p))throw(new q).j(p);return p}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);
+return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({C5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$177$2$",{C5:1,d:1,ic:1,fa:1});function uv(){}uv.prototype=new l;uv.prototype.constructor=uv;c=uv.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};
+c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"variable",eX());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"left",AQ());if(Zp(d)){var d=d.ha|0,e=FQ(Hq(),a,"top",AQ());if(Zp(e)){var e=e.ha|0,f=FQ(Hq(),a,"right",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"bottom",AQ());if(Zp(h)){var h=h.ha|0,k=FQ(Hq(),a,"display",eX());if(Zp(k)){k=k.ha;a=FQ(Hq(),a,"on",xQ());if(Zp(a))return(new dq).j(Fqa(b,d,e,f,h,k,!!a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);
+return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({D5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$186$2$",{D5:1,d:1,ic:1,fa:1});function vv(){}vv.prototype=new l;vv.prototype.constructor=vv;c=vv.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"display",eX());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"left",AQ());if(Zp(d)){var d=d.ha|0,e=FQ(Hq(),a,"top",AQ());if(Zp(e)){var e=e.ha|0,f=FQ(Hq(),a,"right",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"bottom",AQ());if(Zp(h)){var h=h.ha|0,k=FQ(Hq(),a,"fontSize",AQ());if(Zp(k)){var k=k.ha|0,p=FQ(Hq(),a,"color",CQ());if(Zp(p)){p=+p.ha;a=FQ(Hq(),a,"transparent",xQ());if(Zp(a))return(new dq).j(Hqa(b,d,e,f,h,k,p,!!a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(p))throw(new q).j(p);
+return p}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({E5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$196$2$",{E5:1,d:1,ic:1,fa:1});function wv(){}wv.prototype=new l;wv.prototype.constructor=wv;c=wv.prototype;
+c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ra=function(a){return this.Pa(a)};c.Ga=function(a){return!!this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"left",AQ());if(Zp(b)){var b=b.ha|0,d=FQ(Hq(),a,"top",AQ());if(Zp(d)){var d=d.ha|0,e=FQ(Hq(),a,"right",AQ());if(Zp(e)){var e=e.ha|0,f=FQ(Hq(),a,"bottom",AQ());if(Zp(f)){f=f.ha|0;Hq();Fra||(Fra=(new nX).b());var h=FQ(0,a,"dimensions",Fra);if(Zp(h)){var h=h.ha,k=FQ(Hq(),a,"fontSize",AQ());if(Zp(k)){k=k.ha|0;Hq();Gra||(Gra=(new oX).b());var p=FQ(0,a,"updateMode",Gra);if(Zp(p)){var p=p.ha,t=FQ(Hq(),a,"showTickCounter",xQ());if(Zp(t)){var t=!!t.ha,x=FQ(Hq(),a,"tickCounterLabel",
+eX());if(Zp(x)){x=x.ha;a=FQ(Hq(),a,"frameRate",CQ());if(Zp(a))return(new dq).j(Jqa(new zV,b,d,e,f,h,k,p,t,x,+a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(x))throw(new q).j(x);return x}if(!aq(t))throw(new q).j(t);return t}if(!aq(p))throw(new q).j(p);return p}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};
+c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({F5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$reader$macro$208$2$",{F5:1,d:1,ic:1,fa:1});function fX(){}fX.prototype=new l;fX.prototype.constructor=fX;c=fX.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};
+c.Ra=function(a){var b=!1,d=null;if(Hu(a)&&(b=!0,d=a,"OBSERVER"===d.Nc.toUpperCase()))return Aq(),a=Ni(),Jq().y(a);if(b&&"TURTLE"===d.Nc.toUpperCase())return Aq(),a=Oi(),Jq().y(a);if(b&&"PATCH"===d.Nc.toUpperCase())return Aq(),a=Pi(),Jq().y(a);if(b&&"LINK"===d.Nc.toUpperCase())return Aq(),a=Qi(),Jq().y(a);Aq();a=u((new v).G((new w).f(["Agent kind can only be 'Observer', 'Turtle', 'Patch', or 'Link' but was ",""])),(new w).f([a]));return Bq(pq(),a)};c.Ca=function(a){return pb(this,a)};
+c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({G5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2AgentKind$",{G5:1,d:1,ic:1,fa:1});var Ara=void 0;function jX(){this.OY=null;this.a=!1}jX.prototype=new l;jX.prototype.constructor=jX;c=jX.prototype;
+c.b=function(){iX=this;var a=[mqa(),lqa(),kqa()];if(0===(a.length|0))a=lh();else{for(var b=mh(new nh,lh()),d=0,e=a.length|0;d<e;)oh(b,a[d]),d=1+d|0;a=b.Oa}b=m(new n,function(){return function(a){var b=a.Qj();return(new A).e(b,a)}}(this));d=ol();d=pl(d);this.OY=Cr(a,b,d).we(Je().Qk);this.a=!0;return this};c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};
+c.Ra=function(a){a=Yr(a.Tg);var b=m(new n,function(){return function(a){return a.ja()}}(this)),d=Hra();a=ep(a,b,d);r();b=(new J).j(a);if(null!==b.U&&0===b.U.Mb(2)&&(d=b.U.W(0),b=b.U.W(1),null!==d)){var e=d.na();if("type"===d.ja()&&Hu(e)&&(d=e.Nc,null!==b&&(e=b.na(),"value"===b.ja()&&Fu(e)&&(b=e.hi,d===pV().Qj()))))return Aq(),a=qV(new nV,b,pV()),Jq().y(a)}r();b=(new J).j(a);if(null!==b.U&&0===b.U.Mb(2)&&(d=b.U.W(0),b=b.U.W(1),null!==d&&(e=d.na(),"type"===d.ja()&&Hu(e)&&(d=e.Nc,null!==b&&(e=b.na(),
+"value"===b.ja()&&Fu(e)&&(b=e.hi,d===oV().Qj()))))))return Aq(),a=qV(new nV,b,oV()),Jq().y(a);r();b=(new J).j(a);if(null!==b.U&&0===b.U.Mb(2)&&(d=b.U.W(0),b=b.U.W(1),null!==d&&(e=d.na(),"type"===d.ja()&&Hu(e)&&(d=e.Nc,null!==b&&(e=b.na(),"value"===b.ja()&&Gu(e)&&(b=e.em,d===oV().Qj()))))))return Aq(),a=qV(new nV,b,oV()),Jq().y(a);r();b=(new J).j(a);if(null!==b.U&&0===b.U.Mb(3)&&(d=b.U.W(0),e=b.U.W(1),b=b.U.W(2),null!==d)){var f=d.na();if("multiline"===d.ja()&&Iu(f)&&(d=f.Zl,null!==e&&(f=e.na(),"type"===
+e.ja()&&Hu(f)&&(e=f.Nc,null!==b&&(f=b.na(),"value"===b.ja()&&Hu(f)))))){a=f.Nc;Aq();b=new rV;if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/WidgetRead.scala: 110");a=nqa(b,a,this.OY.y(e),d);return Jq().y(a)}}Aq();a=u((new v).G((new w).f(["Invalid input box: ",""])),(new w).f([a]));return Bq(pq(),a)};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};
+c.$classData=g({H5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2BoxedValue$",{H5:1,d:1,ic:1,fa:1});var iX=void 0;function hX(){}hX.prototype=new l;hX.prototype.constructor=hX;c=hX.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+function Ira(a,b){if(Gu(b))return a=b.em,Aq(),a=(new Cg).hE(a),Jq().y(a);if(Fu(b))return a=b.hi,Aq(),a=(new Cg).hE(a),Jq().y(a);if(Hu(b))return a=b.Nc,Aq(),a=(new Bg).c(a),Jq().y(a);if(Iu(b))return a=b.Zl,Aq(),a=(new Dg).Hu(a),Jq().y(a);if(Ju(b))return a=Jra(a,b.Oa),Kra||(Kra=(new pX).b()),Lra(a,Kra);Aq();a=u((new v).G((new w).f(["Could not convert "," to a chooseable value"])),(new w).f([b]));return Bq(pq(),a)}
+function Jra(a,b){Aq();var d=Rpa();return b.Gb(Jq().y(d),sb(new tb,function(a){return function(b,d){if(Zp(b)){b=b.ha;if(Gu(d))return d=d.em,Aq(),b=Bo(b,d),Jq().y(b);if(Fu(d))return d=d.hi,Aq(),b=Bo(b,d),Jq().y(b);if(Iu(d))return d=d.Zl,Aq(),b=Bo(b,d),Jq().y(b);if(Hu(d))return d=d.Nc,Aq(),b=Bo(b,d),Jq().y(b);if(Ju(d)){d=Jra(a,d.Oa);if(Zp(d))return(new dq).j(Bo(b,d.ha));if(!aq(d))throw(new q).j(d);return d}Aq();b=u((new v).G((new w).f(["could not convert "," to a chooseable value"])),(new w).f([d]));
+return Bq(pq(),b)}if(aq(b))return b;throw(new q).j(b);}}(a)))}c.Ga=function(a){return!!this.Ra(a)};
+c.Ra=function(a){if(Ju(a)){a=a.Oa;var b=m(new n,function(a){return function(b){return Ira(a,b)}}(this)),d=r();a=a.xa(b,d.s);Aq();b=y();return a.Gb(Jq().y(b),sb(new tb,function(){return function(a,b){if(Zp(a)){a=a.ha;if(Zp(b)){b=b.ha;var d=B().s;return(new dq).j(Di(a,b,d))}if(!aq(b))throw(new q).j(b);return b}if(aq(a))return a;throw(new q).j(a);}}(this)))}Aq();a=u((new v).G((new w).f(["choices must be a list of chooseable values - found ",""])),(new w).f([a]));return Bq(pq(),a)};
+c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({I5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2Chooseable$",{I5:1,d:1,ic:1,fa:1});var Cra=void 0;function mX(){}mX.prototype=new l;mX.prototype.constructor=mX;c=mX.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};
+c.Ra=function(a){var b=!1,d=null;if(Hu(a)&&(b=!0,d=a,"HORIZONTAL"===d.Nc.toUpperCase()))return Aq(),a=Dqa(),Jq().y(a);if(b&&"VERTICAL"===d.Nc.toUpperCase())return Aq(),a=Eqa(),Jq().y(a);Aq();a=u((new v).G((new w).f(["Slider direction can only be 'Horizontal' or 'Vertical' but was ",""])),(new w).f([a]));return Bq(pq(),a)};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};
+c.$classData=g({J5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2Direction$",{J5:1,d:1,ic:1,fa:1});var Era=void 0;function qX(){}qX.prototype=new l;qX.prototype.constructor=qX;c=qX.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};
+c.Ra=function(a){if(uu()===a)return Aq(),Jq().y("NIL");if(Hu(a))return a=a.Nc,Aq(),Jq().y(a);Aq();a=u((new v).G((new w).f(["could not convert "," to String"])),(new w).f([Iq(oa(a))]));return Bq(pq(),a)};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({K5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2NilString$",{K5:1,d:1,ic:1,fa:1});var Mra=void 0;function kX(){Mra||(Mra=(new qX).b());return Mra}function gX(){}gX.prototype=new l;
+gX.prototype.constructor=gX;c=gX.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};c.Ra=function(a){var b=!1,d=null;if(uu()===a||Hu(a)&&(b=!0,d=a,"NIL"===d.Nc))return Aq(),a=F(),Jq().y(a);if(b&&(b=d.Nc,1===(b.length|0)))return Aq(),a=(new Sb).c(b),a=(new J).j(Uj(a)),Jq().y(a);Aq();a=od(a);return Bq(pq(),a)};c.Ca=function(a){return pb(this,a)};
+c.Dc=function(a,b){if(b.z())a=F();else{b=b.X();b=this.Ra(b);if(Zp(b))a=b;else{if(!aq(b))throw(new q).j(b);b=b.fc;eq();a=u((new v).G((new w).f([""," is an invalid value for ",""])),(new w).f([b,a]));b=[];var d=fq().$d,e=b.length|0;a:for(;;){if(0!==e){d=(new jq).Sb(b[-1+e|0],d);e=-1+e|0;continue a}break}a=(new bq).j((new kq).Sb(a,d))}a=(new J).j(a)}return a.z()?(Aq(),a=F(),Jq().y(a)):a.X()};
+c.$classData=g({L5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2OptionChar$",{L5:1,d:1,ic:1,fa:1});var Bra=void 0;function rX(){}rX.prototype=new l;rX.prototype.constructor=rX;c=rX.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};
+c.Ra=function(a){var b=!1,d=null;if(uu()===a||Hu(a)&&(b=!0,d=a,"NIL"===d.Nc))return Aq(),a=F(),Jq().y(a);if(b)return a=d.Nc,Aq(),a=(new J).j(a),Jq().y(a);Aq();a=od(a);return Bq(pq(),a)};c.Ca=function(a){return pb(this,a)};
+c.Dc=function(a,b){if(b.z())a=F();else{b=b.X();b=this.Ra(b);if(Zp(b))a=b;else{if(!aq(b))throw(new q).j(b);b=b.fc;eq();a=u((new v).G((new w).f([""," is an invalid value for ",""])),(new w).f([b,a]));b=[];var d=fq().$d,e=b.length|0;a:for(;;){if(0!==e){d=(new jq).Sb(b[-1+e|0],d);e=-1+e|0;continue a}break}a=(new bq).j((new kq).Sb(a,d))}a=(new J).j(a)}return a.z()?(Aq(),a=F(),Jq().y(a)):a.X()};
+c.$classData=g({M5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2OptionString$",{M5:1,d:1,ic:1,fa:1});var Nra=void 0;function eX(){Nra||(Nra=(new rX).b());return Nra}function lX(){}lX.prototype=new l;lX.prototype.constructor=lX;c=lX.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};function Ora(a){if(null===a)throw(new ye).b();return a.Na?a.jb:ze(a,(new sX).b())}c.Ga=function(a){return!!this.Ra(a)};
+c.Ra=function(a){if(Ju(a)){a=a.Oa;Aq();var b=y();return a.Gb(Jq().y(b),sb(new tb,function(){return function(a,b){if(Mu(b)){if(Zp(a)){a=a.ha;var f=(new we).b();b=(f.Na?f.jb:Ora(f)).Pa(b);if(Zp(b))return b=b.ha,f=B().s,(new dq).j(Di(a,b,f));if(!aq(b))throw(new q).j(b);return b}if(aq(a))return a;throw(new q).j(a);}return Pra()}}(this)))}return Pra()};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};
+function Pra(){Aq();var a=u((new v).G((new w).f(["Must supply a list of pens"])),y());return Bq(pq(),a)}c.$classData=g({N5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2PenList$",{N5:1,d:1,ic:1,fa:1});var Dra=void 0;function sX(){}sX.prototype=new l;sX.prototype.constructor=sX;c=sX.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"display",kX());if(Zp(b)){var b=b.ha,d=FQ(Hq(),a,"interval",CQ());if(Zp(d)){var d=+d.ha,e=FQ(Hq(),a,"mode",AQ());if(Zp(e)){var e=e.ha|0,f=FQ(Hq(),a,"color",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"inLegend",xQ());if(Zp(h)){var h=!!h.ha,k=FQ(Hq(),a,"setupCode",kX());if(Zp(k)){k=k.ha;a=FQ(Hq(),a,"updateCode",kX());if(Zp(a))return(new dq).j(wqa(new uV,b,d,e,f,h,k,a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);
+return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({O5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2PenList$reader$macro$98$2$",{O5:1,d:1,ic:1,fa:1});function oX(){}oX.prototype=new l;oX.prototype.constructor=oX;c=oX.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};
+c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};c.Ra=function(a){var b=!1,d=null;if(Hu(a)&&(b=!0,d=a,"CONTINUOUS"===d.Nc.toUpperCase()))return Aq(),a=Mqa(),Jq().y(a);if(b&&"TICKBASED"===d.Nc.toUpperCase())return Aq(),a=Nqa(),Jq().y(a);Aq();a=u((new v).G((new w).f(["View update mode can only be 'Continuous' or 'TickBased' but was ",""])),(new w).f([a]));return Bq(pq(),a)};c.Ca=function(a){return pb(this,a)};
+c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({P5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2UpdateMode$",{P5:1,d:1,ic:1,fa:1});var Gra=void 0;function nX(){}nX.prototype=new l;nX.prototype.constructor=nX;c=nX.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};function Qra(a){if(null===a)throw(new ye).b();return a.Na?a.jb:ze(a,(new tX).b())}c.Ga=function(a){return!!this.Ra(a)};
+c.Ra=function(a){var b=(new we).b();return(b.Na?b.jb:Qra(b)).Pa(a)};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({Q5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2WorldDimensions$",{Q5:1,d:1,ic:1,fa:1});var Fra=void 0;function tX(){}tX.prototype=new l;tX.prototype.constructor=tX;c=tX.prototype;c.b=function(){return this};c.y=function(a){return this.Pa(a)};c.Fa=function(a){return this.Pa(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+c.Ga=function(a){return!!this.Pa(a)};c.Ra=function(a){return this.Pa(a)};
+c.Pa=function(a){var b=FQ(Hq(),a,"minPxcor",AQ());if(Zp(b)){var b=b.ha|0,d=FQ(Hq(),a,"maxPxcor",AQ());if(Zp(d)){var d=d.ha|0,e=FQ(Hq(),a,"minPycor",AQ());if(Zp(e)){var e=e.ha|0,f=FQ(Hq(),a,"maxPycor",AQ());if(Zp(f)){var f=f.ha|0,h=FQ(Hq(),a,"patchSize",CQ());if(Zp(h)){var h=+h.ha,k=FQ(Hq(),a,"wrappingAllowedInX",xQ());if(Zp(k)){k=!!k.ha;a=FQ(Hq(),a,"wrappingAllowedInY",xQ());if(Zp(a))return(new dq).j(Kqa(b,d,e,f,h,k,!!a.ha));if(!aq(a))throw(new q).j(a);return a}if(!aq(k))throw(new q).j(k);return k}if(!aq(h))throw(new q).j(h);
+return h}if(!aq(f))throw(new q).j(f);return f}if(!aq(e))throw(new q).j(e);return e}if(!aq(d))throw(new q).j(d);return d}if(aq(b))return b;throw(new q).j(b);};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({R5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetRead$tortoiseJs2WorldDimensions$reader$macro$89$2$",{R5:1,d:1,ic:1,fa:1});function VQ(){}VQ.prototype=new l;VQ.prototype.constructor=VQ;c=VQ.prototype;c.vc=function(a){return WQ(a)};c.y=function(a){return WQ(a)};
+c.Fa=function(a){return WQ(a)|0};c.lg=function(){return this};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!WQ(a)};
+function WQ(a){var b=r(),d=uX(),d=qR(d,a.xc),d=(new A).e("source",d),e=RQ(),e=$u(e,a.Sa),e=(new A).e("left",e),f=RQ(),f=$u(f,a.hb),f=(new A).e("top",f),h=RQ(),h=$u(h,a.Ma),h=(new A).e("right",h),k=RQ(),k=$u(k,a.gb),k=(new A).e("bottom",k),p=uX(),p=qR(p,a.ab),p=(new A).e("display",p),t=KQ(),t=$u(t,a.To),t=(new A).e("forever",t);Rra||(Rra=(new vX).b());var x=$u(Rra,a.an),x=(new A).e("buttonKind",x);Sra||(Sra=(new wX).b());var E=qR(Sra,a.so),E=(new A).e("actionKey",E),S=KQ();a=$u(S,a.Io);a=(new A).e("disableUntilTicksStart",
+a);S=(new J).j(xX(yX(),"button"));b=I(b,(new w).f([d,e,f,h,k,p,t,x,E,a,(new A).e("type",S)]));d=Wg();a=new zX;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))}c.Ca=function(a){return pb(this,a)};c.$classData=g({T5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$210$2$",{T5:1,d:1,yc:1,fa:1});function XQ(){}XQ.prototype=new l;XQ.prototype.constructor=XQ;c=XQ.prototype;c.vc=function(a){return YQ(a)};
+function YQ(a){var b=r(),d=uX(),d=qR(d,a.ld),d=(new A).e("variable",d),e=RQ(),e=$u(e,a.Sa),e=(new A).e("left",e),f=RQ(),f=$u(f,a.hb),f=(new A).e("top",f),h=RQ(),h=$u(h,a.Ma),h=(new A).e("right",h),k=RQ(),k=$u(k,a.gb),k=(new A).e("bottom",k),p=uX(),p=qR(p,a.ab),p=(new A).e("display",p);Tra||(Tra=(new AX).b());var t=$u(Tra,a.yo),t=(new A).e("choices",t),x=RQ();a=$u(x,a.Eo);a=(new A).e("currentChoice",a);x=(new J).j(xX(yX(),"chooser"));b=I(b,(new w).f([d,e,f,h,k,p,t,a,(new A).e("type",x)]));d=Wg();a=
+new BX;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))}c.y=function(a){return YQ(a)};c.Fa=function(a){return YQ(a)|0};c.lg=function(){return this};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!YQ(a)};c.Ca=function(a){return pb(this,a)};c.$classData=g({V5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$212$2$",{V5:1,d:1,yc:1,fa:1});function ZQ(){}ZQ.prototype=new l;ZQ.prototype.constructor=ZQ;c=ZQ.prototype;c.vc=function(a){return $Q(a)};c.y=function(a){return $Q(a)};
+c.Fa=function(a){return $Q(a)|0};c.lg=function(){return this};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!$Q(a)};
+function $Q(a){var b=r(),d=uX(),d=qR(d,a.ld),d=(new A).e("variable",d),e=RQ(),e=$u(e,a.Sa),e=(new A).e("left",e),f=RQ(),f=$u(f,a.hb),f=(new A).e("top",f),h=RQ(),h=$u(h,a.Ma),h=(new A).e("right",h),k=RQ(),k=$u(k,a.gb),k=(new A).e("bottom",k);Ura||(Ura=(new CX).b());a=$u(Ura,a.am);a=(new A).e("boxedValue",a);var p=(new J).j(xX(yX(),"inputBox")),b=I(b,(new w).f([d,e,f,h,k,a,(new A).e("type",p)])),d=Wg();a=new DX;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))}c.Ca=function(a){return pb(this,a)};
+c.$classData=g({X5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$214$2$",{X5:1,d:1,yc:1,fa:1});function aR(){}aR.prototype=new l;aR.prototype.constructor=aR;c=aR.prototype;c.vc=function(a){return bR(a)};c.y=function(a){return bR(a)};c.Fa=function(a){return bR(a)|0};c.lg=function(){return this};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!bR(a)};
+function bR(a){var b=r(),d=uX(),d=qR(d,a.xc),d=(new A).e("source",d),e=RQ(),e=$u(e,a.Sa),e=(new A).e("left",e),f=RQ(),f=$u(f,a.hb),f=(new A).e("top",f),h=RQ(),h=$u(h,a.Ma),h=(new A).e("right",h),k=RQ(),k=$u(k,a.gb),k=(new A).e("bottom",k),p=uX(),p=qR(p,a.ab),p=(new A).e("display",p),t=RQ(),t=$u(t,a.Ph),t=(new A).e("precision",t),x=RQ();a=$u(x,a.Nd);a=(new A).e("fontSize",a);x=(new J).j(xX(yX(),"monitor"));b=I(b,(new w).f([d,e,f,h,k,p,t,a,(new A).e("type",x)]));d=Wg();a=new EX;e=r();return(new su).ac(Vg(d,
+b.jc(a,e.s)))}c.Ca=function(a){return pb(this,a)};c.$classData=g({Z5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$216$2$",{Z5:1,d:1,yc:1,fa:1});function cR(){}cR.prototype=new l;cR.prototype.constructor=cR;c=cR.prototype;c.vc=function(a){return dR(a)};c.y=function(a){return dR(a)};c.Fa=function(a){return dR(a)|0};c.lg=function(){return this};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!dR(a)};
+function dR(a){var b=r(),d=RQ(),d=$u(d,a.Sa),d=(new A).e("left",d),e=RQ(),e=$u(e,a.hb),e=(new A).e("top",e),f=RQ(),f=$u(f,a.Ma),f=(new A).e("right",f),h=RQ(),h=$u(h,a.gb),h=(new A).e("bottom",h),k=RQ();a=$u(k,a.Nd);a=(new A).e("fontSize",a);k=(new J).j(xX(yX(),"output"));b=I(b,(new w).f([d,e,f,h,a,(new A).e("type",k)]));d=Wg();a=new FX;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))}c.Ca=function(a){return pb(this,a)};
+c.$classData=g({a6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$218$2$",{a6:1,d:1,yc:1,fa:1});function pR(){}pR.prototype=new l;pR.prototype.constructor=pR;c=pR.prototype;c.vc=function(a){return this.Tf(a)};c.y=function(a){return this.Tf(a)};c.Fa=function(a){return this.Tf(a)|0};c.lg=function(){return this};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Tf(a)};c.Ca=function(a){return pb(this,a)};
+c.Tf=function(a){var b=r(),d=yX(),d=$u(d,a.ab),d=(new A).e("display",d),e=NQ(),e=$u(e,a.rl),e=(new A).e("interval",e),f=RQ(),f=$u(f,a.vl),f=(new A).e("mode",f),h=RQ(),h=$u(h,a.Bb),h=(new A).e("color",h),k=KQ(),k=$u(k,a.jm),k=(new A).e("inLegend",k),p=yX(),p=$u(p,a.sg),p=(new A).e("setupCode",p),t=yX();a=$u(t,a.tg);a=(new A).e("updateCode",a);t=(new J).j(xX(yX(),"pen"));b=I(b,(new w).f([d,e,f,h,k,p,a,(new A).e("type",t)]));d=Wg();a=new GX;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))};
+c.$classData=g({c6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$220$2$",{c6:1,d:1,yc:1,fa:1});function eR(){}eR.prototype=new l;eR.prototype.constructor=eR;c=eR.prototype;c.vc=function(a){return fR(a)};c.y=function(a){return fR(a)};
+function fR(a){var b=r(),d=uX(),d=qR(d,a.ab),d=(new A).e("display",d),e=RQ(),e=$u(e,a.Sa),e=(new A).e("left",e),f=RQ(),f=$u(f,a.hb),f=(new A).e("top",f),h=RQ(),h=$u(h,a.Ma),h=(new A).e("right",h),k=RQ(),k=$u(k,a.gb),k=(new A).e("bottom",k),p=uX(),p=qR(p,a.go),p=(new A).e("xAxis",p),t=uX(),t=qR(t,a.io),t=(new A).e("yAxis",t),x=NQ(),x=$u(x,a.Ti),x=(new A).e("xmin",x),E=NQ(),E=$u(E,a.Si),E=(new A).e("xmax",E),S=NQ(),S=$u(S,a.Vi),S=(new A).e("ymin",S),U=NQ(),U=$u(U,a.Ui),U=(new A).e("ymax",U),ga=KQ(),
+ga=$u(ga,a.Zm),ga=(new A).e("autoPlotOn",ga),ma=KQ(),ma=$u(ma,a.xn),ma=(new A).e("legendOn",ma),va=yX(),va=$u(va,a.sg),va=(new A).e("setupCode",va),Ia=yX(),Ia=$u(Ia,a.tg),Ia=(new A).e("updateCode",Ia);Vra||(Vra=(new HX).b());a=$u(Vra,a.Jn);a=(new A).e("pens",a);var $a=(new J).j(xX(yX(),"plot")),b=I(b,(new w).f([d,e,f,h,k,p,t,x,E,S,U,ga,ma,va,Ia,a,(new A).e("type",$a)])),d=Wg();a=new IX;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))}c.Fa=function(a){return fR(a)|0};c.lg=function(){return this};c.k=function(){return"\x3cfunction1\x3e"};
+c.Ga=function(a){return!!fR(a)};c.Ca=function(a){return pb(this,a)};c.$classData=g({e6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$222$2$",{e6:1,d:1,yc:1,fa:1});function gR(){}gR.prototype=new l;gR.prototype.constructor=gR;c=gR.prototype;c.vc=function(a){return hR(a)};c.y=function(a){return hR(a)};
+function hR(a){var b=r(),d=uX(),d=qR(d,a.ld),d=(new A).e("variable",d),e=RQ(),e=$u(e,a.Sa),e=(new A).e("left",e),f=RQ(),f=$u(f,a.hb),f=(new A).e("top",f),h=RQ(),h=$u(h,a.Ma),h=(new A).e("right",h),k=RQ(),k=$u(k,a.gb),k=(new A).e("bottom",k),p=uX(),p=qR(p,a.ab),p=(new A).e("display",p),t=yX(),t=$u(t,a.Bn),t=(new A).e("min",t),x=yX(),x=$u(x,a.rm),x=(new A).e("max",x),E=NQ(),E=$u(E,a.Fb),E=(new A).e("default",E),S=yX(),S=$u(S,a.Im),S=(new A).e("step",S),U=uX(),U=qR(U,a.yp),U=(new A).e("units",U);Wra||
+(Wra=(new JX).b());a=$u(Wra,a.Ho);a=(new A).e("direction",a);var ga=(new J).j(xX(yX(),"slider")),b=I(b,(new w).f([d,e,f,h,k,p,t,x,E,S,U,a,(new A).e("type",ga)])),d=Wg();a=new KX;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))}c.Fa=function(a){return hR(a)|0};c.lg=function(){return this};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!hR(a)};c.Ca=function(a){return pb(this,a)};
+c.$classData=g({g6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$224$2$",{g6:1,d:1,yc:1,fa:1});function iR(){}iR.prototype=new l;iR.prototype.constructor=iR;c=iR.prototype;c.vc=function(a){return jR(a)};c.y=function(a){return jR(a)};c.Fa=function(a){return jR(a)|0};c.lg=function(){return this};c.k=function(){return"\x3cfunction1\x3e"};
+function jR(a){var b=r(),d=uX(),d=qR(d,a.ld),d=(new A).e("variable",d),e=RQ(),e=$u(e,a.Sa),e=(new A).e("left",e),f=RQ(),f=$u(f,a.hb),f=(new A).e("top",f),h=RQ(),h=$u(h,a.Ma),h=(new A).e("right",h),k=RQ(),k=$u(k,a.gb),k=(new A).e("bottom",k),p=uX(),p=qR(p,a.ab),p=(new A).e("display",p),t=KQ();a=$u(t,a.ip);a=(new A).e("on",a);t=(new J).j(xX(yX(),"switch"));b=I(b,(new w).f([d,e,f,h,k,p,a,(new A).e("type",t)]));d=Wg();a=new LX;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))}c.Ga=function(a){return!!jR(a)};
+c.Ca=function(a){return pb(this,a)};c.$classData=g({i6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$226$2$",{i6:1,d:1,yc:1,fa:1});function kR(){}kR.prototype=new l;kR.prototype.constructor=kR;c=kR.prototype;c.vc=function(a){return lR(a)};c.y=function(a){return lR(a)};c.Fa=function(a){return lR(a)|0};c.lg=function(){return this};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!lR(a)};
+function lR(a){var b=r(),d=uX(),d=qR(d,a.ab),d=(new A).e("display",d),e=RQ(),e=$u(e,a.Sa),e=(new A).e("left",e),f=RQ(),f=$u(f,a.hb),f=(new A).e("top",f),h=RQ(),h=$u(h,a.Ma),h=(new A).e("right",h),k=RQ(),k=$u(k,a.gb),k=(new A).e("bottom",k),p=RQ(),p=$u(p,a.Nd),p=(new A).e("fontSize",p),t=NQ(),t=$u(t,a.Bb),t=(new A).e("color",t),x=KQ();a=$u(x,a.pr);a=(new A).e("transparent",a);x=(new J).j(xX(yX(),"textBox"));b=I(b,(new w).f([d,e,f,h,k,p,t,a,(new A).e("type",x)]));d=Wg();a=new MX;e=r();return(new su).ac(Vg(d,
+b.jc(a,e.s)))}c.Ca=function(a){return pb(this,a)};c.$classData=g({k6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$228$2$",{k6:1,d:1,yc:1,fa:1});function nR(){}nR.prototype=new l;nR.prototype.constructor=nR;c=nR.prototype;c.vc=function(a){return oR(a)};c.y=function(a){return oR(a)};
+function oR(a){var b=r(),d=RQ(),d=$u(d,a.Sa),d=(new A).e("left",d),e=RQ(),e=$u(e,a.hb),e=(new A).e("top",e),f=RQ(),f=$u(f,a.Ma),f=(new A).e("right",f),h=RQ(),h=$u(h,a.gb),h=(new A).e("bottom",h);Xra||(Xra=(new NX).b());var k=$u(Xra,a.hs),k=(new A).e("dimensions",k),p=RQ(),p=$u(p,a.Nd),p=(new A).e("fontSize",p);Yra||(Yra=(new OX).b());var t=$u(Yra,a.zp),t=(new A).e("updateMode",t),x=KQ(),x=$u(x,a.cr),x=(new A).e("showTickCounter",x),E=uX(),E=qR(E,a.jr),E=(new A).e("tickCounterLabel",E),S=NQ();a=$u(S,
+a.dq);a=(new A).e("frameRate",a);S=(new J).j(xX(yX(),"view"));b=I(b,(new w).f([d,e,f,h,k,p,t,x,E,a,(new A).e("type",S)]));d=Wg();a=new PX;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))}c.Fa=function(a){return oR(a)|0};c.lg=function(){return this};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!oR(a)};c.Ca=function(a){return pb(this,a)};c.$classData=g({m6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$230$2$",{m6:1,d:1,yc:1,fa:1});function QX(){}
+QX.prototype=new l;QX.prototype.constructor=QX;c=QX.prototype;c.b=function(){return this};c.y=function(a){return this.Ra(a)};c.Fa=function(a){return this.Ra(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Ra(a)};c.Ra=function(a){var b=(new kv).c("type");if(Mu(a)&&(b=a.Tg.$b(b.wa),!b.z()&&(b=b.X(),Hu(b)&&(b=b.Nc,mv||(mv=(new lv).b()),b=mv.XE().$b(b),!b.z()))))return b.X().y(a);Aq();return Bq(pq(),"Widgets must be represented as a JSON Object with type specified")};
+c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return Ru(this,a,b)};c.$classData=g({o6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$readWidgetJson$",{o6:1,d:1,ic:1,fa:1});var Zra=void 0;function vX(){}vX.prototype=new l;vX.prototype.constructor=vX;c=vX.prototype;c.vc=function(a){return(new zu).c(a.k())};c.b=function(){return this};c.y=function(a){return(new zu).c(a.k())};c.Fa=function(a){return(new zu).c(a.k())|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!(new zu).c(a.k())};
+c.Ca=function(a){return pb(this,a)};c.$classData=g({r6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$agentKind2Json$",{r6:1,d:1,yc:1,fa:1});var Rra=void 0;function CX(){}CX.prototype=new l;CX.prototype.constructor=CX;c=CX.prototype;c.vc=function(a){return RX(a)};c.b=function(){return this};c.y=function(a){return RX(a)};c.Fa=function(a){return RX(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!RX(a)};
+function RX(a){var b=!1,d=null;if(SX(a)){var b=!0,d=a,e=d.Y,f=d.mi;if(f===pV()){a=(new xu).qb(Na(e));a=(new A).e("value",a);f=(new zu).c(f.Qj());a=[a,(new A).e("type",f)];f=dc(new ec,Eu());d=0;for(b=a.length|0;d<b;)hc(f,a[d]),d=1+d|0;return(new su).ac(f.Oa)}}if(b&&(f=d.Y,d=d.mi,d===oV())){a=(new A).e("value",(new yu).Xj(f));f=(new zu).c(d.Qj());a=[a,(new A).e("type",f)];f=dc(new ec,Eu());d=0;for(b=a.length|0;d<b;)hc(f,a[d]),d=1+d|0;return(new su).ac(f.Oa)}if(TX(a)){d=a.mi;f=a.Dq;a=(new zu).c(a.Y);
+a=(new A).e("value",a);d=(new zu).c(d.Qj());d=(new A).e("type",d);f=(new Au).od(f);a=[a,d,(new A).e("multiline",f)];f=dc(new ec,Eu());d=0;for(b=a.length|0;d<b;)hc(f,a[d]),d=1+d|0;return(new su).ac(f.Oa)}throw(new q).j(a);}c.Ca=function(a){return pb(this,a)};c.$classData=g({s6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$boxedValue2Json$",{s6:1,d:1,yc:1,fa:1});var Ura=void 0;function UX(){}UX.prototype=new l;UX.prototype.constructor=UX;c=UX.prototype;c.vc=function(a){return VX(0,a)};c.b=function(){return this};
+c.y=function(a){return VX(0,a)};c.Fa=function(a){return VX(0,a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!VX(0,a)};c.Ca=function(a){return pb(this,a)};
+function VX(a,b){if(b&&b.$classData&&b.$classData.n.Lz)return(new yu).Xj(+b.Y);if(b&&b.$classData&&b.$classData.n.Nz)return(new zu).c(b.Y);if(b&&b.$classData&&b.$classData.n.Kz)return(new Au).od(!!b.Y);if(b&&b.$classData&&b.$classData.n.Mz){b=b.Y;a=ek().nc;a=Mc(b,a);for(b=gk(b.uc);b.Yh;){var d=b.ma();a.Qa(VX($ra(),Kba(Mba(),d)))}return(new Bu).G(a.Da().ob())}throw(new q).j(b);}c.$classData=g({u6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$chooseable2Json$",{u6:1,d:1,yc:1,fa:1});var asa=void 0;
+function $ra(){asa||(asa=(new UX).b());return asa}function NX(){}NX.prototype=new l;NX.prototype.constructor=NX;c=NX.prototype;c.b=function(){return this};c.vc=function(a){return this.Wl(a)};c.y=function(a){return this.Wl(a)};c.Fa=function(a){return this.Wl(a)|0};c.k=function(){return"\x3cfunction1\x3e"};function bsa(a){if(null===a)throw(new ye).b();return a.Na?a.jb:ze(a,(new WX).b())}c.Ga=function(a){return!!this.Wl(a)};c.Ca=function(a){return pb(this,a)};
+c.Wl=function(a){var b=(new we).b();a=(b.Na?b.jb:bsa(b)).Wl(a);if(!Mu(a))throw(new q).j(a);a=(new XX).Ds(a.Tg,m(new n,function(){return function(a){return"type"!==a}}(this)));a=Yr(a);return(new su).ac(Vg(Wg(),a))};c.$classData=g({w6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$dims2Json$",{w6:1,d:1,yc:1,fa:1});var Xra=void 0;function WX(){}WX.prototype=new l;WX.prototype.constructor=WX;c=WX.prototype;c.b=function(){return this};c.vc=function(a){return this.Wl(a)};c.y=function(a){return this.Wl(a)};
+c.Fa=function(a){return this.Wl(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Wl(a)};
+c.Wl=function(a){var b=r(),d=RQ(),d=$u(d,a.vm),d=(new A).e("minPxcor",d),e=RQ(),e=$u(e,a.sm),e=(new A).e("maxPxcor",e),f=RQ(),f=$u(f,a.wm),f=(new A).e("minPycor",f),h=RQ(),h=$u(h,a.tm),h=(new A).e("maxPycor",h),k=NQ(),k=$u(k,a.ym),k=(new A).e("patchSize",k),p=KQ(),p=$u(p,a.Jm),p=(new A).e("wrappingAllowedInX",p),t=KQ();a=$u(t,a.Km);a=(new A).e("wrappingAllowedInY",a);t=(new J).j(xX(yX(),"worldDimensions"));b=I(b,(new w).f([d,e,f,h,k,p,a,(new A).e("type",t)]));d=Wg();a=new YX;e=r();return(new su).ac(Vg(d,
+b.jc(a,e.s)))};c.Ca=function(a){return pb(this,a)};c.$classData=g({x6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$dims2Json$writer$macro$234$2$",{x6:1,d:1,yc:1,fa:1});function JX(){}JX.prototype=new l;JX.prototype.constructor=JX;c=JX.prototype;c.vc=function(a){return ZX(a)};c.b=function(){return this};c.y=function(a){return ZX(a)};c.Fa=function(a){return ZX(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!ZX(a)};c.Ca=function(a){return pb(this,a)};
+function ZX(a){a=a.k();return(new zu).c(a.toLowerCase())}c.$classData=g({z6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$direction2Json$",{z6:1,d:1,yc:1,fa:1});var Wra=void 0;function $X(){}$X.prototype=new l;$X.prototype.constructor=$X;c=$X.prototype;c.vc=function(a){return this.Tf(a)};c.b=function(){return this};c.y=function(a){return this.Tf(a)};function csa(a){if(null===a)throw(new ye).b();return a.Na?a.jb:ze(a,(new aY).b())}c.Fa=function(a){return this.Tf(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+c.Ga=function(a){return!!this.Tf(a)};c.Ca=function(a){return pb(this,a)};c.Tf=function(a){var b=(new we).b();return(b.Na?b.jb:csa(b)).Tf(a)};c.$classData=g({A6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$pen2Json$",{A6:1,d:1,yc:1,fa:1});var dsa=void 0;function esa(){dsa||(dsa=(new $X).b());return dsa}function aY(){}aY.prototype=new l;aY.prototype.constructor=aY;c=aY.prototype;c.b=function(){return this};c.vc=function(a){return this.Tf(a)};c.y=function(a){return this.Tf(a)};
+c.Fa=function(a){return this.Tf(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Tf(a)};c.Ca=function(a){return pb(this,a)};
+c.Tf=function(a){var b=r(),d=yX(),d=$u(d,a.ab),d=(new A).e("display",d),e=NQ(),e=$u(e,a.rl),e=(new A).e("interval",e),f=RQ(),f=$u(f,a.vl),f=(new A).e("mode",f),h=RQ(),h=$u(h,a.Bb),h=(new A).e("color",h),k=KQ(),k=$u(k,a.jm),k=(new A).e("inLegend",k),p=yX(),p=$u(p,a.sg),p=(new A).e("setupCode",p),t=yX();a=$u(t,a.tg);a=(new A).e("updateCode",a);t=(new J).j(xX(yX(),"pen"));b=I(b,(new w).f([d,e,f,h,k,p,a,(new A).e("type",t)]));d=Wg();a=new bY;e=r();return(new su).ac(Vg(d,b.jc(a,e.s)))};
+c.$classData=g({B6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$pen2Json$writer$macro$232$2$",{B6:1,d:1,yc:1,fa:1});function cY(){}cY.prototype=new l;cY.prototype.constructor=cY;c=cY.prototype;c.vc=function(a){return xX(0,a)};c.b=function(){return this};c.y=function(a){return xX(0,a)};c.Fa=function(a){return xX(0,a)|0};c.k=function(){return"\x3cfunction1\x3e"};function xX(a,b){return"NIL"===b?uu():(new zu).c(b)}c.Ga=function(a){return!!xX(0,a)};c.Ca=function(a){return pb(this,a)};
+c.$classData=g({E6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$string2NillableTortoiseJs$",{E6:1,d:1,yc:1,fa:1});var fsa=void 0;function yX(){fsa||(fsa=(new cY).b());return fsa}function OX(){}OX.prototype=new l;OX.prototype.constructor=OX;c=OX.prototype;c.vc=function(a){return(new zu).c(a.k())};c.b=function(){return this};c.y=function(a){return(new zu).c(a.k())};c.Fa=function(a){return(new zu).c(a.k())|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!(new zu).c(a.k())};
+c.Ca=function(a){return pb(this,a)};c.$classData=g({G6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$updateMode2Json$",{G6:1,d:1,yc:1,fa:1});var Yra=void 0;function Lv(){this.zl=this.ht=null;this.ot=!1;this.ga=this.gy=null}Lv.prototype=new l;Lv.prototype.constructor=Lv;c=Lv.prototype;c.Du=function(a,b){this.ht=b;if(null===a)throw ug(vg(),null);this.ga=a;this.zl=(new Ov).Du(a,b);this.zl.di.onclick=a.Hn.eZ;this.ot=!1;a=new yR;if(null===this)throw ug(vg(),null);a.ga=this;this.gy=a;return this};
+c.dU=function(){return!this.ot};c.DY=function(a){this.zl.di.checked=a};c.Oy=function(){return!!this.zl.di.checked};c.dD=function(a){a.pD().ua(m(new n,function(a){return function(d){a.gy.kD("Test framework crashed during test:");a.gy.jG(d)}}(this)));this.ot=!!a.AD(K(function(){return function(){return!1}}(this)));Iv(this.ga);this.zl.Dx(this.ot);this.ot||(Pv(this.zl),this.ga.SE.Ov(this.zl),this.ga.SE=this.zl)};
+c.$classData=g({P6:0},!1,"org.scalajs.testinterface.HTMLRunner$UI$RunningTest",{P6:1,d:1,R6:1,Zja:1});function Mw(){this.xq=!1;this.mx=null}Mw.prototype=new l;Mw.prototype.constructor=Mw;Mw.prototype.$classData=g({a7:0},!1,"org.scalajs.testinterface.internal.FingerprintSerializer$DeserializedAnnotatedFingerprint",{a7:1,d:1,J7:1,wt:1});function Nw(){this.xq=!1;this.PY=null;this.FW=!1}Nw.prototype=new l;Nw.prototype.constructor=Nw;Nw.prototype.Wv=function(){return this.PY};Nw.prototype.Vu=function(){return this.xq};
+Nw.prototype.$E=function(){return this.FW};Nw.prototype.$classData=g({b7:0},!1,"org.scalajs.testinterface.internal.FingerprintSerializer$DeserializedSubclassFingerprint",{b7:1,d:1,YB:1,wt:1});function CR(){Iw.call(this)}CR.prototype=new Jw;CR.prototype.constructor=CR;
+CR.prototype.tU=function(a){Gha(this);zha||(zha=(new pw).b());var b=a.SF,d=rw(tw(),new dY),e=Eha(Hw(),(new Bw).c(a.SF)),b={fullyQualifiedName:b,fingerprint:d,selector:e,status:a.XF.Az,durationLS:0,durationMS:0};a=a.XV;if(a.ba()){d=jw;e=kw();if(null===a.Wf)throw(new he).c("This OptionalThrowable is not defined");b.throwable=d(e,a.Wf)}ba.scalajsCom.send("event:"+ba.JSON.stringify(b))};CR.prototype.Vx=function(a){Iw.prototype.Vx.call(this,a);return this};
+CR.prototype.$classData=g({j7:0},!1,"org.scalajs.testinterface.internal.Slave$RemoteEventHandler",{j7:1,i7:1,d:1,K7:1});function DR(){Iw.call(this);this.Se=0}DR.prototype=new Jw;DR.prototype.constructor=DR;function gsa(a,b,d){Gha(a);ba.scalajsCom.send(u((new v).G((new w).f(["",":",":",""])),(new w).f([b,a.Se,d])))}DR.prototype.kD=function(a){gsa(this,"error",a)};DR.prototype.jG=function(a){gsa(this,"trace",ba.JSON.stringify(jw(kw(),a)))};DR.prototype.ID=function(a){gsa(this,"info",a)};
+DR.prototype.$classData=g({k7:0},!1,"org.scalajs.testinterface.internal.Slave$RemoteLogger",{k7:1,i7:1,d:1,VB:1});function eY(){}eY.prototype=new l;eY.prototype.constructor=eY;eY.prototype.b=function(){return this};function Ww(a,b){a=r();var d=MR();b=I(r(),(new w).f([b]));return(new NR).G(I(a,(new w).f([(new A).e(d,b)])))}function Lna(a){Tw();return Ww(Tw(),Uw(Vw(),a))}eY.prototype.$classData=g({u7:0},!1,"play.api.libs.json.JsError$",{u7:1,d:1,l:1,i:1});var hsa=void 0;
+function Tw(){hsa||(hsa=(new eY).b());return hsa}function fY(){this.No=null}fY.prototype=new l;fY.prototype.constructor=fY;fY.prototype.Ac=function(a){this.No=a;return this};fY.prototype.k=function(){return u((new v).G((new w).f(["JsUndefined(",")"])),(new w).f([ne(this.No)]))};fY.prototype.Yk=function(a){return Ar(this,a)};fY.prototype.$classData=g({TB:0},!1,"play.api.libs.json.JsUndefined",{TB:1,d:1,x7:1,Um:1});function gY(){}gY.prototype=new l;gY.prototype.constructor=gY;gY.prototype.b=function(){return this};
+function Uw(a,b){a=(new w).f([]);return(new hY).Ku(I(r(),(new w).f([b])),a)}gY.prototype.$classData=g({D7:0},!1,"play.api.libs.json.JsonValidationError$",{D7:1,d:1,l:1,i:1});var isa=void 0;function Vw(){isa||(isa=(new gY).b());return isa}function sT(){this.Wf=null}sT.prototype=new l;sT.prototype.constructor=sT;c=sT.prototype;c.b=function(){sT.prototype.wd.call(this,null);return this};c.o=function(a){return a&&a.$classData&&a.$classData.n.qR?this.Wf===a.Wf:!1};c.ba=function(){return null!==this.Wf};
+c.k=function(){return null===this.Wf?"OptionalThrowable()":u((new v).G((new w).f(["OptionalThrowable(",")"])),(new w).f([this.Wf]))};c.wd=function(a){this.Wf=a;return this};c.r=function(){return null===this.Wf?0:this.Wf.r()};c.$classData=g({qR:0},!1,"sbt.testing.OptionalThrowable",{qR:1,d:1,l:1,i:1});function iY(){this.Ar=this.oS=this.JG=this.hH=this.yS=this.Fw=this.Ez=this.sC=null}iY.prototype=new l;iY.prototype.constructor=iY;
+iY.prototype.b=function(){jY=this;this.sC=(new kY).Cd("Success",0);this.Ez=(new kY).Cd("Error",1);this.Fw=(new kY).Cd("Failure",2);this.yS=(new kY).Cd("Skipped",3);this.hH=(new kY).Cd("Ignored",4);this.JG=(new kY).Cd("Canceled",5);this.oS=(new kY).Cd("Pending",6);var a=(new w).f([this.sC,this.Ez,this.Fw,this.yS,this.hH,this.JG,this.oS]),b=a.pa.length|0,b=la(Wa(jsa),[b]),d;d=0;for(a=Ve(new We,a,0,a.pa.length|0);a.ta();){var e=a.ma();b.m[d]=e;d=1+d|0}this.Ar=b;return this};
+iY.prototype.$classData=g({N7:0},!1,"sbt.testing.Status$",{N7:1,d:1,l:1,i:1});var jY=void 0;function zv(){jY||(jY=(new iY).b());return jY}function fA(){}fA.prototype=new l;fA.prototype.constructor=fA;fA.prototype.b=function(){return this};fA.prototype.k=function(){return"\\/-"};fA.prototype.$classData=g({Q7:0},!1,"scalaz.$bslash$div$minus$",{Q7:1,d:1,l:1,i:1});var Yia=void 0;function eA(){}eA.prototype=new l;eA.prototype.constructor=eA;eA.prototype.b=function(){return this};eA.prototype.k=function(){return"-\\/"};
+eA.prototype.$classData=g({S7:0},!1,"scalaz.$minus$bslash$div$",{S7:1,d:1,l:1,i:1});var Xia=void 0;function tS(a){a.th((new lY).TD(a))}function ksa(a,b,d,e){return a.wf(d,K(function(a,b,d){return function(){return a.wf(b,K(function(a,b){return function(){return a.cd(b,m(new n,function(){return function(a){return rb(a)}}(a)))}}(a,d)))}}(a,b,e)))}function mY(){this.ga=null}mY.prototype=new l;mY.prototype.constructor=mY;function lsa(a){var b=new mY;if(null===a)throw ug(vg(),null);b.ga=a;return b}
+mY.prototype.$classData=g({d8:0},!1,"scalaz.Band$$anon$2",{d8:1,d:1,Saa:1,qC:1});function Uz(a){a.Hv(msa(a))}function nY(){this.ga=null}nY.prototype=new l;nY.prototype.constructor=nY;function Rha(a){var b=new nY;if(null===a)throw ug(vg(),null);b.ga=a;return b}nY.prototype.$classData=g({k8:0},!1,"scalaz.Category$$anon$4",{k8:1,d:1,SR:1,Xw:1});function oY(a){a.$s(nsa(a))}function pY(){this.ga=null}pY.prototype=new l;pY.prototype.constructor=pY;
+pY.prototype.$classData=g({q8:0},!1,"scalaz.Contravariant$$anon$5",{q8:1,d:1,Pma:1,$i:1});function qY(){this.dr=this.Xd=null;this.ya=!1}qY.prototype=new l;qY.prototype.constructor=qY;qY.prototype.b=function(){rY=this;var a=m(new n,function(){return function(a){return a.length|0}}(this)),b=Bz().Zx;this.dr=ny(new oy,a,b);(new $R).b();(new sY).b();(new aS).b();return this};function Fd(a,b){a=$na(Vx(),b,a.dr);return Gd(a)}
+function joa(a){return y().Gb(Gd((new Hd).ij(a.dr)),sb(new tb,function(){return function(a,d){return Id(a,d)}}(a)))}function Eoa(a,b,d){return d.z()?joa(Ed()):d.aa().Gb(d.$(),sb(new tb,function(a,b){return function(a,d){return Id(Id(a,b),d)}}(a,b)))}qY.prototype.$classData=g({r8:0},!1,"scalaz.Cord$",{r8:1,d:1,l:1,i:1});var rY=void 0;function Ed(){rY||(rY=(new qY).b());return rY}function sY(){}sY.prototype=new l;sY.prototype.constructor=sY;c=sY.prototype;c.b=function(){Cd(this);dz(this);return this};
+c.sc=function(a,b){return Id(a,ne(b))};c.xe=function(){var a=Ed();a.ya||a.ya||(a.Xd=joa(a),a.ya=!0);return a.Xd};c.hf=function(){};c.Df=function(){};c.$classData=g({s8:0},!1,"scalaz.Cord$$anon$1",{s8:1,d:1,Hf:1,vf:1});function tY(){}tY.prototype=new Tna;tY.prototype.constructor=tY;function osa(){}osa.prototype=tY.prototype;function wy(){}wy.prototype=new Una;wy.prototype.constructor=wy;wy.prototype.b=function(){return this};wy.prototype.$classData=g({y8:0},!1,"scalaz.Dual$",{y8:1,oka:1,pka:1,d:1});
+var jia=void 0;function uY(){}uY.prototype=new Vna;uY.prototype.constructor=uY;function psa(){}psa.prototype=uY.prototype;function vY(){}vY.prototype=new l;vY.prototype.constructor=vY;vY.prototype.b=function(){Wy(this);return this};vY.prototype.qF=function(){};vY.prototype.pF=function(){};vY.prototype.$classData=g({C8:0},!1,"scalaz.Endo$$anon$2",{C8:1,d:1,KR:1,JR:1});function xy(){}xy.prototype=new l;xy.prototype.constructor=xy;c=xy.prototype;c.VD=function(){Cd(this);dz(this);return this};
+c.sc=function(a,b){b=ne(b);sy();a=iaa(a.Rq,b.Rq);return(new vy).mn(a)};c.xe=function(){return qsa()};c.hf=function(){};c.Df=function(){};c.$classData=g({E8:0},!1,"scalaz.EndoInstances$$anon$3",{E8:1,d:1,Hf:1,vf:1});function wY(){this.ga=null}wY.prototype=new l;wY.prototype.constructor=wY;function pz(a){var b=new wY;if(null===a)throw ug(vg(),null);b.ga=a;return b}wY.prototype.$classData=g({P8:0},!1,"scalaz.Foldable1$$anon$5",{P8:1,d:1,Waa:1,nC:1});function xY(){}xY.prototype=new goa;
+xY.prototype.constructor=xY;function rsa(){}rsa.prototype=xY.prototype;function yY(){this.ga=null}yY.prototype=new l;yY.prototype.constructor=yY;function oia(a){var b=new yY;if(null===a)throw ug(vg(),null);b.ga=a;return b}yY.prototype.$classData=g({S8:0},!1,"scalaz.Functor$$anon$6",{S8:1,d:1,uk:1,$i:1});function zY(){}zY.prototype=new l;zY.prototype.constructor=zY;zY.prototype.b=function(){Wy(this);return this};zY.prototype.qF=function(){};zY.prototype.pF=function(){};
+zY.prototype.$classData=g({V8:0},!1,"scalaz.IList$$anon$3",{V8:1,d:1,KR:1,JR:1});function AY(){}AY.prototype=new noa;AY.prototype.constructor=AY;function ssa(){}ssa.prototype=AY.prototype;function BY(){}BY.prototype=new ooa;BY.prototype.constructor=BY;function tsa(){}tsa.prototype=BY.prototype;function CY(){}CY.prototype=new qoa;CY.prototype.constructor=CY;function usa(){}usa.prototype=CY.prototype;function bz(){}bz.prototype=new l;bz.prototype.constructor=bz;bz.prototype.Jv=function(){};
+bz.prototype.Iv=function(){};bz.prototype.$classData=g({o9:0},!1,"scalaz.LeibnizInstances$$anon$1",{o9:1,d:1,Tw:1,Uw:1});function DY(){}DY.prototype=new soa;DY.prototype.constructor=DY;function vsa(){}vsa.prototype=DY.prototype;function EY(){this.ga=null}EY.prototype=new l;EY.prototype.constructor=EY;function Aia(a){var b=new EY;if(null===a)throw ug(vg(),null);b.ga=a;return b}EY.prototype.$classData=g({s9:0},!1,"scalaz.Monoid$$anon$5",{s9:1,d:1,Uma:1,qC:1});
+function Mx(){this.lZ=null;this.Nt=!1;this.zC=null}Mx.prototype=new toa;Mx.prototype.constructor=Mx;Mx.prototype.Ac=function(a){this.zC=a;return this};function T(a){a.Nt||(a.Nt||(a.lZ=ne(a.zC),a.Nt=!0),a.zC=null);return a.lZ}Mx.prototype.$classData=g({v9:0},!1,"scalaz.Need$$anon$4",{v9:1,jla:1,ila:1,d:1});function FY(){this.NE=null}FY.prototype=new uoa;FY.prototype.constructor=FY;FY.prototype.b=function(){LS.prototype.b.call(this);return this};
+FY.prototype.$classData=g({x9:0},!1,"scalaz.NonEmptyList$",{x9:1,kla:1,lla:1,d:1});var wsa=void 0;function eq(){wsa||(wsa=(new FY).b());return wsa}function GY(){}GY.prototype=new l;GY.prototype.constructor=GY;GY.prototype.b=function(){Wy(this);return this};GY.prototype.qF=function(){};GY.prototype.pF=function(){};GY.prototype.$classData=g({C9:0},!1,"scalaz.OneAnd$$anon$14",{C9:1,d:1,KR:1,JR:1});
+function xsa(a,b,d,e){return e.sc(d.y(b.Gc),K(function(a,b,d,e){return function(){return a.gn.Wj(b.Pc,d,e)}}(a,b,d,e)))}function HY(){}HY.prototype=new voa;HY.prototype.constructor=HY;function ysa(){}ysa.prototype=HY.prototype;function IY(){this.ga=null}IY.prototype=new l;IY.prototype.constructor=IY;function Iia(a){var b=new IY;if(null===a)throw ug(vg(),null);b.ga=a;return b}IY.prototype.$classData=g({G9:0},!1,"scalaz.Order$$anon$6",{G9:1,d:1,aba:1,TR:1});function JY(){this.ga=null}JY.prototype=new l;
+JY.prototype.constructor=JY;function Jia(a){var b=new JY;if(null===a)throw ug(vg(),null);b.ga=a;return b}JY.prototype.$classData=g({I9:0},!1,"scalaz.PlusEmpty$$anon$5",{I9:1,d:1,oC:1,Yw:1});function KY(){this.ga=null}KY.prototype=new l;KY.prototype.constructor=KY;KY.prototype.$classData=g({J9:0},!1,"scalaz.ProChoice$$anon$1",{J9:1,d:1,Wma:1,pC:1});function Iz(){}Iz.prototype=new l;Iz.prototype.constructor=Iz;
+Iz.prototype.b=function(){Ad(this);var a=new pY;if(null===this)throw ug(vg(),null);a.ga=this;return this};Iz.prototype.pg=function(){};Iz.prototype.$classData=g({T9:0},!1,"scalaz.Show$$anon$1",{T9:1,d:1,jka:1,ug:1});function LY(){this.ga=null}LY.prototype=new l;LY.prototype.constructor=LY;function zsa(a){var b=new LY;if(null===a)throw ug(vg(),null);b.ga=a;return b}LY.prototype.$classData=g({X9:0},!1,"scalaz.Split$$anon$1",{X9:1,d:1,bba:1,Xw:1});function MY(){this.ga=null}MY.prototype=new l;
+MY.prototype.constructor=MY;function Asa(a){var b=new MY;if(null===a)throw ug(vg(),null);b.ga=a;return b}MY.prototype.$classData=g({a$:0},!1,"scalaz.Strong$$anon$1",{a$:1,d:1,cba:1,pC:1});function NY(){}NY.prototype=new zoa;NY.prototype.constructor=NY;function Bsa(){}Bsa.prototype=NY.prototype;function oy(){this.bZ=this.KV=null}oy.prototype=new Aoa;oy.prototype.constructor=oy;function ny(a,b,d){a.bZ=b;a.KV=d;return a}oy.prototype.wl=function(){return this.KV};oy.prototype.Nl=function(a){return this.bZ.y(a)};
+oy.prototype.$classData=g({j$:0},!1,"scalaz.UnitReducer$$anon$1",{j$:1,Sla:1,M9:1,d:1});function OY(){}OY.prototype=new Boa;OY.prototype.constructor=OY;function Csa(){}Csa.prototype=OY.prototype;function PY(){}PY.prototype=new l;PY.prototype.constructor=PY;PY.prototype.b=function(){return this};PY.prototype.$classData=g({u$:0},!1,"scalaz.package$State$",{u$:1,d:1,Y9:1,b9:1});var Dsa=void 0;function QY(){}QY.prototype=new l;QY.prototype.constructor=QY;c=QY.prototype;c.sc=function(a,b){return!!a||!!ne(b)};
+c.xe=function(){return!1};c.hf=function(){};c.Df=function(){};c.$classData=g({N$:0},!1,"scalaz.std.AnyValInstances$booleanInstance$disjunction$",{N$:1,d:1,Hf:1,vf:1});function RY(){}RY.prototype=new l;RY.prototype.constructor=RY;RY.prototype.Mg=function(){Ty(this);return this};RY.prototype.ct=function(){};RY.prototype.bt=function(){};RY.prototype.$classData=g({R$:0},!1,"scalaz.std.EitherInstances$$anon$26",{R$:1,d:1,Bt:1,At:1});function SY(){}SY.prototype=new l;SY.prototype.constructor=SY;
+SY.prototype.Mg=function(){Ty(this);return this};SY.prototype.ct=function(){};SY.prototype.bt=function(){};SY.prototype.$classData=g({S$:0},!1,"scalaz.std.EitherInstances$$anon$27",{S$:1,d:1,Bt:1,At:1});function TY(){}TY.prototype=new l;TY.prototype.constructor=TY;TY.prototype.Mg=function(){Ty(this);return this};TY.prototype.ct=function(){};TY.prototype.bt=function(){};TY.prototype.$classData=g({T$:0},!1,"scalaz.std.EitherInstances$$anon$28",{T$:1,d:1,Bt:1,At:1});function UY(){}UY.prototype=new l;
+UY.prototype.constructor=UY;UY.prototype.Mg=function(){Ty(this);return this};UY.prototype.ct=function(){};UY.prototype.bt=function(){};UY.prototype.$classData=g({U$:0},!1,"scalaz.std.EitherInstances$$anon$29",{U$:1,d:1,Bt:1,At:1});function VY(){}VY.prototype=new l;VY.prototype.constructor=VY;VY.prototype.Mg=function(){Ty(this);return this};VY.prototype.ct=function(){};VY.prototype.bt=function(){};VY.prototype.$classData=g({V$:0},!1,"scalaz.std.EitherInstances$$anon$30",{V$:1,d:1,Bt:1,At:1});
+function WY(){}WY.prototype=new l;WY.prototype.constructor=WY;WY.prototype.Mg=function(){Ty(this);return this};WY.prototype.ct=function(){};WY.prototype.bt=function(){};WY.prototype.$classData=g({W$:0},!1,"scalaz.std.EitherInstances$$anon$31",{W$:1,d:1,Bt:1,At:1});function Lq(){}Lq.prototype=new l;Lq.prototype.constructor=Lq;c=Lq.prototype;c.sc=function(a,b){return Oq(ne(b),a)};c.xe=function(){return y()};c.hf=function(){};c.Eu=function(){Cd(this);dz(this);return this};c.Df=function(){};
+c.$classData=g({haa:0},!1,"scalaz.std.ListInstances$$anon$4",{haa:1,d:1,Hf:1,vf:1});function XY(){}XY.prototype=new l;XY.prototype.constructor=XY;XY.prototype.Wq=function(){};XY.prototype.$classData=g({vaa:0},!1,"scalaz.std.TupleInstances2$$anon$64",{vaa:1,d:1,rma:1,bC:1});function YY(){}YY.prototype=new l;YY.prototype.constructor=YY;YY.prototype.Jv=function(){};YY.prototype.Iv=function(){};YY.prototype.$D=function(){yd(this);zx(this);return this};
+YY.prototype.$classData=g({waa:0},!1,"scalaz.std.TypeConstraintInstances$$anon$1",{waa:1,d:1,Tw:1,Uw:1});function ZY(){}ZY.prototype=new l;ZY.prototype.constructor=ZY;ZY.prototype.Jv=function(){};ZY.prototype.Iv=function(){};ZY.prototype.$D=function(){yd(this);zx(this);return this};ZY.prototype.$classData=g({xaa:0},!1,"scalaz.std.TypeConstraintInstances$$anon$2",{xaa:1,d:1,Tw:1,Uw:1});function $Y(){}$Y.prototype=new l;$Y.prototype.constructor=$Y;c=$Y.prototype;
+c.sc=function(a,b){Pz();var d=ne(b);b=new KR;var e=a.jy,f;f=a.Fc;var d=d.Fc,h=f.Jb,k=h>>31,p=d.Jb,t=p>>31,p=h+p|0,h=(-2147483648^p)<(-2147483648^h)?1+(k+t|0)|0:k+t|0;if(aZ(f)||aZ(d))f=Mpa(DU(),(new Vb).ia(p,h));else if(64>(f.Ee+d.Ee|0)){var t=f.Od,k=t.la,t=t.qa,x=d.Od,E=x.la,S=65535&k,U=k>>>16|0,ga=65535&E,ma=E>>>16|0,va=da(S,ga),ga=da(U,ga),Ia=da(S,ma),S=va+((ga+Ia|0)<<16)|0,va=(va>>>16|0)+Ia|0,k=(((da(k,x.qa)+da(t,E)|0)+da(U,ma)|0)+(va>>>16|0)|0)+(((65535&va)+ga|0)>>>16|0)|0;f=0===S&&-2147483648===
+k&&0>f.Od.qa&&0>d.Od.qa?(new GR).oq(Npa(cf(),63),GU(DU(),(new Vb).ia(p,h))):AU(DU(),(new Vb).ia(S,k),GU(DU(),(new Vb).ia(p,h)))}else f=Nf(EU(f),EU(d)),f=(new GR).oq(f,GU(DU(),(new Vb).ia(p,h)));Esa(f,e);return JR(b,f,a.jy)};c.xe=function(){Pz();var a=bx();return fx(a,1,a.Nj)};c.hf=function(){};c.cE=function(){Cd(this);dz(this);return this};c.Df=function(){};c.$classData=g({Laa:0},!1,"scalaz.std.math.BigDecimalInstances$$anon$2",{Laa:1,d:1,Hf:1,vf:1});function nT(){}nT.prototype=new l;
+nT.prototype.constructor=nT;nT.prototype.Gu=function(){return this};nT.prototype.$classData=g({dba:0},!1,"scalaz.syntax.Syntaxes$foldable$",{dba:1,d:1,UR:1,VR:1});function dY(){}dY.prototype=new l;dY.prototype.constructor=dY;dY.prototype.Wv=function(){return"utest.TestSuite"};dY.prototype.Vu=function(){return!0};dY.prototype.$E=function(){return!0};dY.prototype.$classData=g({zba:0},!1,"utest.runner.BaseRunner$$anon$2$$anon$1",{zba:1,d:1,YB:1,wt:1});function wT(){}wT.prototype=new l;
+wT.prototype.constructor=wT;wT.prototype.Wv=function(){return"utest.TestSuite"};wT.prototype.Vu=function(){return!0};wT.prototype.$E=function(){return!0};wT.prototype.$classData=g({Bba:0},!1,"utest.runner.Framework$$anon$1",{Bba:1,d:1,YB:1,wt:1});function xT(){rT.call(this);this.iz=this.qu=this.pu=this.Vv=this.gw=this.Cy=this.$v=null}xT.prototype=new Moa;xT.prototype.constructor=xT;c=xT.prototype;c.SS=function(a){var b=this.gw;b.mh=b.mh+a|0};
+c.Cx=function(){ne(this.$v);var a=this.Cy.Y.zb("\n"),b=this.qu.Y,d=y();if(null!==b&&Ea(b,d))b="";else var b=r(),d=this.qu.Y,e=this.iz.Y,f=B(),d=qy(d.Ge(e,f.s)),e=new bZ,f=B(),b=I(b,(new w).f(["\u001b[31mFailures:",d.jc(e,f.s).zb("\n")])).zb("\n");return I(r(),(new w).f(["-----------------------------------Results-----------------------------------",a,b,u((new v).G((new w).f(["Tests: ",""])),(new w).f([this.gw])),u((new v).G((new w).f(["Passed: ",""])),(new w).f([this.Vv])),u((new v).G((new w).f(["Failed: ",
+""])),(new w).f([this.pu]))])).zb("\n")};
+c.YE=function(a){switch(65535&(a.charCodeAt(0)|0)){case 104:break;case 114:a=(new Sb).c(a);this.BC(Ck(a));break;case 102:a=(new Sb).c(a);this.AC(Ck(a));break;case 116:a=(new Sb).c(a);a=Ck(a);a=(new Sb).c(a);a=vi(ti(),a.R,10);var b=this.gw;b.mh=b.mh+a|0;break;case 99:a=(new Sb).c(a);this.CC(Ck(a));break;case 105:switch(65535&(a.charCodeAt(1)|0)){case 115:a=this.Vv;a.mh=1+a.mh|0;break;case 102:a=this.pu;a.mh=1+a.mh|0;break;default:Bn(Cn(),"bad message: "+a)}break;default:Bn(Cn(),"bad message: "+a)}a=
+u((new v).G((new w).f(["",",",",",""])),(new w).f([this.Vv.mh,this.pu.mh,this.gw.mh]));return(new J).j(a)};c.AU=function(){var a=this.pu;a.mh=1+a.mh|0};function Uoa(a,b,d,e,f){a.$v=f;rT.prototype.DU.call(a,b,0,d);ne(e);a.Cy=(new cZ).j(y());a.gw=(new dZ).qb(0);a.Vv=(new dZ).qb(0);a.pu=(new dZ).qb(0);a.qu=(new cZ).j(y());a.iz=(new cZ).j(y());return a}c.BU=function(){var a=this.Vv;a.mh=1+a.mh|0};c.CC=function(a){a:for(;;){var b=this.iz.Y;if(!eZ(this.iz,b,Ng(new Og,a,b)))continue a;break}};
+c.AC=function(a){a:for(;;){var b=this.qu.Y;if(!eZ(this.qu,b,Ng(new Og,a,b)))continue a;break}};c.BC=function(a){a:for(;;){var b=this.Cy.Y;if(!eZ(this.Cy,b,Ng(new Og,a,b)))continue a;break}};c.$classData=g({Cba:0},!1,"utest.runner.MasterRunner",{Cba:1,xba:1,d:1,L7:1});function yT(){rT.call(this);this.$v=this.ar=null}yT.prototype=new Moa;yT.prototype.constructor=yT;c=yT.prototype;c.SS=function(a){this.ar.y(u((new v).G((new w).f(["t",""])),(new w).f([a])))};c.YE=function(){return F()};
+c.Cx=function(){ne(this.$v);return""};c.AU=function(){this.ar.y(u((new v).G((new w).f(["if"])),y()))};c.BU=function(){this.ar.y(u((new v).G((new w).f(["is"])),y()))};function Voa(a,b,d,e,f,h){a.ar=e;a.$v=h;rT.prototype.DU.call(a,b,0,d);ne(f);return a}c.CC=function(a){this.ar.y(u((new v).G((new w).f(["c",""])),(new w).f([a])))};c.AC=function(a){this.ar.y(u((new v).G((new w).f(["f",""])),(new w).f([a])))};c.BC=function(a){this.ar.y(u((new v).G((new w).f(["r",""])),(new w).f([a])))};
+c.$classData=g({Eba:0},!1,"utest.runner.ScalaJsSlaveRunner",{Eba:1,xba:1,d:1,L7:1});var Aa=g({Yba:0},!1,"java.lang.Boolean",{Yba:1,d:1,i:1,Ed:1},void 0,void 0,function(a){return"boolean"===typeof a});function Ke(){this.Y=0}Ke.prototype=new l;Ke.prototype.constructor=Ke;Ke.prototype.o=function(a){return ie(a)?this.Y===a.Y:!1};Ke.prototype.k=function(){return ba.String.fromCharCode(this.Y)};Ke.prototype.Xa=function(a){this.Y=a;return this};Ke.prototype.r=function(){return this.Y};
+function ie(a){return!!(a&&a.$classData&&a.$classData.n.eV)}var Rja=g({eV:0},!1,"java.lang.Character",{eV:1,d:1,i:1,Ed:1});Ke.prototype.$classData=Rja;function fZ(){this.eT=this.dT=this.TU=null;this.ya=0}fZ.prototype=new l;fZ.prototype.constructor=fZ;function ufa(a,b){return 65535&(ba.String.fromCharCode(b).toLowerCase().charCodeAt(0)|0)}fZ.prototype.b=function(){return this};
+function Fsa(a,b,d){return 36<d||2>d?-1:48<=b&&57>=b&&(-48+b|0)<d?-48+b|0:65<=b&&90>=b&&(-65+b|0)<(-10+d|0)?-55+b|0:97<=b&&122>=b&&(-97+b|0)<(-10+d|0)?-87+b|0:65313<=b&&65338>=b&&(-65313+b|0)<(-10+d|0)?-65303+b|0:65345<=b&&65370>=b&&(-65345+b|0)<(-10+d|0)?-65303+b|0:-1}function Fh(a,b){return 256>b?48<=b&&57>=b:9===Qqa(a,b)}
+function Qqa(a,b){WA();a:{if(0===(2&a.ya)&&0===(2&a.ya)){var d=(new w).f([257,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,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,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,2,1,1,1,1,3,2,1,1,1,2,1,3,2,4,1,2,1,3,3,2,1,2,1,1,1,1,1,2,1,1,2,1,1,2,1,3,1,1,1,2,2,1,1,3,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,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,3,
+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,7,2,1,2,2,1,1,4,1,1,1,1,1,1,1,1,69,1,27,18,4,12,14,5,7,1,1,1,17,112,1,1,1,1,1,1,1,1,2,1,3,1,5,2,1,1,3,1,1,1,2,1,17,1,9,35,1,2,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,2,2,51,48,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,5,2,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,2,1,1,
+1,1,1,1,1,1,1,1,1,1,2,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,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,9,38,2,1,6,1,39,1,1,1,4,1,1,45,1,1,1,2,1,2,1,1,8,27,5,3,2,11,5,1,3,2,1,2,2,11,1,2,2,32,1,10,21,10,4,2,1,99,1,1,7,1,1,6,2,2,1,4,2,10,3,2,1,14,1,1,1,1,30,27,2,89,11,1,14,10,33,9,2,1,3,1,5,22,4,1,9,1,3,1,5,2,15,1,25,3,2,1,65,1,1,11,55,27,1,3,1,54,1,1,1,1,3,8,4,1,2,1,7,10,2,2,10,1,1,6,1,7,1,1,2,1,8,2,2,2,22,
+1,7,1,1,3,4,2,1,1,3,4,2,2,2,2,1,1,8,1,4,2,1,3,2,2,10,2,2,6,1,1,5,2,1,1,6,4,2,2,22,1,7,1,2,1,2,1,2,2,1,1,3,2,4,2,2,3,3,1,7,4,1,1,7,10,2,3,1,11,2,1,1,9,1,3,1,22,1,7,1,2,1,5,2,1,1,3,5,1,2,1,1,2,1,2,1,15,2,2,2,10,1,1,15,1,2,1,8,2,2,2,22,1,7,1,2,1,5,2,1,1,1,1,1,4,2,2,2,2,1,8,1,1,4,2,1,3,2,2,10,1,1,6,10,1,1,1,6,3,3,1,4,3,2,1,1,1,2,3,2,3,3,3,12,4,2,1,2,3,3,1,3,1,2,1,6,1,14,10,3,6,1,1,6,3,1,8,1,3,1,23,1,10,1,5,3,1,3,4,1,3,1,4,7,2,1,2,6,2,2,2,10,8,7,1,2,2,1,8,1,3,1,23,1,10,1,5,2,1,1,1,1,5,1,1,2,1,2,2,7,2,
+7,1,1,2,2,2,10,1,2,15,2,1,8,1,3,1,41,2,1,3,4,1,3,1,3,1,1,8,1,8,2,2,2,10,6,3,1,6,2,2,1,18,3,24,1,9,1,1,2,7,3,1,4,3,3,1,1,1,8,18,2,1,12,48,1,2,7,4,1,6,1,8,1,10,2,37,2,1,1,2,2,1,1,2,1,6,4,1,7,1,3,1,1,1,1,2,2,1,4,1,2,6,1,2,1,2,5,1,1,1,6,2,10,2,4,32,1,3,15,1,1,3,2,6,10,10,1,1,1,1,1,1,1,1,1,1,2,8,1,36,4,14,1,5,1,2,5,11,1,36,1,8,1,6,1,2,5,4,2,37,43,2,4,1,6,1,2,2,2,1,10,6,6,2,2,4,3,1,3,2,7,3,4,13,1,2,2,6,1,1,1,10,3,1,2,38,1,1,5,1,2,43,1,1,332,1,4,2,7,1,1,1,4,2,41,1,4,2,33,1,4,2,7,1,1,1,4,2,15,1,57,1,4,2,
+67,2,3,9,20,3,16,10,6,85,11,1,620,2,17,1,26,1,1,3,75,3,3,15,13,1,4,3,11,18,3,2,9,18,2,12,13,1,3,1,2,12,52,2,1,7,8,1,2,11,3,1,3,1,1,1,2,10,6,10,6,6,1,4,3,1,1,10,6,35,1,52,8,41,1,1,5,70,10,29,3,3,4,2,3,4,2,1,6,3,4,1,3,2,10,30,2,5,11,44,4,17,7,2,6,10,1,3,34,23,2,3,2,2,53,1,1,1,7,1,1,1,1,2,8,6,10,2,1,10,6,10,6,7,1,6,82,4,1,47,1,1,5,1,1,5,1,2,7,4,10,7,10,9,9,3,2,1,30,1,4,2,2,1,1,2,2,10,44,1,1,2,3,1,1,3,2,8,4,36,8,8,2,2,3,5,10,3,3,10,30,6,2,64,8,8,3,1,13,1,7,4,1,4,2,1,2,9,44,63,13,1,34,37,39,21,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,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,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,1,1,9,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,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,9,8,6,2,6,2,8,
+8,8,8,6,2,6,2,8,1,1,1,1,1,1,1,1,8,8,14,2,8,8,8,8,8,8,5,1,2,4,1,1,1,3,3,1,2,4,1,3,4,2,2,4,1,3,8,5,3,2,3,1,2,4,1,2,1,11,5,6,2,1,1,1,2,1,1,1,8,1,1,5,1,9,1,1,4,2,3,1,1,1,11,1,1,1,10,1,5,5,6,1,1,2,6,3,1,1,1,10,3,1,1,1,13,3,27,21,13,4,1,3,12,15,2,1,4,1,2,1,3,2,3,1,1,1,2,1,5,6,1,1,1,1,1,1,4,1,1,4,1,4,1,2,2,2,5,1,4,1,1,2,1,1,16,35,1,1,4,1,6,5,5,2,4,1,2,1,2,1,7,1,31,2,2,1,1,1,31,268,8,4,20,2,7,1,1,81,1,30,25,40,6,18,12,39,25,11,21,60,78,22,183,1,9,1,54,8,111,1,144,1,103,1,1,1,1,1,1,1,1,1,1,1,1,1,1,30,44,5,
+1,1,31,1,1,1,1,1,1,1,1,1,1,16,256,131,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,63,1,1,1,1,32,1,1,258,48,21,2,6,3,10,166,47,1,47,1,1,1,3,2,1,1,1,1,1,1,4,1,1,2,1,6,2,3,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,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,2,6,1,1,1,1,3,1,1,5,4,1,2,38,1,1,5,1,2,56,7,1,1,14,1,23,9,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,32,2,1,1,1,1,3,1,1,1,1,1,9,1,2,1,1,1,1,2,1,1,1,
+1,1,1,1,1,1,1,5,1,10,2,68,26,1,89,12,214,26,12,4,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,9,4,2,1,5,2,3,1,1,1,2,1,86,2,2,2,2,1,1,90,1,3,1,5,41,3,94,1,2,4,10,27,5,36,12,16,31,1,10,30,8,1,15,32,10,39,15,63,1,256,6582,10,64,20941,51,21,1,1143,3,55,9,40,6,2,268,1,3,16,10,2,20,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,1,10,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,7,1,70,10,2,6,8,23,9,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,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,1,1,8,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,12,1,1,1,1,1,1,1,1,1,1,1,77,2,1,7,1,3,1,4,1,23,2,2,1,4,4,6,2,1,1,6,52,4,8,2,50,16,1,9,2,10,6,18,6,3,1,4,10,28,8,2,23,11,2,11,1,29,3,3,1,47,1,2,4,2,1,4,13,1,1,10,4,2,32,41,6,2,2,2,2,9,3,1,8,1,1,2,10,2,4,16,1,6,3,1,1,4,48,1,1,3,2,2,5,2,1,1,1,24,2,1,2,11,1,2,2,2,1,2,1,1,10,6,2,6,2,6,9,7,1,7,145,35,2,1,2,1,2,1,1,1,2,10,6,11172,12,23,
+4,49,4,2048,6400,366,2,106,38,7,12,5,5,1,1,10,1,13,1,5,1,1,1,2,1,2,1,108,16,17,363,1,1,16,64,2,54,40,12,1,1,2,16,7,1,1,1,6,7,9,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,4,3,3,1,4,1,1,1,1,1,1,1,3,1,1,3,1,1,1,2,4,5,1,135,2,1,1,3,1,3,1,1,1,1,1,1,2,10,2,3,2,26,1,1,1,1,1,1,26,1,1,1,1,1,1,1,1,1,2,10,1,45,2,31,3,6,2,6,2,6,2,3,3,2,1,1,1,2,1,1,4,2,10,3,2,2,12,1,26,1,19,1,2,1,15,2,14,34,123,5,3,4,45,3,9,53,4,17,1,5,12,52,45,1,130,29,3,49,47,31,1,4,12,17,1,8,1,53,30,1,1,36,4,8,1,5,42,40,40,78,2,10,854,6,2,
+1,1,44,1,2,3,1,2,23,1,1,8,160,22,6,3,1,26,5,1,64,56,6,2,64,1,3,1,2,5,4,4,1,3,1,27,4,3,4,1,8,8,9,7,29,2,1,128,54,3,7,22,2,8,19,5,8,128,73,535,31,385,1,1,1,53,15,7,4,20,10,16,2,1,45,3,4,2,2,2,1,4,14,25,7,10,6,3,36,5,1,8,1,10,4,60,2,1,48,3,9,2,4,4,7,10,1190,43,1,1,1,2,6,1,1,8,10,2358,879,145,99,13,4,2956,1071,13265,569,1223,69,11,1,46,16,4,13,16480,2,8190,246,10,39,2,60,2,3,3,6,8,8,2,7,30,4,48,34,66,3,1,186,87,9,18,142,26,26,26,7,1,18,26,26,1,1,2,2,1,2,2,2,4,1,8,4,1,1,1,7,1,11,26,26,2,1,4,2,8,1,7,1,
+26,2,1,4,1,5,1,1,3,7,1,26,26,26,26,26,26,26,26,26,26,26,26,28,2,25,1,25,1,6,25,1,25,1,6,25,1,25,1,6,25,1,25,1,6,25,1,25,1,6,1,1,2,50,5632,4,1,27,1,2,1,1,2,1,1,10,1,4,1,1,1,1,6,1,4,1,1,1,1,1,1,3,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,4,1,7,1,4,1,4,1,1,1,10,1,17,5,3,1,5,1,17,52,2,270,44,4,100,12,15,2,14,2,15,1,15,32,11,5,31,1,60,4,43,75,29,13,43,5,9,7,2,174,33,15,6,1,70,3,20,12,37,1,5,21,17,15,63,1,1,1,182,1,4,3,62,2,4,12,24,147,70,4,11,48,70,58,116,2188,42711,41,4149,11,222,16354,542,722403,1,30,96,
+128,240,65040,65534,2,65534]),e=d.pa.length|0,e=la(Wa(db),[e]),f;f=0;for(d=Ve(new We,d,0,d.pa.length|0);d.ta();){var h=d.ma();e.m[f]=h|0;f=1+f|0}d=e.m.length;f=-1+d|0;if(!(1>=d))for(d=1;;){h=d;e.m[h]=e.m[h]+e.m[-1+h|0]|0;if(d===f)break;d=1+d|0}a.dT=e;a.ya|=2}e=a.dT;f=0;d=e.m.length;for(;;){if(f===d){b=-1-f|0;break a}var h=(f+d|0)>>>1|0,k=e.m[h];if(b<k)d=h;else{if(bn(cn(),b,k)){b=h;break a}f=1+h|0}}}b=1+b|0;if(0===(4&a.ya)&&0===(4&a.ya)){d=(new w).f([1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,1,2,5,1,3,2,1,3,2,1,3,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,3,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,
+2,1,2,1,2,1,2,1,2,1,2,1,2,5,2,4,27,4,27,4,27,4,27,4,27,6,1,2,1,2,4,27,1,2,0,4,2,24,0,27,1,24,1,0,1,0,1,2,1,0,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,25,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,28,6,7,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,
+2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,0,1,0,4,24,0,2,0,24,20,0,26,0,6,20,6,24,6,24,6,24,6,0,5,0,5,24,0,16,0,25,24,26,24,28,6,24,0,24,5,4,5,6,9,24,5,6,5,24,5,6,16,28,6,4,6,28,6,5,9,5,28,5,24,0,16,5,6,5,6,0,5,6,5,0,9,5,6,4,28,24,4,0,5,6,4,6,4,6,4,6,0,24,0,5,6,0,24,0,5,0,5,0,6,0,6,8,5,6,8,6,5,8,6,8,6,8,5,6,5,6,24,9,24,4,5,0,5,0,6,8,0,5,0,5,0,5,0,5,0,5,0,5,0,6,5,8,6,0,8,0,8,6,5,0,8,0,5,0,5,6,0,9,5,26,11,28,26,0,6,8,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,6,0,8,6,0,6,0,6,0,6,
+0,5,0,5,0,9,6,5,6,0,6,8,0,5,0,5,0,5,0,5,0,5,0,5,0,6,5,8,6,0,6,8,0,8,6,0,5,0,5,6,0,9,24,26,0,6,8,0,5,0,5,0,5,0,5,0,5,0,5,0,6,5,8,6,8,6,0,8,0,8,6,0,6,8,0,5,0,5,6,0,9,28,5,11,0,6,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,8,6,8,0,8,0,8,6,0,5,0,8,0,9,11,28,26,28,0,8,0,5,0,5,0,5,0,5,0,5,0,5,6,8,0,6,0,6,0,6,0,5,0,5,6,0,9,0,11,28,0,8,0,5,0,5,0,5,0,5,0,5,0,6,5,8,6,8,0,6,8,0,8,6,0,8,0,5,0,5,6,0,9,0,5,0,8,0,5,0,5,0,5,0,5,8,6,0,8,0,8,6,5,0,8,0,5,6,0,9,11,0,28,5,0,8,0,5,0,5,0,5,0,5,0,5,0,6,0,8,6,0,6,0,8,0,8,24,
+0,5,6,5,6,0,26,5,4,6,24,9,24,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,6,5,6,0,6,5,0,5,0,4,0,6,0,9,0,5,0,5,28,24,28,24,28,6,28,9,11,28,6,28,6,28,6,21,22,21,22,8,5,0,5,0,6,8,6,24,6,5,6,0,6,0,28,6,28,0,28,24,28,24,0,5,8,6,8,6,8,6,8,6,5,9,24,5,8,6,5,6,5,8,5,8,5,6,5,6,8,6,8,6,5,8,9,8,6,28,1,0,1,0,1,0,5,24,4,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,6,24,11,0,5,28,0,5,0,20,5,24,5,12,5,21,22,0,5,24,10,0,5,0,5,6,0,5,6,24,0,5,6,0,5,0,5,0,6,0,5,6,8,6,8,6,8,6,24,4,24,26,5,6,0,9,
+0,11,0,24,20,24,6,12,0,9,0,5,4,5,0,5,6,5,0,5,0,5,0,6,8,6,8,0,8,6,8,6,0,28,0,24,9,5,0,5,0,5,0,8,5,8,0,9,11,0,28,5,6,8,0,24,5,8,6,8,6,0,6,8,6,8,6,8,6,0,6,9,0,9,0,24,4,24,0,6,8,5,6,8,6,8,6,8,6,8,5,0,9,24,28,6,28,0,6,8,5,8,6,8,6,8,6,8,5,9,5,6,8,6,8,6,8,6,8,0,24,5,8,6,8,6,0,24,9,0,5,9,5,4,24,0,24,0,6,24,6,8,6,5,6,5,8,6,5,0,2,4,2,4,2,4,6,0,6,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,0,1,0,2,1,2,1,2,0,1,0,2,0,1,0,1,0,1,0,1,2,1,2,0,2,3,2,3,2,3,2,0,2,1,3,27,2,27,2,0,2,1,3,27,2,0,2,1,0,27,2,1,27,0,2,0,2,1,3,27,0,12,16,20,24,29,30,21,29,30,21,29,24,13,
+14,16,12,24,29,30,24,23,24,25,21,22,24,25,24,23,24,12,16,0,16,11,4,0,11,25,21,22,4,11,25,21,22,0,4,0,26,0,6,7,6,7,6,0,28,1,28,1,28,2,1,2,1,2,28,1,28,25,1,28,1,28,1,28,1,28,1,28,2,1,2,5,2,28,2,1,25,1,2,28,25,28,2,28,11,10,1,2,10,11,0,25,28,25,28,25,28,25,28,25,28,25,28,25,28,25,28,25,28,25,28,25,28,25,28,21,22,28,25,28,25,28,25,28,0,28,0,28,0,11,28,11,28,25,28,25,28,25,28,25,28,0,28,21,22,21,22,21,22,21,22,21,22,21,22,21,22,11,28,25,21,22,25,21,22,21,22,21,22,21,22,21,22,25,28,25,21,22,21,22,21,22,
+21,22,21,22,21,22,21,22,21,22,21,22,21,22,21,22,25,21,22,21,22,25,21,22,25,28,25,28,25,0,28,0,1,0,2,0,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,4,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,28,1,2,1,2,6,1,2,0,24,11,24,2,0,2,0,2,0,5,0,4,24,0,6,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,6,24,29,30,29,30,24,29,30,24,29,30,24,20,24,20,24,29,30,24,29,30,21,22,21,22,
+21,22,21,22,24,4,24,20,0,28,0,28,0,28,0,28,0,12,24,28,4,5,10,21,22,21,22,21,22,21,22,21,22,28,21,22,21,22,21,22,21,22,20,21,22,28,10,6,8,20,4,28,10,4,5,24,28,0,5,0,6,27,4,5,20,5,24,4,5,0,5,0,5,0,28,11,28,5,0,28,0,5,28,0,11,28,11,28,11,28,11,28,11,28,0,28,5,0,28,5,0,5,4,5,0,28,0,5,4,24,5,4,24,5,9,5,0,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,6,7,24,6,24,4,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,0,6,5,10,6,24,0,27,4,27,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,4,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,4,27,1,2,1,2,0,1,2,1,2,0,1,2,1,2,1,2,1,2,1,2,1,0,4,2,5,6,5,6,5,6,5,8,6,8,28,0,11,28,26,28,0,5,24,0,8,5,8,6,0,24,9,0,6,5,24,5,0,9,5,6,24,5,6,8,0,24,5,0,6,8,5,6,8,6,8,6,8,24,0,4,9,0,24,0,5,6,8,6,8,6,0,5,6,5,6,8,0,9,0,24,5,4,5,28,5,8,0,5,6,5,6,5,6,5,6,5,6,5,0,5,4,24,5,8,6,8,24,5,4,8,6,0,5,0,5,0,5,0,5,0,5,0,5,8,6,8,6,8,24,8,6,0,9,0,5,0,5,0,
+5,0,19,18,5,0,5,0,2,0,2,0,5,6,5,25,5,0,5,0,5,0,5,0,5,0,5,27,0,5,21,22,0,5,0,5,0,5,26,28,0,6,24,21,22,24,0,6,0,24,20,23,21,22,21,22,21,22,21,22,21,22,21,22,21,22,21,22,24,21,22,24,23,24,0,24,20,21,22,21,22,21,22,24,25,20,25,0,24,26,24,0,5,0,5,0,16,0,24,26,24,21,22,24,25,24,20,24,9,24,25,24,1,21,24,22,27,23,27,2,21,25,22,25,21,22,24,21,22,24,5,4,5,4,5,0,5,0,5,0,5,0,5,0,26,25,27,28,26,0,28,25,28,0,16,28,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,24,0,11,0,28,10,11,28,11,0,28,0,28,6,0,5,0,5,0,5,0,11,0,5,10,5,10,0,
+5,0,24,5,0,5,24,10,0,1,2,5,0,9,0,5,0,5,0,5,0,5,0,5,0,5,0,24,11,0,5,11,0,24,5,0,24,0,5,0,5,0,5,6,0,6,0,6,5,0,5,0,5,0,6,0,6,11,0,24,0,5,11,24,0,5,0,24,5,0,11,5,0,11,0,5,0,11,0,8,6,8,5,6,24,0,11,9,0,6,8,5,8,6,8,6,24,16,24,0,5,0,9,0,6,5,6,8,6,0,9,24,0,6,8,5,8,6,8,5,24,0,9,0,5,6,8,6,8,6,8,6,0,9,0,5,0,10,0,24,0,5,0,5,0,5,0,5,8,0,6,4,0,5,0,28,0,28,0,28,8,6,28,8,16,6,28,6,28,6,28,0,28,6,28,0,28,0,11,0,1,2,1,2,0,2,1,2,1,0,1,0,1,0,1,0,1,0,1,2,0,2,0,2,0,2,1,2,1,0,1,0,1,0,1,0,2,1,0,1,0,1,0,1,0,1,0,2,1,2,1,2,
+1,2,1,2,1,2,1,2,0,1,25,2,25,2,1,25,2,25,2,1,25,2,25,2,1,25,2,25,2,1,25,2,25,2,1,2,0,9,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,25,0,28,0,28,0,28,0,28,0,28,0,28,0,11,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,5,0,5,0,5,0,5,0,16,0,16,0,6,0,18,0,18,0]);e=d.pa.length|0;e=la(Wa(bb),[e]);f=0;for(d=Ve(new We,d,0,d.pa.length|0);d.ta();)h=
+d.ma(),e.m[f]=h|0,f=1+f|0;a.eT=e;a.ya|=4}return a.eT.m[0>b?-b|0:b]}
+function Pqa(a){if(0===(1&a.ya)&&0===(1&a.ya)){var b=(new w).f([15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,12,24,24,24,26,24,24,24,21,22,24,25,24,20,24,24,9,9,9,9,9,9,9,9,9,9,24,24,25,25,25,24,24,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,21,24,22,27,23,27,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,21,25,22,25,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,12,24,26,26,26,26,28,
+24,27,28,5,29,25,16,28,27,28,25,11,11,27,2,24,24,27,11,5,30,11,11,11,24,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,25,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,25,2,2,2,2,2,2,2,2]),d=b.pa.length|0,d=la(Wa(bb),[d]),e;e=0;for(b=Ve(new We,b,0,b.pa.length|0);b.ta();){var f=b.ma();d.m[e]=f|0;e=1+e|0}a.TU=d;a.ya|=1}return a.TU}function tca(a,b){return 65535&(ba.String.fromCharCode(b).toUpperCase().charCodeAt(0)|0)}function Oqa(a){return 12===a||13===a||14===a}
+fZ.prototype.$classData=g({$ba:0},!1,"java.lang.Character$",{$ba:1,d:1,l:1,i:1});var Gsa=void 0;function Gh(){Gsa||(Gsa=(new fZ).b());return Gsa}function gZ(){this.eD=null;this.ya=!1}gZ.prototype=new l;gZ.prototype.constructor=gZ;gZ.prototype.b=function(){return this};function Hsa(a){a.ya||(a.eD=new ba.RegExp("^[\\x00-\\x20]*[+-]?(NaN|Infinity|(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?)[fFdD]?[\\x00-\\x20]*$"),a.ya=!0);return a.eD}
+function Hh(a,b){if((a.ya?a.eD:Hsa(a)).test(b))return+ba.parseFloat(b);throw(new hZ).c(u((new v).G((new w).f(['For input string: "','"'])),(new w).f([b])));}gZ.prototype.$classData=g({dca:0},!1,"java.lang.Double$",{dca:1,d:1,l:1,i:1});var Isa=void 0;function Ih(){Isa||(Isa=(new gZ).b());return Isa}function iZ(){this.Az=null;this.yG=0}iZ.prototype=new l;iZ.prototype.constructor=iZ;function jZ(){}jZ.prototype=iZ.prototype;iZ.prototype.o=function(a){return this===a};iZ.prototype.k=function(){return this.Az};
+iZ.prototype.Cd=function(a,b){this.Az=a;this.yG=b;return this};iZ.prototype.r=function(){return Ka(this)};function kZ(){DT.call(this)}kZ.prototype=new ET;kZ.prototype.constructor=kZ;function Jsa(){}Jsa.prototype=kZ.prototype;function Kr(){DT.call(this)}Kr.prototype=new ET;Kr.prototype.constructor=Kr;function lZ(){}lZ.prototype=Kr.prototype;Kr.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};Kr.prototype.gc=function(a,b){DT.prototype.gc.call(this,a,b);return this};
+function gs(a){return!!(a&&a.$classData&&a.$classData.n.xd)}Kr.prototype.$classData=g({xd:0},!1,"java.lang.Exception",{xd:1,Lc:1,d:1,i:1});function mZ(){}mZ.prototype=new l;mZ.prototype.constructor=mZ;mZ.prototype.b=function(){return this};mZ.prototype.jn=function(a){throw(new hZ).c(u((new v).G((new w).f(['For input string: "','"'])),(new w).f([a])));};
+function vi(a,b,d){if(null===b||0===((new Sb).c(b).R.length|0)||2>d||36<d)a.jn(b);else{var e=45===(65535&(b.charCodeAt(0)|0))||43===(65535&(b.charCodeAt(0)|0))?1:0;if(((new Sb).c(b).R.length|0)<=e)a.jn(b);else{for(;;){var f=e,h=(new Sb).c(b).R;if(f<(h.length|0))0>Fsa(Gh(),65535&(b.charCodeAt(e)|0),d)&&a.jn(b),e=1+e|0;else break}d=+ba.parseInt(b,d);return d!==d||2147483647<d||-2147483648>d?a.jn(b):Na(d)}}}
+function OE(a,b){a=b-(1431655765&b>>1)|0;a=(858993459&a)+(858993459&a>>2)|0;return da(16843009,252645135&(a+(a>>4)|0))>>24}mZ.prototype.$classData=g({ica:0},!1,"java.lang.Integer$",{ica:1,d:1,l:1,i:1});var Ksa=void 0;function ti(){Ksa||(Ksa=(new mZ).b());return Ksa}function nZ(){this.AS=null;this.ya=!1}nZ.prototype=new l;nZ.prototype.constructor=nZ;nZ.prototype.b=function(){return this};
+function Uba(a,b){""===b&&oZ(b);var d=0,e=!1;switch(65535&(b.charCodeAt(0)|0)){case 43:d=1;break;case 45:d=1,e=!0}var f;f=d;d=b.length|0;if(f>=d)oZ(b),f=void 0;else{if(!a.ya&&!a.ya){for(var h=[],k=0;;){h.push(null);if(1===k)break;k=1+k|0}for(k=2;;){for(var p=k,t=2147483647/p|0,x=p,E=1;x<=t;)x=da(x,p),E=1+E|0;var S=x>>31,t=Ra(),p=mf(t,-1,-1,x,S),U=t.Rb,t=new CA,x=(new Vb).ia(x,S),p=(new Vb).ia(p,U);t.gT=E;t.zW=x;t.hW=p;h.push(t);if(36===k)break;k=1+k|0}a.AS=h;a.ya=!0}h=a.AS[10];for(k=h.gT;;)if(f<d&&
+48===(65535&(b.charCodeAt(f)|0)))f=1+f|0;else break;(d-f|0)>da(3,k)&&oZ(b);for(a=f;a<d;)0>Fsa(Gh(),65535&(b.charCodeAt(a)|0),10)&&oZ(b),a=1+a|0;p=f+(1+((-1+(d-f|0)|0)%k|0)|0)|0;f=b.substring(f,p);f=+ba.parseInt(f,10);x=Na(f);if(p===d)f=(new Vb).ia(x,0);else{a=h.zW;f=a.la;a=a.qa;var E=p+k|0,t=65535&x,S=x>>>16|0,ga=65535&f,U=f>>>16|0,ma=da(t,ga),ga=da(S,ga),va=da(t,U),t=ma+((ga+va|0)<<16)|0,ma=(ma>>>16|0)+va|0,x=((da(x,a)+da(S,U)|0)+(ma>>>16|0)|0)+(((65535&ma)+ga|0)>>>16|0)|0,p=b.substring(p,E),p=+ba.parseInt(p,
+10),p=t+Na(p)|0,t=(-2147483648^p)<(-2147483648^t)?1+x|0:x;E===d?f=(new Vb).ia(p,t):(un(Je(),(E+k|0)===d),k=h.hW,h=k.la,k=k.qa,d=b.substring(E,d),d=+ba.parseInt(d,10),d=Na(d),(t===k?(-2147483648^p)>(-2147483648^h):t>k)&&oZ(b),E=65535&p,h=p>>>16|0,S=65535&f,k=f>>>16|0,x=da(E,S),S=da(h,S),U=da(E,k),E=x+((S+U|0)<<16)|0,x=(x>>>16|0)+U|0,a=(((da(p,a)+da(t,f)|0)+da(h,k)|0)+(x>>>16|0)|0)+(((65535&x)+S|0)>>>16|0)|0,f=E+d|0,a=(-2147483648^f)<(-2147483648^E)?1+a|0:a,-2147483648===(-2147483648^a)&&(-2147483648^
+f)<(-2147483648^d)&&oZ(b),f=(new Vb).ia(f,a))}}d=f.la;f=f.qa;if(e)return e=-d|0,d=0!==d?~f:-f|0,(0===d?0!==e:0<d)&&oZ(b),(new Vb).ia(e,d);0>f&&oZ(b);return(new Vb).ia(d,f)}function oZ(a){throw(new hZ).c(u((new v).G((new w).f(['For input string: "','"'])),(new w).f([a])));}nZ.prototype.$classData=g({mca:0},!1,"java.lang.Long$",{mca:1,d:1,l:1,i:1});var Lsa=void 0;function Mh(){Lsa||(Lsa=(new nZ).b());return Lsa}function pZ(){this.vu=this.xs=this.ws=this.uu=0}pZ.prototype=new l;
+pZ.prototype.constructor=pZ;pZ.prototype.o=function(a){return a&&a.$classData&&a.$classData.n.iV?this.uu===a.uu&&this.ws===a.ws&&this.xs===a.xs&&this.vu===a.vu:!1};
+pZ.prototype.k=function(){var a=(+(this.uu>>>0)).toString(16),b="00000000".substring(a.length|0),d=(+((this.ws>>>16|0)>>>0)).toString(16),e="0000".substring(d.length|0),f=(+((65535&this.ws)>>>0)).toString(16),h="0000".substring(f.length|0),k=(+((this.xs>>>16|0)>>>0)).toString(16),p="0000".substring(k.length|0),t=(+((65535&this.xs)>>>0)).toString(16),x="0000".substring(t.length|0),E=(+(this.vu>>>0)).toString(16);return""+b+a+"-"+(""+e+d)+"-"+(""+h+f)+"-"+(""+p+k)+"-"+(""+x+t)+(""+"00000000".substring(E.length|
+0)+E)};pZ.prototype.r=function(){return this.uu^this.ws^this.xs^this.vu};pZ.prototype.$classData=g({iV:0},!1,"java.util.UUID",{iV:1,d:1,i:1,Ed:1});function qZ(){this.ya=!1}qZ.prototype=new l;qZ.prototype.constructor=qZ;qZ.prototype.b=function(){return this};qZ.prototype.jn=function(a){throw(new Ne).c("Invalid UUID string: "+a);};
+function Mna(a,b){36===(b.length|0)&&45===(65535&(b.charCodeAt(8)|0))&&45===(65535&(b.charCodeAt(13)|0))&&45===(65535&(b.charCodeAt(18)|0))&&45===(65535&(b.charCodeAt(23)|0))||a.jn(b);try{var d=b.substring(0,4),e=b.substring(4,8),f=vi(ti(),d,16)<<16|vi(ti(),e,16),h=b.substring(9,13),k=b.substring(14,18),p=vi(ti(),h,16)<<16|vi(ti(),k,16),t=b.substring(19,23),x=b.substring(24,28),E=vi(ti(),t,16)<<16|vi(ti(),x,16),S=b.substring(28,32),U=b.substring(32,36),ga=vi(ti(),S,16)<<16|vi(ti(),U,16),ma=new pZ;
+ma.uu=f;ma.ws=p;ma.xs=E;ma.vu=ga;return ma}catch(va){if(va&&va.$classData&&va.$classData.n.xE)a.jn(b);else throw va;}}qZ.prototype.$classData=g({Oca:0},!1,"java.util.UUID$",{Oca:1,d:1,l:1,i:1});var Msa=void 0;function Nna(){Msa||(Msa=(new qZ).b());return Msa}function rZ(){this.Ar=this.Cr=this.Iw=this.ax=this.Ft=this.Dt=this.Zw=this.Et=null}rZ.prototype=new l;rZ.prototype.constructor=rZ;
+rZ.prototype.b=function(){sZ=this;this.Et=(new tZ).b();this.Zw=(new uZ).b();this.Dt=(new vZ).b();this.Ft=(new wZ).b();this.ax=(new xZ).b();this.Iw=(new yZ).b();this.Cr=(new zZ).b();var a=(new w).f([this.Et,this.Zw,this.Dt,this.Ft,this.ax,this.Iw,this.Cr]),b=a.pa.length|0,b=la(Wa(Nsa),[b]),d;d=0;for(a=Ve(new We,a,0,a.pa.length|0);a.ta();){var e=a.ma();b.m[d]=e;d=1+d|0}this.Ar=b;return this};
+function AZ(a,b,d,e){a=b.qa;var f=e.qa;if(a===f?(-2147483648^b.la)>(-2147483648^e.la):a>f)return(new Vb).ia(-1,2147483647);a=e.la;e=e.qa;e=0!==a?~e:-e|0;f=b.qa;if(f===e?(-2147483648^b.la)<(-2147483648^(-a|0)):f<e)return(new Vb).ia(1,-2147483648);e=b.la;a=d.la;var h=65535&e,f=e>>>16|0,k=65535&a,p=a>>>16|0,t=da(h,k),k=da(f,k),x=da(h,p),h=t+((k+x|0)<<16)|0,t=(t>>>16|0)+x|0;b=(((da(e,d.qa)+da(b.qa,a)|0)+da(f,p)|0)+(t>>>16|0)|0)+(((65535&t)+k|0)>>>16|0)|0;return(new Vb).ia(h,b)}
+rZ.prototype.$classData=g({Pca:0},!1,"java.util.concurrent.TimeUnit$",{Pca:1,d:1,l:1,i:1});var sZ=void 0;function yA(){sZ||(sZ=(new rZ).b());return sZ}function cZ(){this.Y=null}cZ.prototype=new l;cZ.prototype.constructor=cZ;function Osa(){}Osa.prototype=cZ.prototype;function eZ(a,b,d){return b===a.Y?(a.Y=d,!0):!1}cZ.prototype.k=function(){return""+this.Y};cZ.prototype.j=function(a){this.Y=a;return this};
+cZ.prototype.$classData=g({kV:0},!1,"java.util.concurrent.atomic.AtomicReference",{kV:1,d:1,l:1,i:1});function RB(){}RB.prototype=new l;RB.prototype.constructor=RB;RB.prototype.b=function(){return this};RB.prototype.$classData=g({eda:0},!1,"java.util.regex.GroupStartMap$OriginallyWrapped$",{eda:1,d:1,l:1,i:1});var Dja=void 0;function BZ(){this.Aw=this.zq=null;this.yz=0}BZ.prototype=new l;BZ.prototype.constructor=BZ;BZ.prototype.k=function(){return this.Aw};
+BZ.prototype.$classData=g({jda:0},!1,"java.util.regex.Pattern",{jda:1,d:1,l:1,i:1});function CZ(){this.$U=this.aV=null}CZ.prototype=new l;CZ.prototype.constructor=CZ;CZ.prototype.b=function(){DZ=this;this.aV=new ba.RegExp("^\\\\Q(.|\\n|\\r)\\\\E$");this.$U=new ba.RegExp("^\\(\\?([idmsuxU]*)(?:-([idmsuxU]*))?\\)");return this};
+function kg(a,b){var d;a=a.aV.exec(b);if(null!==a){a=a[1];if(void 0===a)throw(new Du).c("undefined.get");a=(new J).j((new A).e(Psa(a),0))}else a=F();if(a.z())if(d=jg().$U.exec(b),null!==d){a=d[0];if(void 0===a)throw(new Du).c("undefined.get");a=b.substring(a.length|0);var e=d[1];if(void 0===e)var f=0;else{var e=(new Sb).c(e),f=e.R.length|0,h=0,k=0;a:for(;;){if(h!==f){var p=1+h|0,h=e.W(h),h=null===h?0:h.Y,k=k|0|Qsa(jg(),h),h=p;continue a}break}f=k|0}d=d[2];if(void 0===d)d=f;else{d=(new Sb).c(d);e=
+d.R.length|0;p=0;h=f;a:for(;;){if(p!==e){f=1+p|0;p=d.W(p);p=null===p?0:p.Y;h=(h|0)&~Qsa(jg(),p);p=f;continue a}break}d=h|0}a=(new J).j((new A).e(a,d))}else a=F();d=a.z()?(new A).e(b,0):a.X();if(null===d)throw(new q).j(d);a=d.Ec();d=new ba.RegExp(d.ja(),"g"+(0!==(2&a)?"i":"")+(0!==(8&a)?"m":""));e=new BZ;e.zq=d;e.Aw=b;e.yz=a;return e}
+function Psa(a){for(var b="",d=0;d<(a.length|0);){var e=65535&(a.charCodeAt(d)|0);switch(e){case 92:case 46:case 40:case 41:case 91:case 93:case 123:case 125:case 124:case 63:case 42:case 43:case 94:case 36:e="\\"+(new Ke).Xa(e);break;default:e=(new Ke).Xa(e)}b=""+b+e;d=1+d|0}return b}function Qsa(a,b){switch(b){case 105:return 2;case 100:return 1;case 109:return 8;case 115:return 32;case 117:return 64;case 120:return 4;case 85:return 256;default:throw(new Ne).c("bad in-pattern flag");}}
+CZ.prototype.$classData=g({kda:0},!1,"java.util.regex.Pattern$",{kda:1,d:1,l:1,i:1});var DZ=void 0;function jg(){DZ||(DZ=(new CZ).b());return DZ}function EZ(){this.jD=null}EZ.prototype=new Eja;EZ.prototype.constructor=EZ;EZ.prototype.b=function(){FZ=this;(new zD).j(HA().gW);this.jD=(new zD).j(HA().No);(new zD).j(null);return this};EZ.prototype.$classData=g({nda:0},!1,"scala.Console$",{nda:1,gpa:1,d:1,vpa:1});var FZ=void 0;function Joa(){FZ||(FZ=(new EZ).b());return FZ}function GZ(){}
+GZ.prototype=new l;GZ.prototype.constructor=GZ;GZ.prototype.b=function(){return this};GZ.prototype.Wc=function(a){return null===a?F():(new J).j(a)};GZ.prototype.$classData=g({rda:0},!1,"scala.Option$",{rda:1,d:1,l:1,i:1});var Rsa=void 0;function jd(){Rsa||(Rsa=(new GZ).b());return Rsa}function HZ(){this.Qk=this.Lp=this.Gt=this.$h=null}HZ.prototype=new Gja;HZ.prototype.constructor=HZ;function un(a,b){if(!b)throw(new RE).j("assertion failed");}
+HZ.prototype.b=function(){IZ=this;oc();B();this.$h=Cea();this.Gt=ol();wD();wD();Ssa||(Ssa=(new JZ).b());this.Lp=(new HT).b();this.Qk=(new KZ).b();(new LZ).b();return this};
+function lw(a,b){if(de(b,1))return(new $m).Mh(b);if(hb(b,1))return(new MZ).lq(b);if(jb(b,1))return(new NZ).gq(b);if(ib(b,1))return(new OZ).lm(b);if(ob(b,1))return(new PZ).hq(b);if(nb(b,1))return(new QZ).Xo(b);if(lb(b,1))return(new RZ).iq(b);if(mb(b,1))return(new SZ).jq(b);if(kb(b,1))return(new TZ).kq(b);if(PF(b))return(new UZ).mq(b);if(null===b)return null;throw(new q).j(b);}function oF(a,b){if(!b)throw(new Ne).c("requirement failed");}
+HZ.prototype.$classData=g({zda:0},!1,"scala.Predef$",{zda:1,kpa:1,d:1,hpa:1});var IZ=void 0;function Je(){IZ||(IZ=(new HZ).b());return IZ}function VZ(){}VZ.prototype=new l;VZ.prototype.constructor=VZ;VZ.prototype.b=function(){return this};VZ.prototype.$classData=g({Ida:0},!1,"scala.StringContext$",{Ida:1,d:1,l:1,i:1});var Tsa=void 0;function WZ(){this.ga=this.LU=null}WZ.prototype=new l;WZ.prototype.constructor=WZ;function Usa(a,b,d){a.LU=d;if(null===b)throw ug(vg(),null);a.ga=b;return a}
+WZ.prototype.Bm=function(){oF(Je(),null===this.ga.Pn.X());if(null===Jja().Zt.X()){JA||(JA=(new IA).b());var a=JA.xS;a&&a.$classData&&a.$classData.n.QW||jpa||(jpa=(new KT).b())}var a=Jja(),b=a.Zt.X();try{MA(a.Zt,this);try{var d=this.LU;a:for(;;){var e=d;if(!y().o(e)){if(si(e)){var f=e.Cb;MA(this.ga.Pn,e.Ia);try{f.Bm()}catch(t){var h=Un(vg(),t);if(null!==h){var k=this.ga.Pn.X();MA(this.ga.Pn,y());Usa(new WZ,this.ga,k).Bm();throw ug(vg(),h);}throw t;}d=this.ga.Pn.X();continue a}throw(new q).j(e);}break}}finally{var p=
+this.ga.Pn;p.Qx=!1;p.uc=null}}finally{MA(a.Zt,b)}};WZ.prototype.$classData=g({Lda:0},!1,"scala.concurrent.BatchingExecutor$Batch",{Lda:1,d:1,gV:1,QW:1});function XZ(){}XZ.prototype=new l;XZ.prototype.constructor=XZ;XZ.prototype.b=function(){return this};function fja(){Vsa||(Vsa=(new XZ).b());vC();var a;a=HA();var b=Ra();a=1E6*+(0,a.oU)();a=SF(b,a);a=(new Vb).ia(a,b.Rb);b=a.la;a=a.qa;var d=yA().Et,b=wC(new xC,(new Vb).ia(b,a),d);a=new YZ;a.xp=b;return a}
+XZ.prototype.$classData=g({Tda:0},!1,"scala.concurrent.duration.Deadline$",{Tda:1,d:1,l:1,i:1});var Vsa=void 0;function ZZ(){this.IS=this.Np=this.VY=this.eG=null}ZZ.prototype=new l;ZZ.prototype.constructor=ZZ;
+ZZ.prototype.b=function(){$Z=this;B();for(var a=yA().Cr,a=(new A).e(a,"d day"),b=yA().Iw,b=(new A).e(b,"h hour"),d=yA().ax,d=(new A).e(d,"min minute"),e=yA().Ft,e=(new A).e(e,"s sec second"),f=yA().Dt,f=(new A).e(f,"ms milli millisecond"),h=yA().Zw,h=(new A).e(h,"\u00b5s micro microsecond"),k=yA().Et,a=(new w).f([a,b,d,e,f,h,(new A).e(k,"ns nano nanosecond")]),b=B().s,b=this.eG=L(a,b),a=dc(new ec,gc());!b.z();)d=b.$(),hc(a,d),b=b.aa();this.VY=(new Pu).Ds(a.Oa,m(new n,function(){return function(a){a=
+Wsa(vC(),a);return jn(a)}}(this)));b=this.eG;a=function(a){return function(b){if(null!==b){var d=b.ja();b=b.na();b=Xsa(vC(),b);var d=function(a,b){return function(a){return(new A).e(a,b)}}(a,d),e=B().s;if(e===B().s){if(b===y())return y();var e=b.$(),f=e=Ng(new Og,d(e),y());for(b=b.aa();b!==y();){var h=b.$(),h=Ng(new Og,d(h),y()),f=f.Ia=h;b=b.aa()}return e}for(e=Mc(b,e);!b.z();)f=b.$(),e.Qa(d(f)),b=b.aa();return e.Da()}throw(new q).j(b);}}(this);if(B().s===B().s)if(b===y())a=y();else{d=b;e=(new gE).od(!1);
+f=(new Al).j(null);for(h=(new Al).j(null);d!==y();)k=d.$(),a(k).nb().ua(m(new n,function(a,b,d,e){return function(a){b.Ba?(a=Ng(new Og,a,y()),e.Ba.Ia=a,e.Ba=a):(d.Ba=Ng(new Og,a,y()),e.Ba=d.Ba,b.Ba=!0)}}(b,e,f,h))),d=d.aa();a=e.Ba?f.Ba:y()}else{B();for(d=(new jc).b();!b.z();)e=b.$(),e=a(e).nb(),hl(d,e),b=b.aa();a=d.ob()}a.we(Je().Qk);this.Np=wC(new xC,DA(),yA().Cr);this.IS=(new a_).b();(new b_).b();(new c_).b();return this};
+function Wsa(a,b){a=b.trim();a=vF(Ha(),a,"\\s+");b=B().s.hh();var d=a.m.length;switch(d){case -1:break;default:b.qc(d)}b.Zb((new ri).Mh(a));return b.Da()}
+function Xsa(a,b){var d=Wsa(0,b);if(!si(d))throw(new q).j(d);b=d.Cb;d=d.Ia;a=function(){return function(a){B();a=(new w).f([a,a+"s"]);var b=B().s;return L(a,b)}}(a);if(B().s===B().s)if(d===y())a=y();else{for(var e=d,f=(new gE).od(!1),h=(new Al).j(null),k=(new Al).j(null);e!==y();){var p=e.$();a(p).nb().ua(m(new n,function(a,b,d,e){return function(a){b.Ba?(a=Ng(new Og,a,y()),e.Ba.Ia=a,e.Ba=a):(d.Ba=Ng(new Og,a,y()),e.Ba=d.Ba,b.Ba=!0)}}(d,f,h,k)));e=e.aa()}a=f.Ba?h.Ba:y()}else{B();for(e=(new jc).b();!d.z();)f=
+d.$(),f=a(f).nb(),hl(e,f),d=d.aa();a=e.ob()}return Ng(new Og,b,a)}ZZ.prototype.$classData=g({Uda:0},!1,"scala.concurrent.duration.Duration$",{Uda:1,d:1,l:1,i:1});var $Z=void 0;function vC(){$Z||($Z=(new ZZ).b());return $Z}function d_(){this.Y=this.VV=this.Jx=null}d_.prototype=new l;d_.prototype.constructor=d_;d_.prototype.Bm=function(){oF(Je(),null!==this.Y);try{this.VV.y(this.Y)}catch(d){var a=Un(vg(),d);if(null!==a){var b=nw(ow(),a);if(b.z())throw ug(vg(),a);a=b.X();this.Jx.Vs(a)}else throw d;}};
+function Ysa(a,b){var d=new d_;d.Jx=a;d.VV=b;d.Y=null;return d}function e_(a,b){oF(Je(),null===a.Y);a.Y=b;try{a.Jx.nu(a)}catch(e){if(b=Un(vg(),e),null!==b){var d=nw(ow(),b);if(d.z())throw ug(vg(),b);b=d.X();a.Jx.Vs(b)}else throw e;}}d_.prototype.$classData=g({Zda:0},!1,"scala.concurrent.impl.CallbackRunnable",{Zda:1,d:1,gV:1,Rda:1});
+function Lja(a,b,d){var e=(new uR).b();a.jp(m(new n,function(a,b,d){return function(e){try{var t=b.y(e);if(t===a)return ge(d,e);if(f_(t)){var x=d.Y,E=f_(x)?g_(d,x):d;e=t;a:for(;;){if(e!==E){var S=e.Y;b:if(Zsa(S)){if(!E.hw(S))throw(new he).c("Cannot link completed promises together");}else{if(f_(S)){e=g_(e,S);continue a}if(Mg(S)&&(t=S,eZ(e,t,E))){if(kd(t))for(S=t;!S.z();){var U=S.$();$sa(E,U);S=S.aa()}break b}continue a}}break}}else return cba(d,t)}catch(ga){E=Un(vg(),ga);if(null!==E){U=nw(ow(),E);
+if(!U.z())return E=U.X(),ge(d,(new qA).wd(E));throw ug(vg(),E);}throw ga;}}}(a,b,e)),d);return e}function ata(a){a=a.rG();if(Fk(a))return"Future("+a.U+")";if(F()===a)return"Future(\x3cnot completed\x3e)";throw(new q).j(a);}function Nja(a,b,d){var e=(new uR).b();a.jp(m(new n,function(a,b,d){return function(a){var e;a:try{e=b.y(a)}catch(f){a=Un(vg(),f);if(null!==a){e=nw(ow(),a);if(!e.z()){a=e.X();e=(new qA).wd(a);break a}throw ug(vg(),a);}throw f;}return ge(d,e)}}(a,b,e)),d);return e}
+function h_(){this.xo=null;this.An=this.ul=0;this.Nj=null;this.ya=!1}h_.prototype=new l;h_.prototype.constructor=h_;h_.prototype.b=function(){i_=this;this.ul=-512;this.An=512;this.Nj=Jf().QG;return this};function bta(a){a.ya||(a.xo=la(Wa(cta),[1+(a.An-a.ul|0)|0]),a.ya=!0);return a.xo}function ex(a,b){var d=new KR,e=new GR;a=""+a;GR.prototype.Wo.call(e,uF(Ha(),a),0,a.length|0);Esa(e,b);return JR(d,e,b)}
+function Lha(a,b){var d=a.ul,e=d>>31,f=b.qa;(e===f?(-2147483648^d)<=(-2147483648^b.la):e<f)?(d=a.An,e=d>>31,f=b.qa,d=f===e?(-2147483648^b.la)<=(-2147483648^d):f<e):d=!1;return d?fx(a,b.la,a.Nj):JR(new KR,Hpa(DU(),b),a.Nj)}
+function fx(a,b,d){var e=a.Nj;if((null===d?null===e:d.o(e))&&a.ul<=b&&b<=a.An){var e=b-a.ul|0,f=(a.ya?a.xo:bta(a)).m[e];null===f&&(f=DU(),f=JR(new KR,Hpa(f,(new Vb).ia(b,b>>31)),d),(a.ya?a.xo:bta(a)).m[e]=f);return f}a=(new Vb).ia(b,b>>31);b=new KR;e=new GR;GR.prototype.KD.call(e,a,0);Esa(e,d);return JR(b,e,d)}h_.prototype.$classData=g({jea:0},!1,"scala.math.BigDecimal$",{jea:1,d:1,l:1,i:1});var i_=void 0;function bx(){i_||(i_=(new h_).b());return i_}
+function j_(){this.An=this.ul=0;this.oX=this.xo=null}j_.prototype=new l;j_.prototype.constructor=j_;j_.prototype.b=function(){k_=this;this.ul=-1024;this.An=1024;this.xo=la(Wa(dta),[1+(this.An-this.ul|0)|0]);this.oX=Cf(cf(),(new Vb).ia(-1,-1));return this};function l_(a,b){if(a.ul<=b&&b<=a.An){var d=b-a.ul|0,e=a.xo.m[d];null===e&&(e=cf(),e=(new m_).nn(Cf(e,(new Vb).ia(b,b>>31))),a.xo.m[d]=e);return e}a=cf();return(new m_).nn(Cf(a,(new Vb).ia(b,b>>31)))}
+function eta(a,b){var d=a.ul,e=d>>31,f=b.qa;(e===f?(-2147483648^d)<=(-2147483648^b.la):e<f)?(d=a.An,e=d>>31,f=b.qa,d=f===e?(-2147483648^b.la)<=(-2147483648^d):f<e):d=!1;return d?l_(a,b.la):(new m_).nn(Cf(cf(),b))}j_.prototype.$classData=g({kea:0},!1,"scala.math.BigInt$",{kea:1,d:1,l:1,i:1});var k_=void 0;function n_(){k_||(k_=(new j_).b());return k_}function $C(){}$C.prototype=new l;$C.prototype.constructor=$C;$C.prototype.b=function(){return this};
+$C.prototype.$classData=g({mea:0},!1,"scala.math.Fractional$",{mea:1,d:1,l:1,i:1});var cka=void 0;function aD(){}aD.prototype=new l;aD.prototype.constructor=aD;aD.prototype.b=function(){return this};aD.prototype.$classData=g({nea:0},!1,"scala.math.Integral$",{nea:1,d:1,l:1,i:1});var dka=void 0;function bD(){}bD.prototype=new l;bD.prototype.constructor=bD;bD.prototype.b=function(){return this};bD.prototype.$classData=g({oea:0},!1,"scala.math.Numeric$",{oea:1,d:1,l:1,i:1});var eka=void 0;
+function o_(){}o_.prototype=new BT;o_.prototype.constructor=o_;function fta(){}fta.prototype=o_.prototype;function hla(a){return!!(a&&a.$classData&&a.$classData.n.YW)}function p_(){}p_.prototype=new l;p_.prototype.constructor=p_;p_.prototype.b=function(){return this};
+function $oa(a,b){return b===pa(bb)?iD():b===pa(cb)?jD():b===pa(Za)?kD():b===pa(db)?lD():b===pa(eb)?mD():b===pa(fb)?Gi():b===pa(gb)?nD():b===pa(Ya)?oD():b===pa(Xa)?pD():b===pa(Ua)?rD():b===pa(q_)?lka():b===pa(JF)?mka():(new xn).Dg(b)}p_.prototype.$classData=g({yea:0},!1,"scala.reflect.ClassTag$",{yea:1,d:1,l:1,i:1});var gta=void 0;function apa(){gta||(gta=(new p_).b());return gta}function dD(){}dD.prototype=new l;dD.prototype.constructor=dD;dD.prototype.b=function(){return this};
+dD.prototype.$classData=g({Uea:0},!1,"scala.util.Either$",{Uea:1,d:1,l:1,i:1});var gka=void 0;function eD(){}eD.prototype=new l;eD.prototype.constructor=eD;eD.prototype.b=function(){return this};eD.prototype.k=function(){return"Left"};eD.prototype.$classData=g({Vea:0},!1,"scala.util.Left$",{Vea:1,d:1,l:1,i:1});var hka=void 0;function fD(){}fD.prototype=new l;fD.prototype.constructor=fD;fD.prototype.b=function(){return this};fD.prototype.k=function(){return"Right"};
+fD.prototype.$classData=g({Wea:0},!1,"scala.util.Right$",{Wea:1,d:1,l:1,i:1});var ika=void 0;function ID(){this.mu=this.ej=this.QU=null}ID.prototype=new l;ID.prototype.constructor=ID;c=ID.prototype;c.y=function(a){return this.Qp(a)};c.Am=function(a){return aC(this,a)};c.Ij=function(a){return r_(this,a)};c.$j=function(a){a=hta(this,a);var b=this.QU;return!a.z()&&!!b.y(a.X())};c.Fa=function(a){return this.Qp(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.xl=function(a){return s_(new t_,this,a)};
+c.Qp=function(a){return this.ej.y(hta(this,a).X())};c.Ga=function(a){return!!this.Qp(a)};c.Ya=function(a){return this.$j(a)};function hta(a,b){wD();return gl(a.mu.Gd(),oa(b))?(new J).j(b):F()}c.eb=function(a,b){return cC(this,a,b)};c.Ca=function(a){return r_(this,a)};c.$classData=g({$ea:0},!1,"scala.util.control.Exception$$anon$1",{$ea:1,d:1,Ea:1,fa:1});function NT(){this.Lx=this.ga=null}NT.prototype=new l;NT.prototype.constructor=NT;c=NT.prototype;c.y=function(a){return this.Qp(a)};
+c.Am=function(a){return aC(this,a)};c.Ij=function(a){return r_(this,a)};c.$j=function(a){return this.ga.Cl.Ya(a)};c.Fa=function(a){return this.Qp(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.xl=function(a){return s_(new t_,this,a)};c.Qp=function(a){return this.Lx.y(a)};c.Ga=function(a){return!!this.Qp(a)};c.Ya=function(a){return this.$j(a)};c.eb=function(a,b){return cC(this,a,b)};c.Ca=function(a){return r_(this,a)};
+c.$classData=g({dfa:0},!1,"scala.util.control.Exception$Catch$$anon$2",{dfa:1,d:1,Ea:1,fa:1});function w_(){this.xG=!1}w_.prototype=new l;w_.prototype.constructor=w_;w_.prototype.b=function(){this.xG=!1;return this};w_.prototype.$classData=g({ffa:0},!1,"scala.util.control.NoStackTrace$",{ffa:1,d:1,l:1,i:1});var ita=void 0;function Tb(){this.pX=this.qv=null}Tb.prototype=new l;Tb.prototype.constructor=Tb;Tb.prototype.$o=function(a,b){var d=jg();Tb.prototype.Qba.call(this,kg(d,a),b);return this};
+Tb.prototype.Qba=function(a,b){this.qv=a;this.pX=b;return this};Tb.prototype.k=function(){return this.qv.Aw};function ng(a,b){if(null===b)return F();a=lg(new mg,a.qv,b,La(b));if(Hba(a)){jta||(jta=(new x_).b());B();var d=y();for(b=fpa(a);0<b;){var e=epa(a,b),d=Ng(new Og,e,d);b=-1+b|0}a=(new J).j(d)}else a=F();return a}Tb.prototype.$classData=g({jfa:0},!1,"scala.util.matching.Regex",{jfa:1,d:1,l:1,i:1});function x_(){}x_.prototype=new l;x_.prototype.constructor=x_;x_.prototype.b=function(){return this};
+x_.prototype.$classData=g({kfa:0},!1,"scala.util.matching.Regex$",{kfa:1,d:1,l:1,i:1});var jta=void 0;function y_(){TT.call(this);this.jW=this.Va=null}y_.prototype=new UT;y_.prototype.constructor=y_;y_.prototype.y=function(a){return this.bi(a)};function Fma(a,b){var d=new y_;if(null===a)throw ug(vg(),null);d.Va=a;d.jW=b;TT.prototype.bp.call(d,a);return d}
+y_.prototype.bi=function(a){var b=FP(this.Va),d=(new J).j(F()),e=b.uc;b.uc=d;try{var f=this.jW.bi(a);if(oe(f)){var h=f.fe;if(h.Lm.z())return f;var k=FP(this.Va).uc;if(k.z())var p=F();else{var t=k.X();if(t.z())var x=!0;else var E=oP(t.X().fe),S=oP(h),x=!(E.wc<S.wc);p=x?t:F()}return p.z()?(new te).on(this.Va,"end of input expected",h):p.X()}var U=FP(this.Va).uc,ga=U.z()?F():U.X();return ga.z()?f:ga.X()}finally{b.uc=e}};
+y_.prototype.$classData=g({qfa:0},!1,"scala.util.parsing.combinator.Parsers$$anon$2",{qfa:1,kX:1,d:1,fa:1});function je(){TT.call(this);this.ou=null}je.prototype=new UT;je.prototype.constructor=je;je.prototype.y=function(a){return this.bi(a)};je.prototype.ql=function(a,b){this.ou=b;TT.prototype.bp.call(this,a);return this};je.prototype.bi=function(a){return this.ou.y(a)};je.prototype.$classData=g({rfa:0},!1,"scala.util.parsing.combinator.Parsers$$anon$3",{rfa:1,kX:1,d:1,fa:1});
+function z_(){this.ga=null}z_.prototype=new hU;z_.prototype.constructor=z_;z_.prototype.b=function(){gU.prototype.Lu.call(this,ek());return this};z_.prototype.hh=function(){ek();$F();dk();return(new aG).b()};z_.prototype.$classData=g({yfa:0},!1,"scala.collection.IndexedSeq$$anon$1",{yfa:1,yF:1,d:1,et:1});function eE(){}eE.prototype=new tU;eE.prototype.constructor=eE;eE.prototype.y=function(){return this};
+eE.prototype.$classData=g({Rfa:0},!1,"scala.collection.TraversableOnce$$anon$2",{Rfa:1,wp:1,d:1,fa:1});function A_(){this.s=null}A_.prototype=new eU;A_.prototype.constructor=A_;function kta(){}kta.prototype=A_.prototype;function fU(){this.Va=this.ga=null}fU.prototype=new hU;fU.prototype.constructor=fU;fU.prototype.hh=function(){return this.Va.db()};fU.prototype.Lu=function(a){if(null===a)throw ug(vg(),null);this.Va=a;gU.prototype.Lu.call(this,a);return this};
+fU.prototype.$classData=g({Tfa:0},!1,"scala.collection.generic.GenTraversableFactory$$anon$1",{Tfa:1,yF:1,d:1,et:1});function B_(){}B_.prototype=new ypa;B_.prototype.constructor=B_;function C_(){}C_.prototype=B_.prototype;function D_(){}D_.prototype=new ypa;D_.prototype.constructor=D_;function E_(){}E_.prototype=D_.prototype;D_.prototype.db=function(){return this.fi()};function TC(){}TC.prototype=new l;TC.prototype.constructor=TC;TC.prototype.b=function(){return this};TC.prototype.k=function(){return"::"};
+TC.prototype.$classData=g({Ufa:0},!1,"scala.collection.immutable.$colon$colon$",{Ufa:1,d:1,l:1,i:1});var Yja=void 0;function F_(){}F_.prototype=new l;F_.prototype.constructor=F_;F_.prototype.b=function(){return this};function Hn(a,b,d,e,f){throw(new Ne).c(b+(f?" to ":" until ")+d+" by "+e+": seqs cannot contain more than Int.MaxValue elements.");}F_.prototype.$classData=g({Dga:0},!1,"scala.collection.immutable.Range$",{Dga:1,d:1,l:1,i:1});var lta=void 0;
+function Ln(){lta||(lta=(new F_).b());return lta}function yg(){this.ga=null}yg.prototype=new hU;yg.prototype.constructor=yg;yg.prototype.b=function(){gU.prototype.Lu.call(this,xg());return this};yg.prototype.$classData=g({Rga:0},!1,"scala.collection.immutable.Stream$StreamCanBuildFrom",{Rga:1,yF:1,d:1,et:1});function YC(){}YC.prototype=new l;YC.prototype.constructor=YC;YC.prototype.b=function(){return this};
+YC.prototype.$classData=g({hia:0},!1,"scala.collection.mutable.StringBuilder$",{hia:1,d:1,l:1,i:1});var aka=void 0;function G_(){this.yi=null}G_.prototype=new Dpa;G_.prototype.constructor=G_;function ne(a){return(0,a.yi)()}function K(a){var b=new G_;b.yi=a;return b}G_.prototype.$classData=g({Gia:0},!1,"scala.scalajs.runtime.AnonFunction0",{Gia:1,iqa:1,d:1,jja:1});function n(){this.yi=null}n.prototype=new tU;n.prototype.constructor=n;n.prototype.y=function(a){return(0,this.yi)(a)};
+function m(a,b){a.yi=b;return a}n.prototype.$classData=g({Hia:0},!1,"scala.scalajs.runtime.AnonFunction1",{Hia:1,wp:1,d:1,fa:1});function tb(){this.yi=null}tb.prototype=new Epa;tb.prototype.constructor=tb;function sb(a,b){a.yi=b;return a}function qb(a,b,d){return(0,a.yi)(b,d)}tb.prototype.$classData=g({Iia:0},!1,"scala.scalajs.runtime.AnonFunction2",{Iia:1,jqa:1,d:1,kja:1});function H_(){this.yi=null}H_.prototype=new Fpa;H_.prototype.constructor=H_;function Zt(a){var b=new H_;b.yi=a;return b}
+H_.prototype.$classData=g({Jia:0},!1,"scala.scalajs.runtime.AnonFunction3",{Jia:1,kqa:1,d:1,lja:1});function I_(){this.yi=null}I_.prototype=new Gpa;I_.prototype.constructor=I_;function Rc(a,b,d,e,f){return(0,a.yi)(b,d,e,f)}function Ox(a){var b=new I_;b.yi=a;return b}I_.prototype.$classData=g({Kia:0},!1,"scala.scalajs.runtime.AnonFunction4",{Kia:1,lqa:1,d:1,mja:1});function J_(){this.Rb=0;this.Np=null}J_.prototype=new l;J_.prototype.constructor=J_;
+J_.prototype.b=function(){K_=this;this.Np=(new Vb).ia(0,0);return this};function DA(){return Ra().Np}function mta(a,b,d){return 0===(-2097152&d)?""+(4294967296*d+ +(b>>>0)):nta(a,b,d,1E9,0,2)}
+function kf(a,b,d,e,f){if(0===(e|f))throw(new FU).c("/ by zero");if(d===b>>31){if(f===e>>31){if(-2147483648===b&&-1===e)return a.Rb=0,-2147483648;var h=b/e|0;a.Rb=h>>31;return h}return-2147483648===b&&-2147483648===e&&0===f?a.Rb=-1:a.Rb=0}if(h=0>d){var k=-b|0;d=0!==b?~d:-d|0}else k=b;if(b=0>f){var p=-e|0;e=0!==e?~f:-f|0}else p=e,e=f;k=ota(a,k,d,p,e);if(h===b)return k;h=a.Rb;a.Rb=0!==k?~h:-h|0;return-k|0}
+function IF(a,b,d){return 0>d?-(4294967296*+((0!==b?~d:-d|0)>>>0)+ +((-b|0)>>>0)):4294967296*d+ +(b>>>0)}function SF(a,b){if(-9223372036854775808>b)return a.Rb=-2147483648,0;if(0x7fffffffffffffff<=b)return a.Rb=2147483647,-1;var d=b|0,e=b/4294967296|0;a.Rb=0>b&&0!==d?-1+e|0:e;return d}
+function ota(a,b,d,e,f){return 0===(-2097152&d)?0===(-2097152&f)?(d=(4294967296*d+ +(b>>>0))/(4294967296*f+ +(e>>>0)),a.Rb=d/4294967296|0,d|0):a.Rb=0:0===f&&0===(e&(-1+e|0))?(e=31-fa(e)|0,a.Rb=d>>>e|0,b>>>e|0|d<<1<<(31-e|0)):0===e&&0===(f&(-1+f|0))?(b=31-fa(f)|0,a.Rb=0,d>>>b|0):nta(a,b,d,e,f,0)|0}function mf(a,b,d,e,f){if(0===(e|f))throw(new FU).c("/ by zero");return 0===d?0===f?(a.Rb=0,+(b>>>0)/+(e>>>0)|0):a.Rb=0:ota(a,b,d,e,f)}
+function yU(a,b,d){return d===b>>31?""+b:0>d?"-"+mta(a,-b|0,0!==b?~d:-d|0):mta(a,b,d)}
+function nta(a,b,d,e,f,h){var k=(0!==f?fa(f):32+fa(e)|0)-(0!==d?fa(d):32+fa(b)|0)|0,p=k,t=0===(32&p)?e<<p:0,x=0===(32&p)?(e>>>1|0)>>>(31-p|0)|0|f<<p:e<<p,p=b,E=d;for(b=d=0;0<=k&&0!==(-2097152&E);){var S=p,U=E,ga=t,ma=x;if(U===ma?(-2147483648^S)>=(-2147483648^ga):(-2147483648^U)>=(-2147483648^ma))S=E,U=x,E=p-t|0,S=(-2147483648^E)>(-2147483648^p)?-1+(S-U|0)|0:S-U|0,p=E,E=S,32>k?d|=1<<k:b|=1<<k;k=-1+k|0;S=x>>>1|0;t=t>>>1|0|x<<31;x=S}k=E;if(k===f?(-2147483648^p)>=(-2147483648^e):(-2147483648^k)>=(-2147483648^
+f))k=4294967296*E+ +(p>>>0),e=4294967296*f+ +(e>>>0),1!==h&&(x=k/e,f=x/4294967296|0,t=d,d=x=t+(x|0)|0,b=(-2147483648^x)<(-2147483648^t)?1+(b+f|0)|0:b+f|0),0!==h&&(e=k%e,p=e|0,E=e/4294967296|0);if(0===h)return a.Rb=b,d;if(1===h)return a.Rb=E,p;a=""+p;return""+(4294967296*b+ +(d>>>0))+"000000000".substring(a.length|0)+a}
+function Uf(a,b,d,e,f){if(0===(e|f))throw(new FU).c("/ by zero");if(d===b>>31){if(f===e>>31){if(-1!==e){var h=b%e|0;a.Rb=h>>31;return h}return a.Rb=0}if(-2147483648===b&&-2147483648===e&&0===f)return a.Rb=0;a.Rb=d;return b}if(h=0>d){var k=-b|0;d=0!==b?~d:-d|0}else k=b;0>f?(b=-e|0,e=0!==e?~f:-f|0):(b=e,e=f);f=d;0===(-2097152&f)?0===(-2097152&e)?(k=(4294967296*f+ +(k>>>0))%(4294967296*e+ +(b>>>0)),a.Rb=k/4294967296|0,k|=0):a.Rb=f:0===e&&0===(b&(-1+b|0))?(a.Rb=0,k&=-1+b|0):0===b&&0===(e&(-1+e|0))?a.Rb=
+f&(-1+e|0):k=nta(a,k,f,b,e,1)|0;return h?(h=a.Rb,a.Rb=0!==k?~h:-h|0,-k|0):k}J_.prototype.$classData=g({Mia:0},!1,"scala.scalajs.runtime.RuntimeLong$",{Mia:1,d:1,l:1,i:1});var K_=void 0;function Ra(){K_||(K_=(new J_).b());return K_}function L_(){}L_.prototype=new l;L_.prototype.constructor=L_;function M_(){}c=M_.prototype=L_.prototype;c.y=function(a){return this.eb(a,ld().fD)};c.Am=function(a){return aC(this,a)};c.Ij=function(a){return r_(this,a)};c.Fa=function(a){return this.y(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+c.Ga=function(a){return!!this.y(a)};c.xl=function(a){return s_(new t_,this,a)};c.Ca=function(a){return this.Ij(a)};function N_(){this.jb=this.Na=!1}N_.prototype=new l;N_.prototype.constructor=N_;N_.prototype.b=function(){return this};N_.prototype.k=function(){return u((new v).G((new w).f(["LazyBoolean ",""])),(new w).f([this.Na?u((new v).G((new w).f(["of: ",""])),(new w).f([this.jb])):"thunk"]))};N_.prototype.$classData=g({Wia:0},!1,"scala.runtime.LazyBoolean",{Wia:1,d:1,l:1,i:1});
+function O_(){this.Na=!1;this.jb=0}O_.prototype=new l;O_.prototype.constructor=O_;O_.prototype.b=function(){return this};O_.prototype.k=function(){return u((new v).G((new w).f(["LazyInt ",""])),(new w).f([this.Na?u((new v).G((new w).f(["of: ",""])),(new w).f([this.jb])):"thunk"]))};O_.prototype.$classData=g({Xia:0},!1,"scala.runtime.LazyInt",{Xia:1,d:1,l:1,i:1});function we(){this.Na=!1;this.jb=null}we.prototype=new l;we.prototype.constructor=we;we.prototype.b=function(){return this};
+we.prototype.k=function(){return u((new v).G((new w).f(["LazyRef ",""])),(new w).f([this.Na?u((new v).G((new w).f(["of: ",""])),(new w).f([this.jb])):"thunk"]))};function ze(a,b){a.jb=b;a.Na=!0;return b}we.prototype.$classData=g({Yia:0},!1,"scala.runtime.LazyRef",{Yia:1,d:1,l:1,i:1});var q_=g({$ia:0},!1,"scala.runtime.Nothing$",{$ia:1,Lc:1,d:1,i:1});function P_(){DT.call(this)}P_.prototype=new lZ;P_.prototype.constructor=P_;P_.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};
+P_.prototype.$classData=g({tZ:0},!1,"java.io.IOException",{tZ:1,xd:1,Lc:1,d:1,i:1});function Q_(){}Q_.prototype=new l;Q_.prototype.constructor=Q_;function pta(){}pta.prototype=Q_.prototype;Q_.prototype.zo=function(){};function R_(){}R_.prototype=new l;R_.prototype.constructor=R_;function qta(){}qta.prototype=R_.prototype;R_.prototype.Ja=function(a){a.z()||a.X();return this};function GR(){this.Dp=null;this.yh=0;this.jo=null;this.Ee=0;this.Od=DA();this.ko=this.Jb=0}GR.prototype=new BT;
+GR.prototype.constructor=GR;c=GR.prototype;c.lj=function(){return-64>=this.Jb||this.Jb>S_(this)?DA():T_(this).lj()};c.b=function(){this.Dp=null;this.Ee=this.yh=0;this.Od=DA();this.ko=this.Jb=0;return this};function U_(a,b){var d=a.Jb,e=d>>31,f=-d|0,d=0!==d?~e:-e|0,h=S_(a),e=h>>31,h=f+h|0,f=(-2147483648^h)<(-2147483648^f)?1+(d+e|0)|0:d+e|0;if(0===f?-2147483629<(-2147483648^h):0<f)throw(new FU).c("Rounding necessary");a=rta(a);if(df(gf(),a)<b)return a.lj();throw(new FU).c("Rounding necessary");}
+c.o=function(a){if(a&&a.$classData&&a.$classData.n.uH&&a.Jb===this.Jb){if(64>this.Ee){a=a.Od;var b=a.qa,d=this.Od;return a.la===d.la&&b===d.qa}return HF(cn(),this.jo,a.jo)}return!1};function aZ(a){if(0===a.Ee){a=a.Od;var b=a.qa;return!(-1===a.la&&-1===b)}return!1}
+function sta(a){if(aZ(a))return a;var b=-1+qf().mo.m.length|0,d=1,e=EU(a),f=a=a.Jb;a>>=31;a:for(;;){if(!V_(e,0)){var h=W_(e,qf().mo.m[d]);if(0===h.Ay.Vb){var e=h.xy,k=d,h=k>>31,p=a;a=f-k|0;f=(-2147483648^a)>(-2147483648^f)?-1+(p-h|0)|0:p-h|0;d=d<b?1+d|0:d;h=f;f=a;a=h;continue a}if(1!==d){d=1;continue a}}d=f;b=e;d=(new Vb).ia(d,a);break}d=Qa(d);e=Qa((new Vb).ia(d.la,d.qa));d=e.la;e=e.qa;return(new GR).oq(b,GU(DU(),(new Vb).ia(d,e)))}
+function Esa(a,b){var d=b.Ph,e=X_(a)-d|0;if(!(S_(a)<d||0===d||0>=e))if(64>a.Ee){var d=DU().Ep.m[e],f=d.la,h=d.qa,k=a.Jb,p=k>>31,t=e>>31,d=k-e|0,k=(-2147483648^d)>(-2147483648^k)?-1+(p-t|0)|0:p-t|0,e=a.Od,t=e.la,x=e.qa,p=Ra(),e=kf(p,t,x,f,h),p=p.Rb,E=Ra(),t=Uf(E,t,x,f,h),x=E.Rb;if(0!==t||0!==x){DU();if(0>x)var E=-t|0,S=0!==t?~x:-x|0;else E=t,S=x;E=(new Vb).ia(E<<1,E>>>31|0|S<<1);f=(new Vb).ia(f,h);h=E.qa;S=f.qa;(h===S?(-2147483648^E.la)>(-2147483648^f.la):h>S)?f=1:(h=E.qa,S=f.qa,f=(h===S?(-2147483648^
+E.la)<(-2147483648^f.la):h<S)?-1:0);f=da(0>x?-1:0===x&&0===t?0:1,5+f|0);f=Lpa(DU(),1&e,f,b.Qq);h=f>>31;f=e+f|0;e=(-2147483648^f)<(-2147483648^e)?1+(p+h|0)|0:p+h|0;0>e?(p=-f|0,h=0!==f?~e:-e|0):(p=f,h=e);p=IF(Ra(),p,h);(void 0!==ba.Math.log10?+ba.Math.log10(p):+ba.Math.log(p)/2.302585092994046)>=b.Ph?(d=-1+d|0,k=-1!==d?k:-1+k|0,p=Ra(),e=kf(p,f,e,10,0),p=p.Rb,d=(new Vb).ia(d,k),e=(new Vb).ia(e,p)):(d=(new Vb).ia(d,k),e=(new Vb).ia(f,e))}else d=(new Vb).ia(d,k),e=(new Vb).ia(e,p);k=d;d=k.la;k=k.qa;p=
+e;e=p.la;p=p.qa;a.Jb=GU(DU(),(new Vb).ia(d,k));a.ko=b.Ph;a.Od=(new Vb).ia(e,p);a.Ee=CU(DU(),(new Vb).ia(e,p));a.jo=null}else f=Sf(qf(),(new Vb).ia(e,e>>31)),k=EU(a),k=sba(W_(k,f)),p=a.Jb,h=p>>31,t=e>>31,e=p-e|0,p=(-2147483648^e)>(-2147483648^p)?-1+(h-t|0)|0:h-t|0,0!==k.m[1].Vb?(h=Y_(tta(uta(k.m[1])),f),f=V_(k.m[0],0)?1:0,h=da(k.m[1].Vb,5+h|0),b=Lpa(DU(),f,h,b.Qq),0!==b&&(b=Cf(cf(),(new Vb).ia(b,b>>31)),f=k.m[0],k.m[0]=zf(Ef(),f,b)),X_((new GR).nn(k.m[0]))>d?(k.m[0]=vta(k.m[0],cf().Mp),b=e=-1+e|0,
+e=-1!==e?p:-1+p|0):(b=e,e=p)):(b=e,e=p),a.Jb=GU(DU(),(new Vb).ia(b,e)),a.ko=d,wta(a,k.m[0])}c.oq=function(a,b){GR.prototype.b.call(this);if(null===a)throw(new ye).c("unscaledVal \x3d\x3d null");this.Jb=b;wta(this,a);return this};
+c.k=function(){if(null!==this.Dp)return this.Dp;if(32>this.Ee)return this.Dp=xba(nf(),this.Od,this.Jb);var a=EU(this),b=lf(nf(),a);if(0===this.Jb)return b;var d=0>EU(this).Vb?2:1,e=b.length|0,f=this.Jb,h=f>>31,a=-f|0,h=0!==f?~h:-h|0,k=e>>31,f=a+e|0,h=(-2147483648^f)<(-2147483648^a)?1+(h+k|0)|0:h+k|0,k=d>>31,a=f-d|0,f=(-2147483648^a)>(-2147483648^f)?-1+(h-k|0)|0:h-k|0;if(0<this.Jb&&(-1===f?2147483642<=(-2147483648^a):-1<f))if(0<=f)DU(),a=e-this.Jb|0,DU(),a=b.substring(0,a)+"."+b.substring(a);else{DU();
+DU();e=-1+d|0;DU();b=b.substring(0,e)+"0."+b.substring(e);d=1+d|0;e=DU().UU;f=(new pm).b();h=!0;Ur(f,"");for(var k=0,p=e.m.length;k<p;){var t=(new Ke).Xa(e.m[k]);h?(Wr(f,t),h=!1):(Ur(f,""),Wr(f,t));k=1+k|0}Ur(f,"");e=f.rc.Xb;a=-1-a|0;DU();a=e.substring(0,a);a=""+b.substring(0,d)+a+b.substring(d)}else b=(1<=(e-d|0)?(DU(),DU(),b.substring(0,d)+"."+b.substring(d)):b)+"E",a=((0===f?0!==a:0<f)?b+"+":b)+yU(Ra(),a,f);return this.Dp=a};
+function Z_(a){if(64>a.Ee){if(0>a.Od.qa)return-1;var b=a.Od;a=b.la;b=b.qa;return(0===b?0!==a:0<b)?1:0}return EU(a).Vb}c.ia=function(a,b){GR.prototype.b.call(this);this.Od=(new Vb).ia(a,a>>31);this.Jb=b;DU();this.Ee=32-fa(0>a?~a:a)|0;return this};function T_(a){if(0===a.Jb||aZ(a))return EU(a);if(0>a.Jb){var b=EU(a),d=qf();a=a.Jb;var e=a>>31;return Nf(b,Sf(d,(new Vb).ia(-a|0,0!==a?~e:-e|0)))}b=EU(a);d=qf();a=a.Jb;return vta(b,Sf(d,(new Vb).ia(a,a>>31)))}
+function xta(a,b){var d=a.Jb,e=d>>31,f=b>>31;b=d-b|0;d=(-2147483648^b)>(-2147483648^d)?-1+(e-f|0)|0:e-f|0;return 64>a.Ee?(e=a.Od,f=e.qa,0===e.la&&0===f?Mpa(DU(),(new Vb).ia(b,d)):AU(DU(),a.Od,GU(DU(),(new Vb).ia(b,d)))):(new GR).oq(EU(a),GU(DU(),(new Vb).ia(b,d)))}
+function X_(a){if(0===a.ko){if(0===a.Ee)var b=1;else if(64>a.Ee){var d=a.Od;if(0===d.la&&-2147483648===d.qa)b=19;else{WA();b=DU().Ep;if(0>d.qa)var e=d.la,d=d.qa,e=(new Vb).ia(-e|0,0!==e?~d:-d|0);else e=d;b:{var d=0,f=b.m.length;for(;;){if(d===f){b=-1-d|0;break b}var h=(d+f|0)>>>1|0,k=b.m[h],p=Qa(k),t=p.la,p=p.qa,x=e.qa;if(x===p?(-2147483648^e.la)<(-2147483648^t):x<p)f=h;else{if(bn(cn(),e,k)){b=h;break b}d=1+h|0}}}b=0>b?-1-b|0:1+b|0}}else b=1+Na(.3010299956639812*(-1+a.Ee|0))|0,e=EU(a),d=qf(),b=0!==
+vta(e,Sf(d,(new Vb).ia(b,b>>31))).Vb?1+b|0:b;a.ko=b}return a.ko}function rta(a){if(0===a.Jb||aZ(a))return EU(a);if(0>a.Jb){var b=EU(a),d=qf();a=a.Jb;var e=a>>31;return Nf(b,Sf(d,(new Vb).ia(-a|0,0!==a?~e:-e|0)))}if(a.Jb>S_(a)||a.Jb>$_(EU(a)))throw(new FU).c("Rounding necessary");b=EU(a);d=qf();a=a.Jb;a=Sf(d,(new Vb).ia(a,a>>31));a=sba(W_(b,a));if(0!==a.m[1].Vb)throw(new FU).c("Rounding necessary");return a.m[0]}function wta(a,b){a.jo=b;a.Ee=df(gf(),b);64>a.Ee&&(a.Od=b.lj())}
+function S_(a){return 0<a.ko?a.ko:1+Na(.3010299956639812*(-1+a.Ee|0))|0}
+c.Rj=function(){var a=Z_(this),b=this.Ee,d=b>>31,e=Ra(),f=SF(e,this.Jb/.3010299956639812),e=e.Rb,f=b-f|0,b=(-2147483648^f)>(-2147483648^b)?-1+(d-e|0)|0:d-e|0;if((-1===b?2147482574>(-2147483648^f):-1>b)||0===a)return 0*a;if(0===b?-2147482623<(-2147483648^f):0<b)return Infinity*a;d=uta(EU(this));b=1076;if(0>=this.Jb)f=qf(),e=-this.Jb|0,e=Nf(d,Sf(f,(new Vb).ia(e,e>>31)));else{var e=qf(),h=this.Jb,e=Sf(e,(new Vb).ia(h,h>>31)),f=100-f|0;0<f?(b=b-f|0,f=Rf(d,f)):f=d;f=W_(f,e);d=Y_(tta(f.Ay),e);b=-2+b|0;
+f=Rf(f.xy,2);e=cf();d=1+(da(d,3+d|0)/2|0)|0;d=Cf(e,(new Vb).ia(d,d>>31));e=zf(Ef(),f,d)}var f=$_(e),d=-54+df(gf(),e)|0,k,p;if(0<d){if(e=Qf(e,d).lj(),h=e.qa,e=e.la,k=h,h=e,p=k,1===(1&e)&&f<d||3===(3&e)){var t=2+e|0,e=t;k=-2147483646>(-2147483648^t)?1+k|0:k}}else e=e.lj(),h=e.la,p=e.qa,k=-d|0,e=0===(32&k)?h<<k:0,k=0===(32&k)?(h>>>1|0)>>>(31-k|0)|0|p<<k:h<<k,h=e,p=k,3===(3&e)&&(e=t=2+e|0,k=-2147483646>(-2147483648^t)?1+k|0:k);0===(4194304&k)?(e=e>>>1|0|k<<31,k>>=1,b=b+d|0):(e=e>>>2|0|k<<30,k>>=2,b=b+
+(1+d|0)|0);if(2046<b)return Infinity*a;if(-53>b)return 0*a;if(0>=b){e=h>>>1|0|p<<31;k=p>>1;p=63+b|0;h=e&(0===(32&p)?-1>>>p|0|-2<<(31-p|0):-1>>>p|0);p=k&(0===(32&p)?-1>>>p|0:0);b=-b|0;e=0===(32&b)?e>>>b|0|k<<1<<(31-b|0):k>>b;k=0===(32&b)?k>>b:k>>31;if(3===(3&e)||(1!==(1&e)||0===h&&0===p?0:f<d))b=k,e=f=1+e|0,k=0===f?1+b|0:b;b=0;f=k;e=e>>>1|0|f<<31;k=f>>1}f=e;b=-2147483648&a>>31|b<<20|1048575&k;a=Ja();b=(new Vb).ia(f,b);a.sp?(a.Gs[a.DD]=b.qa,a.Gs[a.JE]=b.la,a=+a.uD[0]):a=ola(b);return a};
+c.KD=function(a,b){GR.prototype.b.call(this);this.Od=a;this.Jb=b;this.Ee=CU(DU(),a);return this};c.r=function(){if(0===this.yh)if(64>this.Ee){this.yh=this.Od.la;var a=this.Od.qa;this.yh=da(33,this.yh)+a|0;this.yh=da(17,this.yh)+this.Jb|0}else this.yh=da(17,this.jo.r())+this.Jb|0;return this.yh};c.c=function(a){GR.prototype.Wo.call(this,uF(Ha(),a),0,a.length|0);return this};c.Bi=function(){return-32>=this.Jb||this.Jb>S_(this)?0:T_(this).Bi()};
+function yta(a,b){var d=a.Jb-b.Jb|0;if(aZ(a)&&0>=d)return b;if(aZ(b)&&(aZ(a)||0<=d))return a;if(0===d){var d=a.Ee,e=b.Ee;if(64>(1+(d>e?d:e)|0)){var d=DU(),f=a.Od,e=f.la,f=f.qa,h=b.Od;b=h.qa;h=e+h.la|0;return AU(d,(new Vb).ia(h,(-2147483648^h)<(-2147483648^e)?1+(f+b|0)|0:f+b|0),a.Jb)}d=EU(a);b=EU(b);return(new GR).oq(zf(Ef(),d,b),a.Jb)}return 0<d?Kpa(DU(),a,b,d):Kpa(DU(),b,a,-d|0)}c.nn=function(a){GR.prototype.oq.call(this,a,0);return this};
+c.bq=function(){var a=this.Ee,b=a>>31,d=Ra(),e=SF(d,this.Jb/.3010299956639812),d=d.Rb,e=a-e|0,a=(-2147483648^e)>(-2147483648^a)?-1+(b-d|0)|0:b-d|0,b=ea(Z_(this));return(-1===a?2147483499>(-2147483648^e):-1>a)||0===b?ea(0*b):(0===a?-2147483519<(-2147483648^e):0<a)?ea(Infinity*b):ea(this.Rj())};
+c.Wo=function(a,b,d){GR.prototype.b.call(this);var e=-1+(b+d|0)|0;if(null===a)throw(new ye).c("in \x3d\x3d null");if(e>=a.m.length||0>b||0>=d||0>e)throw(new hZ).c(u((new v).G((new w).f(["Bad offset/length: offset\x3d"," len\x3d"," in.length\x3d",""])),(new w).f([b,d,a.m.length])));d=b;if(b<=e&&43===a.m[b]){d=1+d|0;if(d<e){DU();var f=a.m[d];b=[(new Ke).Xa(43),(new Ke).Xa(45)];for(var f=(new Ke).Xa(f),h=0;;){if(h<(b.length|0))var k=b[h],k=!1===bn(cn(),k,f);else k=!1;if(k)h=1+h|0;else break}b=h!==(b.length|
+0)}else b=!1;if(b)throw(new hZ).c("For input string: "+a.k());}else{b=d<=e&&45===a.m[d];if((1+d|0)<e){DU();h=a.m[1+d|0];f=[(new Ke).Xa(43),(new Ke).Xa(45)];h=(new Ke).Xa(h);for(k=0;;){if(k<(f.length|0))var p=f[k],p=!1===bn(cn(),p,h);else p=!1;if(p)k=1+k|0;else break}f=k!==(f.length|0)}else f=!1;if(b&&f)throw(new hZ).c("For input string: "+a.k());}h=d;for(b=!1;;){if(d<=e){DU();k=a.m[d];f=[(new Ke).Xa(46),(new Ke).Xa(101),(new Ke).Xa(69)];k=(new Ke).Xa(k);for(p=0;;){if(p<(f.length|0))var t=f[p],t=!1===
+bn(cn(),t,k);else t=!1;if(t)p=1+p|0;else break}f=p===(f.length|0)}else f=!1;if(f)b||48===a.m[d]||(b=!0),d=1+d|0;else break}f=(new JT).Wo((new IT).lm(a).vr,h,d).k();h=d-h|0;if(d<=e&&46===a.m[d]){for(k=d=1+d|0;;){if(d<=e){DU();for(var t=a.m[d],p=[(new Ke).Xa(101),(new Ke).Xa(69)],t=(new Ke).Xa(t),x=0;;){if(x<(p.length|0))var E=p[x],E=!1===bn(cn(),E,t);else E=!1;if(E)x=1+x|0;else break}p=x===(p.length|0)}else p=!1;if(p)b||48===a.m[d]||(b=!0),d=1+d|0;else break}this.Jb=d-k|0;b=""+f+(new JT).Wo((new IT).lm(a).vr,
+k,k+this.Jb|0).k();f=h+this.Jb|0}else this.Jb=0,b=f,f=h;f|=0;if(d<=e){DU();k=a.m[d];h=[(new Ke).Xa(101),(new Ke).Xa(69)];k=(new Ke).Xa(k);for(p=0;;)if(p<(h.length|0)?(t=h[p],t=!1===bn(cn(),t,k)):t=!1,t)p=1+p|0;else break;h=p!==(h.length|0)}else h=!1;if(h&&(d=1+d|0,h=(1+d|0)<=e&&45!==a.m[1+d|0],d=d<=e&&43===a.m[d]&&h?1+d|0:d,d=qla(Ha(),a,d,(1+e|0)-d|0),a=this.Jb,e=a>>31,h=vi(ti(),d,10),d=h>>31,k=this.Jb=h=a-h|0,h!==k||((-2147483648^h)>(-2147483648^a)?-1+(e-d|0)|0:e-d|0)!==k>>31))throw(new hZ).c("Scale out of range");
+19>f?(this.Od=Uba(Mh(),b),this.Ee=CU(DU(),this.Od)):wta(this,(new af).c(b));return this};function EU(a){null===a.jo&&(a.jo=Cf(cf(),a.Od));return a.jo}
+function zta(a,b){var d=Z_(a),e=Z_(b);if(d===e){if(a.Jb===b.Jb&&64>a.Ee&&64>b.Ee){var d=a.Od,e=d.la,d=d.qa,f=b.Od,h=f.qa;if(d===h?(-2147483648^e)<(-2147483648^f.la):d<h)return-1;e=a.Od;a=e.la;e=e.qa;b=b.Od;d=b.qa;return(e===d?(-2147483648^a)>(-2147483648^b.la):e>d)?1:0}var f=a.Jb,h=f>>31,e=b.Jb,k=e>>31,e=f-e|0,f=(-2147483648^e)>(-2147483648^f)?-1+(h-k|0)|0:h-k|0,h=S_(a)-S_(b)|0,k=h>>31,p=1+e|0,t=0===p?1+f|0:f;if(k===t?(-2147483648^h)>(-2147483648^p):k>t)return d;k=h>>31;p=-1+e|0;t=-1!==p?f:-1+f|0;
+if(k===t?(-2147483648^h)<(-2147483648^p):k<t)return-d|0;a=EU(a);b=EU(b);if(0>f)d=qf(),a=Nf(a,Sf(d,(new Vb).ia(-e|0,0!==e?~f:-f|0)));else if(0===f?0!==e:0<f)b=Nf(b,Sf(qf(),(new Vb).ia(e,f)));return Y_(a,b)}return d<e?-1:1}var Jpa=g({uH:0},!1,"java.math.BigDecimal",{uH:1,Gk:1,d:1,i:1,Ed:1});GR.prototype.$classData=Jpa;function af(){this.Ab=null;this.yh=this.by=this.Vb=this.cc=0}af.prototype=new BT;af.prototype.constructor=af;
+function Tf(a,b){if(0>b)throw(new FU).c("Negative exponent");if(0===b)return cf().Wm;if(1===b||a.o(cf().Wm)||a.o(cf().Hj))return a;if(V_(a,0)){a:{qf();var d=cf().Wm,e=a;for(;;)if(1<b)a=0!==(1&b)?Nf(d,e):d,1===e.cc?e=Nf(e,e):(d=la(Wa(db),[e.cc<<1]),d=Cba(e.Ab,e.cc,d),e=new af,af.prototype.b.call(e),0===d.m.length?(e.Vb=0,e.cc=1,e.Ab=Af(Bf(),0,(new w).f([]))):(e.Vb=1,e.cc=d.m.length,e.Ab=d,bf(e))),b>>=1,d=a;else{b=Nf(d,e);break a}}return b}for(d=1;!V_(a,d);)d=1+d|0;return Nf(Npa(cf(),da(d,b)),Tf(Qf(a,
+d),b))}c=af.prototype;c.lj=function(){if(1<this.cc)var a=this.Ab.m[0],b=this.Ab.m[1];else a=this.Ab.m[0],b=0;var d=this.Vb,e=d>>31,f=65535&d,h=d>>>16|0,k=65535&a,p=a>>>16|0,t=da(f,k),k=da(h,k),x=da(f,p),f=t+((k+x|0)<<16)|0,t=(t>>>16|0)+x|0,b=(((da(d,b)+da(e,a)|0)+da(h,p)|0)+(t>>>16|0)|0)+(((65535&t)+k|0)>>>16|0)|0;return(new Vb).ia(f,b)};c.b=function(){this.by=-2;this.yh=0;return this};
+function vta(a,b){if(0===b.Vb)throw(new FU).c("BigInteger divide by zero");var d=b.Vb;if(1===b.cc&&1===b.Ab.m[0])return 0<b.Vb?a:Aba(a);var e=a.Vb,f=a.cc,h=b.cc;if(2===(f+h|0))return a=a.Ab.m[0],b=b.Ab.m[0],f=Ra(),b=kf(f,a,0,b,0),a=f.Rb,e!==d&&(d=b,e=a,b=-d|0,a=0!==d?~e:-e|0),Cf(cf(),(new Vb).ia(b,a));var k=f!==h?f>h?1:-1:xf(Ef(),a.Ab,b.Ab,f);if(0===k)return e===d?cf().Wm:cf().$w;if(-1===k)return cf().Hj;var k=1+(f-h|0)|0,p=la(Wa(db),[k]),d=e===d?1:-1;1===h?zba(pf(),p,a.Ab,f,b.Ab.m[0]):yba(pf(),p,
+k,a.Ab,f,b.Ab,h);d=$e(new af,d,k,p);bf(d);return d}c.o=function(a){if(a&&a.$classData&&a.$classData.n.vH){var b;if(b=this.Vb===a.Vb&&this.cc===a.cc){a=a.Ab;b=(new a0).Q(0,this.cc,1);b=Ve(new We,b,0,b.ra());for(var d=!0;d&&b.ta();)d=b.ma()|0,d=this.Ab.m[d]===a.m[d];b=d}a=b}else a=!1;return a};c.k=function(){return lf(nf(),this)};c.ia=function(a,b){af.prototype.b.call(this);this.Vb=a;this.cc=1;this.Ab=Af(Bf(),b,(new w).f([]));return this};
+function ef(a){if(-2===a.by){if(0===a.Vb)var b=-1;else for(b=0;0===a.Ab.m[b];)b=1+b|0;a.by=b}return a.by}function uta(a){return 0>a.Vb?$e(new af,1,a.cc,a.Ab):a}
+function W_(a,b){var d=b.Vb;if(0===d)throw(new FU).c("BigInteger divide by zero");var e=b.cc;b=b.Ab;if(1===e){pf();b=b.m[0];var f=a.Ab,h=a.cc,e=a.Vb;1===h?(f=f.m[0],a=+(f>>>0)/+(b>>>0)|0,h=0,b=+(f>>>0)%+(b>>>0)|0,f=0,e!==d&&(d=a,a=-d|0,h=0!==d?~h:-h|0),0>e&&(d=b,e=f,b=-d|0,f=0!==d?~e:-e|0),d=Xe(new Se,Cf(cf(),(new Vb).ia(a,h)),Cf(cf(),(new Vb).ia(b,f)))):(d=e===d?1:-1,a=la(Wa(db),[h]),b=zba(0,a,f,h,b),b=Af(Bf(),b,(new w).f([])),d=$e(new af,d,h,a),e=$e(new af,e,1,b),bf(d),bf(e),d=Xe(new Se,d,e));return d}h=
+a.Ab;f=a.cc;if(0>(f!==e?f>e?1:-1:xf(Ef(),h,b,f)))return Xe(new Se,cf().Hj,a);a=a.Vb;var k=1+(f-e|0)|0,d=a===d?1:-1,p=la(Wa(db),[k]);b=yba(pf(),p,k,h,f,b,e);d=$e(new af,d,k,p);e=$e(new af,a,e,b);bf(d);bf(e);return Xe(new Se,d,e)}function bf(a){a:for(;;){if(0<a.cc&&(a.cc=-1+a.cc|0,0===a.Ab.m[a.cc]))continue a;break}0===a.Ab.m[a.cc]&&(a.Vb=0);a.cc=1+a.cc|0}
+function V_(a,b){var d=b>>5;if(0===b)return 0!==(1&a.Ab.m[0]);if(0>b)throw(new FU).c("Negative bit address");if(d>=a.cc)return 0>a.Vb;if(0>a.Vb&&d<ef(a))return!1;var e=a.Ab.m[d];0>a.Vb&&(e=ef(a)===d?-e|0:~e);return 0!==(e&1<<(31&b))}function $_(a){if(0===a.Vb)return-1;var b=ef(a);a=a.Ab.m[b];return(b<<5)+(0===a?32:31-fa(a&(-a|0))|0)|0}function Aba(a){return 0===a.Vb?a:$e(new af,-a.Vb|0,a.cc,a.Ab)}function $e(a,b,d,e){af.prototype.b.call(a);a.Vb=b;a.cc=d;a.Ab=e;return a}
+function tta(a){if(0!==a.Vb){gf();var b=a.cc,d=1+b|0,e=la(Wa(db),[d]);tba(0,e,a.Ab,b);a=$e(new af,a.Vb,d,e);bf(a)}return a}c.Rj=function(){return Hh(Ih(),lf(nf(),this))};
+c.Cd=function(a,b){af.prototype.b.call(this);cf();if(null===a)throw(new ye).b();if(2>b||36<b)throw(new hZ).c("Radix out of range");if(null===a)throw(new ye).b();if(""===a)throw(new hZ).c("Zero length BigInteger");if(""===a||"+"===a||"-"===a)throw(new hZ).c("Zero length BigInteger");var d=a.length|0;if(45===(65535&(a.charCodeAt(0)|0)))var e=-1,f=1,h=-1+d|0;else 43===(65535&(a.charCodeAt(0)|0))?(f=e=1,h=-1+d|0):(e=1,f=0,h=d);var e=e|0,k=f|0,f=h|0,h=-1+d|0;if(!(k>=d))for(var p=k;;){var t=65535&(a.charCodeAt(p)|
+0);if(43===t||45===t)throw(new hZ).c("Illegal embedded sign character");if(p===h)break;p=1+p|0}var h=nf().TG.m[b],p=f/h|0,x=f%h|0;0!==x&&(p=1+p|0);f=la(Wa(db),[p]);p=nf().EG.m[-2+b|0];t=0;for(x=k+(0===x?h:x)|0;k<d;){var E=vi(ti(),a.substring(k,x),b),k=Pf(qf(),f,f,t,p);Ef();for(var S=f,U=t,ga=E,E=0;0!==ga&&E<U;){var ma=ga,ga=ma+S.m[E]|0,ma=(-2147483648^ga)<(-2147483648^ma)?1:0;S.m[E]=ga;ga=ma;E=1+E|0}k=k+ga|0;f.m[t]=k;t=1+t|0;k=x;x=k+h|0}this.Vb=e;this.cc=t;this.Ab=f;bf(this);return this};
+c.r=function(){if(0===this.yh){var a=this.cc,b=-1+a|0;if(!(0>=a))for(a=0;;){var d=a;this.yh=da(33,this.yh)+this.Ab.m[d]|0;if(a===b)break;a=1+a|0}this.yh=da(this.yh,this.Vb)}return this.yh};c.c=function(a){af.prototype.Cd.call(this,a,10);return this};function Rf(a,b){return 0===b||0===a.Vb?a:0<b?uba(gf(),a,b):vba(gf(),a,-b|0)}c.Bi=function(){return da(this.Vb,this.Ab.m[0])};function Nf(a,b){return 0===b.Vb||0===a.Vb?cf().Hj:Of(qf(),a,b)}
+function Opa(a,b,d){af.prototype.b.call(a);a.Vb=b;b=d.qa;0===b?(a.cc=1,a.Ab=Af(Bf(),d.la,(new w).f([]))):(a.cc=2,a.Ab=Af(Bf(),d.la,(new w).f([b])));return a}function Qf(a,b){return 0===b||0===a.Vb?a:0<b?vba(gf(),a,b):uba(gf(),a,-b|0)}function Y_(a,b){return a.Vb>b.Vb?1:a.Vb<b.Vb?-1:a.cc>b.cc?a.Vb:a.cc<b.cc?-b.Vb|0:da(a.Vb,xf(Ef(),a.Ab,b.Ab,a.cc))}var Ue=g({vH:0},!1,"java.math.BigInteger",{vH:1,Gk:1,d:1,i:1,Ed:1});af.prototype.$classData=Ue;function LU(){iZ.call(this)}LU.prototype=new jZ;
+LU.prototype.constructor=LU;LU.prototype.Cd=function(a,b){iZ.prototype.Cd.call(this,a,b);return this};var Ppa=g({GZ:0},!1,"java.math.RoundingMode",{GZ:1,un:1,d:1,Ed:1,i:1});LU.prototype.$classData=Ppa;function Cb(){this.sa=this.je=null;this.vj=!1}Cb.prototype=new l;Cb.prototype.constructor=Cb;c=Cb.prototype;c.Oc=function(){return this.sa};c.k=function(){return"["+this.je.eg.zb(" ")+"]"};c.Nn=function(){return Lj(D())};function Bb(a,b,d,e){a.je=b;a.sa=d;a.vj=e;return a}
+c.Tt=function(){return Bb(new Cb,this.je,this.sa,this.vj)};function yb(a){return!!(a&&a.$classData&&a.$classData.n.GH)}c.$classData=g({GH:0},!1,"org.nlogo.core.CommandBlock",{GH:1,d:1,Mw:1,Fp:1,no:1});function Eb(){this.sa=this.fl=null}Eb.prototype=new l;Eb.prototype.constructor=Eb;c=Eb.prototype;c.Oc=function(){return this.sa};c.k=function(){return"["+this.fl.k()+"]"};c.Nn=function(){var a=this.fl.Nn();return zj(D())===a?Oj(D()):N(D())===a?Pj(D()):nn(D(),a,zj(D()))||nn(D(),a,N(D()))?Mj(D()):Nj(D())};
+function Db(a,b,d){a.fl=b;a.sa=d;return a}c.Tt=function(a){return Db(new Eb,this.fl,a)};function zb(a){return!!(a&&a.$classData&&a.$classData.n.WH)}c.$classData=g({WH:0},!1,"org.nlogo.core.ReporterBlock",{WH:1,d:1,Mw:1,Fp:1,no:1});function Hb(){this.sa=this.za=this.zd=null}Hb.prototype=new l;Hb.prototype.constructor=Hb;c=Hb.prototype;c.Xx=function(){return this.zd};c.Oc=function(){return this.sa};c.k=function(){return this.zd.k()+"["+this.za.zb(", ")+"]"};
+c.hj=function(a,b,d){this.zd=a;this.za=b;this.sa=d;return this};function Kda(a,b){var d=a.zd,e=b.wn();e.z()?e=F():(e=e.X(),e=(new J).j(e.Oc().$a));e=(e.z()?a.sa.$a:e.X())|0;return(new Hb).hj(d,b,vm(new wm,a.sa.Ua,e,a.sa.cb))}function Jda(a,b){var d=new Hb;Hb.prototype.hj.call(d,a,I(r(),y()),b);return d}c.$classData=g({M_:0},!1,"org.nlogo.core.Statement",{M_:1,d:1,xH:1,Fp:1,no:1});function b0(){this.p=this.h=this.g=null;this.a=0}b0.prototype=new l;b0.prototype.constructor=b0;function c0(){}
+c=c0.prototype=b0.prototype;c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/output.scala: 6");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/output.scala: 6");return this.h};function d0(){this.p=this.h=this.g=this.za=null;this.a=0}d0.prototype=new l;d0.prototype.constructor=d0;function e0(){}c=e0.prototype=d0.prototype;c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};
+c.H=function(){return nc(D(),this.za.ob(),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/plotting.scala: 10");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.G=function(a){this.za=a;M(this);return this};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/plotting.scala: 10");return this.h};function f0(){this.dd=0;this.p=this.h=this.g=this.za=null;this.a=0}f0.prototype=new l;f0.prototype.constructor=f0;function g0(){}c=g0.prototype=f0.prototype;c.nq=function(a,b){this.dd=a;this.za=b;M(this);return this};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};
+c.H=function(){var a=this.za.ob(),b=this.dd,d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/plotting.scala: 50");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/plotting.scala: 50");return this.h};function h0(){this.p=this.h=this.g=null;this.a=0}h0.prototype=new l;h0.prototype.constructor=h0;function Ata(){}c=Ata.prototype=h0.prototype;c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};
+c.H=function(){var a=D();B();var b=(new w).f([Fr()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/output.scala: 12");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/output.scala: 12");return this.h};function DO(){this.EE=this.FE=this.wV=null;this.a=0}DO.prototype=new l;DO.prototype.constructor=DO;c=DO.prototype;c.yg=function(a,b){$D(this,a,b)};c.nb=function(){return this};c.ma=function(){return this.Fq()};c.$m=function(){return Sp(new Qp,this)};c.Hg=function(){return this};c.z=function(){return!this.ta()};
+c.ob=function(){var a=B().s;return bE(this,a)};function Bta(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/lex/Tokenizer.scala: 68");return a.EE}c.Mc=function(a,b,d){return cc(this,a,b,d)};c.zb=function(a){return cc(this,"",a,"")};c.k=function(){return VT(this)};c.ua=function(a){XT(this,a)};c.Gb=function(a,b){return nl(this,a,b)};c.gg=function(){dk();var a=ek().nc;return bE(this,a)};c.Ha=function(){return as(this)};
+c.Td=function(){var a=i0().s;return bE(this,a)};c.Fq=function(){var a=this.wV.IC(Bta(this));if(null===a)throw(new q).j(a);var b=a.ja(),a=a.na();this.FE=(new J).j(b);this.a=(1|this.a)<<24>>24;this.EE=a;this.a=(2|this.a)<<24>>24;return(new A).e(b,a)};c.ta=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/lex/Tokenizer.scala: 67");return!this.FE.ib(xm())};c.Mf=function(){return cc(this,"","","")};
+function Tla(a,b,d){a.wV=b;a.FE=F();a.a=(1|a.a)<<24>>24;a.EE=d;a.a=(2|a.a)<<24>>24;return a}c.Jc=function(){return Vv(this)};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return Vv(this)};c.gd=function(){var a=ol(),a=pl(a);return bE(this,a)};c.sf=function(a,b){return nl(this,a,b)};c.Ae=function(a,b,d){ZT(this,a,b,d)};c.Eg=function(){return!1};c.Ko=function(a){return $T(this,a)};c.we=function(){for(var a=dc(new ec,gc());this.ta();){var b=this.Fq();hc(a,b)}return a.Oa};
+c.fg=function(a){return hE(this,a)};c.ve=function(a){return iE(this,a)};c.Ke=function(){return kd(this)};c.$classData=g({X0:0},!1,"org.nlogo.lex.Tokenizer$TokenLexIterator",{X0:1,d:1,ad:1,La:1,Ka:1});function dP(){this.fw=null}dP.prototype=new Tqa;dP.prototype.constructor=dP;dP.prototype.y=function(a){return this.bf(a)};dP.prototype.QD=function(a){this.fw=a;return this};
+dP.prototype.bf=function(a){var b=ag();a=a.Y;a=uea(this.fw).$b(a.toUpperCase());a.z()?a=F():(a=a.X(),a=(new J).j(ne(a)));if(a.z())return F();a=a.X();return(new J).j((new A).e(b,a))};dP.prototype.$classData=g({m1:0},!1,"org.nlogo.parse.CommandHandler",{m1:1,J1:1,d:1,Fr:1,fa:1});function Nn(){DT.call(this);this.ew=null}Nn.prototype=new lZ;Nn.prototype.constructor=Nn;Nn.prototype.Jf=function(a){this.ew=a;DT.prototype.gc.call(this,null,null);return this};
+Nn.prototype.$classData=g({wB:0},!1,"org.nlogo.parse.ExpressionParser$MissingPrefixException",{wB:1,xd:1,Lc:1,d:1,i:1});function Rn(){DT.call(this);this.ew=null}Rn.prototype=new lZ;Rn.prototype.constructor=Rn;Rn.prototype.Jf=function(a){this.ew=a;DT.prototype.gc.call(this,null,null);return this};Rn.prototype.$classData=g({xB:0},!1,"org.nlogo.parse.ExpressionParser$UnexpectedTokenException",{xB:1,xd:1,Lc:1,d:1,i:1});function eP(){this.fw=null}eP.prototype=new Tqa;eP.prototype.constructor=eP;
+eP.prototype.y=function(a){return this.bf(a)};eP.prototype.QD=function(a){this.fw=a;return this};eP.prototype.bf=function(a){var b=bg();a=a.Y;a=vea(this.fw).$b(a.toUpperCase());a.z()?a=F():(a=a.X(),a=(new J).j(ne(a)));if(a.z())return F();a=a.X();return(new J).j((new A).e(b,a))};eP.prototype.$classData=g({M1:0},!1,"org.nlogo.parse.ReporterHandler",{M1:1,J1:1,d:1,Fr:1,fa:1});function Rp(){this.YF=this.$Y=this.hi=null;this.a=!1}Rp.prototype=new l;Rp.prototype.constructor=Rp;c=Rp.prototype;
+c.yg=function(a,b){$D(this,a,b)};c.nb=function(){return this};c.ma=function(){return Cta(this)};c.$m=function(){return Sp(new Qp,this)};c.Hg=function(){return this};c.z=function(){return!this.ta()};c.ob=function(){var a=B().s;return bE(this,a)};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.zb=function(a){return cc(this,"",a,"")};c.k=function(){return VT(this)};c.ua=function(a){XT(this,a)};c.Gb=function(a,b){return nl(this,a,b)};
+function Cta(a){var b=a.hi.ma(),b=a.$Y.ZY(b,Dta(a));if(null===b)throw(new q).j(b);var d=b.ja();a.YF=b.na();a.a=!0;return d}c.gg=function(){dk();var a=ek().nc;return bE(this,a)};c.Ha=function(){return as(this)};c.Td=function(){var a=i0().s;return bE(this,a)};function Dta(a){if(!a.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/TransformableTokenStream.scala: 13");return a.YF}c.ta=function(){return this.hi.ta()};
+c.Mf=function(){return cc(this,"","","")};c.Jc=function(){return Vv(this)};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return Vv(this)};c.gd=function(){var a=ol(),a=pl(a);return bE(this,a)};c.sf=function(a,b){return nl(this,a,b)};c.Ae=function(a,b,d){ZT(this,a,b,d)};c.Eg=function(){return!1};c.Ko=function(a){return $T(this,a)};c.we=function(){for(var a=dc(new ec,gc());this.ta();){var b=Cta(this);hc(a,b)}return a.Oa};c.fg=function(a){return hE(this,a)};
+c.ve=function(a){return iE(this,a)};c.Ke=function(){return kd(this)};c.$classData=g({O1:0},!1,"org.nlogo.parse.SimpleTransformIterator",{O1:1,d:1,ad:1,La:1,Ka:1});function j0(){this.En=this.Fn=this.Gn=this.wv=null;this.a=!1}j0.prototype=new l;j0.prototype.constructor=j0;c=j0.prototype;c.b=function(){k0=this;var a=(new we).b();if(a.Na)a=a.jb;else{if(null===a)throw(new ye).b();a=a.Na?a.jb:ze(a,(new aW).b())}this.wv=a;this.a=!0;return this};
+c.jv=function(){null===oq().Gn&&null===oq().Gn&&(oq().Gn=(new l0).Zo(this));return oq().Gn};c.OE=function(){null===oq().En&&null===oq().En&&(oq().En=(new m0).Zo(this));return oq().En};c.PE=function(){null===oq().Fn&&null===oq().Fn&&(oq().Fn=(new n0).Zo(this));return oq().Fn};c.yy=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 84");return this.wv};
+c.$classData=g({K2:0},!1,"org.nlogo.tortoise.compiler.CompilationRequest$",{K2:1,d:1,V3:1,l:1,i:1});var k0=void 0;function oq(){k0||(k0=(new j0).b());return k0}function o0(){this.Ll=null;this.a=!1}o0.prototype=new l;o0.prototype.constructor=o0;c=o0.prototype;c.b=function(){p0=this;var a=Hq();null===Hq().hz&&null===Hq().hz&&(Hq().hz=(new q0).Yj(a));this.Ll=Hq().hz;this.a=!0;return this};c.y=function(a){return HQ(this,a)};c.Fa=function(a){return HQ(this,a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+c.Ra=function(a){return HQ(this,a)};c.Ga=function(a){return!!HQ(this,a)};c.jz=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 81");return this.Ll};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return IQ(this,b)};c.$classData=g({L2:0},!1,"org.nlogo.tortoise.compiler.CompilationRequest$optionalSeqReader$",{L2:1,d:1,OB:1,ic:1,fa:1});var p0=void 0;function dra(){p0||(p0=(new o0).b());return p0}
+function r0(){this.En=this.Fn=this.Gn=this.wv=null;this.a=!1}r0.prototype=new l;r0.prototype.constructor=r0;c=r0.prototype;c.b=function(){s0=this;var a=(new we).b();if(a.Na)a=a.jb;else{if(null===a)throw(new ye).b();a=a.Na?a.jb:ze(a,(new qW).b())}this.wv=a;this.a=!0;return this};c.jv=function(){null===$p().Gn&&null===$p().Gn&&($p().Gn=(new l0).Zo(this));return $p().Gn};c.OE=function(){null===$p().En&&null===$p().En&&($p().En=(new m0).Zo(this));return $p().En};
+c.PE=function(){null===$p().Fn&&null===$p().Fn&&($p().Fn=(new n0).Zo(this));return $p().Fn};c.yy=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 52");return this.wv};c.$classData=g({e3:0},!1,"org.nlogo.tortoise.compiler.ExportRequest$",{e3:1,d:1,V3:1,l:1,i:1});var s0=void 0;function $p(){s0||(s0=(new r0).b());return s0}function aQ(){this.p=this.h=this.g=null;this.a=0}aQ.prototype=new l;
+aQ.prototype.constructor=aQ;c=aQ.prototype;c.b=function(){M(this);return this};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Cj(D())]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 107");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 107");return this.h};c.$classData=g({DB:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_anyother",{DB:1,d:1,ca:1,A:1,E:1});
+function bQ(){this.p=this.h=this.g=null;this.a=0}bQ.prototype=new l;bQ.prototype.constructor=bQ;c=bQ.prototype;c.b=function(){M(this);return this};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Cj(D())]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 122");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 122");return this.h};c.$classData=g({EB:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_countother",{EB:1,d:1,ca:1,A:1,E:1});
+function cQ(){this.p=this.h=this.g=this.ka=null;this.a=0}cQ.prototype=new l;cQ.prototype.constructor=cQ;c=cQ.prototype;c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 92");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 92");return this.h};c.$classData=g({FB:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_crofast",{FB:1,d:1,oa:1,A:1,E:1});function dQ(){this.p=this.h=this.g=this.ka=null;this.a=0}dQ.prototype=new l;dQ.prototype.constructor=dQ;c=dQ.prototype;
+c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 77");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 77");return this.h};c.$classData=g({GB:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_crtfast",{GB:1,d:1,oa:1,A:1,E:1});function gQ(){this.p=this.h=this.g=null;this.a=0}gQ.prototype=new l;gQ.prototype.constructor=gQ;c=gQ.prototype;c.b=function(){M(this);return this};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};
+c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 32");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 32");return this.h};c.$classData=g({HB:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_fdlessthan1",{HB:1,d:1,oa:1,A:1,E:1});function fQ(){this.p=this.h=this.g=null;this.a=0}fQ.prototype=new l;fQ.prototype.constructor=fQ;c=fQ.prototype;c.b=function(){M(this);return this};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};
+c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 18");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 18");return this.h};c.$classData=g({IB:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_fdone",{IB:1,d:1,oa:1,A:1,E:1});function hQ(){this.p=this.h=this.g=this.ka=null;this.a=0}hQ.prototype=new l;hQ.prototype.constructor=hQ;c=hQ.prototype;c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};
+c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 47");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 47");return this.h};c.$classData=g({EQ:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_hatchfast",{EQ:1,d:1,oa:1,A:1,E:1});function vW(){this.p=this.h=this.g=this.$k=null;this.a=0}vW.prototype=new l;vW.prototype.constructor=vW;c=vW.prototype;c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Cj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 197");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.c=function(a){this.$k=a;M(this);return this};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 197");return this.h};c.$classData=g({FQ:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_nsum",{FQ:1,d:1,ca:1,A:1,E:1});function tW(){this.p=this.h=this.g=this.$k=null;this.a=0}tW.prototype=new l;tW.prototype.constructor=tW;c=tW.prototype;c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Cj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 207");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.c=function(a){this.$k=a;M(this);return this};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 207");return this.h};c.$classData=g({GQ:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_nsum4",{GQ:1,d:1,ca:1,A:1,E:1});function kQ(){this.p=this.h=this.g=null;this.a=0}kQ.prototype=new l;kQ.prototype.constructor=kQ;c=kQ.prototype;c.b=function(){M(this);return this};
+c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Cj(D()),Mj(D())]),b=B().s,a=L(a,b),b=xj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 137");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 137");return this.h};c.$classData=g({HQ:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_oneofwith",{HQ:1,d:1,ca:1,A:1,E:1});function lQ(){this.p=this.h=this.g=null;this.a=0}lQ.prototype=new l;lQ.prototype.constructor=lQ;c=lQ.prototype;c.b=function(){M(this);return this};
+c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Cj(D()),Mj(D())]),b=B().s,a=L(a,b),b=Cj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 152");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 152");return this.h};c.$classData=g({IQ:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_otherwith",{IQ:1,d:1,ca:1,A:1,E:1});function sQ(){this.p=this.h=this.g=null;this.a=0}sQ.prototype=new l;sQ.prototype.constructor=sQ;c=sQ.prototype;c.b=function(){M(this);return this};
+c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.H=function(){var a=Ej(D());B();var b=(new w).f([N(D())]),d=B().s,b=L(b,d),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,b,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 217");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 217");return this.h};c.$classData=g({JB:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patchcol",{JB:1,d:1,ca:1,A:1,E:1});function tQ(){this.p=this.h=this.g=null;this.a=0}tQ.prototype=new l;tQ.prototype.constructor=tQ;c=tQ.prototype;c.b=function(){M(this);return this};
+c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.H=function(){var a=Ej(D());B();var b=(new w).f([N(D())]),d=B().s,b=L(b,d),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,b,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 222");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 222");return this.h};c.$classData=g({KB:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_patchrow",{KB:1,d:1,ca:1,A:1,E:1});function mQ(){this.p=this.h=this.g=this.ka=null;this.a=0}mQ.prototype=new l;mQ.prototype.constructor=mQ;c=mQ.prototype;c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};
+c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"--P-",e,!1,!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 62");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/Optimizer.scala: 62");return this.h};c.$classData=g({LB:0},!1,"org.nlogo.tortoise.compiler.Optimizer$_sproutfast",{LB:1,d:1,oa:1,A:1,E:1});function m0(){this.Ll=null;this.a=!1}m0.prototype=new l;m0.prototype.constructor=m0;c=m0.prototype;c.y=function(a){return HQ(this,a)};c.Fa=function(a){return HQ(this,a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+c.Ra=function(a){return HQ(this,a)};c.Ga=function(a){return!!HQ(this,a)};c.jz=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 47");return this.Ll};
+c.Zo=function(){this.Ll=m(new n,function(){return function(a){var b=jv();if(0===(2&b.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ShapeToJsonConverters.scala: 89");return cha(b.xV,a)}}(this));this.a=!0;return this};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return IQ(this,b)};c.$classData=g({W3:0},!1,"org.nlogo.tortoise.compiler.RequestSharedImplicits$optionLinkShapes$",{W3:1,d:1,OB:1,ic:1,fa:1});
+function n0(){this.Ll=null;this.a=!1}n0.prototype=new l;n0.prototype.constructor=n0;c=n0.prototype;c.y=function(a){return HQ(this,a)};c.Fa=function(a){return HQ(this,a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ra=function(a){return HQ(this,a)};c.Ga=function(a){return!!HQ(this,a)};c.jz=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 43");return this.Ll};
+c.Zo=function(){this.Ll=m(new n,function(){return function(a){var b=jv();if(0===(1&b.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ShapeToJsonConverters.scala: 81");return cha(b.nZ,a)}}(this));this.a=!0;return this};c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return IQ(this,b)};c.$classData=g({X3:0},!1,"org.nlogo.tortoise.compiler.RequestSharedImplicits$optionVectorShapes$",{X3:1,d:1,OB:1,ic:1,fa:1});
+function l0(){this.Ll=null;this.a=!1}l0.prototype=new l;l0.prototype.constructor=l0;c=l0.prototype;c.y=function(a){return HQ(this,a)};c.Fa=function(a){return HQ(this,a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ra=function(a){return HQ(this,a)};c.Ga=function(a){return!!HQ(this,a)};c.jz=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 39");return this.Ll};c.Zo=function(){this.Ll=Gq(Hq());this.a=!0;return this};
+c.Ca=function(a){return pb(this,a)};c.Dc=function(a,b){return IQ(this,b)};c.$classData=g({Y3:0},!1,"org.nlogo.tortoise.compiler.RequestSharedImplicits$optionalStringReader$",{Y3:1,d:1,OB:1,ic:1,fa:1});function t0(){this.Ag=this.Ml=this.Vh=null;this.a=0}t0.prototype=new l;t0.prototype.constructor=t0;c=t0.prototype;c.aq=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 78");return this.Ag};
+c.iw=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 77");return this.Ml};
+function Eta(a){var b=new t0;b.Vh=a;b.Ml="circle";b.a=(1|b.a)<<24>>24;var d=(new xu).qb(a.qk),d=(new A).e("x",d),e=(new xu).qb(a.rk),e=(new A).e("y",e);a=(new xu).qb(a.aD());a=[d,e,(new A).e("diam",a)];for(var d=dc(new ec,Eu()),e=0,f=a.length|0;e<f;)hc(d,a[e]),e=1+e|0;b.Ag=(new su).ac(d.Oa);b.a=(2|b.a)<<24>>24;return b}c.$e=function(){return ru(this)};c.Rp=function(){return vQ(this)};
+c.$classData=g({y4:0},!1,"org.nlogo.tortoise.compiler.json.ElemToJsonConverters$CircleConverter",{y4:1,d:1,Qw:1,Gr:1,Tl:1});function u0(){this.Ag=this.Ml=this.Vh=null;this.a=0}u0.prototype=new l;u0.prototype.constructor=u0;c=u0.prototype;c.aq=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 87");return this.Ag};
+function Fta(a){var b=new u0;b.Vh=a;b.Ml="line";b.a=(1|b.a)<<24>>24;var d=(new xu).qb(a.Rv().Zi()),d=(new A).e("x1",d),e=(new xu).qb(a.Rv().Ec()),e=(new A).e("y1",e),f=(new xu).qb(a.ku().Zi()),f=(new A).e("x2",f);a=(new xu).qb(a.ku().Ec());a=[d,e,f,(new A).e("y2",a)];d=dc(new ec,Eu());e=0;for(f=a.length|0;e<f;)hc(d,a[e]),e=1+e|0;b.Ag=(new su).ac(d.Oa);b.a=(2|b.a)<<24>>24;return b}
+c.iw=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 86");return this.Ml};c.$e=function(){return ru(this)};c.Rp=function(){return vQ(this)};c.$classData=g({z4:0},!1,"org.nlogo.tortoise.compiler.json.ElemToJsonConverters$LineConverter",{z4:1,d:1,Qw:1,Gr:1,Tl:1});function v0(){this.Ag=this.Vh=null;this.a=!1}v0.prototype=new l;v0.prototype.constructor=v0;c=v0.prototype;
+c.aq=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 96");return this.Ag};function Gta(a){var b=new v0;b.Vh=a;a=y();b.Ag=(new su).ac(Vg(Wg(),a));b.a=!0;return b}c.iw=function(){return Iq(oa(this.Vh)).toLowerCase()};c.$e=function(){return ru(this)};c.Rp=function(){return vQ(this)};
+c.$classData=g({A4:0},!1,"org.nlogo.tortoise.compiler.json.ElemToJsonConverters$OtherConverter",{A4:1,d:1,Qw:1,Gr:1,Tl:1});function w0(){this.Ag=this.Ml=this.Vh=null;this.a=0}w0.prototype=new l;w0.prototype.constructor=w0;c=w0.prototype;c.aq=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 60");return this.Ag};
+function Hta(a){var b=new w0;b.Vh=a;b.Ml="polygon";b.a=(1|b.a)<<24>>24;var d=Yba(a),e=Ita(),f=r(),d=(new Bu).G(d.xa(e,f.s)),d=(new A).e("xcors",d);a=Xba(a);e=Ita();f=r();a=(new Bu).G(a.xa(e,f.s));a=[d,(new A).e("ycors",a)];d=dc(new ec,Eu());e=0;for(f=a.length|0;e<f;)hc(d,a[e]),e=1+e|0;b.Ag=(new su).ac(d.Oa);b.a=(2|b.a)<<24>>24;return b}
+c.iw=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 59");return this.Ml};c.$e=function(){return ru(this)};c.Rp=function(){return vQ(this)};c.$classData=g({B4:0},!1,"org.nlogo.tortoise.compiler.json.ElemToJsonConverters$PolygonConverter",{B4:1,d:1,Qw:1,Gr:1,Tl:1});function x0(){this.Ag=this.Ml=this.Vh=null;this.a=0}x0.prototype=new l;x0.prototype.constructor=x0;c=x0.prototype;
+c.aq=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 68");return this.Ag};c.iw=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ElemToJsonConverters.scala: 67");return this.Ml};
+function Jta(a){var b=new x0;b.Vh=a;b.Ml="rectangle";b.a=(1|b.a)<<24>>24;var d=(new xu).qb(a.lw().Zi()),d=(new A).e("xmin",d),e=(new xu).qb(a.lw().Ec()),e=(new A).e("ymin",e),f=(new xu).qb(a.ev().Zi()),f=(new A).e("xmax",f);a=(new xu).qb(a.ev().Ec());a=[d,e,f,(new A).e("ymax",a)];d=dc(new ec,Eu());e=0;for(f=a.length|0;e<f;)hc(d,a[e]),e=1+e|0;b.Ag=(new su).ac(d.Oa);b.a=(2|b.a)<<24>>24;return b}c.$e=function(){return ru(this)};c.Rp=function(){return vQ(this)};
+c.$classData=g({C4:0},!1,"org.nlogo.tortoise.compiler.json.ElemToJsonConverters$RectangleConverter",{C4:1,d:1,Qw:1,Gr:1,Tl:1});function y0(){}y0.prototype=new SW;y0.prototype.constructor=y0;y0.prototype.b=function(){return this};y0.prototype.gp=function(a){return u((new v).G((new w).f(["Expected an array of ints, found ",""])),(new w).f([a]))};
+y0.prototype.Do=function(a){if(Fu(a))return a=a.hi,Aq(),Jq().y(a);Aq();a=u((new v).G((new w).f(["Expected all coordinates to be ints, found ",""])),(new w).f([a]));return Bq(pq(),a)};y0.prototype.$classData=g({J4:0},!1,"org.nlogo.tortoise.compiler.json.ElementReader$tortoiseJs2SeqInt$",{J4:1,Hp:1,d:1,ic:1,fa:1});var Kta=void 0;function pra(){Kta||(Kta=(new y0).b());return Kta}function DQ(){UW.call(this)}DQ.prototype=new tra;DQ.prototype.constructor=DQ;DQ.prototype.xT=function(a){Aq();return Jq().y(a)};
+DQ.prototype.Yj=function(a){this.dG=nD();if(null===a)throw ug(vg(),null);this.ga=a;return this};DQ.prototype.yT=function(a){Aq();return Jq().y(a)};DQ.prototype.$classData=g({U4:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$tortoiseJs2Double$",{U4:1,S4:1,d:1,ic:1,fa:1});function BQ(){UW.call(this)}BQ.prototype=new tra;BQ.prototype.constructor=BQ;
+BQ.prototype.xT=function(a){if(vu(wu(),a))return Aq(),a=Na(a),Jq().y(a);Aq();a=u((new v).G((new w).f(["The value "," could not be converted to an Int"])),(new w).f([a]));return Bq(pq(),a)};BQ.prototype.Yj=function(a){this.dG=lD();if(null===a)throw ug(vg(),null);this.ga=a;return this};BQ.prototype.yT=function(a){Aq();return Jq().y(a)};BQ.prototype.$classData=g({V4:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$tortoiseJs2Int$",{V4:1,S4:1,d:1,ic:1,fa:1});
+function q0(){this.Va=null}q0.prototype=new SW;q0.prototype.constructor=q0;q0.prototype.gp=function(a){return u((new v).G((new w).f(["expected an array of strings, found ",""])),(new w).f([a]))};q0.prototype.Yj=function(a){if(null===a)throw ug(vg(),null);this.Va=a;return this};q0.prototype.Do=function(a){return Gq(this.Va).Ra(a)};q0.prototype.$classData=g({Z4:0},!1,"org.nlogo.tortoise.compiler.json.LowPriorityImplicitReaders$tortoiseJsAsStringSeq$",{Z4:1,Hp:1,d:1,ic:1,fa:1});function cv(){}
+cv.prototype=new SW;cv.prototype.constructor=cv;cv.prototype.b=function(){return this};cv.prototype.gp=function(a){return u((new v).G((new w).f(["Expected vector shapes as array of objects, got ",""])),(new w).f([a]))};cv.prototype.Do=function(a){return ev(jv(),a)};cv.prototype.$classData=g({g5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$$anon$1",{g5:1,Hp:1,d:1,ic:1,fa:1});function dv(){}dv.prototype=new SW;dv.prototype.constructor=dv;dv.prototype.b=function(){return this};
+dv.prototype.gp=function(a){return u((new v).G((new w).f(["Expected link shapes as array of objects, got ",""])),(new w).f([a]))};dv.prototype.Do=function(a){jv();if(Mu(a)){var b=(new we).b();if(b.Na)b=b.jb;else{if(null===b)throw(new ye).b();b=b.Na?b.jb:ze(b,(new ZW).b())}a=b.Pa(a)}else Aq(),a=u((new v).G((new w).f(["Expected shape as json object, got ",""])),(new w).f([a])),a=Bq(pq(),a);return a};
+dv.prototype.$classData=g({h5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$$anon$2",{h5:1,Hp:1,d:1,ic:1,fa:1});function z0(){this.Ag=this.Vh=null;this.a=!1}z0.prototype=new l;z0.prototype.constructor=z0;z0.prototype.aq=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ShapeToJsonConverters.scala: 139");return this.Ag};
+function bha(a){var b=new z0;b.Vh=a;var d=(new zu).c(a.pe()),d=(new A).e("name",d),e=aha(new gv,a.HD()),e=ru(e),e=(new A).e("direction-indicator",e),f=(new A).e("curviness",(new yu).Xj(a.Mj));a=a.HE();var h=m(new n,function(){return function(a){return(jv(),jna(a)).$e()}}(b)),k=r();a=(new Bu).G(a.xa(h,k.s));d=[d,e,f,(new A).e("lines",a)];e=dc(new ec,Eu());f=0;for(a=d.length|0;f<a;)hc(e,d[f]),f=1+f|0;b.Ag=(new su).ac(e.Oa);b.a=!0;return b}z0.prototype.$e=function(){return ru(this)};
+z0.prototype.Rp=function(){return Sga()};z0.prototype.$classData=g({j5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$LinkShapeConverter",{j5:1,d:1,e5:1,Gr:1,Tl:1});function gv(){this.Ag=this.Vh=null;this.a=!1}gv.prototype=new l;gv.prototype.constructor=gv;gv.prototype.aq=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/ShapeToJsonConverters.scala: 130");return this.Ag};
+function aha(a,b){a.Vh=b;var d=(new zu).c(b.pe()),d=(new A).e("name",d),e=(new xu).qb(b.Tj),e=(new A).e("editableColorIndex",e),f=(new Au).od(b.aF()),f=(new A).e("rotate",f);b=b.kh;var h=m(new n,function(){return function(a){ku||(ku=(new ju).b());return(a&&a.$classData&&a.$classData.n.Wz?Hta(a):a&&a.$classData&&a.$classData.n.Xz?Jta(a):a&&a.$classData&&a.$classData.n.Uz?Eta(a):a&&a.$classData&&a.$classData.n.Vz?Fta(a):Gta(a)).$e()}}(a)),k=r();b=(new Bu).G(b.xa(h,k.s).ob());d=[d,e,f,(new A).e("elements",
+b)];e=dc(new ec,Eu());f=0;for(b=d.length|0;f<b;)hc(e,d[f]),f=1+f|0;a.Ag=(new su).ac(e.Oa);a.a=!0;return a}gv.prototype.$e=function(){return ru(this)};gv.prototype.Rp=function(){return Sga()};gv.prototype.$classData=g({k5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$VectorShapeConverter",{k5:1,d:1,e5:1,Gr:1,Tl:1});function XW(){}XW.prototype=new SW;XW.prototype.constructor=XW;XW.prototype.b=function(){return this};
+XW.prototype.gp=function(a){return u((new v).G((new w).f([""," is not a valid shape element list"])),(new w).f([a]))};XW.prototype.Do=function(a){a:{ku||(ku=(new ju).b());var b=(new kv).c("type");if(Mu(a)&&(b=a.Tg.$b(b.wa),!b.z()&&(b=b.X(),Hu(b)&&(b=b.Nc,qu||(qu=(new lu).b()),b=qu.XE().$b(b),!b.z())))){a=b.X().y(a);break a}Aq();a=u((new v).G((new w).f([""," is not an Element"])),(new w).f([a]));a=Bq(pq(),a)}return a};
+XW.prototype.$classData=g({o5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$tortoiseJs2ElementSeq$",{o5:1,Hp:1,d:1,ic:1,fa:1});var vra=void 0;function cX(){}cX.prototype=new SW;cX.prototype.constructor=cX;cX.prototype.b=function(){return this};cX.prototype.gp=function(a){return u((new v).G((new w).f([""," was not an array of floats"])),(new w).f([a]))};cX.prototype.Do=function(a){a=CQ().Ra(a);if(Zp(a))return(new dq).j(ea(+a.ha));if(aq(a))return a;throw(new q).j(a);};
+cX.prototype.$classData=g({p5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$tortoiseJs2FloatSeq$",{p5:1,Hp:1,d:1,ic:1,fa:1});var zra=void 0;function $W(){}$W.prototype=new SW;$W.prototype.constructor=$W;$W.prototype.b=function(){return this};$W.prototype.gp=function(a){return u((new v).G((new w).f(["Expected link lines as array of objects, got ",""])),(new w).f([a]))};
+$W.prototype.Do=function(a){jv();if(Mu(a)){var b=(new we).b();if(b.Na)b=b.jb;else{if(null===b)throw(new ye).b();b=b.Na?b.jb:ze(b,(new bX).b())}a=b.Pa(a)}else Aq(),a=u((new v).G((new w).f(["Expected link line json, found: ",""])),(new w).f([a])),a=Bq(pq(),a);return a};$W.prototype.$classData=g({q5:0},!1,"org.nlogo.tortoise.compiler.json.ShapeToJsonConverters$tortoiseJs2LinkLineSeq$",{q5:1,Hp:1,d:1,ic:1,fa:1});var wra=void 0;function A0(){}A0.prototype=new SW;A0.prototype.constructor=A0;
+A0.prototype.b=function(){return this};A0.prototype.gp=function(a){return u((new v).G((new w).f(["expected an array of Widgets, found ",""])),(new w).f([a]))};A0.prototype.Do=function(a){Zra||(Zra=(new QX).b());return Zra.Ra(a)};A0.prototype.$classData=g({p6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$readWidgetsJson$",{p6:1,Hp:1,d:1,ic:1,fa:1});var Lta=void 0;function cra(){Lta||(Lta=(new A0).b());return Lta}function wX(){}wX.prototype=new l;wX.prototype.constructor=wX;c=wX.prototype;
+c.vc=function(a){return this.Nr(a)};c.b=function(){return this};c.y=function(a){return this.Nr(a)};c.Fa=function(a){return this.Nr(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!this.Nr(a)};c.Nr=function(a){return(new zu).c(na(a.X()))};c.Ca=function(a){return pb(this,a)};c.$classData=g({t6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$charOption2Json$",{t6:1,d:1,q6:1,yc:1,fa:1});var Sra=void 0;function AX(){VW.call(this)}AX.prototype=new ura;
+AX.prototype.constructor=AX;AX.prototype.b=function(){VW.prototype.JU.call(this,LQ(),$ra());return this};AX.prototype.$classData=g({v6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$chooseables2TortoiseJs$",{v6:1,$4:1,d:1,yc:1,fa:1});var Tra=void 0;function HX(){VW.call(this)}HX.prototype=new ura;HX.prototype.constructor=HX;HX.prototype.b=function(){VW.prototype.JU.call(this,LQ(),esa());return this};
+HX.prototype.$classData=g({D6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$pens2TortoiseJs$",{D6:1,$4:1,d:1,yc:1,fa:1});var Vra=void 0;function B0(){}B0.prototype=new l;B0.prototype.constructor=B0;c=B0.prototype;c.vc=function(a){return(new zu).c(a.X())};c.b=function(){return this};c.y=function(a){return(new zu).c(a.X())};c.Fa=function(a){return(new zu).c(a.X())|0};c.k=function(){return"\x3cfunction1\x3e"};c.Ga=function(a){return!!(new zu).c(a.X())};c.Nr=function(a){return(new zu).c(a.X())};
+c.Ca=function(a){return pb(this,a)};c.$classData=g({F6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$stringOption2Json$",{F6:1,d:1,q6:1,yc:1,fa:1});var Mta=void 0;function uX(){Mta||(Mta=(new B0).b());return Mta}function kx(){}kx.prototype=new l;kx.prototype.constructor=kx;c=kx.prototype;c.b=function(){return this};c.y=function(a){return nx(a)};c.Fa=function(a){return nx(a)|0};c.k=function(){return"\x3cfunction1\x3e"};
+function nx(a){var b=new C0;Nta||(Nta=(new D0).b());a=Vg(Nta,a);b.jw=a;return b}c.Ga=function(a){return!!nx(a)};c.Ca=function(a){return pb(this,a)};c.$classData=g({z7:0},!1,"play.api.libs.json.JsObject$",{z7:1,d:1,fa:1,l:1,i:1});var Oha=void 0;function Dw(){this.Bj=null}Dw.prototype=new xx;Dw.prototype.constructor=Dw;c=Dw.prototype;c.o=function(a){return a&&a.$classData&&a.$classData.n.WB?this.Bj===a.Bj:!1};c.k=function(){return u((new v).G((new w).f(["NestedSuiteSelector(",")"])),(new w).f([this.Bj]))};
+c.c=function(a){this.Bj=a;if(null===a)throw(new ye).c("suiteId was null");return this};c.r=function(){var a=this.Bj;return Ga(Ha(),a)};c.$classData=g({WB:0},!1,"sbt.testing.NestedSuiteSelector",{WB:1,Ir:1,d:1,l:1,i:1});function Ew(){this.Cj=this.Bj=null}Ew.prototype=new xx;Ew.prototype.constructor=Ew;c=Ew.prototype;c.Dd=function(a,b){this.Bj=a;this.Cj=b;if(null===a)throw(new ye).c("suiteId was null");if(null===b)throw(new ye).c("testName was null");return this};
+c.o=function(a){return a&&a.$classData&&a.$classData.n.XB?this.Bj===a.Bj&&this.Cj===a.Cj:!1};c.k=function(){return u((new v).G((new w).f(["NestedTestSelector(",", ",")"])),(new w).f([this.Bj,this.Cj]))};c.r=function(){var a;a=this.Bj;a=da(31,17)+Ga(Ha(),a)|0;var b=this.Cj;return a=da(31,a)+Ga(Ha(),b)|0};c.$classData=g({XB:0},!1,"sbt.testing.NestedTestSelector",{XB:1,Ir:1,d:1,l:1,i:1});function kY(){iZ.call(this)}kY.prototype=new jZ;kY.prototype.constructor=kY;
+kY.prototype.Cd=function(a,b){iZ.prototype.Cd.call(this,a,b);return this};var jsa=g({M7:0},!1,"sbt.testing.Status",{M7:1,un:1,d:1,Ed:1,i:1});kY.prototype.$classData=jsa;function Aw(){}Aw.prototype=new xx;Aw.prototype.constructor=Aw;c=Aw.prototype;c.b=function(){return this};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.ZB)};c.k=function(){return"SuiteSelector"};c.r=function(){return 29};c.$classData=g({ZB:0},!1,"sbt.testing.SuiteSelector",{ZB:1,Ir:1,d:1,l:1,i:1});
+function Bw(){this.Cj=null}Bw.prototype=new xx;Bw.prototype.constructor=Bw;c=Bw.prototype;c.o=function(a){return a&&a.$classData&&a.$classData.n.$B?this.Cj===a.Cj:!1};c.k=function(){return u((new v).G((new w).f(["TestSelector(",")"])),(new w).f([this.Cj]))};c.c=function(a){this.Cj=a;if(null===a)throw(new ye).c("testName was null");return this};c.r=function(){var a=this.Cj;return Ga(Ha(),a)};c.$classData=g({$B:0},!1,"sbt.testing.TestSelector",{$B:1,Ir:1,d:1,l:1,i:1});function Fw(){this.zr=null}
+Fw.prototype=new xx;Fw.prototype.constructor=Fw;c=Fw.prototype;c.o=function(a){return a&&a.$classData&&a.$classData.n.aC?this.zr===a.zr:!1};c.k=function(){return u((new v).G((new w).f(["TestWildcardSelector(",")"])),(new w).f([this.zr]))};c.c=function(a){this.zr=a;if(null===a)throw(new ye).c("testWildcard was null");return this};c.r=function(){var a=this.zr;return Ga(Ha(),a)};c.$classData=g({aC:0},!1,"sbt.testing.TestWildcardSelector",{aC:1,Ir:1,d:1,l:1,i:1});function E0(){this.ga=null}
+E0.prototype=new l;E0.prototype.constructor=E0;function Qna(a){var b=new E0;if(null===a)throw ug(vg(),null);b.ga=a;return b}E0.prototype.$classData=g({T7:0},!1,"scalaz.Align$$anon$3",{T7:1,d:1,Ima:1,uk:1,$i:1});function lY(){this.ga=null}lY.prototype=new l;lY.prototype.constructor=lY;lY.prototype.TD=function(a){if(null===a)throw ug(vg(),null);this.ga=a;return this};lY.prototype.$classData=g({Y7:0},!1,"scalaz.Apply$$anon$5",{Y7:1,d:1,Kr:1,uk:1,$i:1});function F0(){this.ga=null}F0.prototype=new l;
+F0.prototype.constructor=F0;function msa(a){var b=new F0;if(null===a)throw ug(vg(),null);b.ga=a;return b}F0.prototype.$classData=g({j8:0},!1,"scalaz.Bitraverse$$anon$7",{j8:1,d:1,Mma:1,Uaa:1,Taa:1});function G0(){this.ga=null}G0.prototype=new l;G0.prototype.constructor=G0;function Ota(a){var b=new G0;if(null===a)throw ug(vg(),null);b.ga=a;return b}G0.prototype.$classData=g({m8:0},!1,"scalaz.Choice$$anon$1",{m8:1,d:1,Nma:1,SR:1,Xw:1});function H0(){this.ga=null}H0.prototype=new l;
+H0.prototype.constructor=H0;function Sna(a){var b=new H0;if(null===a)throw ug(vg(),null);b.ga=a;return b}H0.prototype.$classData=g({n8:0},!1,"scalaz.Cobind$$anon$1",{n8:1,d:1,Vaa:1,uk:1,$i:1});function I0(){}I0.prototype=new osa;I0.prototype.constructor=I0;function Pta(){}Pta.prototype=I0.prototype;function J0(){}J0.prototype=new psa;J0.prototype.constructor=J0;function Qta(){}Qta.prototype=J0.prototype;function K0(){}K0.prototype=new Wha;K0.prototype.constructor=K0;
+K0.prototype.b=function(){Fx.prototype.b.call(this);L0=this;(new vY).b();return this};function qsa(){var a=sy();return(new vy).mn(m(new n,function(){return function(a){return a}}(a)))}K0.prototype.$classData=g({B8:0},!1,"scalaz.Endo$",{B8:1,yka:1,d:1,l:1,i:1});var L0=void 0;function sy(){L0||(L0=(new K0).b());return L0}function Gx(){}Gx.prototype=new l;Gx.prototype.constructor=Gx;c=Gx.prototype;c.VD=function(){Ld(this);Kd(this);Ad(this);return this};c.Qn=function(){};c.Rn=function(){};c.pg=function(){};
+c.$classData=g({D8:0},!1,"scalaz.EndoInstances$$anon$1",{D8:1,d:1,qo:1,po:1,ug:1});function M0(){this.ga=null}M0.prototype=new l;M0.prototype.constructor=M0;function Wna(a){var b=new M0;if(null===a)throw ug(vg(),null);b.ga=a;return b}M0.prototype.$classData=g({F8:0},!1,"scalaz.Enum$$anon$2",{F8:1,d:1,Rma:1,aba:1,TR:1});function N0(){}N0.prototype=new rsa;N0.prototype.constructor=N0;function Rta(){}Rta.prototype=N0.prototype;function O0(){}O0.prototype=new tsa;O0.prototype.constructor=O0;
+function Sta(){}Sta.prototype=O0.prototype;function P0(){this.ga=null}P0.prototype=new l;P0.prototype.constructor=P0;function poa(a){var b=new P0;if(null===a)throw ug(vg(),null);b.ga=a;return b}P0.prototype.$classData=g({g9:0},!1,"scalaz.IsEmpty$$anon$2",{g9:1,d:1,Sma:1,oC:1,Yw:1});function Q0(){}Q0.prototype=new usa;Q0.prototype.constructor=Q0;function Tta(){}Tta.prototype=Q0.prototype;function R0(){}R0.prototype=new vsa;R0.prototype.constructor=R0;function Uta(){}Uta.prototype=R0.prototype;
+R0.prototype.b=function(){xd(new IS);return this};function S0(){}S0.prototype=new ysa;S0.prototype.constructor=S0;function Vta(){}Vta.prototype=S0.prototype;function T0(){}T0.prototype=new ssa;T0.prototype.constructor=T0;function Wta(){}Wta.prototype=T0.prototype;function U0(){this.ga=null}U0.prototype=new l;U0.prototype.constructor=U0;U0.prototype.$classData=g({Q9:0},!1,"scalaz.SemiLattice$$anon$2",{Q9:1,d:1,Xma:1,Saa:1,qC:1});
+function V0(a,b,d,e){Xta||(Xta=(new W0).b());X0();var f=Ry(),f=Yta(f);e=Zta(f,e);a=m(new n,function(a,b,d,e){return function(f){var E=Y0(a,b,m(new n,function(a,b){return function(a){a=b.y(a);var d=Jz().kg;X0();return tia(a,d)}}(a,d)),e);X0();var S=Ry(),E=Qy(E,f,S);f=$ta().tu;a:for(;;){E=lia(E,f);if(Z0(E)){E=ne(E.ha);continue a}if(!$0(E))throw(new q).j(E);return E.$l}}}(a,b,d,e));b=Jz().kg;return Kz(new Lz,a,b)}function oz(a){a.Gl(aua(a))}function bua(a,b,d,e){return Qy(a.Xk(b,e),d,Jz().kg)}
+function a1(a,b,d,e){var f=e.xe();return b1(a,b,f,sb(new tb,function(a,b,d){return function(e,f){return d.sc(e,K(function(a,b,d){return function(){return b.y(d)}}(a,b,f)))}}(a,d,e))).ja()}function Y0(a,b,d,e){var f=new Qz;f.gH=e;if(null===a)throw ug(vg(),null);f.ga=a;return f.ga.Wk(b,d,f.gH)}function b1(a,b,d,e){return bua(a,b,d,m(new n,function(a,b){return function(d){Dsa||(Dsa=(new PY).b());return Nia(Dsa,m(new n,function(a,b,d){return function(a){return qb(b,a,d)}}(a,b,d)))}}(a,e)))}
+function c1(){}c1.prototype=new Bsa;c1.prototype.constructor=c1;function cua(){}cua.prototype=c1.prototype;function d1(){}d1.prototype=new Csa;d1.prototype.constructor=d1;function dua(){}dua.prototype=d1.prototype;function Zd(){}Zd.prototype=new l;Zd.prototype.constructor=Zd;c=Zd.prototype;c.Sd=function(a){return Dd(this,a)};c.ag=function(){};c.ah=function(a){return""+ +a};c.Xg=function(){};c.qg=function(){};c.Yd=function(){zd(this);wz(this);Jd(this);return this};
+c.$classData=g({C$:0},!1,"scalaz.std.AnyValInstances$$anon$14",{C$:1,d:1,vg:1,hg:1,gh:1});function $d(){}$d.prototype=new l;$d.prototype.constructor=$d;c=$d.prototype;c.Sd=function(a){return Dd(this,a)};c.ag=function(){};c.ah=function(a){return""+ +a};c.Xg=function(){};c.qg=function(){};c.Yd=function(){zd(this);wz(this);Jd(this);return this};c.$classData=g({D$:0},!1,"scalaz.std.AnyValInstances$$anon$15",{D$:1,d:1,vg:1,hg:1,gh:1});function e1(){this.ga=null}e1.prototype=new l;
+e1.prototype.constructor=e1;e1.prototype.Mg=function(a){if(null===a)throw ug(vg(),null);this.ga=a;yx(this);return this};e1.prototype.up=function(){};e1.prototype.$classData=g({O$:0},!1,"scalaz.std.EitherInstances$$anon$14",{O$:1,d:1,IR:1,Jp:1,Kp:1});function f1(){this.ga=null}f1.prototype=new l;f1.prototype.constructor=f1;f1.prototype.Mg=function(a){if(null===a)throw ug(vg(),null);this.ga=a;yx(this);return this};f1.prototype.up=function(){};
+f1.prototype.$classData=g({P$:0},!1,"scalaz.std.EitherInstances$$anon$15",{P$:1,d:1,IR:1,Jp:1,Kp:1});function g1(){this.ga=null}g1.prototype=new l;g1.prototype.constructor=g1;g1.prototype.Mg=function(a){if(null===a)throw ug(vg(),null);this.ga=a;yx(this);return this};g1.prototype.up=function(){};g1.prototype.$classData=g({Q$:0},!1,"scalaz.std.EitherInstances$$anon$16",{Q$:1,d:1,IR:1,Jp:1,Kp:1});function h1(){this.fy=null}h1.prototype=new l;h1.prototype.constructor=h1;
+h1.prototype.b=function(){i1=this;this.vF((new j1).Eu(this));return this};h1.prototype.vF=function(a){this.fy=a};h1.prototype.$classData=g({Jaa:0},!1,"scalaz.std.list$",{Jaa:1,d:1,faa:1,iaa:1,eaa:1});var i1=void 0;function Kq(){i1||(i1=(new h1).b());return i1}function k1(){}k1.prototype=new l;k1.prototype.constructor=k1;k1.prototype.b=function(){eua=this;this.wF(fua());return this};k1.prototype.wF=function(){};k1.prototype.$classData=g({Qaa:0},!1,"scalaz.std.option$",{Qaa:1,d:1,kaa:1,maa:1,jaa:1});
+var eua=void 0;function Tu(){eua||(eua=(new k1).b())}function Ag(a){return"string"===typeof a}var qa=g({Hba:0},!1,"java.lang.String",{Hba:1,d:1,i:1,Zu:1,Ed:1},void 0,void 0,Ag);function RE(){DT.call(this)}RE.prototype=new Jsa;RE.prototype.constructor=RE;RE.prototype.j=function(a){DT.prototype.gc.call(this,""+a,a&&a.$classData&&a.$classData.n.Lc?a:null);return this};RE.prototype.$classData=g({Xba:0},!1,"java.lang.AssertionError",{Xba:1,eca:1,Lc:1,d:1,i:1});
+var sa=g({Zba:0},!1,"java.lang.Byte",{Zba:1,Gk:1,d:1,i:1,Ed:1},void 0,void 0,function(a){return ra(a)}),za=g({cca:0},!1,"java.lang.Double",{cca:1,Gk:1,d:1,i:1,Ed:1},void 0,void 0,function(a){return"number"===typeof a}),ya=g({fca:0},!1,"java.lang.Float",{fca:1,Gk:1,d:1,i:1,Ed:1},void 0,void 0,function(a){return xa(a)}),wa=g({hca:0},!1,"java.lang.Integer",{hca:1,Gk:1,d:1,i:1,Ed:1},void 0,void 0,function(a){return Pa(a)});function CC(a){return!!(a&&a.$classData&&a.$classData.n.Zoa)}
+var Da=g({lca:0},!1,"java.lang.Long",{lca:1,Gk:1,d:1,i:1,Ed:1},void 0,void 0,function(a){return Ca(a)});function l1(){DT.call(this)}l1.prototype=new lZ;l1.prototype.constructor=l1;function gua(){}gua.prototype=l1.prototype;function Fg(){DT.call(this)}Fg.prototype=new lZ;Fg.prototype.constructor=Fg;function m1(){}m1.prototype=Fg.prototype;Fg.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};Fg.prototype.$classData=g({ef:0},!1,"java.lang.RuntimeException",{ef:1,xd:1,Lc:1,d:1,i:1});
+var ua=g({tca:0},!1,"java.lang.Short",{tca:1,Gk:1,d:1,i:1,Ed:1},void 0,void 0,function(a){return ta(a)});function bo(){this.Tp=null}bo.prototype=new l;bo.prototype.constructor=bo;c=bo.prototype;c.b=function(){bo.prototype.Iu.call(this,(new n1).b());return this};c.Tv=function(a,b){return this.Tp.Xb.substring(a,b)};c.k=function(){return this.Tp.Xb};c.gE=function(a){bo.prototype.c.call(this,na(a));return this};c.ox=function(a){var b=this.Tp;b.Xb=""+b.Xb+a;return this};c.ra=function(){return this.Tp.ra()};
+function gpa(a,b){a=a.Tp;a.Xb=""+a.Xb+b}c.Iu=function(a){this.Tp=a;return this};c.nx=function(a){return hpa(this,a)};c.c=function(a){bo.prototype.Iu.call(this,(new n1).c(a));return this};function hpa(a,b){o1(a.Tp,b);return a}c.$classData=g({uca:0},!1,"java.lang.StringBuffer",{uca:1,d:1,Zu:1,cV:1,i:1});function n1(){this.Xb=null}n1.prototype=new l;n1.prototype.constructor=n1;c=n1.prototype;c.b=function(){this.Xb="";return this};c.Tv=function(a,b){return this.Xb.substring(a,b)};c.k=function(){return this.Xb};
+c.gE=function(a){n1.prototype.c.call(this,na(a));return this};c.ox=function(a){this.Xb=""+this.Xb+a;return this};c.qb=function(a){n1.prototype.b.call(this);if(0>a)throw(new p1).b();return this};c.ra=function(){return this.Xb.length|0};function o1(a,b){b=ba.String.fromCharCode(b);a.Xb=""+a.Xb+b;return a}c.c=function(a){n1.prototype.b.call(this);if(null===a)throw(new ye).b();this.Xb=a;return this};c.nx=function(a){return o1(this,a)};
+function hua(a){for(var b=a.Xb,d="",e=-1+(b.length|0)|0;0<e;){var f=65535&(b.charCodeAt(e)|0);if(56320===(64512&f)){var h=65535&(b.charCodeAt(-1+e|0)|0);55296===(64512&h)?(d=""+d+ba.String.fromCharCode(h)+ba.String.fromCharCode(f),e=-2+e|0):(d=""+d+ba.String.fromCharCode(f),e=-1+e|0)}else d=""+d+ba.String.fromCharCode(f),e=-1+e|0}0===e&&(b=65535&(b.charCodeAt(0)|0),d=""+d+ba.String.fromCharCode(b));a.Xb=d;return a}function iua(a,b){return 65535&(a.Xb.charCodeAt(b)|0)}
+c.$classData=g({vca:0},!1,"java.lang.StringBuilder",{vca:1,d:1,Zu:1,cV:1,i:1});function bF(){this.Wp=null;this.Ut=!1}bF.prototype=new l;bF.prototype.constructor=bF;c=bF.prototype;c.b=function(){bF.prototype.Pba.call(this,(new n1).b());return this};
+function q1(a,b,d,e,f,h,k){var p=(b.length|0)+(d.length|0)|0;if(h<=p)b=""+d+b;else{var t=r1("-",f);e=r1("0",f)&&!e;var x="";for(h=h-p|0;0<h;)x=""+x+(e?"0":" "),h=-1+h|0;h=x;if(e&&t)throw(new s1).c(f);b=t?""+d+b+h:e?""+d+h+b:""+h+d+b}k=90>=k?b.toUpperCase():b;a.Wp.ox(k)}c.k=function(){return ila(this).k()};c.Pba=function(a){this.Wp=a;this.Ut=!1;return this};
+function jua(a,b,d,e,f,h){var k=65535&(b.charCodeAt(0)|0);43===k||45===k?q1(a,b.substring(1),""+(new Ke).Xa(k)+d,!1,e,f,h):q1(a,b,d,!1,e,f,h)}function r1(a,b){return 0<=(b.indexOf(a)|0)}function ila(a){if(a.Ut)throw(new t1).b();return a.Wp}
+function jla(a,b,d){if(a.Ut)throw(new t1).b();for(var e=b,f=0,h=0;;){var k=e;if(null===k)throw(new ye).b();if(""!==k){k=e;var p=bB(aB().ZU,k);if(p.z())if(bB(aB().WU,k).z())if(bB(aB().XU,k).z()){p=bB(aB().YU,k);if(p.z())throw(new q).j(k);var t=p.X(),k=t[0];if(void 0===k)throw(new Du).c("undefined.get");e=e.substring(k.length|0);k=t[2];if(void 0===k)throw(new Du).c("undefined.get");p=t[1];p=void 0===p?"":p;if(null===p)throw(new ye).b();p=""!==p?vi(ti(),p,10):r1("\x3c",k)?h:f=1+f|0;h=p;if(0>=p||p>d.m.length){a=
+t[5];if(void 0===a)throw(new Du).c("undefined.get");throw(new u1).c(a);}var x=d.m[-1+p|0],p=t[3],p=void 0===p?"":p;if(null===p)throw(new ye).b();var E=""!==p;if(E)p=vi(ti(),p,10);else{if(r1("-",k))throw(new v1).c(b);p=0}var S=t[4],U=void 0===S?"":S;if(null===U)throw(new ye).b();U=(S=""!==U)?vi(ti(),U,10):0;t=t[5];if(void 0===t)throw(new Du).c("undefined.get");t=65535&(t.charCodeAt(0)|0);switch(t){case 98:case 66:q1(a,null===x?"false":"boolean"===typeof x?""+x:"true","",!1,k,p,t);break;case 104:case 72:x=
+null===x?"null":(+(Fa(x)>>>0)).toString(16);q1(a,x,"",!1,k,p,t);break;case 115:case 83:if(x&&x.$classData&&x.$classData.n.cpa)k=(r1("-",k)?1:0)|(r1("#",k)?4:0)|(90>=t?2:0),x.Voa(a,k,E?p:-1,S?U:-1);else{if(r1("#",k))throw a=new w1,w1.prototype.Xa.call(a,115),a.oD="#",a;q1(a,""+x,"",!1,k,p,t)}break;case 99:case 67:if(Pa(x))x|=0;else if(ie(x))x=null===x?0:x.Y;else throw(new q).j(x);q1(a,ba.String.fromCharCode(65535&x),"",!1,k,p,t);break;case 100:x=x1(x);y1(a,""+x,!1,k,p,t);break;case 111:if(Pa(x))x=
+(+((x|0)>>>0)).toString(8);else{if(!Ca(x))throw(new q).j(x);E=Qa(x);x=E.la;E=E.qa;Mh();x=(new Vb).ia(x,E);E=x.la;U=x.qa;x=1073741823&E;S=1073741823&((E>>>30|0)+(U<<2)|0);E=U>>>28|0;0!==E?(E=(+(E>>>0)).toString(8),S=(+(S>>>0)).toString(8),U="0000000000".substring(S.length|0),x=(+(x>>>0)).toString(8),x=E+(""+U+S)+(""+"0000000000".substring(x.length|0)+x)):0!==S?(E=(+(S>>>0)).toString(8),x=(+(x>>>0)).toString(8),x=E+(""+"0000000000".substring(x.length|0)+x)):x=(+(x>>>0)).toString(8)}jua(a,x,r1("#",k)?
+"0":"",k,p,t);break;case 120:case 88:if(Pa(x))x=(+((x|0)>>>0)).toString(16);else{if(!Ca(x))throw(new q).j(x);E=Qa(x);x=E.la;E=E.qa;Mh();E=(new Vb).ia(x,E);x=E.la;E=E.qa;0!==E?(E=(+(E>>>0)).toString(16),x=(+(x>>>0)).toString(16),x=E+(""+"00000000".substring(x.length|0)+x)):x=(+(x>>>0)).toString(16)}jua(a,x,r1("#",k)?"0x":"",k,p,t);break;case 101:case 69:kua(a,S?U:6,k,x,p,t);break;case 103:case 71:E=x1(x);E=+ba.Math.abs(E);S=S?0===U?1:U:6;1E-4<=E&&E<+ba.Math.pow(10,S)?(U=void 0!==ba.Math.log10?+ba.Math.log10(E):
++ba.Math.log(E)/2.302585092994046,U=Na(+ba.Math.ceil(U)),E=+ba.Math.pow(10,U)<=E?1+U|0:U,x=x1(x),E=S-E|0,x=x.toFixed(0<E?E:0),y1(a,x,!1,k,p,t)):kua(a,-1+S|0,k,x,p,t);break;case 102:E=x1(x).toFixed(S?U:6);S=x1(x);S!==S?x=!0:(x=x1(x),x=Infinity===x||-Infinity===x);y1(a,E,x,k,p,t);break;default:throw(new q).j((new Ke).Xa(t));}}else e=e.substring(2),a.Wp.nx(10);else e=e.substring(2),a.Wp.nx(37);else{k=p.X();p=k[0];if(void 0===p)throw(new Du).c("undefined.get");e=e.substring(p.length|0);p=a.Wp;k=k[0];
+if(void 0===k)throw(new Du).c("undefined.get");p.ox(k)}}else break}return a}function kua(a,b,d,e,f,h){var k=x1(e).toExponential(b);101===(65535&(k.charCodeAt(-3+(k.length|0)|0)|0))?(b=k.substring(0,-1+(k.length|0)|0),k=65535&(k.charCodeAt(-1+(k.length|0)|0)|0),b=b+"0"+(new Ke).Xa(k)):b=k;k=x1(e);k!==k?e=!0:(e=x1(e),e=Infinity===e||-Infinity===e);y1(a,b,e,d,f,h)}c.zo=function(){if(!this.Ut){var a=this.Wp;a&&a.$classData&&a.$classData.n.Dr&&a.zo()}this.Ut=!0};
+function y1(a,b,d,e,f,h){45!==(65535&(b.charCodeAt(0)|0))?r1("+",e)?q1(a,b,"+",d,e,f,h):r1(" ",e)?q1(a,b," ",d,e,f,h):q1(a,b,"",d,e,f,h):r1("(",e)?q1(a,b.substring(1)+")","(",d,e,f,h):q1(a,b.substring(1),"-",d,e,f,h)}function x1(a){if(GF(a))return"number"===typeof a?a:a.Rj();if(ie(a))return null===a?0:a.Y;throw(new q).j(a);}c.$classData=g({Gca:0},!1,"java.util.Formatter",{Gca:1,d:1,Dr:1,Yu:1,tH:1});function BC(){DT.call(this)}BC.prototype=new lZ;BC.prototype.constructor=BC;
+BC.prototype.gc=function(a,b){DT.prototype.gc.call(this,a,b);return this};BC.prototype.$classData=g({AE:0},!1,"java.util.concurrent.ExecutionException",{AE:1,xd:1,Lc:1,d:1,i:1});function z1(){iZ.call(this)}z1.prototype=new jZ;z1.prototype.constructor=z1;function A1(){}A1.prototype=z1.prototype;var Nsa=g({ep:0},!1,"java.util.concurrent.TimeUnit",{ep:1,un:1,d:1,Ed:1,i:1});z1.prototype.$classData=Nsa;function dZ(){this.mh=0}dZ.prototype=new BT;dZ.prototype.constructor=dZ;
+dZ.prototype.k=function(){return""+this.mh};dZ.prototype.qb=function(a){this.mh=a;return this};dZ.prototype.Rj=function(){return this.mh};dZ.prototype.$classData=g({Xca:0},!1,"java.util.concurrent.atomic.AtomicInteger",{Xca:1,Gk:1,d:1,i:1,l:1});function B1(){}B1.prototype=new Fja;B1.prototype.constructor=B1;B1.prototype.b=function(){return this};function Af(a,b,d){a=la(Wa(db),[1+d.ra()|0]);a.m[0]=b;b=1;for(d=d.Ta();d.ta();){var e=d.ma()|0;a.m[b]=e;b=1+b|0}return a}
+function Kv(a,b,d,e,f,h){a=oa(b);if(a.wi.isArrayClass&&gl(oa(e),a))Oa(b,d,e,f,h);else for(a=d,d=d+h|0;a<d;)$E(W(),e,f,ZE(W(),b,a)),a=1+a|0,f=1+f|0}B1.prototype.$classData=g({mda:0},!1,"scala.Array$",{mda:1,jpa:1,d:1,l:1,i:1});var lua=void 0;function Bf(){lua||(lua=(new B1).b());return lua}function C1(){}C1.prototype=new l;C1.prototype.constructor=C1;function mua(){}mua.prototype=C1.prototype;C1.prototype.Fa=function(a){return a};C1.prototype.k=function(){return"\x3cfunction1\x3e"};
+C1.prototype.Ga=function(a){return!!a};C1.prototype.Ca=function(a){return m(new n,function(a,d){return function(e){return d.y(a.y(e))}}(this,a))};function D1(){}D1.prototype=new l;D1.prototype.constructor=D1;function nua(){}nua.prototype=D1.prototype;D1.prototype.Fa=function(a){return a};D1.prototype.k=function(){return"\x3cfunction1\x3e"};D1.prototype.Ga=function(a){return!!a};D1.prototype.Ca=function(a){return m(new n,function(a,d){return function(e){return d.y(a.y(e))}}(this,a))};
+function E1(){this.Pn=null}E1.prototype=new l;E1.prototype.constructor=E1;E1.prototype.b=function(){F1=this;this.Pn=(new LA).b();return this};E1.prototype.Vs=function(a){throw(new he).gc("problem in scala.concurrent internal callback",a);};E1.prototype.nu=function(a){if(a&&a.$classData&&a.$classData.n.Rda){var b=this.Pn.X();null===b?(b=y(),Usa(new WZ,this,Ng(new Og,a,b)).Bm()):MA(this.Pn,Ng(new Og,a,b))}else a.Bm()};
+E1.prototype.$classData=g({Qda:0},!1,"scala.concurrent.Future$InternalCallbackExecutor$",{Qda:1,d:1,Fy:1,tpa:1,BE:1});var F1=void 0;function fe(){F1||(F1=(new E1).b());return F1}function ZC(){}ZC.prototype=new l;ZC.prototype.constructor=ZC;ZC.prototype.b=function(){return this};ZC.prototype.$classData=g({lea:0},!1,"scala.math.Equiv$",{lea:1,d:1,Apa:1,l:1,i:1});var bka=void 0;function cD(){}cD.prototype=new l;cD.prototype.constructor=cD;cD.prototype.b=function(){return this};
+cD.prototype.$classData=g({rea:0},!1,"scala.math.Ordering$",{rea:1,d:1,Bpa:1,l:1,i:1});var fka=void 0;function JZ(){}JZ.prototype=new l;JZ.prototype.constructor=JZ;JZ.prototype.b=function(){return this};JZ.prototype.k=function(){return"\x3c?\x3e"};JZ.prototype.$classData=g({Pea:0},!1,"scala.reflect.NoManifest$",{Pea:1,d:1,Ji:1,l:1,i:1});var Ssa=void 0;function Ge(){TT.call(this);this.Ro=this.Va=null}Ge.prototype=new UT;Ge.prototype.constructor=Ge;c=Ge.prototype;c.y=function(a){return this.bi(a)};
+c.ur=function(a){return jba(this,a)};c.ql=function(a,b){if(null===a)throw ug(vg(),null);this.Va=a;this.Ro=b;TT.prototype.bp.call(this,a);return this};c.bi=function(a){return this.Ro.y(a)};c.$classData=g({pfa:0},!1,"scala.util.parsing.combinator.Parsers$$anon$1",{pfa:1,kX:1,d:1,fa:1,Kpa:1});function G1(){}G1.prototype=new l;G1.prototype.constructor=G1;function H1(){}c=H1.prototype=G1.prototype;c.nb=function(){return this};c.yg=function(a,b){$D(this,a,b)};c.$m=function(){return Sp(new Qp,this)};
+c.Hg=function(){return this};c.ob=function(){var a=B().s;return bE(this,a)};c.z=function(){return!this.ta()};c.zb=function(a){return cc(this,"",a,"")};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.k=function(){return VT(this)};c.ua=function(a){XT(this,a)};c.Gb=function(a,b){return nl(this,a,b)};c.gg=function(){dk();var a=ek().nc;return bE(this,a)};c.Td=function(){var a=i0().s;return bE(this,a)};c.Ha=function(){return as(this)};c.Mf=function(){return cc(this,"","","")};c.Jc=function(){return Vv(this)};
+c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return this.Jc()};c.gd=function(){var a=ol(),a=pl(a);return bE(this,a)};c.sf=function(a,b){return nl(this,a,b)};c.Eg=function(){return!1};c.Ae=function(a,b,d){ZT(this,a,b,d)};c.we=function(){for(var a=dc(new ec,gc());this.ta();){var b=this.ma();hc(a,b)}return a.Oa};c.Ko=function(a){return $T(this,a)};c.fg=function(a){return hE(this,a)};c.ve=function(a){return iE(this,a)};c.Ke=function(){return kd(this)};function I1(){}I1.prototype=new xpa;
+I1.prototype.constructor=I1;function oua(){}oua.prototype=I1.prototype;function J1(){}J1.prototype=new C_;J1.prototype.constructor=J1;J1.prototype.b=function(){return this};J1.prototype.js=function(){return gc()};J1.prototype.$classData=g({tga:0},!1,"scala.collection.immutable.Map$",{tga:1,NX:1,Mv:1,Lv:1,d:1});var pua=void 0;function Cea(){pua||(pua=(new J1).b());return pua}function K1(){this.qe=this.Y=this.ak=null}K1.prototype=new l;K1.prototype.constructor=K1;c=K1.prototype;c.ma=function(){return this.qe};
+function qua(a){return"(kv: "+a.ak+", "+a.Y+")"+(null!==a.qe?" -\x3e "+qua(a.qe):"")}c.e=function(a,b){this.ak=a;this.Y=b;return this};c.k=function(){return qua(this)};c.kj=function(){return this.ak};c.Qs=function(a){this.qe=a};c.$classData=g({yha:0},!1,"scala.collection.mutable.DefaultEntry",{yha:1,d:1,HF:1,l:1,i:1});function L1(){this.Oa=this.Xd=null}L1.prototype=new l;L1.prototype.constructor=L1;function rua(a,b){a.Xd=b;a.Oa=b;return a}c=L1.prototype;c.md=function(a){this.Oa.md(a);return this};
+c.Da=function(){return this.Oa};c.dg=function(a,b){pU(this,a,b)};c.Qa=function(a){this.Oa.md(a);return this};c.qc=function(){};c.Zb=function(a){return oE(this,a)};c.$classData=g({Cha:0},!1,"scala.collection.mutable.GrowingBuilder",{Cha:1,d:1,Ld:1,Kd:1,Jd:1});function M1(){this.qe=this.Ik=this.Lo=this.Y=this.ak=null}M1.prototype=new l;M1.prototype.constructor=M1;c=M1.prototype;c.ma=function(){return this.qe};c.e=function(a,b){this.ak=a;this.Y=b;this.Ik=this.Lo=null;return this};c.kj=function(){return this.ak};
+c.Qs=function(a){this.qe=a};c.$classData=g({Nha:0},!1,"scala.collection.mutable.LinkedEntry",{Nha:1,d:1,HF:1,l:1,i:1});function ZP(){}ZP.prototype=new E_;ZP.prototype.constructor=ZP;ZP.prototype.b=function(){return this};ZP.prototype.fi=function(){return(new Av).b()};ZP.prototype.js=function(){return(new Av).b()};ZP.prototype.$classData=g({Yha:0},!1,"scala.collection.mutable.Map$",{Yha:1,QX:1,Mv:1,Lv:1,d:1});var cna=void 0;function gF(){this.GW=null}gF.prototype=new l;gF.prototype.constructor=gF;
+gF.prototype.b=function(){this.GW=ba.Promise.resolve(void 0);return this};gF.prototype.Vs=function(a){FT(a)};gF.prototype.nu=function(a){this.GW.then(function(a,d){return function(){try{d.Bm()}catch(a){var b=Un(vg(),a);if(null!==b)FT(b);else throw a;}}}(this,a))};gF.prototype.$classData=g({qia:0},!1,"scala.scalajs.concurrent.QueueExecutionContext$PromisesExecutionContext",{qia:1,d:1,RW:1,Fy:1,BE:1});function fF(){}fF.prototype=new l;fF.prototype.constructor=fF;fF.prototype.b=function(){return this};
+fF.prototype.Vs=function(a){FT(a)};fF.prototype.nu=function(a){ba.setTimeout(function(a,d){return function(){try{d.Bm()}catch(a){var b=Un(vg(),a);if(null!==b)FT(b);else throw a;}}}(this,a),0)};fF.prototype.$classData=g({ria:0},!1,"scala.scalajs.concurrent.QueueExecutionContext$TimeoutsExecutionContext",{ria:1,d:1,RW:1,Fy:1,BE:1});function dF(){}dF.prototype=new l;dF.prototype.constructor=dF;dF.prototype.b=function(){return this};dF.prototype.Vs=function(a){FT(a)};
+dF.prototype.nu=function(a){try{a.Bm()}catch(b){if(a=Un(vg(),b),null!==a)FT(a);else throw b;}};dF.prototype.$classData=g({sia:0},!1,"scala.scalajs.concurrent.RunNowExecutionContext$",{sia:1,d:1,RW:1,Fy:1,BE:1});var lla=void 0;function N1(){this.DE=this.gs=null;this.xu=0}N1.prototype=new l;N1.prototype.constructor=N1;c=N1.prototype;c.yg=function(a,b){$D(this,a,b)};c.nb=function(){return this};c.ma=function(){return this.Fq()};c.$m=function(){return Sp(new Qp,this)};c.Hg=function(){return this};
+c.z=function(){return!this.ta()};c.ob=function(){var a=B().s;return bE(this,a)};c.nm=function(a){this.gs=a;this.DE=ba.Object.keys(a);this.xu=0;return this};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.zb=function(a){return cc(this,"",a,"")};c.k=function(){return VT(this)};c.ua=function(a){XT(this,a)};c.Gb=function(a,b){return nl(this,a,b)};c.gg=function(){dk();var a=ek().nc;return bE(this,a)};c.Ha=function(){return as(this)};c.Td=function(){var a=i0().s;return bE(this,a)};
+c.Fq=function(){var a=this.DE[this.xu];this.xu=1+this.xu|0;var b=this.gs;if(Cu().Dm.call(b,a))b=b[a];else throw(new Du).c("key not found: "+a);return(new A).e(a,b)};c.ta=function(){return this.xu<(this.DE.length|0)};c.Mf=function(){return cc(this,"","","")};c.Jc=function(){return Vv(this)};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return Vv(this)};c.gd=function(){var a=ol(),a=pl(a);return bE(this,a)};c.sf=function(a,b){return nl(this,a,b)};c.Ae=function(a,b,d){ZT(this,a,b,d)};
+c.Eg=function(){return!1};c.Ko=function(a){return $T(this,a)};c.we=function(){for(var a=dc(new ec,gc());this.ta();){var b=this.Fq();hc(a,b)}return a.Oa};c.fg=function(a){return hE(this,a)};c.ve=function(a){return iE(this,a)};c.Ke=function(){return kd(this)};c.$classData=g({Bia:0},!1,"scala.scalajs.js.WrappedDictionary$DictionaryIterator",{Bia:1,d:1,ad:1,La:1,Ka:1});function qU(){this.gs=null}qU.prototype=new l;qU.prototype.constructor=qU;c=qU.prototype;c.b=function(){this.gs={};return this};
+c.md=function(a){return sua(this,a)};function sua(a,b){a.gs[b.ja()]=b.na();return a}c.Da=function(){return(new lx).nm(this.gs)};c.dg=function(a,b){pU(this,a,b)};c.Qa=function(a){return sua(this,a)};c.qc=function(){};c.Zb=function(a){return oE(this,a)};c.$classData=g({Cia:0},!1,"scala.scalajs.js.WrappedDictionary$WrappedDictionaryBuilder",{Cia:1,d:1,Ld:1,Kd:1,Jd:1});function Vb(){this.qa=this.la=0}Vb.prototype=new BT;Vb.prototype.constructor=Vb;c=Vb.prototype;c.lj=function(){return Qa(this)};
+c.wx=function(){return this.la<<24>>24};c.o=function(a){return Ca(a)?this.la===a.la&&this.qa===a.qa:!1};c.Q=function(a,b,d){Vb.prototype.ia.call(this,a|b<<22,b>>10|d<<12);return this};c.k=function(){return yU(Ra(),this.la,this.qa)};c.ia=function(a,b){this.la=a;this.qa=b;return this};c.qb=function(a){Vb.prototype.ia.call(this,a,a>>31);return this};c.Ry=function(){return this.la<<16>>16};c.Rj=function(){return IF(Ra(),this.la,this.qa)};c.r=function(){return this.la^this.qa};c.Bi=function(){return this.la};
+c.bq=function(){return ea(IF(Ra(),this.la,this.qa))};function Ca(a){return!!(a&&a.$classData&&a.$classData.n.IY)}c.$classData=g({IY:0},!1,"scala.scalajs.runtime.RuntimeLong",{IY:1,Gk:1,d:1,i:1,Ed:1});function O1(){this.wk=this.wu=null;this.$c=this.Pe=0;this.lt=this.Ao=!1}O1.prototype=new qta;O1.prototype.constructor=O1;c=O1.prototype;c.Oq=function(){this.Xp();if(!this.lt)throw(new P_).c("Mark invalid");this.$c=0};
+c.Pv=function(a){if(0>a.qa)throw(new Ne).c("n negative");this.Xp();if(this.$c<this.Pe){var b=this.Pe-this.$c|0,d=b>>31,e=a.qa;a=((e===d?(-2147483648^a.la)<(-2147483648^b):e<d)?a:(new Vb).ia(b,d)).la;this.$c=this.$c+a|0;return(new Vb).ia(a,a>>31)}this.lt=!1;return this.wu.Pv(a)};c.Xp=function(){if(this.Ao)throw(new P_).c("Operation on closed stream");};
+c.WE=function(a,b,d){this.Xp();if(0>b||0>d||d>(a.m.length-b|0))throw(new P).b();if(0===d)return 0;if(this.$c<this.Pe||tua(this)){var e=this.Pe-this.$c|0;d=d<e?d:e;Oa(this.wk,this.$c,a,b,d);this.$c=this.$c+d|0;return d}return-1};function Zca(a){var b=new O1;b.wu=a;R_.prototype.Ja.call(b,F());b.wk=la(Wa(Za),[65536]);b.Pe=0;b.$c=0;b.Ao=!1;b.lt=!1;return b}c.zy=function(){this.Xp();if(this.$c<this.Pe||tua(this)){var a=this.wk.m[this.$c];this.$c=1+this.$c|0;return a}return-1};
+function Nla(a,b){a.Xp();var d=a.wk;a.wk.m.length<b&&(a.wk=la(Wa(Za),[b]));0===a.$c&&a.wk===d||Oa(d,a.$c,a.wk,0,a.Pe-a.$c|0);a.Pe=a.Pe-a.$c|0;a.$c=0;a.lt=!0}c.zo=function(){this.Ao||(this.Ao=!0,this.wu.zo())};function tua(a){if(a.lt&&a.Pe<a.wk.m.length){var b=a.wu.WE(a.wk,a.Pe,a.wk.m.length-a.Pe|0);0<b&&(a.Pe=a.Pe+b|0);return 0<b}a.lt=!1;b=a.wk;a.Pe=a.wu.WE(b,0,b.m.length);a.$c=0;return 0<a.Pe}c.$classData=g({sH:0},!1,"java.io.BufferedReader",{sH:1,vZ:1,d:1,rca:1,Dr:1,Yu:1});function P1(){}
+P1.prototype=new pta;P1.prototype.constructor=P1;function uua(){}uua.prototype=P1.prototype;P1.prototype.Lba=function(){return this};function Gm(){this.Ey=null;this.Ao=!1;this.$c=0}Gm.prototype=new qta;Gm.prototype.constructor=Gm;c=Gm.prototype;c.Pv=function(a){var b=(this.Ey.length|0)-this.$c|0,d=b>>31,e=a.qa;a=((e===d?(-2147483648^a.la)<(-2147483648^b):e<d)?a:(new Vb).ia(b,d)).la;b=-this.$c|0;a=a>b?a:b;this.$c=this.$c+a|0;return(new Vb).ia(a,a>>31)};
+c.Xp=function(){if(this.Ao)throw(new P_).c("Operation on closed stream");};c.WE=function(a,b,d){this.Xp();if(0>b||0>d||d>(a.m.length-b|0))throw(new P).b();if(0===d)return 0;var e=(this.Ey.length|0)-this.$c|0;d=d<e?d:e;for(e=0;e<d;)a.m[b+e|0]=65535&(this.Ey.charCodeAt(this.$c+e|0)|0),e=1+e|0;this.$c=this.$c+d|0;return 0===d?-1:d};c.c=function(a){this.Ey=a;R_.prototype.Ja.call(this,F());this.Ao=!1;this.$c=0;return this};c.zo=function(){this.Ao=!0};
+c.$classData=g({wZ:0},!1,"java.io.StringReader",{wZ:1,vZ:1,d:1,rca:1,Dr:1,Yu:1});function Q1(){this.Al=this.Ff=this.wa=null;this.Ng=this.Og=!1}Q1.prototype=new l;Q1.prototype.constructor=Q1;c=Q1.prototype;c.u=function(){return"Breed"};c.v=function(){return 5};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.yH){if(this.wa===a.wa&&this.Ff===a.Ff)var b=this.Al,d=a.Al,b=null===b?null===d:b.o(d);else b=!1;return b&&this.Og===a.Og?this.Ng===a.Ng:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.wa;case 1:return this.Ff;case 2:return this.Al;case 3:return this.Og;case 4:return this.Ng;default:throw(new P).c(""+a);}};c.k=function(){return I(r(),(new w).f([this.wa,this.Ff,this.Al.zb(" "),this.Ng])).Mc("Breed(",", ",")")};function lp(a,b,d,e,f){var h=new Q1;h.wa=a;h.Ff=b;h.Al=d;h.Og=e;h.Ng=f;return h}
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.wa)),a=V().da(a,OD(V(),this.Ff)),a=V().da(a,OD(V(),this.Al)),a=V().da(a,this.Og?1231:1237),a=V().da(a,this.Ng?1231:1237);return V().pb(a,5)};c.x=function(){return Y(new Z,this)};c.$classData=g({yH:0},!1,"org.nlogo.core.Breed",{yH:1,d:1,t:1,q:1,l:1,i:1});function pX(){}pX.prototype=new tU;pX.prototype.constructor=pX;pX.prototype.b=function(){return this};pX.prototype.y=function(a){return Lba(a)};pX.prototype.k=function(){return"ChooseableList"};
+pX.prototype.$classData=g({VZ:0},!1,"org.nlogo.core.ChooseableList$",{VZ:1,wp:1,d:1,fa:1,l:1,i:1});var Kra=void 0;function ic(){this.Dn=this.bs=this.Vr=this.Jh=this.gt=null;this.Tk=!1;this.en=null}ic.prototype=new l;ic.prototype.constructor=ic;c=ic.prototype;c.u=function(){return"CompilationOperand"};c.v=function(){return 7};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.HH){var b=this.gt,d=a.gt;(null===b?null===d:JP(b,d))&&this.Jh===a.Jh&&this.Vr===a.Vr?(b=this.bs,d=a.bs,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.Dn,d=a.Dn,b=null===b?null===d:JP(b,d)):b=!1;if(b&&this.Tk===a.Tk)return b=this.en,a=a.en,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.gt;case 1:return this.Jh;case 2:return this.Vr;case 3:return this.bs;case 4:return this.Dn;case 5:return this.Tk;case 6:return this.en;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.gt)),a=V().da(a,OD(V(),this.Jh)),a=V().da(a,OD(V(),this.Vr)),a=V().da(a,OD(V(),this.bs)),a=V().da(a,OD(V(),this.Dn)),a=V().da(a,this.Tk?1231:1237),a=V().da(a,OD(V(),this.en));return V().pb(a,7)};
+c.x=function(){return Y(new Z,this)};c.$classData=g({HH:0},!1,"org.nlogo.core.CompilationOperand",{HH:1,d:1,t:1,q:1,l:1,i:1});function hd(){DT.call(this);this.hm=this.ie=0;this.fU=null}hd.prototype=new m1;hd.prototype.constructor=hd;hd.prototype.Bs=function(a,b,d,e){this.ie=b;this.hm=d;this.fU=e;DT.prototype.gc.call(this,a,null);return this};hd.prototype.k=function(){return this.Nc+" at position "+this.ie+" in "+this.fU};
+hd.prototype.Jf=function(a){Je();var b=a.kb,d=ym();un(0,null!==b&&b===d);hd.prototype.Bs.call(this,a.Y,a.sa.Ua,a.sa.$a,a.sa.cb);return this};function uq(a){return!!(a&&a.$classData&&a.$classData.n.IH)}hd.prototype.$classData=g({IH:0},!1,"org.nlogo.core.CompilerException",{IH:1,ef:1,xd:1,Lc:1,d:1,i:1});function Yn(){this.wa=null}Yn.prototype=new l;Yn.prototype.constructor=Yn;c=Yn.prototype;c.u=function(){return"Let"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.LH?this.wa===a.wa:!1};c.w=function(a){switch(a){case 0:return this.wa;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.c=function(a){this.wa=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({LH:0},!1,"org.nlogo.core.Let",{LH:1,d:1,t:1,q:1,l:1,i:1});function fk(){this.oy=this.Pg=this.ch=this.Xh=this.Ue=this.Hc=this.de=null}fk.prototype=new l;
+fk.prototype.constructor=fk;c=fk.prototype;c.u=function(){return"Model"};c.v=function(){return 7};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.NH){if(this.de===a.de)var b=this.Hc,d=a.Hc,b=null===b?null===d:b.o(d);else b=!1;b&&this.Ue===a.Ue&&this.Xh===a.Xh?(b=this.ch,d=a.ch,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.Pg,d=a.Pg,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.oy,a=a.oy,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.de;case 1:return this.Hc;case 2:return this.Ue;case 3:return this.Xh;case 4:return this.ch;case 5:return this.Pg;case 6:return this.oy;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function Vma(a){var b=a.Hc,d=(new R1).pq(a),e=r(),b=b.jc(d,e.s);a=m(new n,function(){return function(a){return a.mt()}}(a));d=r();return b.xa(a,d.s)}function nga(a){return wg(a.Hc,(new S1).pq(a)).X()}c.r=function(){return R(Q(),this)};
+function xk(a,b,d,e,f,h,k,p){a.de=b;a.Hc=d;a.Ue=e;a.Xh=f;a.ch=h;a.Pg=k;a.oy=p;if(wg(d,(new T1).pq(a)).z())throw(new U1).c("Every model must have at least a view...");return a}c.x=function(){return Y(new Z,this)};function Zma(a){var b=a.Hc,d=(new V1).pq(a),e=r(),b=b.jc(d,e.s);a=m(new n,function(){return function(a){var b=a.mt(),d=a.Cw();return"set "+b+" "+Sba(a,d)}}(a));d=r();return b.xa(a,d.s)}c.$classData=g({NH:0},!1,"org.nlogo.core.Model",{NH:1,d:1,t:1,q:1,l:1,i:1});
+function U1(){DT.call(this)}U1.prototype=new m1;U1.prototype.constructor=U1;U1.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};U1.prototype.$classData=g({t_:0},!1,"org.nlogo.core.Model$InvalidModelError",{t_:1,ef:1,xd:1,Lc:1,d:1,i:1});function uV(){this.ab=null;this.Bb=this.vl=this.rl=0;this.jm=!1;this.tg=this.sg=null}uV.prototype=new l;uV.prototype.constructor=uV;c=uV.prototype;c.u=function(){return"Pen"};c.v=function(){return 7};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.Tz?this.ab===a.ab&&this.rl===a.rl&&this.vl===a.vl&&this.Bb===a.Bb&&this.jm===a.jm&&this.sg===a.sg&&this.tg===a.tg:!1};c.w=function(a){switch(a){case 0:return this.ab;case 1:return this.rl;case 2:return this.vl;case 3:return this.Bb;case 4:return this.jm;case 5:return this.sg;case 6:return this.tg;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+function wqa(a,b,d,e,f,h,k,p){a.ab=b;a.rl=d;a.vl=e;a.Bb=f;a.jm=h;a.sg=k;a.tg=p;return a}c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.ab)),a=V().da(a,RF(V(),this.rl)),a=V().da(a,this.vl),a=V().da(a,this.Bb),a=V().da(a,this.jm?1231:1237),a=V().da(a,OD(V(),this.sg)),a=V().da(a,OD(V(),this.tg));return V().pb(a,7)};c.x=function(){return Y(new Z,this)};c.$classData=g({Tz:0},!1,"org.nlogo.core.Pen",{Tz:1,d:1,t:1,q:1,l:1,i:1});
+function W1(){this.yV=this.mW=this.aZ=this.rU=this.UV=this.zg=this.Lf=this.ig=this.Di=this.mj=this.Pi=this.pk=this.Zj=null;this.a=0}W1.prototype=new l;W1.prototype.constructor=W1;c=W1.prototype;c.u=function(){return"Program"};function Ap(a){if(0===(4&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Program.scala: 36");return a.aZ}c.v=function(){return 8};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.TH){var b=this.Zj,d=a.Zj;(null===b?null===d:b.o(d))?(b=this.pk,d=a.pk,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.Pi,d=a.Pi,b=null===b?null===d:JP(b,d)):b=!1;b?(b=this.mj,d=a.mj,b=null===b?null===d:JP(b,d)):b=!1;b?(b=this.Di,d=a.Di,b=null===b?null===d:JP(b,d)):b=!1;b?(b=this.ig,d=a.ig,b=null===b?null===d:JP(b,d)):b=!1;b?(b=this.Lf,d=a.Lf,b=null===b?null===d:JP(b,d)):b=!1;return b?this.zg===a.zg:!1}return!1};
+function Bp(a){if(0===(16&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Program.scala: 40");return a.yV}c.w=function(a){switch(a){case 0:return this.Zj;case 1:return this.pk;case 2:return this.Pi;case 3:return this.mj;case 4:return this.Di;case 5:return this.ig;case 6:return this.Lf;case 7:return this.zg;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+function Rqa(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Program.scala: 31");return a.UV}c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function zp(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Program.scala: 34");return a.rU}
+function wea(a){if(0===(8&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Program.scala: 38");return a.mW}
+function mp(a,b,d,e,f,h,k,p){var t=new W1;t.Zj=a;t.pk=b;t.Pi=d;t.mj=e;t.Di=f;t.ig=h;t.Lf=k;t.zg=p;t.UV=Gla(oQ(p));t.a=(1|t.a)<<24>>24;h=Rqa(t);h=Hc(h);h=kp(h);k=m(new n,function(){return function(a){return a.toUpperCase()}}(t));p=r();a=a.xa(k,p.s);k=r();a=h.Vc(a,k.s);h=r();t.rU=a.Vc(b,h.s);t.a=(2|t.a)<<24>>24;b=Hc(d);t.aZ=kp(b);t.a=(4|t.a)<<24>>24;e=Hc(e);t.mW=kp(e);t.a=(8|t.a)<<24>>24;f=Hc(f);t.yV=kp(f);t.a=(16|t.a)<<24>>24;return t}
+c.$classData=g({TH:0},!1,"org.nlogo.core.Program",{TH:1,d:1,t:1,q:1,l:1,i:1});function Jb(){this.sa=this.za=this.se=null}Jb.prototype=new l;Jb.prototype.constructor=Jb;c=Jb.prototype;c.Xx=function(){return this.se};function pn(a,b,d){Jb.prototype.Yf.call(a,b,I(r(),y()),d);return a}c.Oc=function(){return this.sa};c.Yf=function(a,b,d){this.se=a;this.za=b;this.sa=d;return this};c.k=function(){return this.se.k()+"["+this.za.zb(", ")+"]"};
+function Eda(a,b){var d=a.se,e=b.wn();e.z()?e=F():(e=e.X(),e=(new J).j(e.Oc().$a));e=(e.z()?a.sa.$a:e.X())|0;return(new Jb).Yf(d,b,vm(new wm,a.sa.Ua,e,a.sa.cb))}c.Nn=function(){return this.se.H().Pq};c.Tt=function(a){return(new Jb).Yf(this.se,this.za,a)};function xb(a){return!!(a&&a.$classData&&a.$classData.n.VH)}c.$classData=g({VH:0},!1,"org.nlogo.core.ReporterApp",{VH:1,d:1,xH:1,Fp:1,no:1,Mw:1});function Fi(){this.Op=this.Sp=this.eq=this.Mq=0}Fi.prototype=new l;Fi.prototype.constructor=Fi;c=Fi.prototype;
+c.u=function(){return"RgbColor"};c.v=function(){return 4};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.YH?this.Mq===a.Mq&&this.eq===a.eq&&this.Sp===a.Sp&&this.Op===a.Op:!1};c.w=function(a){switch(a){case 0:return this.Mq;case 1:return this.eq;case 2:return this.Sp;case 3:return this.Op;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function nca(a,b,d,e,f){a.Mq=b;a.eq=d;a.Sp=e;a.Op=f;return a}
+c.r=function(){var a=-889275714,a=V().da(a,this.Mq),a=V().da(a,this.eq),a=V().da(a,this.Sp),a=V().da(a,this.Op);return V().pb(a,4)};c.x=function(){return Y(new Z,this)};c.$classData=g({YH:0},!1,"org.nlogo.core.Shape$RgbColor",{YH:1,d:1,t:1,q:1,l:1,i:1});function At(){this.br=this.Fg=null}At.prototype=new l;At.prototype.constructor=At;c=At.prototype;c.u=function(){return"ShapeList"};c.v=function(){return 2};
+c.o=function(a){if(this===a)return!0;if(vua(a)&&this.Fg===a.Fg){var b=this.br;a=a.br;return null===b?null===a:JP(b,a)}return!1};c.w=function(a){switch(a){case 0:return this.Fg;case 1:return this.br;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function bga(a,b,d){a.Fg=b;a.br=d;return a}c.r=function(){return R(Q(),this)};
+function wua(a){var b=a.br.$b(Ypa(Bt())).ob(),d=nU((new Kc).mg(a.br).ti.wj().Jc(),m(new n,function(){return function(a){var b=Bt();return a.pe()===Ypa(b)}}(a)),!0);a=m(new n,function(){return function(a){return a.pe()}}(a));var e=Hra(),d=ep(d,a,e);a=r();return b.Vc(d,a.s)}c.x=function(){return Y(new Z,this)};function vua(a){return!!(a&&a.$classData&&a.$classData.n.$H)}c.$classData=g({$H:0},!1,"org.nlogo.core.ShapeList",{$H:1,d:1,t:1,q:1,l:1,i:1});function wm(){this.$a=this.Ua=0;this.cb=null}
+wm.prototype=new l;wm.prototype.constructor=wm;c=wm.prototype;c.u=function(){return"SourceLocation"};c.v=function(){return 3};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.iI?this.Ua===a.Ua&&this.$a===a.$a&&this.cb===a.cb:!1};c.w=function(a){switch(a){case 0:return this.Ua;case 1:return this.$a;case 2:return this.cb;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function vm(a,b,d,e){a.Ua=b;a.$a=d;a.cb=e;return a}
+c.r=function(){var a=-889275714,a=V().da(a,this.Ua),a=V().da(a,this.$a),a=V().da(a,OD(V(),this.cb));return V().pb(a,3)};c.x=function(){return Y(new Z,this)};c.$classData=g({iI:0},!1,"org.nlogo.core.SourceLocation",{iI:1,d:1,t:1,q:1,l:1,i:1});function X1(){this.g=this.wa=null}X1.prototype=new l;X1.prototype.constructor=X1;c=X1.prototype;c.u=function(){return"Identifier"};c.v=function(){return 2};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.nI&&this.wa===a.wa){var b=this.g;a=a.g;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.wa;case 1:return this.g;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function vma(a,b){var d=new X1;d.wa=a;d.g=b;return d}
+c.$classData=g({nI:0},!1,"org.nlogo.core.StructureDeclarations$Identifier",{nI:1,d:1,t:1,q:1,l:1,i:1});function rp(){this.$p=this.zs=this.km=this.np=this.ae=this.dc=null}rp.prototype=new l;rp.prototype.constructor=rp;c=rp.prototype;c.u=function(){return"StructureResults"};c.v=function(){return 6};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.rI){var b=this.dc,d=a.dc;(null===b?null===d:b.o(d))?(b=this.ae,d=a.ae,b=null===b?null===d:JP(b,d)):b=!1;b?(b=this.np,d=a.np,b=null===b?null===d:JP(b,d)):b=!1;b?(b=this.km,d=a.km,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.zs,d=a.zs,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.$p,a=a.$p,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.dc;case 1:return this.ae;case 2:return this.np;case 3:return this.km;case 4:return this.zs;case 5:return this.$p;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function qp(a,b,d,e,f,h,k){a.dc=b;a.ae=d;a.np=e;a.km=f;a.zs=h;a.$p=k;return a}c.$classData=g({rI:0},!1,"org.nlogo.core.StructureResults",{rI:1,d:1,t:1,q:1,l:1,i:1});
+function H(){this.Sa=this.mp=0;this.Ma=null;this.Pq=0;this.Os=this.es=null;this.Js=!1;this.p=this.h=null;this.Tr=this.Hs=!1}H.prototype=new l;H.prototype.constructor=H;function G(a,b,d,e,f,h,k,p,t,x,E,S){a.mp=b;a.Sa=d;a.Ma=e;a.Pq=f;a.es=h;a.Os=k;a.Js=p;a.h=t;a.p=x;a.Hs=E;a.Tr=S;oF(Je(),null===t||4===(t.length|0));Je();x.z()?b=!0:(b=x.X(),b=4===(b.length|0)||"?"===b);oF(0,b);return a}c=H.prototype;c.u=function(){return"Syntax"};c.v=function(){return 11};
+function ln(a){for(a=a.Ma;!a.z();){var b=a.$()|0;if(nn(D(),b,uj()))return!0;a=a.aa()}return!1}
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.sI){if(this.mp===a.mp&&this.Sa===a.Sa)var b=this.Ma,d=a.Ma,b=null===b?null===d:b.o(d);else b=!1;b&&this.Pq===a.Pq?(b=this.es,d=a.es,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.Os,d=a.Os,b=null===b?null===d:b.o(d)):b=!1;b&&this.Js===a.Js&&this.h===a.h?(b=this.p,d=a.p,b=null===b?null===d:b.o(d)):b=!1;return b&&this.Hs===a.Hs?this.Tr===a.Tr:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.mp;case 1:return this.Sa;case 2:return this.Ma;case 3:return this.Pq;case 4:return this.es;case 5:return this.Os;case 6:return this.Js;case 7:return this.h;case 8:return this.p;case 9:return this.Hs;case 10:return this.Tr;default:throw(new P).c(""+a);}};function mn(a){return en(a)+(kn(a)?1:0)|0}c.k=function(){return X(W(),this)};function hn(a){a=WO(a.Ma);if(a.z())return!1;a=a.X()|0;return nn(D(),a,Sj())}
+function go(a){var b=a.es;return(b.z()?fn(a.Ma):b.X())|0}function kn(a){return a.Sa!==mc()}function en(a){return hn(a)?-1+go(a)|0:go(a)}c.r=function(){var a=-889275714,a=V().da(a,this.mp),a=V().da(a,this.Sa),a=V().da(a,OD(V(),this.Ma)),a=V().da(a,this.Pq),a=V().da(a,OD(V(),this.es)),a=V().da(a,OD(V(),this.Os)),a=V().da(a,this.Js?1231:1237),a=V().da(a,OD(V(),this.h)),a=V().da(a,OD(V(),this.p)),a=V().da(a,this.Hs?1231:1237),a=V().da(a,this.Tr?1231:1237);return V().pb(a,11)};
+c.x=function(){return Y(new Z,this)};c.$classData=g({sI:0},!1,"org.nlogo.core.Syntax",{sI:1,d:1,t:1,q:1,l:1,i:1});function Y1(){this.ym=this.tm=this.wm=this.sm=this.vm=0;this.Km=this.Jm=!1}Y1.prototype=new l;Y1.prototype.constructor=Y1;c=Y1.prototype;c.u=function(){return"WorldDimensions"};c.v=function(){return 7};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.xI?this.vm===a.vm&&this.sm===a.sm&&this.wm===a.wm&&this.tm===a.tm&&this.ym===a.ym&&this.Jm===a.Jm&&this.Km===a.Km:!1};
+c.w=function(a){switch(a){case 0:return this.vm;case 1:return this.sm;case 2:return this.wm;case 3:return this.tm;case 4:return this.ym;case 5:return this.Jm;case 6:return this.Km;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function Kqa(a,b,d,e,f,h,k){var p=new Y1;p.vm=a;p.sm=b;p.wm=d;p.tm=e;p.ym=f;p.Jm=h;p.Km=k;return p}
+c.r=function(){var a=-889275714,a=V().da(a,this.vm),a=V().da(a,this.sm),a=V().da(a,this.wm),a=V().da(a,this.tm),a=V().da(a,RF(V(),this.ym)),a=V().da(a,this.Jm?1231:1237),a=V().da(a,this.Km?1231:1237);return V().pb(a,7)};c.x=function(){return Y(new Z,this)};c.$classData=g({xI:0},!1,"org.nlogo.core.WorldDimensions",{xI:1,d:1,t:1,q:1,l:1,i:1});function Z1(){d0.call(this)}Z1.prototype=new e0;Z1.prototype.constructor=Z1;function xua(){}xua.prototype=Z1.prototype;
+Z1.prototype.b=function(){d0.prototype.G.call(this,(new w).f([N(D()),N(D())]));return this};function An(){this.si=null;this.Ru=this.lE=!1;this.sa=this.vq=this.mz=this.Rg=null;this.ya=0}An.prototype=new l;An.prototype.constructor=An;c=An.prototype;c.IU=function(a,b,d,e){this.Rg=a;this.mz=b;this.vq=d;this.sa=e;return this};c.Oc=function(){return this.sa};c.hG=function(){if(0===(1&this.ya)){var a=this.Rg,b=this.mz,d=r(),a=b.Qc(a,d.s),b=xm(),d=r();this.si=a.mc(b,d.s);this.ya=(1|this.ya)<<24>>24}return this.si};
+c.Nn=function(){throw(new il).b();};c.bz=function(){return 0===(1&this.ya)?this.hG():this.si};function yua(a){if(0===(2&a.ya)){var b=a.mz.Sj(m(new n,function(){return function(a){a=a.kb;var b=im();return null!==a&&a===b}}(a))).Cg();if(b.z())b=!1;else{var b=b.X(),d=b.kb,e=ag();null!==d&&d===e?b=!0:(b=b.kb,d=lm(),b=null!==b&&b===d)}a.lE=b;a.ya=(2|a.ya)<<24>>24}return a.lE}c.kE=function(){0===(4&this.ya)&&0===(4&this.ya)&&(this.Ru=!1,this.ya=(4|this.ya)<<24>>24);return this.Ru};
+c.Tt=function(a){return(new An).IU(this.Rg,this.mz,this.vq,a)};c.Su=function(){return 0===(2&this.ya)?yua(this):this.lE};c.$classData=g({bQ:0},!1,"org.nlogo.parse.AmbiguousDelayedBlock",{bQ:1,d:1,mQ:1,Mw:1,Fp:1,no:1});function zn(){this.sa=this.vq=this.DC=this.QC=this.sx=this.ze=this.Rg=this.si=null;this.ya=this.Ru=!1;this.a=0}zn.prototype=new l;zn.prototype.constructor=zn;c=zn.prototype;c.Oc=function(){return this.sa};
+c.hG=function(){if(!this.ya){var a=this.Rg,b=this.sx,d=r(),a=b.Qc(a,d.s),b=this.QC,d=r(),a=a.mc(b,d.s),b=xm(),d=r();this.si=a.mc(b,d.s);this.ya=!0}return this.si};c.Nn=function(){throw(new il).b();};c.bz=function(){return this.ya?this.si:this.hG()};c.kE=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/DelayedBlock.scala: 56");return this.Ru};
+c.Tt=function(a){return(new zn).HU(this.Rg,this.ze,this.sx,this.QC,this.DC,this.vq,a)};c.Su=function(){var a=this.sx.Sj(m(new n,function(){return function(a){a=a.kb;var b=im();return null!==a&&a===b}}(this))).Cg();if(a.z())a=F();else var a=a.X().kb,b=ag(),a=(new J).j(null!==a&&a===b);return!(!a.z()&&!a.X())};c.HU=function(a,b,d,e,f,h,k){this.Rg=a;this.ze=b;this.sx=d;this.QC=e;this.DC=f;this.vq=h;this.sa=k;b.vk();this.a=(1|this.a)<<24>>24;this.Ru=!0;this.a=(2|this.a)<<24>>24;return this};
+c.$classData=g({cQ:0},!1,"org.nlogo.parse.ArrowLambdaBlock",{cQ:1,d:1,mQ:1,Mw:1,Fp:1,no:1});function Wc(){this.rf=this.om=this.ck=this.Yb=null}Wc.prototype=new l;Wc.prototype.constructor=Wc;c=Wc.prototype;c.u=function(){return"AstFormat"};c.v=function(){return 4};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.dQ){if(this.Yb===a.Yb)var b=this.ck,d=a.ck,b=null===b?null===d:JP(b,d);else b=!1;b?(b=this.om,d=a.om,b=null===b?null===d:b.o(d)):b=!1;return b?this.rf===a.rf:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.Yb;case 1:return this.ck;case 2:return this.om;case 3:return this.rf;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Vc(a,b,d,e,f){a.Yb=b;a.ck=d;a.om=e;a.rf=f;return a}c.$classData=g({dQ:0},!1,"org.nlogo.parse.AstFormat",{dQ:1,d:1,t:1,q:1,l:1,i:1});function ZO(){this.Lj=null}ZO.prototype=new l;ZO.prototype.constructor=ZO;c=ZO.prototype;c.u=function(){return"AstPath"};
+c.v=function(){return 1};function Pc(a,b){a=a.Lj;var d=r();return(new ZO).G(a.mc(b,d.s))}c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.eQ){var b=this.Lj;a=a.Lj;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Lj;default:throw(new P).c(""+a);}};
+function jma(a,b){a:for(;;){if(b.z())return(new J).j(a);var d=b.$(),e=d;if(a&&a.$classData&&a.$classData.n.SH){var f=a;if(e&&e.$classData&&e.$classData.n.Ija&&(e=e.pe(),f.qi.pe()===e)){a=f.je;b=b.aa();continue a}}e=d;if(a&&a.$classData&&a.$classData.n.Yz&&(f=a,kma(e))){a=e.wc;if(a>=f.eg.ra())return F();a=f.eg.W(a);b=b.aa();continue a}e=d;if(ZF(a)&&(f=a,aP(e))){a=e.wc;if(a>=f.za.ra()||!xb(f.za.W(a)))return F();a=f.za.W(a);b=b.aa();continue a}e=d;if(ZF(a)&&(f=a,$O(e))){a=e.wc;if(a>=f.za.ra()||!zb(f.za.W(a)))return F();
+a=f.za.W(a);b=b.aa();continue a}e=d;if(ZF(a)&&(f=a,YO(e))){a=e.wc;if(a>=f.za.ra()||!yb(f.za.W(a)))return F();a=f.za.W(a).je;b=b.aa();continue a}if(zb(a)&&aP(d)&&0===d.wc){a=a.fl;b=b.aa();continue a}return F()}}c.k=function(){return"AstPath("+this.Lj.zb(", ")+")"};c.G=function(a){this.Lj=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({eQ:0},!1,"org.nlogo.parse.AstPath",{eQ:1,d:1,t:1,q:1,l:1,i:1});function RO(){this.Va=null}RO.prototype=new tU;
+RO.prototype.constructor=RO;RO.prototype.y=function(a){return(new TO).Dk(this.Va,!!a)};RO.prototype.k=function(){return"ReporterContext"};RO.prototype.$classData=g({q1:0},!1,"org.nlogo.parse.ControlFlowVerifier$ReporterContext$",{q1:1,wp:1,d:1,fa:1,l:1,i:1});function $1(){this.az=this.YY=null;this.a=0}$1.prototype=new l;$1.prototype.constructor=$1;
+$1.prototype.b=function(){a2=this;Ula||(Ula=(new CO).b());this.YY=Ula;this.a=(1|this.a)<<24>>24;this.az=(new iG).Dd("/system/tokens-core.txt","org.nlogo.core.prim.");this.a=(2|this.a)<<24>>24;return this};function Gc(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/parse/FrontEnd.scala: 11");return a.YY}$1.prototype.$classData=g({x1:0},!1,"org.nlogo.parse.FrontEnd$",{x1:1,d:1,Kja:1,Lja:1,Nja:1,xja:1});
+var a2=void 0;function QP(){a2||(a2=(new $1).b());return a2}function To(){this.$n=this.Ck=this.Fo=null;this.Is=!1}To.prototype=new l;To.prototype.constructor=To;c=To.prototype;c.u=function(){return"Occurrence"};c.v=function(){return 4};function So(a,b,d,e,f){a.Fo=b;a.Ck=d;a.$n=e;a.Is=f;return a}
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.oQ){var b=this.Fo,d=a.Fo;(null===b?null===d:b.o(d))?(b=this.Ck,d=a.Ck,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.$n,d=a.$n,b=null===b?null===d:b.o(d)):b=!1;return b?this.Is===a.Is:!1}return!1};c.w=function(a){switch(a){case 0:return this.Fo;case 1:return this.Ck;case 2:return this.$n;case 3:return this.Is;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.Fo)),a=V().da(a,OD(V(),this.Ck)),a=V().da(a,OD(V(),this.$n)),a=V().da(a,this.Is?1231:1237);return V().pb(a,4)};c.x=function(){return Y(new Z,this)};c.$classData=g({oQ:0},!1,"org.nlogo.parse.StructureChecker$Occurrence",{oQ:1,d:1,t:1,q:1,l:1,i:1});function Wp(){this.nj=this.cj=this.Hc=this.Ue=this.de=this.Nf=null}Wp.prototype=new l;Wp.prototype.constructor=Wp;c=Wp.prototype;c.u=function(){return"ModelCompilation"};c.v=function(){return 6};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.tQ){var b=this.Nf,d=a.Nf;(null===b?null===d:b.o(d))&&this.de===a.de&&this.Ue===a.Ue?(b=this.Hc,d=a.Hc,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.cj,d=a.cj,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.nj,a=a.nj,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Nf;case 1:return this.de;case 2:return this.Ue;case 3:return this.Hc;case 4:return this.cj;case 5:return this.nj;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function Vp(a,b,d,e,f,h,k){a.Nf=b;a.de=d;a.Ue=e;a.Hc=f;a.cj=h;a.nj=k;return a}c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({tQ:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$ModelCompilation",{tQ:1,d:1,t:1,q:1,l:1,i:1});
+function b2(){this.WS=this.VS=this.Pg=this.ch=this.nj=this.cj=this.Hc=this.Xh=this.Ue=this.de=null;this.a=0}b2.prototype=new l;b2.prototype.constructor=b2;c=b2.prototype;c.u=function(){return"CompilationRequest"};c.v=function(){return 8};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.uQ){if(this.de===a.de)var b=this.Ue,d=a.Ue,b=null===b?null===d:b.o(d);else b=!1;b?(b=this.Xh,d=a.Xh,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.Hc,d=a.Hc,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.cj,d=a.cj,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.nj,d=a.nj,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.ch,d=a.ch,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.Pg,a=a.Pg,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.de;case 1:return this.Ue;case 2:return this.Xh;case 3:return this.Hc;case 4:return this.cj;case 5:return this.nj;case 6:return this.ch;case 7:return this.Pg;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function Jea(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 67");return a.VS}
+function Ffa(a,b,d,e,f,h,k,p){var t=new b2;t.de=a;t.Ue=b;t.Xh=d;t.Hc=e;t.cj=f;t.nj=h;t.ch=k;t.Pg=p;t.VS=f.z()?I(r(),y()):f.X();t.a=(1|t.a)<<24>>24;t.WS=h.z()?I(r(),y()):h.X();t.a=(2|t.a)<<24>>24;return t}c.$y=function(){var a=this.de,b=this.Hc.ob(),d=this.Ue,d=d.z()?"":d.X(),e=this.ch;e.z()?e=F():(e=e.X(),e=(new J).j(e.ob()));var e=e.z()?Upa():e.X(),f=this.Pg;f.z()?f=F():(f=f.X(),f=(new J).j(f.ob()));var f=f.z()?Spa():f.X(),h=I(r(),y());return xk(new fk,a,b,d,"NetLogo 6.0",e,f,h)};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Kea(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/js/src/main/scala/BrowserRequests.scala: 68");return a.WS}c.$classData=g({uQ:0},!1,"org.nlogo.tortoise.compiler.CompilationRequest",{uQ:1,d:1,t:1,q:1,l:1,i:1});function cW(){this.jZ=this.dc=this.ae=this.Nf=this.Hc=this.mw=this.kv=this.Wt=this.Xt=null;this.a=0}cW.prototype=new l;cW.prototype.constructor=cW;c=cW.prototype;
+c.u=function(){return"CompiledModel"};function Eea(a,b){return zua(a).y(m(new n,function(a,b){return function(f){var h=Aua(a),k=Bua(a),p=tq();return UP(f,b,!0,h,k,!1,p)}}(a,b)))}c.v=function(){return 3};function Fea(a,b){return zua(a).y(m(new n,function(a,b){return function(f){var h=Aua(a),k=Bua(a),p=tq();return UP(f,b,!1,h,k,!1,p)}}(a,b)))}
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.vQ){if(this.Xt===a.Xt)var b=this.Wt,d=a.Wt,b=null===b?null===d:b.o(d);else b=!1;return b?this.kv===a.kv:!1}return!1};function Bua(a){if(0===(8&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/CompiledModel.scala: 23");return a.dc}c.w=function(a){switch(a){case 0:return this.Xt;case 1:return this.Wt;case 2:return this.kv;default:throw(new P).c(""+a);}};
+function Uqa(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/CompiledModel.scala: 23");return a.Nf}c.k=function(){return X(W(),this)};function zua(a){if(0===(16&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/CompiledModel.scala: 37");return a.jZ}c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+function Aua(a){if(0===(4&a.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/CompiledModel.scala: 23");return a.ae}
+function era(a,b,d,e){a.Xt=b;a.Wt=d;a.kv=e;if(null!==d)b=(new c2).mm(d.Hc,d.Nf,d.ae,d.dc);else throw(new q).j(d);a.mw=b;a.Hc=a.mw.fb;a.a=(1|a.a)<<24>>24;a.Nf=a.mw.Eb;a.a=(2|a.a)<<24>>24;a.ae=a.mw.tf;a.a=(4|a.a)<<24>>24;a.dc=a.mw.wr;a.a=(8|a.a)<<24>>24;a.jZ=m(new n,function(a){return function(b){var d;rq();var e=a.kv;try{Aq();var t=b.y(e);d=Jq().y(t)}catch(x){if(uq(x))Aq(),d=Bq(pq(),x);else throw x;}return d}}(a));a.a=(16|a.a)<<24>>24;return a}
+c.$classData=g({vQ:0},!1,"org.nlogo.tortoise.compiler.CompiledModel",{vQ:1,d:1,t:1,q:1,l:1,i:1});function d2(){this.it=this.Ss=null}d2.prototype=new l;d2.prototype.constructor=d2;c=d2.prototype;c.u=function(){return"CompiledPen"};c.v=function(){return 2};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.wQ){var b=this.Ss,d=a.Ss;if(null===b?null===d:b.o(d))return b=this.it,a=a.it,null===b?null===a:b.o(a)}return!1};function Jga(a,b){var d=new d2;d.Ss=a;d.it=b;return d}
+c.w=function(a){switch(a){case 0:return this.Ss;case 1:return this.it;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({wQ:0},!1,"org.nlogo.tortoise.compiler.CompiledPen",{wQ:1,d:1,t:1,q:1,l:1,i:1});function Wt(){this.Ap=this.Ri=null}Wt.prototype=new l;Wt.prototype.constructor=Wt;function Cua(){}c=Cua.prototype=Wt.prototype;c.u=function(){return"CompiledWidget"};c.v=function(){return 2};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.zB){var b=this.Ri,d=a.Ri;if(null===b?null===d:b.o(d))return b=this.Ap,a=a.Ap,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Ri;case 1:return this.Ap;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.Au=function(a,b){this.Ri=a;this.Ap=b;return this};c.x=function(){return Y(new Z,this)};
+c.$classData=g({zB:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget",{zB:1,d:1,t:1,q:1,l:1,i:1});function OP(){this.hx=this.gx=this.gj=null;this.ya=!1}OP.prototype=new l;OP.prototype.constructor=OP;OP.prototype.b=function(){return this};function Yfa(a){null===a.gx&&null===a.gx&&(a.gx=(new uQ).SD(a));return a.gx}function bd(a){a.ya||a.ya||(a.gj=TP(sq()),a.ya=!0);return a.gj}OP.prototype.$classData=g({V2:0},!1,"org.nlogo.tortoise.compiler.Compiler$$anon$1",{V2:1,d:1,Vja:1,Uja:1,Pja:1,Wja:1});
+function Nr(){this.wo=0;this.xc=null}Nr.prototype=new l;Nr.prototype.constructor=Nr;c=Nr.prototype;c.u=function(){return"CompilerContext"};c.v=function(){return 2};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.xQ?this.wo===a.wo&&this.xc===a.xc:!1};c.w=function(a){switch(a){case 0:return this.wo;case 1:return this.xc;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Yo=function(a,b){this.wo=a;this.xc=b;return this};
+c.c=function(a){Nr.prototype.Yo.call(this,0,a);return this};c.r=function(){var a=-889275714,a=V().da(a,this.wo),a=V().da(a,OD(V(),this.xc));return V().pb(a,2)};c.x=function(){return Y(new Z,this)};c.$classData=g({xQ:0},!1,"org.nlogo.tortoise.compiler.CompilerContext",{xQ:1,d:1,t:1,q:1,l:1,i:1});function VP(){this.Uo=!1;this.Ts=this.Jq=null;this.kp=!1}VP.prototype=new l;VP.prototype.constructor=VP;c=VP.prototype;c.u=function(){return"CompilerFlags"};c.v=function(){return 4};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.yQ?this.Uo===a.Uo&&this.Jq===a.Jq&&this.Ts===a.Ts?this.kp===a.kp:!1:!1};c.w=function(a){switch(a){case 0:return this.Uo;case 1:return this.Jq;case 2:return this.Ts;case 3:return this.kp;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function Yma(a,b,d,e,f){a.Uo=b;a.Jq=d;a.Ts=e;a.kp=f;return a}
+c.r=function(){var a=-889275714,a=V().da(a,this.Uo?1231:1237),a=V().da(a,OD(V(),this.Jq)),a=V().da(a,OD(V(),this.Ts)),a=V().da(a,this.kp?1231:1237);return V().pb(a,4)};c.x=function(){return Y(new Z,this)};c.$classData=g({yQ:0},!1,"org.nlogo.tortoise.compiler.CompilerFlags",{yQ:1,d:1,t:1,q:1,l:1,i:1});function e2(){this.dc=this.ae=this.Nf=this.Pu=this.Hc=this.Zr=null}e2.prototype=new l;e2.prototype.constructor=e2;c=e2.prototype;c.u=function(){return"Compilation"};c.v=function(){return 6};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.zQ){var b=this.Zr,d=a.Zr;(null===b?null===d:b.o(d))?(b=this.Hc,d=a.Hc,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.Pu,d=a.Pu,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.Nf,d=a.Nf,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.ae,d=a.ae,b=null===b?null===d:JP(b,d)):b=!1;if(b)return b=this.dc,a=a.dc,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Zr;case 1:return this.Hc;case 2:return this.Pu;case 3:return this.Nf;case 4:return this.ae;case 5:return this.dc;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};function $ma(a,b,d,e,f,h){var k=new e2;k.Zr=a;k.Hc=b;k.Pu=d;k.Nf=e;k.ae=f;k.dc=h;return k}c.x=function(){return Y(new Z,this)};c.$classData=g({zQ:0},!1,"org.nlogo.tortoise.compiler.CompilerLike$Compilation",{zQ:1,d:1,t:1,q:1,l:1,i:1});
+function f2(){this.Xh=this.Pg=this.ch=this.Hc=this.Ue=this.de=null}f2.prototype=new l;f2.prototype.constructor=f2;c=f2.prototype;c.u=function(){return"ExportRequest"};c.v=function(){return 6};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.AQ){if(this.de===a.de)var b=this.Ue,d=a.Ue,b=null===b?null===d:b.o(d);else b=!1;b?(b=this.Hc,d=a.Hc,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.ch,d=a.ch,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.Pg,d=a.Pg,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.Xh,a=a.Xh,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.de;case 1:return this.Ue;case 2:return this.Hc;case 3:return this.ch;case 4:return this.Pg;case 5:return this.Xh;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function mra(a,b,d,e,f,h){var k=new f2;k.de=a;k.Ue=b;k.Hc=d;k.ch=e;k.Pg=f;k.Xh=h;return k}
+c.$y=function(){var a=this.de,b=this.Hc.ob(),d=this.Ue,d=d.z()?"":d.X(),e=this.ch;e.z()?e=F():(e=e.X(),e=(new J).j(e.ob()));var e=e.z()?Upa():e.X(),f=this.Pg;f.z()?f=F():(f=f.X(),f=(new J).j(f.ob()));var f=f.z()?Spa():f.X(),h=this.Xh,h=h.z()?"NetLogo 6.0.2":h.X(),k=I(r(),y());return xk(new fk,a,b,d,h,e,f,k)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({AQ:0},!1,"org.nlogo.tortoise.compiler.ExportRequest",{AQ:1,d:1,t:1,q:1,l:1,i:1});
+function Er(){this.lx=this.wa=this.sv=null}Er.prototype=new l;Er.prototype.constructor=Er;c=Er.prototype;c.u=function(){return"ExtensionPrim"};c.v=function(){return 3};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.BQ?this.sv===a.sv&&this.wa===a.wa?this.lx===a.lx:!1:!1};c.w=function(a){switch(a){case 0:return this.sv;case 1:return this.wa;case 2:return this.lx;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};function bfa(a,b,d,e){a.sv=b;a.wa=d;a.lx=e;return a}c.$classData=g({BQ:0},!1,"org.nlogo.tortoise.compiler.ExtensionPrim",{BQ:1,d:1,t:1,q:1,l:1,i:1});function tz(){}tz.prototype=new tU;tz.prototype.constructor=tz;tz.prototype.b=function(){return this};tz.prototype.y=function(a){return(new Dq).c(a)};tz.prototype.k=function(){return"FailureString"};tz.prototype.$classData=g({h3:0},!1,"org.nlogo.tortoise.compiler.FailureString$",{h3:1,wp:1,d:1,fa:1,l:1,i:1});
+var sz=void 0;function ht(){this.yq=!1;this.lp=null}ht.prototype=new l;ht.prototype.constructor=ht;c=ht.prototype;c.u=function(){return"ProcedureContext"};c.v=function(){return 2};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.LQ&&this.yq===a.yq){var b=this.lp;a=a.lp;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.yq;case 1:return this.lp;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.r=function(){var a=-889275714,a=V().da(a,this.yq?1231:1237),a=V().da(a,OD(V(),this.lp));return V().pb(a,2)};c.x=function(){return Y(new Z,this)};c.$classData=g({LQ:0},!1,"org.nlogo.tortoise.compiler.ProcedureContext",{LQ:1,d:1,t:1,q:1,l:1,i:1});function g2(){}g2.prototype=new tU;g2.prototype.constructor=g2;g2.prototype.b=function(){return this};g2.prototype.y=function(a){return(new xu).qb(a|0)};g2.prototype.k=function(){return"JsInt"};
+g2.prototype.$classData=g({t5:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsInt$",{t5:1,wp:1,d:1,fa:1,l:1,i:1});var Dua=void 0;function Ita(){Dua||(Dua=(new g2).b());return Dua}function h2(){}h2.prototype=new tU;h2.prototype.constructor=h2;h2.prototype.b=function(){return this};h2.prototype.y=function(a){return(new xr).ji(a)};h2.prototype.k=function(){return"JsDefined"};h2.prototype.$classData=g({t7:0},!1,"play.api.libs.json.JsDefined$",{t7:1,wp:1,d:1,fa:1,l:1,i:1});var Eua=void 0;
+function i2(){Eua||(Eua=(new h2).b())}function j2(){this.Hi=null}j2.prototype=new l;j2.prototype.constructor=j2;c=j2.prototype;c.u=function(){return"JsLookup"};c.v=function(){return 1};c.o=function(a){var b;wr();b=this.Hi;a&&a.$classData&&a.$classData.n.kR?(a=null===a?null:a.Hi,b=null===b?null===a:b.o(a)):b=!1;return b};c.w=function(a){a:switch(wr(),a){case 0:a=this.Hi;break a;default:throw(new P).c(""+a);}return a};c.k=function(){wr();var a=this.Hi;return X(W(),Fua(a))};
+function Fua(a){var b=new j2;b.Hi=a;return b}c.r=function(){return this.Hi.r()};c.x=function(){wr();return Y(new Z,Fua(this.Hi))};c.$classData=g({kR:0},!1,"play.api.libs.json.JsLookup",{kR:1,d:1,t:1,q:1,l:1,i:1});function k2(){}k2.prototype=new tU;k2.prototype.constructor=k2;k2.prototype.b=function(){return this};k2.prototype.y=function(a){return Fua(a)};k2.prototype.k=function(){return"JsLookup"};
+function zr(a,b,d){if(Sw(b)){a=null===b?null:b.Y;if(ux(a)){a=Gua(a);a=md(new nd,a).Wc(d);if(Fk(a))return a.U;if(F()===a)throw(new Du).c(""+d);throw(new q).j(a);}throw ug(vg(),(new Kr).c(Hja(Ija(),a," is not a JsObject")));}if(b&&b.$classData&&b.$classData.n.TB)throw vg(),d=ne(b.No),ug(0,(new Kr).c(""+d));throw(new q).j(b);}
+function vr(a,b,d){var e=!1,f=null;if(Sw(b)){var e=!0,h=f=null===b?null:b.Y;if(ux(h))return b=Gua(h).$b(d),b.z()?b=F():(b=b.X(),b=(new J).j((new xr).ji(b))),b.z()?(new fY).Ac(K(function(a,b,d){return function(){return u((new v).G((new w).f(["'","' is undefined on object: ",""])),(new w).f([d,b]))}}(a,h,d))):b.X()}return e?(new fY).Ac(K(function(a,b){return function(){return u((new v).G((new w).f([""," is not an object"])),(new w).f([b]))}}(a,f))):b}
+k2.prototype.$classData=g({w7:0},!1,"play.api.libs.json.JsLookup$",{w7:1,wp:1,d:1,fa:1,l:1,i:1});var Hua=void 0;function wr(){Hua||(Hua=(new k2).b());return Hua}function l2(){this.Sg=null}l2.prototype=new l;l2.prototype.constructor=l2;function Iua(){}c=Iua.prototype=l2.prototype;c.u=function(){return"JsPath"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.RB){var b=this.Sg;a=a.Sg;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Sg;default:throw(new P).c(""+a);}};c.k=function(){return cc(this.Sg,"","","")};c.uq=function(a){this.Sg=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({RB:0},!1,"play.api.libs.json.JsPath",{RB:1,d:1,t:1,q:1,l:1,i:1});function hY(){this.za=this.um=null;this.ya=!1}hY.prototype=new l;hY.prototype.constructor=hY;c=hY.prototype;c.u=function(){return"JsonValidationError"};c.v=function(){return 2};
+c.Ku=function(a,b){this.um=a;this.za=b;return this};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.pR){var b=this.um,d=a.um;if(null===b?null===d:b.o(d))return b=this.za,a=a.za,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.um;case 1:return this.za;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({pR:0},!1,"play.api.libs.json.JsonValidationError",{pR:1,d:1,t:1,q:1,l:1,i:1});function m2(){}m2.prototype=new l;m2.prototype.constructor=m2;function Jua(){}Jua.prototype=m2.prototype;function dA(){}dA.prototype=new Uta;dA.prototype.constructor=dA;dA.prototype.b=function(){R0.prototype.b.call(this);return this};dA.prototype.$classData=g({R7:0},!1,"scalaz.$eq$eq$greater$greater$",{R7:1,dla:1,ela:1,fla:1,gla:1,d:1});var Via=void 0;
+function Kua(a,b,d){return a.wf(K(function(a,b){return function(){return b}}(a,b)),K(function(a,b){return function(){return a.Qd(K(function(a,b){return function(){return b}}(a,b)))}}(a,d)))}function kz(a,b,d,e){e=a.Qd(K(function(a,b){return function(){return b}}(a,e)));return ksa(a,b,d,e)}function uS(a){a.sh(Lua(a))}function n2(){this.ga=null}n2.prototype=new l;n2.prototype.constructor=n2;function Lua(a){var b=new n2;if(null===a)throw ug(vg(),null);b.ga=a;return b}
+n2.prototype.$classData=g({V7:0},!1,"scalaz.Applicative$$anon$5",{V7:1,d:1,lC:1,Kr:1,uk:1,$i:1});function vS(a){a.rj(Mua(a))}function o2(a,b,d){Lx();b=(new Mx).Ac(b);return a.ih(ne(d),m(new n,function(a,b){return function(d){return a.cd(T(b),d)}}(a,b)))}function p2(a,b){return a.ih(b,m(new n,function(){return function(a){return a}}(a)))}function q2(){this.ga=null}q2.prototype=new l;q2.prototype.constructor=q2;function Mua(a){var b=new q2;if(null===a)throw ug(vg(),null);b.ga=a;return b}
+q2.prototype.$classData=g({h8:0},!1,"scalaz.Bind$$anon$3",{h8:1,d:1,mC:1,Kr:1,uk:1,$i:1});function r2(){this.ga=null}r2.prototype=new l;r2.prototype.constructor=r2;function nsa(a){var b=new r2;if(null===a)throw ug(vg(),null);b.ga=a;return b}r2.prototype.$classData=g({o8:0},!1,"scalaz.Comonad$$anon$1",{o8:1,d:1,Oma:1,Vaa:1,uk:1,$i:1});
+function Nua(a,b,d){return kz(a.ga,d,b,sb(new tb,function(a){return function(b,d){return a.Gw.wf(K(function(a,b){return function(){return b}}(a,d)),K(function(a,b){return function(){return b}}(a,b)))}}(a)))}function s2(){this.tc=null}s2.prototype=new l;s2.prototype.constructor=s2;function Id(a,b){Ed();a=Yha(a.tc,K(function(a,b){return function(){return b.tc}}(a,b)));return Gd(a)}c=s2.prototype;c.u=function(){return"Cord"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.wR?this.tc===a.tc:!1};c.w=function(a){switch(a){case 0:return this.tc;default:throw(new P).c(""+a);}};c.k=function(){var a=(new pm).qb(this.tc.Ms()|0);this.tc.ua(m(new n,function(a,d){return function(a){var b=d.rc;b.Xb=""+b.Xb+a}}(this,a)));return a.rc.Xb};function loa(a,b){Ed();a=Px(a.tc,b);return Gd(a)}function Gd(a){var b=new s2;b.tc=a;return b}c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({wR:0},!1,"scalaz.Cord",{wR:1,d:1,t:1,q:1,l:1,i:1});function Bx(){}Bx.prototype=new l;Bx.prototype.constructor=Bx;c=Bx.prototype;c.Zs=function(){};c.Hv=function(){};c.up=function(){};c.UD=function(){yx(this);xd(this);Uz(this);return this};c.$classData=g({w8:0},!1,"scalaz.DisjunctionInstances2$$anon$2",{w8:1,d:1,Sw:1,Jp:1,Kp:1,xt:1});function t2(){this.Pm=null}t2.prototype=new l;t2.prototype.constructor=t2;c=t2.prototype;c.sc=function(a,b){return Uha(this,a,b)};
+function kia(a){var b=new t2;b.Pm=a;Cd(b);dz(b);return b}c.xe=function(){return this.Pm.xe()};c.hf=function(){};c.Df=function(){};c.$classData=g({z8:0},!1,"scalaz.DualInstances$$anon$1",{z8:1,d:1,qka:1,Hf:1,vf:1,rka:1});function u2(){}u2.prototype=new Qta;u2.prototype.constructor=u2;function Oua(){}Oua.prototype=u2.prototype;function vy(){this.Rq=null}vy.prototype=new l;vy.prototype.constructor=vy;c=vy.prototype;c.u=function(){return"Endo"};c.v=function(){return 1};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.yR){var b=this.Rq;a=a.Rq;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Rq;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.mn=function(a){this.Rq=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({yR:0},!1,"scalaz.Endo",{yR:1,d:1,t:1,q:1,l:1,i:1});function v2(){}v2.prototype=new l;v2.prototype.constructor=v2;
+function Pua(){}Pua.prototype=v2.prototype;function Fia(a,b){var d=fq().$d;a=gq(a);a:for(;;){if(!hq(a)){if(iq(a)){var e=a;a=e.fd;e=b.y(e.bd);d=(new jq).Sb(e,d);continue a}throw(new q).j(a);}return d}}v2.prototype.ob=function(){var a=y(),b=gq(this);a:for(;;){if(!hq(b)){if(iq(b)){a=Ng(new Og,b.bd,a);b=b.fd;continue a}throw(new q).j(b);}return a}};function gq(a){var b=a;a=fq().$d;a:for(;;){if(!hq(b)){if(iq(b)){a=(new jq).Sb(b.bd,a);b=b.fd;continue a}throw(new q).j(b);}return a}}
+v2.prototype.k=function(){fq();by();var a=(new cy).b(),b=new BS;b.Br=a;Jd(b);return b.Sd(this).k()};function Qua(a,b,d){for(;;){if(hq(a))return b;if(iq(a)){var e=a;a=e.fd;b=qb(d,b,e.bd)}else throw(new q).j(a);}}function Eia(a,b){a=gq(a);a:for(;;){if(!hq(a)){if(iq(a)){b=(new jq).Sb(a.bd,b);a=a.fd;continue a}throw(new q).j(a);}return b}}function w2(){this.$d=this.jE=null}w2.prototype=new hoa;w2.prototype.constructor=w2;
+w2.prototype.b=function(){rS.prototype.b.call(this);x2=this;this.$d=(new y2).b();(new zY).b();return this};w2.prototype.$classData=g({U8:0},!1,"scalaz.IList$",{U8:1,Hka:1,Gka:1,d:1,l:1,i:1});var x2=void 0;function fq(){x2||(x2=(new w2).b());return x2}function z2(){}z2.prototype=new Tta;z2.prototype.constructor=z2;function Rua(){}Rua.prototype=z2.prototype;function rz(){this.Pc=this.Gc=null}rz.prototype=new l;rz.prototype.constructor=rz;c=rz.prototype;c.u=function(){return"OneAnd"};c.v=function(){return 2};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.OR?bn(cn(),this.Gc,a.Gc)&&bn(cn(),this.Pc,a.Pc):!1};c.e=function(a,b){this.Gc=a;this.Pc=b;return this};c.w=function(a){switch(a){case 0:return this.Gc;case 1:return this.Pc;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({OR:0},!1,"scalaz.OneAnd",{OR:1,d:1,t:1,q:1,l:1,i:1});function A2(){}A2.prototype=new Vta;
+A2.prototype.constructor=A2;function Sua(){}Sua.prototype=A2.prototype;function B2(){}B2.prototype=new Wta;B2.prototype.constructor=B2;function C2(){}C2.prototype=B2.prototype;function D2(){}D2.prototype=new Sta;D2.prototype.constructor=D2;function Tua(){}Tua.prototype=D2.prototype;function E2(){this.ga=null}E2.prototype=new l;E2.prototype.constructor=E2;function aua(a){var b=new E2;if(null===a)throw ug(vg(),null);b.ga=a;return b}
+E2.prototype.$classData=g({e$:0},!1,"scalaz.Traverse$$anon$5",{e$:1,d:1,oba:1,uk:1,$i:1,nC:1});function F2(){}F2.prototype=new cua;F2.prototype.constructor=F2;function Uua(){}Uua.prototype=F2.prototype;function G2(){}G2.prototype=new l;G2.prototype.constructor=G2;function Vua(){}Vua.prototype=G2.prototype;function Lra(a,b){if(Zp(a))return(new dq).j(b.y(a.ha));if(aq(a))return a;throw(new q).j(a);}
+G2.prototype.dw=function(){if(aq(this))return F();if(Zp(this))return(new J).j(this.ha);throw(new q).j(this);};function Iga(a,b,d){b=(new A).e(a,ne(b));var e=b.lb,f=b.Db;if(Zp(e)&&(e=e.ha,Zp(f)))return(new dq).j(f.ha.y(e));f=b.lb;e=b.Db;if(aq(f)&&Zp(e))return f;f=b.Db;if(Zp(b.lb)&&aq(f))return f;e=b.lb;f=b.Db;if(aq(e)&&(e=e.fc,aq(f)))return(new bq).j(d.sc(f.fc,K(function(a,b){return function(){return b}}(a,e))));throw(new q).j(b);}function H2(){}H2.prototype=new dua;H2.prototype.constructor=H2;
+function Wua(){}Wua.prototype=H2.prototype;function Tz(){}Tz.prototype=new l;Tz.prototype.constructor=Tz;Tz.prototype.Zs=function(){};Tz.prototype.Hv=function(){};Tz.prototype.up=function(){};Tz.prototype.$classData=g({o$:0},!1,"scalaz.ValidationInstances3$$anon$3",{o$:1,d:1,Sw:1,Jp:1,Kp:1,xt:1});function I2(){this.bD=null}I2.prototype=new l;I2.prototype.constructor=I2;c=I2.prototype;c.Rh=function(){};c.Sd=function(a){return Dd(this,a)};c.ag=function(){};c.ah=function(a){return""+!!a};c.Xg=function(){};
+c.qg=function(){};c.Yd=function(){zd(this);wz(this);gS(this);Jd(this);return this};function Lia(){var a;a=Bz();null===Bz().Pt&&null===Bz().Pt&&(Bz().Pt=(new I2).Yd(a));a=Bz().Pt;if(null===a.bD&&null===a.bD){var b=new QY;Cd(b);dz(b);a.bD=b}}c.$classData=g({M$:0},!1,"scalaz.std.AnyValInstances$booleanInstance$",{M$:1,d:1,Zh:1,vg:1,hg:1,gh:1});function J2(){}J2.prototype=new l;J2.prototype.constructor=J2;c=J2.prototype;c.Mg=function(){yx(this);xd(this);Uz(this);return this};c.Zs=function(){};c.Hv=function(){};
+c.up=function(){};c.$classData=g({X$:0},!1,"scalaz.std.EitherInstances$$anon$4",{X$:1,d:1,Sw:1,Jp:1,Kp:1,xt:1});function Xua(a,b,d,e){return e.cd(d.y(b.lb),m(new n,function(){return function(a){return(new K2).j(a)}}(a)))}function L2(){}L2.prototype=new l;L2.prototype.constructor=L2;c=L2.prototype;c.Zs=function(){};c.Hv=function(){};c.up=function(){};c.Fu=function(){yx(this);xd(this);Uz(this);return this};c.$classData=g({taa:0},!1,"scalaz.std.TupleInstances1$$anon$23",{taa:1,d:1,Sw:1,Jp:1,Kp:1,xt:1});
+function M2(){this.tu=null}M2.prototype=new l;M2.prototype.constructor=M2;M2.prototype.b=function(){N2=this;Coa(this);return this};M2.prototype.HX=function(a){this.tu=a};M2.prototype.IX=function(){};M2.prototype.$classData=g({Aaa:0},!1,"scalaz.std.function$",{Aaa:1,d:1,Y$:1,Z$:1,baa:1,caa:1});var N2=void 0;function $ta(){N2||(N2=(new M2).b());return N2}function O2(){}O2.prototype=new l;O2.prototype.constructor=O2;O2.prototype.Zs=function(){};O2.prototype.Hv=function(){};O2.prototype.up=function(){};
+O2.prototype.$classData=g({Eaa:0},!1,"scalaz.std.java.util.MapInstances$$anon$1",{Eaa:1,d:1,Sw:1,Jp:1,Kp:1,xt:1});function tA(){this.Y=this.wa=null;this.gv=DA()}tA.prototype=new l;tA.prototype.constructor=tA;c=tA.prototype;c.u=function(){return"Result"};c.v=function(){return 3};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.YR){if(this.wa===a.wa)var b=this.Y,d=a.Y,b=null===b?null===d:b.o(d);else b=!1;if(b)return b=this.gv,d=b.qa,a=a.gv,b.la===a.la&&d===a.qa}return!1};
+c.w=function(a){switch(a){case 0:return this.wa;case 1:return this.Y;case 2:return this.gv;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.wa)),a=V().da(a,OD(V(),this.Y)),a=V().da(a,TF(V(),this.gv));return V().pb(a,3)};c.x=function(){return Y(new Z,this)};c.$classData=g({YR:0},!1,"utest.framework.Result",{YR:1,d:1,t:1,q:1,l:1,i:1});function uA(){this.td=this.Y=null}uA.prototype=new l;uA.prototype.constructor=uA;c=uA.prototype;
+c.u=function(){return"Tree"};c.v=function(){return 2};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.ZR&&bn(cn(),this.Y,a.Y)){var b=this.td;a=a.td;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Y;case 1:return this.td;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.ra=function(){return this.td.Gb(1,sb(new tb,function(){return function(a,b){return(a|0)+b.ra()|0}}(this)))|0};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.$classData=g({ZR:0},!1,"utest.framework.Tree",{ZR:1,d:1,t:1,q:1,l:1,i:1});function FU(){DT.call(this)}FU.prototype=new m1;FU.prototype.constructor=FU;FU.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};function P2(a){return!!(a&&a.$classData&&a.$classData.n.dV)}FU.prototype.$classData=g({dV:0},!1,"java.lang.ArithmeticException",{dV:1,ef:1,xd:1,Lc:1,d:1,i:1});function Ne(){DT.call(this)}Ne.prototype=new m1;Ne.prototype.constructor=Ne;
+function Q2(){}Q2.prototype=Ne.prototype;Ne.prototype.b=function(){DT.prototype.gc.call(this,null,null);return this};Ne.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};Ne.prototype.$classData=g({vn:0},!1,"java.lang.IllegalArgumentException",{vn:1,ef:1,xd:1,Lc:1,d:1,i:1});function he(){DT.call(this)}he.prototype=new m1;he.prototype.constructor=he;function Yua(){}Yua.prototype=he.prototype;he.prototype.b=function(){DT.prototype.gc.call(this,null,null);return this};
+he.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};he.prototype.gc=function(a,b){DT.prototype.gc.call(this,a,b);return this};he.prototype.$classData=g({fV:0},!1,"java.lang.IllegalStateException",{fV:1,ef:1,xd:1,Lc:1,d:1,i:1});function P(){DT.call(this)}P.prototype=new m1;P.prototype.constructor=P;function Zua(){}Zua.prototype=P.prototype;P.prototype.b=function(){DT.prototype.gc.call(this,null,null);return this};P.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};
+P.prototype.$classData=g({wE:0},!1,"java.lang.IndexOutOfBoundsException",{wE:1,ef:1,xd:1,Lc:1,d:1,i:1});function lF(){DT.call(this)}lF.prototype=new gua;lF.prototype.constructor=lF;lF.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};lF.prototype.$classData=g({gca:0},!1,"java.lang.InstantiationException",{gca:1,sca:1,xd:1,Lc:1,d:1,i:1});function R2(){}R2.prototype=new pta;R2.prototype.constructor=R2;R2.prototype.b=function(){return this};
+R2.prototype.$classData=g({kca:0},!1,"java.lang.JSConsoleBasedPrintStream$DummyOutputStream",{kca:1,uZ:1,d:1,Dr:1,Yu:1,tH:1});function p1(){DT.call(this)}p1.prototype=new m1;p1.prototype.constructor=p1;p1.prototype.b=function(){DT.prototype.gc.call(this,null,null);return this};p1.prototype.$classData=g({oca:0},!1,"java.lang.NegativeArraySizeException",{oca:1,ef:1,xd:1,Lc:1,d:1,i:1});function mF(){DT.call(this)}mF.prototype=new gua;mF.prototype.constructor=mF;
+mF.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};mF.prototype.$classData=g({pca:0},!1,"java.lang.NoSuchMethodException",{pca:1,sca:1,xd:1,Lc:1,d:1,i:1});function ye(){DT.call(this)}ye.prototype=new m1;ye.prototype.constructor=ye;ye.prototype.b=function(){DT.prototype.gc.call(this,null,null);return this};ye.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};ye.prototype.$classData=g({qca:0},!1,"java.lang.NullPointerException",{qca:1,ef:1,xd:1,Lc:1,d:1,i:1});
+function il(){DT.call(this)}il.prototype=new m1;il.prototype.constructor=il;il.prototype.b=function(){DT.prototype.gc.call(this,null,null);return this};il.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};il.prototype.$classData=g({Bca:0},!1,"java.lang.UnsupportedOperationException",{Bca:1,ef:1,xd:1,Lc:1,d:1,i:1});function Du(){DT.call(this)}Du.prototype=new m1;Du.prototype.constructor=Du;Du.prototype.b=function(){DT.prototype.gc.call(this,null,null);return this};
+Du.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};Du.prototype.$classData=g({Nca:0},!1,"java.util.NoSuchElementException",{Nca:1,ef:1,xd:1,Lc:1,d:1,i:1});function tZ(){iZ.call(this)}tZ.prototype=new A1;tZ.prototype.constructor=tZ;c=tZ.prototype;c.b=function(){iZ.prototype.Cd.call(this,"NANOSECONDS",0);return this};c.nr=function(a){var b=Ra();a=kf(b,a.la,a.qa,-129542144,13);return(new Vb).ia(a,b.Rb)};
+c.lr=function(a){var b=Ra();a=kf(b,a.la,a.qa,817405952,838);return(new Vb).ia(a,b.Rb)};c.or=function(a){var b=Ra();a=kf(b,a.la,a.qa,1E9,0);return(new Vb).ia(a,b.Rb)};c.mr=function(a){var b=Ra();a=kf(b,a.la,a.qa,1E3,0);return(new Vb).ia(a,b.Rb)};c.kr=function(a){var b=Ra();a=kf(b,a.la,a.qa,-1857093632,20116);return(new Vb).ia(a,b.Rb)};c.Zn=function(a){var b=Ra();a=kf(b,a.la,a.qa,1E6,0);return(new Vb).ia(a,b.Rb)};c.Vp=function(a,b){return b.Vk(a)};c.Vk=function(a){return a};
+c.$classData=g({Qca:0},!1,"java.util.concurrent.TimeUnit$$anon$1",{Qca:1,ep:1,un:1,d:1,Ed:1,i:1});function uZ(){iZ.call(this)}uZ.prototype=new A1;uZ.prototype.constructor=uZ;c=uZ.prototype;c.b=function(){iZ.prototype.Cd.call(this,"MICROSECONDS",1);return this};c.nr=function(a){var b=Ra();a=kf(b,a.la,a.qa,6E7,0);return(new Vb).ia(a,b.Rb)};c.lr=function(a){var b=Ra();a=kf(b,a.la,a.qa,-694967296,0);return(new Vb).ia(a,b.Rb)};c.or=function(a){var b=Ra();a=kf(b,a.la,a.qa,1E6,0);return(new Vb).ia(a,b.Rb)};
+c.mr=function(a){return a};c.kr=function(a){var b=Ra();a=kf(b,a.la,a.qa,500654080,20);return(new Vb).ia(a,b.Rb)};c.Zn=function(a){var b=Ra();a=kf(b,a.la,a.qa,1E3,0);return(new Vb).ia(a,b.Rb)};c.Vp=function(a,b){return b.mr(a)};c.Vk=function(a){return AZ(yA(),a,(new Vb).ia(1E3,0),(new Vb).ia(-1511828489,2147483))};c.$classData=g({Rca:0},!1,"java.util.concurrent.TimeUnit$$anon$2",{Rca:1,ep:1,un:1,d:1,Ed:1,i:1});function vZ(){iZ.call(this)}vZ.prototype=new A1;vZ.prototype.constructor=vZ;c=vZ.prototype;
+c.b=function(){iZ.prototype.Cd.call(this,"MILLISECONDS",2);return this};c.nr=function(a){var b=Ra();a=kf(b,a.la,a.qa,6E4,0);return(new Vb).ia(a,b.Rb)};c.lr=function(a){var b=Ra();a=kf(b,a.la,a.qa,36E5,0);return(new Vb).ia(a,b.Rb)};c.or=function(a){var b=Ra();a=kf(b,a.la,a.qa,1E3,0);return(new Vb).ia(a,b.Rb)};c.mr=function(a){return AZ(yA(),a,(new Vb).ia(1E3,0),(new Vb).ia(-1511828489,2147483))};c.kr=function(a){var b=Ra();a=kf(b,a.la,a.qa,864E5,0);return(new Vb).ia(a,b.Rb)};c.Zn=function(a){return a};
+c.Vp=function(a,b){return b.Zn(a)};c.Vk=function(a){return AZ(yA(),a,(new Vb).ia(1E6,0),(new Vb).ia(2077252342,2147))};c.$classData=g({Sca:0},!1,"java.util.concurrent.TimeUnit$$anon$3",{Sca:1,ep:1,un:1,d:1,Ed:1,i:1});function wZ(){iZ.call(this)}wZ.prototype=new A1;wZ.prototype.constructor=wZ;c=wZ.prototype;c.b=function(){iZ.prototype.Cd.call(this,"SECONDS",3);return this};c.nr=function(a){var b=Ra();a=kf(b,a.la,a.qa,60,0);return(new Vb).ia(a,b.Rb)};
+c.lr=function(a){var b=Ra();a=kf(b,a.la,a.qa,3600,0);return(new Vb).ia(a,b.Rb)};c.or=function(a){return a};c.mr=function(a){return AZ(yA(),a,(new Vb).ia(1E6,0),(new Vb).ia(2077252342,2147))};c.kr=function(a){var b=Ra();a=kf(b,a.la,a.qa,86400,0);return(new Vb).ia(a,b.Rb)};c.Zn=function(a){return AZ(yA(),a,(new Vb).ia(1E3,0),(new Vb).ia(-1511828489,2147483))};c.Vp=function(a,b){return b.or(a)};c.Vk=function(a){return AZ(yA(),a,(new Vb).ia(1E9,0),(new Vb).ia(633437444,2))};
+c.$classData=g({Tca:0},!1,"java.util.concurrent.TimeUnit$$anon$4",{Tca:1,ep:1,un:1,d:1,Ed:1,i:1});function xZ(){iZ.call(this)}xZ.prototype=new A1;xZ.prototype.constructor=xZ;c=xZ.prototype;c.b=function(){iZ.prototype.Cd.call(this,"MINUTES",4);return this};c.nr=function(a){return a};c.lr=function(a){var b=Ra();a=kf(b,a.la,a.qa,60,0);return(new Vb).ia(a,b.Rb)};c.or=function(a){return AZ(yA(),a,(new Vb).ia(60,0),(new Vb).ia(572662306,35791394))};
+c.mr=function(a){return AZ(yA(),a,(new Vb).ia(6E7,0),(new Vb).ia(-895955376,35))};c.kr=function(a){var b=Ra();a=kf(b,a.la,a.qa,1440,0);return(new Vb).ia(a,b.Rb)};c.Zn=function(a){return AZ(yA(),a,(new Vb).ia(6E4,0),(new Vb).ia(1692789776,35791))};c.Vp=function(a,b){return b.nr(a)};c.Vk=function(a){return AZ(yA(),a,(new Vb).ia(-129542144,13),(new Vb).ia(153722867,0))};c.$classData=g({Uca:0},!1,"java.util.concurrent.TimeUnit$$anon$5",{Uca:1,ep:1,un:1,d:1,Ed:1,i:1});function yZ(){iZ.call(this)}
+yZ.prototype=new A1;yZ.prototype.constructor=yZ;c=yZ.prototype;c.b=function(){iZ.prototype.Cd.call(this,"HOURS",5);return this};c.nr=function(a){return AZ(yA(),a,(new Vb).ia(60,0),(new Vb).ia(572662306,35791394))};c.lr=function(a){return a};c.or=function(a){return AZ(yA(),a,(new Vb).ia(3600,0),(new Vb).ia(1011703407,596523))};c.mr=function(a){return AZ(yA(),a,(new Vb).ia(-694967296,0),(new Vb).ia(-1732919508,0))};c.kr=function(a){var b=Ra();a=kf(b,a.la,a.qa,24,0);return(new Vb).ia(a,b.Rb)};
+c.Zn=function(a){return AZ(yA(),a,(new Vb).ia(36E5,0),(new Vb).ia(-2047687697,596))};c.Vp=function(a,b){return b.lr(a)};c.Vk=function(a){return AZ(yA(),a,(new Vb).ia(817405952,838),(new Vb).ia(2562047,0))};c.$classData=g({Vca:0},!1,"java.util.concurrent.TimeUnit$$anon$6",{Vca:1,ep:1,un:1,d:1,Ed:1,i:1});function zZ(){iZ.call(this)}zZ.prototype=new A1;zZ.prototype.constructor=zZ;c=zZ.prototype;c.b=function(){iZ.prototype.Cd.call(this,"DAYS",6);return this};
+c.nr=function(a){return AZ(yA(),a,(new Vb).ia(1440,0),(new Vb).ia(381774870,1491308))};c.lr=function(a){return AZ(yA(),a,(new Vb).ia(24,0),(new Vb).ia(1431655765,89478485))};c.or=function(a){return AZ(yA(),a,(new Vb).ia(86400,0),(new Vb).ia(579025220,24855))};c.mr=function(a){return AZ(yA(),a,(new Vb).ia(500654080,20),(new Vb).ia(106751991,0))};c.kr=function(a){return a};c.Zn=function(a){return AZ(yA(),a,(new Vb).ia(864E5,0),(new Vb).ia(-622191233,24))};c.Vp=function(a,b){return b.kr(a)};
+c.Vk=function(a){return AZ(yA(),a,(new Vb).ia(-1857093632,20116),(new Vb).ia(106751,0))};c.$classData=g({Wca:0},!1,"java.util.concurrent.TimeUnit$$anon$7",{Wca:1,ep:1,un:1,d:1,Ed:1,i:1});function q(){DT.call(this);this.iv=this.TV=null;this.LC=!1}q.prototype=new m1;q.prototype.constructor=q;
+q.prototype.Lh=function(){if(!this.LC&&!this.LC){var a;if(null===this.iv)a="null";else try{a=na(this.iv)+" ("+("of class "+oa(this.iv).Bg())+")"}catch(b){if(null!==Un(vg(),b))a="an instance of class "+oa(this.iv).Bg();else throw b;}this.TV=a;this.LC=!0}return this.TV};q.prototype.j=function(a){this.iv=a;DT.prototype.gc.call(this,null,null);return this};q.prototype.$classData=g({pda:0},!1,"scala.MatchError",{pda:1,ef:1,xd:1,Lc:1,d:1,i:1});function S2(){}S2.prototype=new l;
+S2.prototype.constructor=S2;function $ua(){}$ua.prototype=S2.prototype;S2.prototype.ob=function(){return this.z()?y():Ng(new Og,this.X(),y())};S2.prototype.ba=function(){return!this.z()};S2.prototype.ib=function(a){return!this.z()&&bn(cn(),this.X(),a)};function bV(a){return!!(a&&a.$classData&&a.$classData.n.KW)}function gC(){}gC.prototype=new l;gC.prototype.constructor=gC;c=gC.prototype;c.b=function(){return this};c.y=function(a){this.Kt(a)};c.Am=function(){return ld().nX};c.Ij=function(){return this};
+c.Fa=function(a){return this.Kt(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.xl=function(a){return a};c.Ga=function(a){return!!this.Kt(a)};c.Ya=function(){return!1};c.eb=function(a,b){return cC(this,a,b)};c.Kt=function(a){throw(new q).j(a);};c.Ca=function(){return this};c.$classData=g({uda:0},!1,"scala.PartialFunction$$anon$1",{uda:1,d:1,Ea:1,fa:1,l:1,i:1});function T2(){this.CE=this.Cl=null}T2.prototype=new l;T2.prototype.constructor=T2;function r_(a,b){var d=new T2;d.Cl=a;d.CE=b;return d}
+c=T2.prototype;c.y=function(a){return this.CE.y(this.Cl.y(a))};c.Am=function(a){return aC(this,a)};c.Ij=function(a){return r_(this,a)};c.Fa=function(a){return this.y(a)|0};c.k=function(){return"\x3cfunction1\x3e"};c.xl=function(a){return s_(new t_,this,a)};c.Ga=function(a){return!!this.y(a)};c.Ya=function(a){return this.Cl.Ya(a)};c.eb=function(a,b){var d=this.Cl.eb(a,ld().Tq);return bC(ld(),d)?b.y(a):this.CE.y(d)};c.Ca=function(a){return r_(this,a)};
+c.$classData=g({wda:0},!1,"scala.PartialFunction$AndThen",{wda:1,d:1,Ea:1,fa:1,l:1,i:1});function nd(){this.nW=null}nd.prototype=new tU;nd.prototype.constructor=nd;nd.prototype.y=function(a){return this.Wc(a)};function md(a,b){a.nW=b;return a}nd.prototype.Wc=function(a){a=this.nW.eb(a,ld().Tq);return bC(ld(),a)?F():(new J).j(a)};nd.prototype.$classData=g({xda:0},!1,"scala.PartialFunction$Lifted",{xda:1,wp:1,d:1,fa:1,l:1,i:1});function KZ(){}KZ.prototype=new nua;KZ.prototype.constructor=KZ;
+KZ.prototype.b=function(){return this};KZ.prototype.y=function(a){return a};KZ.prototype.$classData=g({Ada:0},!1,"scala.Predef$$anon$1",{Ada:1,mpa:1,d:1,fa:1,l:1,i:1});function LZ(){}LZ.prototype=new mua;LZ.prototype.constructor=LZ;LZ.prototype.b=function(){return this};LZ.prototype.y=function(a){return a};LZ.prototype.$classData=g({Bda:0},!1,"scala.Predef$$anon$2",{Bda:1,lpa:1,d:1,fa:1,l:1,i:1});function v(){this.dk=null}v.prototype=new l;v.prototype.constructor=v;c=v.prototype;c.u=function(){return"StringContext"};
+c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.MW){var b=this.dk;a=a.dk;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.dk;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function ava(a,b){if(a.dk.ra()!==(1+b.ra()|0))throw(new Ne).c("wrong number of arguments ("+b.ra()+") for interpolated string with "+a.dk.ra()+" parts");}
+function u(a,b){var d=function(){return function(a){Tsa||(Tsa=(new VZ).b());var b;a:{var d=a.length|0,e=mw(Ha(),a,92);switch(e){case -1:b=a;break a;default:b=(new n1).b();b:{var f=e,e=0;for(;;)if(0<=f){if(f>e){var E=b,e=Ma(null===a?"null":a,e,f);E.Xb=""+E.Xb+e}e=1+f|0;if(e>=d)throw(new U2).Cd(a,f);E=65535&(a.charCodeAt(e)|0);switch(E){case 98:f=8;break;case 116:f=9;break;case 110:f=10;break;case 102:f=12;break;case 114:f=13;break;case 34:f=34;break;case 39:f=39;break;case 92:f=92;break;default:if(48<=
+E&&55>=E)f=65535&(a.charCodeAt(e)|0),E=-48+f|0,e=1+e|0,e<d&&48<=(65535&(a.charCodeAt(e)|0))&&55>=(65535&(a.charCodeAt(e)|0))&&(E=-48+((E<<3)+(65535&(a.charCodeAt(e)|0))|0)|0,e=1+e|0,e<d&&51>=f&&48<=(65535&(a.charCodeAt(e)|0))&&55>=(65535&(a.charCodeAt(e)|0))&&(E=-48+((E<<3)+(65535&(a.charCodeAt(e)|0))|0)|0,e=1+e|0)),e=-1+e|0,f=65535&E;else throw(new U2).Cd(a,f);}e=1+e|0;o1(b,f);f=e;Ha();var E=a,S=pla(92),E=E.indexOf(S,e)|0,e=f,f=E}else{e<d&&(f=b,a=Ma(null===a?"null":a,e,d),f.Xb=""+f.Xb+a);b=b.Xb;
+break b}}}}return b}}(a);ava(a,b);a=a.dk.Ta();b=b.Ta();for(var e=a.ma(),e=(new n1).c(d(e));b.ta();){var f=b.ma();e.Xb=""+e.Xb+f;f=a.ma();f=d(f);e.Xb=""+e.Xb+f}return e.Xb}c.G=function(a){this.dk=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({MW:0},!1,"scala.StringContext",{MW:1,d:1,t:1,q:1,l:1,i:1});function V2(){}V2.prototype=new l;V2.prototype.constructor=V2;function bva(){}bva.prototype=V2.prototype;
+function ak(){this.Iy=this.Bf=null;this.rx=!1;this.Va=null}ak.prototype=new H1;ak.prototype.constructor=ak;c=ak.prototype;c.ma=function(){return this.xm()};function bk(a){a.rx||a.rx||(a.Bf=a.Va.Bf.$m(),a.rx=!0);return a.Bf}function cva(a){if(bk(a).ta()){var b=bk(a).ma(),b=null===b?0:b.Y;if(10!==b){if(13===b)return bk(a).ta()?(b=bk(a).$(),b=10===(null===b?0:b.Y)):b=!1,b&&bk(a).ma(),!1;qm(a.Iy,b);return!0}}return!1}c.Ju=function(a){if(null===a)throw ug(vg(),null);this.Va=a;this.Iy=(new pm).b();return this};
+c.xm=function(){var a=this.Iy.rc,b=a.Xb,d=0-(b.length|0)|0;if(0>d)b=b.substring(0,0);else for(var e=0;e!==d;)b+="\x00",e=1+e|0;for(a.Xb=b;cva(this););return this.Iy.rc.Xb};c.ta=function(){return bk(this).ta()};c.$classData=g({gea:0},!1,"scala.io.Source$LineIterator",{gea:1,Hd:1,d:1,ad:1,La:1,Ka:1});var eva=function dva(b,d){if(d.wi.isArrayClass){var e=(new v).G((new w).f(["Array[","]"]));d=AA(d);return u(e,(new w).f([dva(b,d)]))}return d.Bg()};function W2(){}W2.prototype=new l;
+W2.prototype.constructor=W2;function fva(){}fva.prototype=W2.prototype;function X2(){this.zf=null}X2.prototype=new l;X2.prototype.constructor=X2;c=X2.prototype;c.u=function(){return"RightProjection"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.$W){var b=this.zf;a=a.zf;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.zf;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function MV(a){var b=new X2;b.zf=a;return b}c.$classData=g({$W:0},!1,"scala.util.Either$RightProjection",{$W:1,d:1,t:1,q:1,l:1,i:1});function Y2(){}Y2.prototype=new l;Y2.prototype.constructor=Y2;function gva(){}gva.prototype=Y2.prototype;function Zsa(a){return!!(a&&a.$classData&&a.$classData.n.eX)}function BD(){DT.call(this)}BD.prototype=new ET;BD.prototype.constructor=BD;
+BD.prototype.b=function(){DT.prototype.gc.call(this,null,null);return this};BD.prototype.ru=function(){ita||(ita=(new w_).b());return ita.xG?DT.prototype.ru.call(this):this};BD.prototype.$classData=g({Xea:0},!1,"scala.util.control.BreakControl",{Xea:1,Lc:1,d:1,i:1,fX:1,efa:1});function Z2(){this.ga=this.Eb=this.fb=null}Z2.prototype=new l;Z2.prototype.constructor=Z2;c=Z2.prototype;c.u=function(){return"~"};c.v=function(){return 2};
+function Fe(a,b,d){var e=new Z2;e.fb=b;e.Eb=d;if(null===a)throw ug(vg(),null);e.ga=a;return e}c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.gX&&a.ga===this.ga?bn(cn(),this.fb,a.fb)&&bn(cn(),this.Eb,a.Eb):!1};c.w=function(a){switch(a){case 0:return this.fb;case 1:return this.Eb;default:throw(new P).c(""+a);}};c.k=function(){return"("+this.fb+"~"+this.Eb+")"};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({gX:0},!1,"scala.util.parsing.combinator.Parsers$$tilde",{gX:1,d:1,t:1,q:1,l:1,i:1});function JP(a,b){if(b&&b.$classData&&b.$classData.n.Vg){var d;if(!(d=a===b)&&(d=a.Ha()===b.Ha()))try{var e=a.Ta();for(a=!0;a&&e.ta();){var f=e.ma();if(null===f)throw(new q).j(f);var h=f.na(),k=b.$b(f.ja());b:{if(Fk(k)){var p=k.U;if(bn(cn(),h,p)){a=!0;break b}}a=!1}}d=a}catch(t){if(t&&t.$classData&&t.$classData.n.bca)d=!1;else throw t;}b=d}else b=!1;return b}
+function qQ(a,b,d){return a.Te(m(new n,function(a,b){return function(a){return bn(cn(),b,a)}}(a,b)),d)}function $2(a,b){return b&&b.$classData&&b.$classData.n.ge?a.Le(b):!1}function a3(a,b){return 0<=b&&b<a.ra()}function b3(){this.s=null}b3.prototype=new eU;b3.prototype.constructor=b3;b3.prototype.b=function(){dU.prototype.b.call(this);return this};b3.prototype.db=function(){el();return(new jc).b()};b3.prototype.$classData=g({Afa:0},!1,"scala.collection.Iterable$",{Afa:1,bg:1,Xe:1,d:1,cg:1,Ye:1});
+var hva=void 0;function Lc(){hva||(hva=(new b3).b());return hva}function bc(){this.ou=this.Va=null}bc.prototype=new H1;bc.prototype.constructor=bc;bc.prototype.ma=function(){return this.ou.y(this.Va.ma())};bc.prototype.Kf=function(a,b){if(null===a)throw ug(vg(),null);this.Va=a;this.ou=b;return this};bc.prototype.ta=function(){return this.Va.ta()};bc.prototype.$classData=g({Dfa:0},!1,"scala.collection.Iterator$$anon$10",{Dfa:1,Hd:1,d:1,ad:1,La:1,Ka:1});function Lo(){this.Ro=this.Va=this.If=null}
+Lo.prototype=new H1;Lo.prototype.constructor=Lo;Lo.prototype.ma=function(){return(this.ta()?this.If:SC().Xd).ma()};Lo.prototype.Kf=function(a,b){if(null===a)throw ug(vg(),null);this.Va=a;this.Ro=b;this.If=SC().Xd;return this};Lo.prototype.ta=function(){for(;!this.If.ta();){if(!this.Va.ta())return!1;this.If=this.Ro.y(this.Va.ma()).Hg()}return!0};Lo.prototype.$classData=g({Efa:0},!1,"scala.collection.Iterator$$anon$11",{Efa:1,Hd:1,d:1,ad:1,La:1,Ka:1});
+function Qo(){this.fq=null;this.ol=!1;this.iW=this.Va=null}Qo.prototype=new H1;Qo.prototype.constructor=Qo;Qo.prototype.ma=function(){return this.ta()?(this.ol=!1,this.fq):SC().Xd.ma()};Qo.prototype.Kf=function(a,b){if(null===a)throw ug(vg(),null);this.Va=a;this.iW=b;this.ol=!1;return this};Qo.prototype.ta=function(){if(!this.ol){do{if(!this.Va.ta())return!1;this.fq=this.Va.ma()}while(!this.iW.y(this.fq));this.ol=!0}return!0};
+Qo.prototype.$classData=g({Ffa:0},!1,"scala.collection.Iterator$$anon$12",{Ffa:1,Hd:1,d:1,ad:1,La:1,Ka:1});function Ep(){this.hr=0;this.kW=this.Va=this.mU=null}Ep.prototype=new H1;Ep.prototype.constructor=Ep;Ep.prototype.ma=function(){if(this.ta()){if(1===this.hr)return this.Va.ma();this.hr=1;return this.mU}return SC().Xd.ma()};Ep.prototype.Kf=function(a,b){if(null===a)throw ug(vg(),null);this.Va=a;this.kW=b;this.hr=-1;return this};
+Ep.prototype.ta=function(){if(1===this.hr)return this.Va.ta();if(0===this.hr)return!0;for(;this.Va.ta();){var a=this.Va.ma();if(!this.kW.y(a))return this.mU=a,this.hr=0,!0}this.hr=1;return!1};Ep.prototype.$classData=g({Gfa:0},!1,"scala.collection.Iterator$$anon$17",{Gfa:1,Hd:1,d:1,ad:1,La:1,Ka:1});function ZD(){}ZD.prototype=new H1;ZD.prototype.constructor=ZD;ZD.prototype.ma=function(){throw(new Du).c("next on empty iterator");};ZD.prototype.b=function(){return this};ZD.prototype.ta=function(){return!1};
+ZD.prototype.$classData=g({Hfa:0},!1,"scala.collection.Iterator$$anon$2",{Hfa:1,Hd:1,d:1,ad:1,La:1,Ka:1});function Fp(){this.sD=!1;this.bU=this.kx=null}Fp.prototype=new H1;Fp.prototype.constructor=Fp;Fp.prototype.ma=function(){this.sD?this.sD=!1:this.kx=this.bU.y(this.kx);return this.kx};Fp.prototype.ta=function(){return!0};function zea(a,b,d){a.bU=d;a.sD=!0;a.kx=b;return a}Fp.prototype.$classData=g({Ifa:0},!1,"scala.collection.Iterator$$anon$7",{Ifa:1,Hd:1,d:1,ad:1,La:1,Ka:1});
+function c3(){this.Py=null;this.Sv=this.va=0;this.Sr=null;this.zG=this.ps=!1;this.Va=this.TE=null}c3.prototype=new H1;c3.prototype.constructor=c3;c3.prototype.ma=function(){this.ps||iva(this);if(!this.ps)throw(new Du).c("next on empty iterator");this.ps=!1;var a=this.Sr,b=B().s;return L(a,b)};function jva(a,b,d,e,f){if(0<b&&(0===d||d3(e,f)>kva(a))){if(0!==d){var h=a.Sv;lva(a.Sr,0,h<d?h:d)}0===d?b=d3(e,f):(d=d3(e,f)-kva(a)|0,b=b<d?b:d);mva(a.Sr,e.nk(b));return a.ps=!0}return!1}
+function kva(a){a=a.Sv-a.va|0;return 0<a?a:0}c3.prototype.ta=function(){return this.ps||iva(this)};
+function nva(a,b){for(var d=(new O_).b(),e=(new N_).b(),f=a.Sr.Uc,h=(new e3).b(),k=0;k<b&&a.Py.ta();)f3(h,a.Py.ma()),k=1+k|0;k=b-h.ra()|0;if(0<k&&a.TE.ba()){B();for(var p=(new jc).b(),t=0;t<k;){var x=ne(a.TE.X());lc(p,x);t=1+t|0}k=p.ob();p=r();h=h.Vc(k,p.s)}if(h.z())return!1;if(a.zG)return e=d3(h,d),b=a.va,jva(a,e<b?e:b,f,h,d);if(e.Na)e=e.jb;else{k=h;if(null===e)throw(new ye).b();e.Na?e=e.jb:(b=d3(k,d)<b,e.jb=b,e.Na=!0,e=b)}if(e)return!1;if(0===f)return jva(a,d3(h,d),f,h,d);e=a.Sv;b=a.va;return jva(a,
+e<b?e:b,f,h,d)}function d3(a,b){if(b.Na)b=b.jb;else{if(null===b)throw(new ye).b();b.Na?b=b.jb:(a=a.ra(),b.jb=a,b.Na=!0,b=a)}return b}function iva(a){return a.Py.ta()?g3(a.Sr)?nva(a,a.va):nva(a,a.Sv):!1}function ova(a,b){var d=new c3;d.Py=b;d.va=2;d.Sv=2;if(null===a)throw ug(vg(),null);d.Va=a;d.Sr=I(i0(),y());d.ps=!1;d.zG=!0;d.TE=F();return d}c3.prototype.$classData=g({Jfa:0},!1,"scala.collection.Iterator$GroupedIterator",{Jfa:1,Hd:1,d:1,ad:1,La:1,Ka:1});function h3(){this.Ni=null}h3.prototype=new H1;
+h3.prototype.constructor=h3;h3.prototype.ma=function(){if(this.ta()){var a=this.Ni.$();this.Ni=this.Ni.aa();return a}return SC().Xd.ma()};function iv(a){var b=new h3;b.Ni=a;return b}h3.prototype.ob=function(){var a=this.Ni.ob();this.Ni=this.Ni.Yv(0);return a};h3.prototype.ta=function(){return!this.Ni.z()};h3.prototype.$classData=g({Kfa:0},!1,"scala.collection.LinearSeqLike$$anon$1",{Kfa:1,Hd:1,d:1,ad:1,La:1,Ka:1});function i3(){this.Bf=null}i3.prototype=new H1;i3.prototype.constructor=i3;
+i3.prototype.ma=function(){return this.Bf.ma().ja()};i3.prototype.ta=function(){return this.Bf.ta()};i3.prototype.mg=function(a){this.Bf=a.Ta();return this};i3.prototype.$classData=g({Lfa:0},!1,"scala.collection.MapLike$$anon$1",{Lfa:1,Hd:1,d:1,ad:1,La:1,Ka:1});function j3(){this.Bf=null}j3.prototype=new H1;j3.prototype.constructor=j3;j3.prototype.ma=function(){return this.Bf.ma().na()};j3.prototype.ta=function(){return this.Bf.ta()};j3.prototype.mg=function(a){this.Bf=a.Ta();return this};
+j3.prototype.$classData=g({Mfa:0},!1,"scala.collection.MapLike$$anon$2",{Mfa:1,Hd:1,d:1,ad:1,La:1,Ka:1});function RC(){this.s=null}RC.prototype=new eU;RC.prototype.constructor=RC;RC.prototype.b=function(){dU.prototype.b.call(this);QC=this;(new AD).b();return this};RC.prototype.db=function(){pva||(pva=(new k3).b());return(new jc).b()};RC.prototype.$classData=g({Pfa:0},!1,"scala.collection.Traversable$",{Pfa:1,bg:1,Xe:1,d:1,cg:1,Ye:1});var QC=void 0;function l3(){}l3.prototype=new oua;
+l3.prototype.constructor=l3;function m3(){}m3.prototype=l3.prototype;l3.prototype.Mo=function(){return this.Fx()};l3.prototype.db=function(){return mh(new nh,this.Fx())};function n3(){}n3.prototype=new oua;n3.prototype.constructor=n3;function qva(){}qva.prototype=n3.prototype;n3.prototype.db=function(){return rua(new L1,this.Mo())};function o3(){this.s=null}o3.prototype=new eU;o3.prototype.constructor=o3;o3.prototype.b=function(){dU.prototype.b.call(this);return this};o3.prototype.db=function(){return(new jc).b()};
+o3.prototype.$classData=g({iga:0},!1,"scala.collection.immutable.Iterable$",{iga:1,bg:1,Xe:1,d:1,cg:1,Ye:1});var rva=void 0;function el(){rva||(rva=(new o3).b());return rva}function p3(){this.Ni=null}p3.prototype=new H1;p3.prototype.constructor=p3;c=p3.prototype;c.ma=function(){if(!this.ta())return SC().Xd.ma();var a=xE(this.Ni),b=a.$();this.Ni=wE(new vE,this,K(function(a,b){return function(){return b.aa()}}(this,a)));return b};c.ob=function(){var a=this.Jc(),b=B().s;return L(a,b)};
+function sva(a){var b=new p3;b.Ni=wE(new vE,b,K(function(a,b){return function(){return b}}(b,a)));return b}c.ta=function(){var a=xE(this.Ni);return kd(a)};c.Jc=function(){var a=xE(this.Ni);this.Ni=wE(new vE,this,K(function(){return function(){xg();return YT()}}(this)));return a};c.$classData=g({Tga:0},!1,"scala.collection.immutable.StreamIterator",{Tga:1,Hd:1,d:1,ad:1,La:1,Ka:1});function q3(){this.ZF=null;this.Se=this.cv=0;this.Va=null}q3.prototype=new H1;q3.prototype.constructor=q3;
+q3.prototype.ma=function(){return this.xm()};q3.prototype.xm=function(){if(this.Se>=this.cv)throw(new Du).c("next on empty iterator");for(var a=this.Se;;){if(this.Se<this.cv)var b=this.Va.to(this.Se),b=!(10===b||12===b);else b=!1;if(b)this.Se=1+this.Se|0;else break}var b=this.Se=1+this.Se|0,d=this.cv;return this.ZF.substring(a,b<d?b:d)};q3.prototype.ta=function(){return this.Se<this.cv};
+function tva(a){var b=new q3;if(null===a)throw ug(vg(),null);b.Va=a;b.ZF=a.k();b.cv=b.ZF.length|0;b.Se=0;return b}q3.prototype.$classData=g({Vga:0},!1,"scala.collection.immutable.StringLike$$anon$1",{Vga:1,Hd:1,d:1,ad:1,La:1,Ka:1});function k3(){this.s=null}k3.prototype=new eU;k3.prototype.constructor=k3;k3.prototype.b=function(){dU.prototype.b.call(this);return this};k3.prototype.db=function(){return(new jc).b()};
+k3.prototype.$classData=g({Xga:0},!1,"scala.collection.immutable.Traversable$",{Xga:1,bg:1,Xe:1,d:1,cg:1,Ye:1});var pva=void 0;function r3(){this.bb=null;this.jk=0;this.Xs=this.iF=this.Ly=null;this.rp=0;this.Uq=null}r3.prototype=new H1;r3.prototype.constructor=r3;function uva(){}uva.prototype=r3.prototype;
+r3.prototype.ma=function(){if(null!==this.Uq){var a=this.Uq.ma();this.Uq.ta()||(this.Uq=null);return a}a:{var a=this.Xs,b=this.rp;for(;;){b===(-1+a.m.length|0)?(this.jk=-1+this.jk|0,0<=this.jk?(this.Xs=this.Ly.m[this.jk],this.rp=this.iF.m[this.jk],this.Ly.m[this.jk]=null):(this.Xs=null,this.rp=0)):this.rp=1+this.rp|0;if((a=a.m[b])&&a.$classData&&a.$classData.n.SX||a&&a.$classData&&a.$classData.n.UX){a=this.nU(a);break a}if(s3(a)||t3(a))0<=this.jk&&(this.Ly.m[this.jk]=this.Xs,this.iF.m[this.jk]=this.rp),
+this.jk=1+this.jk|0,this.Xs=vva(a),this.rp=0,a=vva(a),b=0;else{this.Uq=a.Ta();a=this.ma();break a}}}return a};r3.prototype.ta=function(){return null!==this.Uq||0<=this.jk};function vva(a){if(s3(a))return a.ne;if(!t3(a))throw(new q).j(a);return a.me}r3.prototype.EU=function(a){this.bb=a;this.jk=0;this.Ly=la(Wa(Wa(wva)),[6]);this.iF=la(Wa(db),[6]);this.Xs=this.bb;this.rp=0;this.Uq=null;return this};function u3(){this.ii=0;this.Va=null}u3.prototype=new H1;u3.prototype.constructor=u3;
+u3.prototype.ma=function(){return 0<this.ii?(this.ii=-1+this.ii|0,this.Va.W(this.ii)):SC().Xd.ma()};u3.prototype.ta=function(){return 0<this.ii};u3.prototype.Es=function(a){if(null===a)throw ug(vg(),null);this.Va=a;this.ii=a.ra();return this};u3.prototype.$classData=g({$ga:0},!1,"scala.collection.immutable.Vector$$anon$1",{$ga:1,Hd:1,d:1,ad:1,La:1,Ka:1});function v3(){this.bu=0;this.Va=null}v3.prototype=new H1;v3.prototype.constructor=v3;v3.prototype.ma=function(){this.bu=-1+this.bu|0;return this.Va.Li.m[this.bu]};
+v3.prototype.ta=function(){return 0<this.bu};v3.prototype.$classData=g({vha:0},!1,"scala.collection.mutable.ArrayStack$$anon$1",{vha:1,Hd:1,d:1,ad:1,La:1,Ka:1});function CE(){this.ej=this.tc=null}CE.prototype=new l;CE.prototype.constructor=CE;function BE(a,b,d){a.ej=d;a.tc=b;return a}c=CE.prototype;c.o=function(a){return null!==a&&(a===this||a===this.tc||Ea(a,this.tc))};c.md=function(a){this.tc.Qa(a);return this};c.k=function(){return""+this.tc};c.Da=function(){return this.ej.y(this.tc.Da())};
+c.dg=function(a,b){this.tc.dg(a,b)};c.Qa=function(a){this.tc.Qa(a);return this};c.r=function(){return this.tc.r()};c.qc=function(a){this.tc.qc(a)};c.Zb=function(a){this.tc.Zb(a);return this};c.$classData=g({xha:0},!1,"scala.collection.mutable.Builder$$anon$1",{xha:1,d:1,Ld:1,Kd:1,Jd:1,Hda:1});function w3(){this.ii=0;this.Va=null}w3.prototype=new H1;w3.prototype.constructor=w3;w3.prototype.ma=function(){return this.ta()?(this.ii=1+this.ii|0,qba(this.Va.Wb.m[-1+this.ii|0])):SC().Xd.ma()};
+w3.prototype.ta=function(){for(;this.ii<this.Va.Wb.m.length&&null===this.Va.Wb.m[this.ii];)this.ii=1+this.ii|0;return this.ii<this.Va.Wb.m.length};w3.prototype.$classData=g({Aha:0},!1,"scala.collection.mutable.FlatHashTable$$anon$1",{Aha:1,Hd:1,d:1,ad:1,La:1,Ka:1});function x3(){this.Bf=null}x3.prototype=new H1;x3.prototype.constructor=x3;x3.prototype.ma=function(){return this.Bf.ma().ak};x3.prototype.ta=function(){return this.Bf.ta()};x3.prototype.Mu=function(a){this.Bf=xva(a);return this};
+x3.prototype.$classData=g({Fha:0},!1,"scala.collection.mutable.HashMap$$anon$3",{Fha:1,Hd:1,d:1,ad:1,La:1,Ka:1});function y3(){this.Bf=null}y3.prototype=new H1;y3.prototype.constructor=y3;y3.prototype.ma=function(){return this.Bf.ma().Y};y3.prototype.ta=function(){return this.Bf.ta()};y3.prototype.Mu=function(a){this.Bf=xva(a);return this};y3.prototype.$classData=g({Gha:0},!1,"scala.collection.mutable.HashMap$$anon$4",{Gha:1,Hd:1,d:1,ad:1,La:1,Ka:1});
+function z3(){this.uE=null;this.ys=0;this.Zp=null}z3.prototype=new H1;z3.prototype.constructor=z3;z3.prototype.ma=function(){var a=this.Zp;for(this.Zp=this.Zp.ma();null===this.Zp&&0<this.ys;)this.ys=-1+this.ys|0,this.Zp=this.uE.m[this.ys];return a};function xva(a){var b=new z3;b.uE=a.Wb;b.ys=cla(a);b.Zp=b.uE.m[b.ys];return b}z3.prototype.ta=function(){return null!==this.Zp};z3.prototype.$classData=g({Kha:0},!1,"scala.collection.mutable.HashTable$$anon$1",{Kha:1,Hd:1,d:1,ad:1,La:1,Ka:1});
+function A3(){this.s=null}A3.prototype=new eU;A3.prototype.constructor=A3;A3.prototype.b=function(){dU.prototype.b.call(this);return this};A3.prototype.db=function(){return(new e3).b()};A3.prototype.$classData=g({Mha:0},!1,"scala.collection.mutable.Iterable$",{Mha:1,bg:1,Xe:1,d:1,cg:1,Ye:1});var yva=void 0;function zva(){yva||(yva=(new A3).b());return yva}function B3(){this.dk=null}B3.prototype=new l;B3.prototype.constructor=B3;function Ava(){}c=Ava.prototype=B3.prototype;
+c.b=function(){this.dk=(new jc).b();return this};c.md=function(a){return Bva(this,a)};function Bva(a,b){var d=a.dk;B();b=(new w).f([b]);var e=B().s;lc(d,L(b,e));return a}c.dg=function(a,b){pU(this,a,b)};c.Qa=function(a){return Bva(this,a)};c.qc=function(){};c.Zb=function(a){lc(this.dk,a);return this};function C3(){this.If=null}C3.prototype=new H1;C3.prototype.constructor=C3;c=C3.prototype;c.ma=function(){return this.Fq()};
+c.Fq=function(){if(this.ta()){var a=(new A).e(this.If.ak,this.If.Y);this.If=this.If.Ik;return a}return SC().Xd.ma()};c.ta=function(){return null!==this.If};c.Nu=function(a){this.If=a.kn;return this};c.$classData=g({Qha:0},!1,"scala.collection.mutable.LinkedHashMap$$anon$1",{Qha:1,Hd:1,d:1,ad:1,La:1,Ka:1});function D3(){this.If=null}D3.prototype=new H1;D3.prototype.constructor=D3;D3.prototype.ma=function(){if(this.ta()){var a=this.If.ak;this.If=this.If.Ik;return a}return SC().Xd.ma()};
+D3.prototype.ta=function(){return null!==this.If};D3.prototype.Nu=function(a){this.If=a.kn;return this};D3.prototype.$classData=g({Rha:0},!1,"scala.collection.mutable.LinkedHashMap$$anon$2",{Rha:1,Hd:1,d:1,ad:1,La:1,Ka:1});function E3(){this.If=null}E3.prototype=new H1;E3.prototype.constructor=E3;E3.prototype.ma=function(){if(this.ta()){var a=this.If.Y;this.If=this.If.Ik;return a}return SC().Xd.ma()};E3.prototype.ta=function(){return null!==this.If};E3.prototype.Nu=function(a){this.If=a.kn;return this};
+E3.prototype.$classData=g({Sha:0},!1,"scala.collection.mutable.LinkedHashMap$$anon$3",{Sha:1,Hd:1,d:1,ad:1,La:1,Ka:1});function F3(){this.bb=null}F3.prototype=new H1;F3.prototype.constructor=F3;F3.prototype.ma=function(){var a=this.bb.dj;this.bb=this.bb.oi;return a};F3.prototype.ta=function(){return kd(this.bb)};F3.prototype.$classData=g({Vha:0},!1,"scala.collection.mutable.LinkedListLike$$anon$1",{Vha:1,Hd:1,d:1,ad:1,La:1,Ka:1});function G3(){this.cu=null}G3.prototype=new H1;
+G3.prototype.constructor=G3;G3.prototype.ma=function(){if(this.ta()){var a=this.cu.$();this.cu=this.cu.aa();return a}throw(new Du).c("next on empty Iterator");};G3.prototype.ta=function(){return this.cu!==y()};G3.prototype.$classData=g({Xha:0},!1,"scala.collection.mutable.ListBuffer$$anon$1",{Xha:1,Hd:1,d:1,ad:1,La:1,Ka:1});function ec(){this.Oa=this.Xd=null}ec.prototype=new l;ec.prototype.constructor=ec;function hc(a,b){a.Oa=a.Oa.Yi(b);return a}c=ec.prototype;c.md=function(a){return hc(this,a)};
+c.Da=function(){return this.Oa};c.dg=function(a,b){pU(this,a,b)};function dc(a,b){a.Xd=b;a.Oa=b;return a}c.Qa=function(a){return hc(this,a)};c.qc=function(){};c.Zb=function(a){return oE(this,a)};c.$classData=g({$ha:0},!1,"scala.collection.mutable.MapBuilder",{$ha:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1});function H3(){this.bb=null;this.$t=0}H3.prototype=new H1;H3.prototype.constructor=H3;
+H3.prototype.ma=function(){if(!this.ta())throw(new Du).b();this.$t=-1+this.$t|0;var a=this.bb.dj;this.bb=0===this.$t?null:this.bb.oi;return a};H3.prototype.ta=function(){return 0<this.$t?kd(this.bb):!1};H3.prototype.$classData=g({bia:0},!1,"scala.collection.mutable.MutableList$$anon$1",{bia:1,Hd:1,d:1,ad:1,La:1,Ka:1});function nh(){this.Oa=this.Xd=null}nh.prototype=new l;nh.prototype.constructor=nh;c=nh.prototype;c.md=function(a){return oh(this,a)};c.Da=function(){return this.Oa};
+c.dg=function(a,b){pU(this,a,b)};function oh(a,b){a.Oa=a.Oa.ui(b);return a}function mh(a,b){a.Xd=b;a.Oa=b;return a}c.Qa=function(a){return oh(this,a)};c.qc=function(){};c.Zb=function(a){return oE(this,a)};c.$classData=g({fia:0},!1,"scala.collection.mutable.SetBuilder",{fia:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1});function I3(){this.nG=this.rZ=this.qZ=0}I3.prototype=new wpa;I3.prototype.constructor=I3;I3.prototype.b=function(){this.qZ=50;this.rZ=100;this.nG=32;return this};
+I3.prototype.$classData=g({jia:0},!1,"scala.collection.mutable.UnrolledBuffer$",{jia:1,Spa:1,Tpa:1,d:1,l:1,i:1});var Cva=void 0;function cF(){Cva||(Cva=(new I3).b());return Cva}function J3(){this.$c=0;this.Gq=null}J3.prototype=new H1;J3.prototype.constructor=J3;J3.prototype.ma=function(){if(this.ta()){var a=ZE(W(),this.Gq.Fh,this.$c);Dva(this);return a}return SC().Xd.ma()};J3.prototype.ta=function(){return null!==this.Gq};
+function Dva(a){for(a.$c=1+a.$c|0;a.$c>=a.Gq.rd&&(a.$c=0,a.Gq=a.Gq.qe,null!==a.Gq););}J3.prototype.$classData=g({kia:0},!1,"scala.collection.mutable.UnrolledBuffer$$anon$1",{kia:1,Hd:1,d:1,ad:1,La:1,Ka:1});function K3(){this.Oa=this.aG=null;this.rd=this.bm=0}K3.prototype=new l;K3.prototype.constructor=K3;c=K3.prototype;c.ap=function(a){this.aG=a;this.rd=this.bm=0;return this};c.md=function(a){return Eva(this,a)};
+function Eva(a,b){var d=1+a.rd|0;if(a.bm<d){for(var e=0===a.bm?16:a.bm<<1;e<d;)e<<=1;d=e;a.Oa=Fva(a,d);a.bm=d}a.Oa.pf(a.rd,b);a.rd=1+a.rd|0;return a}
+function Fva(a,b){var d=a.aG.Gd();b=d===pa(bb)?(new L3).gq(la(Wa(bb),[b])):d===pa(cb)?(new M3).kq(la(Wa(cb),[b])):d===pa(Za)?(new N3).lm(la(Wa(Za),[b])):d===pa(db)?(new O3).iq(la(Wa(db),[b])):d===pa(eb)?(new P3).jq(la(Wa(eb),[b])):d===pa(fb)?(new $B).Xo(la(Wa(fb),[b])):d===pa(gb)?(new Q3).hq(la(Wa(gb),[b])):d===pa(Ya)?(new R3).lq(la(Wa(Ya),[b])):d===pa(Xa)?(new S3).mq(la(Wa(Ba),[b])):(new ri).Mh(a.aG.Qg(b));0<a.rd&&Kv(Bf(),a.Oa.pa,0,b.pa,0,a.rd);return b}
+c.Da=function(){var a;0!==this.bm&&this.bm===this.rd?(this.bm=0,a=this.Oa):a=Fva(this,this.rd);return a};c.dg=function(a,b){pU(this,a,b)};c.Qa=function(a){return Eva(this,a)};c.qc=function(a){this.bm<a&&(this.Oa=Fva(this,a),this.bm=a)};c.Zb=function(a){return oE(this,a)};c.$classData=g({nia:0},!1,"scala.collection.mutable.WrappedArrayBuilder",{nia:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1});function dE(){DT.call(this);this.pG=this.rV=null}dE.prototype=new ET;dE.prototype.constructor=dE;dE.prototype.ru=function(){return this};
+dE.prototype.e=function(a,b){this.rV=a;this.pG=b;DT.prototype.gc.call(this,null,null);return this};dE.prototype.$classData=g({VF:0},!1,"scala.runtime.NonLocalReturnControl",{VF:1,Lc:1,d:1,i:1,fX:1,efa:1});function Z(){this.kT=this.Rt=0;this.sZ=null}Z.prototype=new H1;Z.prototype.constructor=Z;Z.prototype.ma=function(){var a=this.sZ.w(this.Rt);this.Rt=1+this.Rt|0;return a};function Y(a,b){a.sZ=b;a.Rt=0;a.kT=b.v();return a}Z.prototype.ta=function(){return this.Rt<this.kT};
+Z.prototype.$classData=g({fja:0},!1,"scala.runtime.ScalaRunTime$$anon$1",{fja:1,Hd:1,d:1,ad:1,La:1,Ka:1});function T3(){}T3.prototype=new l;T3.prototype.constructor=T3;c=T3.prototype;c.b=function(){return this};c.u=function(){return"Link"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Link"};c.r=function(){return 2368538};c.x=function(){return Y(new Z,this)};c.$classData=g({IZ:0},!1,"org.nlogo.core.AgentKind$Link$",{IZ:1,d:1,Lw:1,t:1,q:1,l:1,i:1});var Gva=void 0;
+function Qi(){Gva||(Gva=(new T3).b());return Gva}function U3(){}U3.prototype=new l;U3.prototype.constructor=U3;c=U3.prototype;c.b=function(){return this};c.u=function(){return"Observer"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Observer"};c.r=function(){return 413251318};c.x=function(){return Y(new Z,this)};c.$classData=g({JZ:0},!1,"org.nlogo.core.AgentKind$Observer$",{JZ:1,d:1,Lw:1,t:1,q:1,l:1,i:1});var Hva=void 0;
+function Ni(){Hva||(Hva=(new U3).b());return Hva}function V3(){}V3.prototype=new l;V3.prototype.constructor=V3;c=V3.prototype;c.b=function(){return this};c.u=function(){return"Patch"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Patch"};c.r=function(){return 76886056};c.x=function(){return Y(new Z,this)};c.$classData=g({KZ:0},!1,"org.nlogo.core.AgentKind$Patch$",{KZ:1,d:1,Lw:1,t:1,q:1,l:1,i:1});var Iva=void 0;
+function Pi(){Iva||(Iva=(new V3).b());return Iva}function W3(){}W3.prototype=new l;W3.prototype.constructor=W3;c=W3.prototype;c.b=function(){return this};c.u=function(){return"Turtle"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Turtle"};c.r=function(){return-1778555556};c.x=function(){return Y(new Z,this)};c.$classData=g({LZ:0},!1,"org.nlogo.core.AgentKind$Turtle$",{LZ:1,d:1,Lw:1,t:1,q:1,l:1,i:1});var Jva=void 0;
+function Oi(){Jva||(Jva=(new W3).b());return Jva}function gg(){this.Ei=this.Oi=null}gg.prototype=new M_;gg.prototype.constructor=gg;c=gg.prototype;c.Tu=function(a){if(Kva(a)){var b=a.Pd;if(this.Oi===a.ke&&this.Ei.y(b))return!0}return X3(a)&&(b=a.Pd,this.Oi===a.ke&&this.Ei.y(b))?!0:!1};c.zu=function(a,b){this.Oi=a;this.Ei=b;return this};c.Ya=function(a){return this.Tu(a)};c.eb=function(a,b){return this.It(a,b)};
+c.It=function(a,b){if(Kva(a)){var d=a.Pd;if(this.Oi===a.ke&&this.Ei.y(d))return a}return X3(a)&&(d=a.Pd,this.Oi===a.ke&&this.Ei.y(d))?a:b.y(a)};c.$classData=g({QZ:0},!1,"org.nlogo.core.BreedIdentifierHandler$$anonfun$breedPrimsMatching$1",{QZ:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function hg(){this.Ei=this.Oi=null}hg.prototype=new M_;hg.prototype.constructor=hg;c=hg.prototype;
+c.Tu=function(a){if(Lva(a)){var b=a.Pd;if(this.Oi===a.ke&&this.Ei.y(b))return!0}return X3(a)&&(b=a.Pd,this.Oi===a.ke&&this.Ei.y(b))?!0:!1};c.zu=function(a,b){this.Oi=a;this.Ei=b;return this};c.Ya=function(a){return this.Tu(a)};c.eb=function(a,b){return this.It(a,b)};c.It=function(a,b){if(Lva(a)){var d=a.Pd;if(this.Oi===a.ke&&this.Ei.y(d))return a}return X3(a)&&(d=a.Pd,this.Oi===a.ke&&this.Ei.y(d))?a:b.y(a)};
+c.$classData=g({RZ:0},!1,"org.nlogo.core.BreedIdentifierHandler$$anonfun$breedPrimsMatching$2",{RZ:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function ig(){this.Ei=this.Oi=null}ig.prototype=new M_;ig.prototype.constructor=ig;c=ig.prototype;c.Tu=function(a){if(Mva(a)){var b=a.Pd;if(this.Oi===a.ke&&this.Ei.y(b))return!0}return!1};c.zu=function(a,b){this.Oi=a;this.Ei=b;return this};c.Ya=function(a){return this.Tu(a)};c.eb=function(a,b){return this.It(a,b)};
+c.It=function(a,b){if(Mva(a)){var d=a.Pd;if(this.Oi===a.ke&&this.Ei.y(d))return a}return b.y(a)};c.$classData=g({SZ:0},!1,"org.nlogo.core.BreedIdentifierHandler$$anonfun$breedPrimsMatching$3",{SZ:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function pg(){this.Eq=this.Va=null}pg.prototype=new M_;pg.prototype.constructor=pg;pg.prototype.Ya=function(a){return this.Eq===raa(this.Va,a)?this.Va.Wu(a):!1};
+pg.prototype.eb=function(a,b){return this.Eq===raa(this.Va,a)&&this.Va.Wu(a)?(new ac).Bd(this.Va.Gg,a.wa,this.Va.ke):b.y(a)};pg.prototype.$classData=g({TZ:0},!1,"org.nlogo.core.BreedIdentifierHandler$BreedPrimSpec$$anonfun$process$2",{TZ:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function cg(){this.yl=this.Gg=this.ke=this.Pd=null;this.a=!1}cg.prototype=new l;cg.prototype.constructor=cg;c=cg.prototype;c.u=function(){return"DirectedLinkPrimitive"};c.vx=function(a){return a.Lf};c.v=function(){return 3};
+c.o=function(a){return this===a?!0:Kva(a)?this.Pd===a.Pd&&this.ke===a.ke?this.Gg===a.Gg:!1:!1};c.w=function(a){switch(a){case 0:return this.Pd;case 1:return this.ke;case 2:return this.Gg;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.qy=function(a){this.yl=a;this.a=!0};c.py=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/BreedIdentifierHandler.scala: 133");return this.yl};
+c.vd=function(a,b,d){this.Pd=a;this.ke=b;this.Gg=d;Pb(this);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.Wu=function(a){return a.Ng};function Kva(a){return!!(a&&a.$classData&&a.$classData.n.zH)}c.$classData=g({zH:0},!1,"org.nlogo.core.BreedIdentifierHandler$DirectedLinkPrimitive",{zH:1,d:1,Iz:1,t:1,q:1,l:1,i:1});function eg(){this.yl=this.Gg=this.ke=this.Pd=null;this.a=!1}eg.prototype=new l;eg.prototype.constructor=eg;c=eg.prototype;c.u=function(){return"LinkPrimitive"};
+c.vx=function(a){return a.Lf};c.v=function(){return 3};c.o=function(a){return this===a?!0:X3(a)?this.Pd===a.Pd&&this.ke===a.ke?this.Gg===a.Gg:!1:!1};c.w=function(a){switch(a){case 0:return this.Pd;case 1:return this.ke;case 2:return this.Gg;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.qy=function(a){this.yl=a;this.a=!0};
+c.py=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/BreedIdentifierHandler.scala: 143");return this.yl};c.vd=function(a,b,d){this.Pd=a;this.ke=b;this.Gg=d;Pb(this);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.Wu=function(){return!0};function X3(a){return!!(a&&a.$classData&&a.$classData.n.AH)}
+c.$classData=g({AH:0},!1,"org.nlogo.core.BreedIdentifierHandler$LinkPrimitive",{AH:1,d:1,Iz:1,t:1,q:1,l:1,i:1});function $f(){this.yl=this.Gg=this.ke=this.Pd=null;this.a=!1}$f.prototype=new l;$f.prototype.constructor=$f;c=$f.prototype;c.u=function(){return"TurtlePrimitive"};c.vx=function(a){return a.ig};c.v=function(){return 3};c.o=function(a){return this===a?!0:Mva(a)?this.Pd===a.Pd&&this.ke===a.ke?this.Gg===a.Gg:!1:!1};
+c.w=function(a){switch(a){case 0:return this.Pd;case 1:return this.ke;case 2:return this.Gg;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.qy=function(a){this.yl=a;this.a=!0};c.py=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/BreedIdentifierHandler.scala: 128");return this.yl};c.vd=function(a,b,d){this.Pd=a;this.ke=b;this.Gg=d;Pb(this);return this};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.Wu=function(){return!0};function Mva(a){return!!(a&&a.$classData&&a.$classData.n.BH)}c.$classData=g({BH:0},!1,"org.nlogo.core.BreedIdentifierHandler$TurtlePrimitive",{BH:1,d:1,Iz:1,t:1,q:1,l:1,i:1});function dg(){this.yl=this.Gg=this.ke=this.Pd=null;this.a=!1}dg.prototype=new l;dg.prototype.constructor=dg;c=dg.prototype;c.u=function(){return"UndirectedLinkPrimitive"};c.vx=function(a){return a.Lf};c.v=function(){return 3};
+c.o=function(a){return this===a?!0:Lva(a)?this.Pd===a.Pd&&this.ke===a.ke?this.Gg===a.Gg:!1:!1};c.w=function(a){switch(a){case 0:return this.Pd;case 1:return this.ke;case 2:return this.Gg;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.qy=function(a){this.yl=a;this.a=!0};c.py=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/BreedIdentifierHandler.scala: 138");return this.yl};
+c.vd=function(a,b,d){this.Pd=a;this.ke=b;this.Gg=d;Pb(this);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.Wu=function(a){return!a.Ng};function Lva(a){return!!(a&&a.$classData&&a.$classData.n.CH)}c.$classData=g({CH:0},!1,"org.nlogo.core.BreedIdentifierHandler$UndirectedLinkPrimitive",{CH:1,d:1,Iz:1,t:1,q:1,l:1,i:1});function Y3(){this.xc=null;this.gb=this.Ma=this.hb=this.Sa=0;this.ab=null;this.To=!1;this.so=this.an=null;this.Io=!1}Y3.prototype=new l;
+Y3.prototype.constructor=Y3;c=Y3.prototype;c.u=function(){return"Button"};c.v=function(){return 10};c.o=function(a){if(this===a)return!0;if(Vt(a)){var b=this.xc,d=a.xc;(null===b?null===d:b.o(d))&&this.Sa===a.Sa&&this.hb===a.hb&&this.Ma===a.Ma&&this.gb===a.gb?(b=this.ab,d=a.ab,b=null===b?null===d:b.o(d)):b=!1;b&&this.To===a.To&&this.an===a.an?(b=this.so,d=a.so,b=null===b?null===d:b.o(d)):b=!1;return b?this.Io===a.Io:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.xc;case 1:return this.Sa;case 2:return this.hb;case 3:return this.Ma;case 4:return this.gb;case 5:return this.ab;case 6:return this.To;case 7:return this.an;case 8:return this.so;case 9:return this.Io;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function cqa(a,b,d,e,f,h,k,p,t,x){var E=new Y3;E.xc=a;E.Sa=b;E.hb=d;E.Ma=e;E.gb=f;E.ab=h;E.To=k;E.an=p;E.so=t;E.Io=x;return E}
+c.dm=function(a){var b=this.xc;a=b.z()?F():(new J).j(a.y(b.X()));return cqa(a,this.Sa,this.hb,this.Ma,this.gb,this.ab,this.To,this.an,this.so,this.Io)};c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.xc)),a=V().da(a,this.Sa),a=V().da(a,this.hb),a=V().da(a,this.Ma),a=V().da(a,this.gb),a=V().da(a,OD(V(),this.ab)),a=V().da(a,this.To?1231:1237),a=V().da(a,OD(V(),this.an)),a=V().da(a,OD(V(),this.so)),a=V().da(a,this.Io?1231:1237);return V().pb(a,10)};c.x=function(){return Y(new Z,this)};
+function Vt(a){return!!(a&&a.$classData&&a.$classData.n.DH)}var dqa=g({DH:0},!1,"org.nlogo.core.Button",{DH:1,d:1,Qm:1,t:1,q:1,l:1,i:1});Y3.prototype.$classData=dqa;function Dg(){this.Y=null}Dg.prototype=new l;Dg.prototype.constructor=Dg;c=Dg.prototype;c.u=function(){return"ChooseableBoolean"};c.Hu=function(a){this.Y=a;return this};c.Pl=function(){return this.Y};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.Kz?this.Y===a.Y:!1};
+c.w=function(a){switch(a){case 0:return this.Y;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({Kz:0},!1,"org.nlogo.core.ChooseableBoolean",{Kz:1,d:1,Jz:1,t:1,q:1,l:1,i:1});function Cg(){this.Y=null}Cg.prototype=new l;Cg.prototype.constructor=Cg;c=Cg.prototype;c.u=function(){return"ChooseableDouble"};c.Pl=function(){return this.Y};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.Lz?HF(cn(),this.Y,a.Y):!1};c.w=function(a){switch(a){case 0:return this.Y;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.hE=function(a){this.Y=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({Lz:0},!1,"org.nlogo.core.ChooseableDouble",{Lz:1,d:1,Jz:1,t:1,q:1,l:1,i:1});function Z3(){this.Y=null}Z3.prototype=new l;Z3.prototype.constructor=Z3;c=Z3.prototype;
+c.u=function(){return"ChooseableList"};c.Pl=function(){return this.Y};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.Mz){var b=this.Y;a=a.Y;return null===b?null===a:$2(b,a)}return!1};function Lba(a){var b=new Z3;b.Y=a;return b}c.w=function(a){switch(a){case 0:return this.Y;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({Mz:0},!1,"org.nlogo.core.ChooseableList",{Mz:1,d:1,Jz:1,t:1,q:1,l:1,i:1});function Bg(){this.Y=null}Bg.prototype=new l;Bg.prototype.constructor=Bg;c=Bg.prototype;c.u=function(){return"ChooseableString"};c.Pl=function(){return this.Y};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.Nz?this.Y===a.Y:!1};c.w=function(a){switch(a){case 0:return this.Y;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.c=function(a){this.Y=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({Nz:0},!1,"org.nlogo.core.ChooseableString",{Nz:1,d:1,Jz:1,t:1,q:1,l:1,i:1});function KO(){this.wa=null}KO.prototype=new l;KO.prototype.constructor=KO;c=KO.prototype;c.u=function(){return"ClosedLambdaVariable"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.EH?this.wa===a.wa:!1};
+c.w=function(a){switch(a){case 0:return this.wa;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.c=function(a){this.wa=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({EH:0},!1,"org.nlogo.core.ClosedLambdaVariable",{EH:1,d:1,WZ:1,t:1,q:1,l:1,i:1});function JO(){this.Zc=null}JO.prototype=new l;JO.prototype.constructor=JO;c=JO.prototype;c.u=function(){return"ClosedLet"};c.v=function(){return 1};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.FH){var b=this.Zc;a=a.Zc;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Zc;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.As=function(a){this.Zc=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({FH:0},!1,"org.nlogo.core.ClosedLet",{FH:1,d:1,WZ:1,t:1,q:1,l:1,i:1});function hG(){this.Va=null}hG.prototype=new M_;
+hG.prototype.constructor=hG;
+function Nva(a,b,d){if(null!==b){var e=b.fb;if("boolean"===typeof e)return""+!!e}if(null!==b&&(e=b.fb,"number"===typeof e))return a=+e,d=Ra(),b=SF(d,a),d=d.Rb,IF(Ra(),b,d)===a&&-2097152<=d&&(2097152===d?0===b:2097152>d)?yU(Ra(),b,d):""+a;if(null!==b&&(e=b.fb,Pa(e)))throw(new Ne).c("java.lang.Integer: "+e);if(null!==b){var e=b.fb,f=!!b.Eb;if(Ag(e))return f?'"'+Kg(Lg(),e)+'"':e}if(null!==b&&(e=b.fb,rh()===e))return"nobody";if(null!==b){var h=b.fb,e=!!b.Eb,f=!!b.tf;if(Eg(h))return a=a.Va,b=gk(h.uc),
+waa(a,b,e,f)}return d.y(b)}hG.prototype.Ya=function(a){a:if(null!==a&&"boolean"===typeof a.fb||null!==a&&"number"===typeof a.fb||null!==a&&Pa(a.fb)||null!==a&&Ag(a.fb))a=!0;else{if(null!==a){var b=a.fb;if(rh()===b){a=!0;break a}}a=null!==a&&Eg(a.fb)?!0:!1}return a};hG.prototype.eb=function(a,b){return Nva(this,a,b)};hG.prototype.$classData=g({e_:0},!1,"org.nlogo.core.Dump$$anonfun$dumpObject$1",{e_:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function $3(){}$3.prototype=new l;$3.prototype.constructor=$3;c=$3.prototype;
+c.b=function(){return this};c.u=function(){return"Horizontal"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Horizontal"};c.r=function(){return-913872828};c.x=function(){return Y(new Z,this)};c.$classData=g({i_:0},!1,"org.nlogo.core.Horizontal$",{i_:1,d:1,KH:1,t:1,q:1,l:1,i:1});var Ova=void 0;function Dqa(){Ova||(Ova=(new $3).b());return Ova}function T1(){}T1.prototype=new M_;T1.prototype.constructor=T1;c=T1.prototype;c.wq=function(a){return mR(a)};c.pq=function(){return this};
+c.Pp=function(a,b){return mR(a)?a:b.y(a)};c.Ya=function(a){return this.wq(a)};c.eb=function(a,b){return this.Pp(a,b)};c.$classData=g({o_:0},!1,"org.nlogo.core.Model$$anonfun$1",{o_:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function V1(){}V1.prototype=new M_;V1.prototype.constructor=V1;c=V1.prototype;c.wq=function(a){return!!(a&&a.$classData&&a.$classData.n.rt)};c.pq=function(){return this};c.Pp=function(a,b){return a&&a.$classData&&a.$classData.n.rt?a:b.y(a)};c.Ya=function(a){return this.wq(a)};
+c.eb=function(a,b){return this.Pp(a,b)};c.$classData=g({p_:0},!1,"org.nlogo.core.Model$$anonfun$interfaceGlobalCommands$2",{p_:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function R1(){}R1.prototype=new M_;R1.prototype.constructor=R1;c=R1.prototype;c.wq=function(a){return!!(a&&a.$classData&&a.$classData.n.qt)};c.pq=function(){return this};c.Pp=function(a,b){return a&&a.$classData&&a.$classData.n.qt?a:b.y(a)};c.Ya=function(a){return this.wq(a)};c.eb=function(a,b){return this.Pp(a,b)};
+c.$classData=g({q_:0},!1,"org.nlogo.core.Model$$anonfun$interfaceGlobals$2",{q_:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function S1(){}S1.prototype=new M_;S1.prototype.constructor=S1;c=S1.prototype;c.wq=function(a){return mR(a)};c.pq=function(){return this};c.Pp=function(a,b){return mR(a)?a:b.y(a)};c.Ya=function(a){return this.wq(a)};c.eb=function(a,b){return this.Pp(a,b)};c.$classData=g({r_:0},!1,"org.nlogo.core.Model$$anonfun$view$1",{r_:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});
+function a4(){this.xc=null;this.gb=this.Ma=this.hb=this.Sa=0;this.ab=null;this.Nd=this.Ph=0}a4.prototype=new l;a4.prototype.constructor=a4;c=a4.prototype;c.u=function(){return"Monitor"};c.v=function(){return 8};c.o=function(a){if(this===a)return!0;if(Xt(a)){var b=this.xc,d=a.xc;(null===b?null===d:b.o(d))&&this.Sa===a.Sa&&this.hb===a.hb&&this.Ma===a.Ma&&this.gb===a.gb?(b=this.ab,d=a.ab,b=null===b?null===d:b.o(d)):b=!1;return b&&this.Ph===a.Ph?this.Nd===a.Nd:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.xc;case 1:return this.Sa;case 2:return this.hb;case 3:return this.Ma;case 4:return this.gb;case 5:return this.ab;case 6:return this.Ph;case 7:return this.Nd;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function qqa(a,b,d,e,f,h,k,p){var t=new a4;t.xc=a;t.Sa=b;t.hb=d;t.Ma=e;t.gb=f;t.ab=h;t.Ph=k;t.Nd=p;return t}
+c.dm=function(a){var b=this.xc;a=b.z()?F():(new J).j(a.y(b.X()));return qqa(a,this.Sa,this.hb,this.Ma,this.gb,this.ab,this.Ph,this.Nd)};c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.xc)),a=V().da(a,this.Sa),a=V().da(a,this.hb),a=V().da(a,this.Ma),a=V().da(a,this.gb),a=V().da(a,OD(V(),this.ab)),a=V().da(a,this.Ph),a=V().da(a,this.Nd);return V().pb(a,8)};c.x=function(){return Y(new Z,this)};function Xt(a){return!!(a&&a.$classData&&a.$classData.n.OH)}
+var rqa=g({OH:0},!1,"org.nlogo.core.Monitor",{OH:1,d:1,Qm:1,t:1,q:1,l:1,i:1});a4.prototype.$classData=rqa;function nV(){this.Y=0;this.mi=null}nV.prototype=new l;nV.prototype.constructor=nV;c=nV.prototype;c.u=function(){return"NumericInput"};c.v=function(){return 2};c.o=function(a){return this===a?!0:SX(a)?this.Y===a.Y?this.mi===a.mi:!1:!1};c.aT=function(){return""+this.Y};c.w=function(a){switch(a){case 0:return this.Y;case 1:return this.mi;default:throw(new P).c(""+a);}};
+c.k=function(){return X(W(),this)};c.pe=function(){return this.mi.Qj()};c.r=function(){var a=-889275714,a=V().da(a,RF(V(),this.Y)),a=V().da(a,OD(V(),this.mi));return V().pb(a,2)};c.x=function(){return Y(new Z,this)};function qV(a,b,d){a.Y=b;a.mi=d;return a}function SX(a){return!!(a&&a.$classData&&a.$classData.n.PH)}c.$classData=g({PH:0},!1,"org.nlogo.core.NumericInput",{PH:1,d:1,OZ:1,t:1,q:1,l:1,i:1});function b4(){this.ab=null;this.a=!1}b4.prototype=new l;b4.prototype.constructor=b4;c=b4.prototype;
+c.b=function(){this.ab="Color";this.a=!0;return this};c.u=function(){return"ColorLabel"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"ColorLabel"};c.r=function(){return-1029938831};c.x=function(){return Y(new Z,this)};c.Qj=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/InputBox.scala: 31");return this.ab};
+c.$classData=g({y_:0},!1,"org.nlogo.core.NumericInput$ColorLabel$",{y_:1,d:1,A_:1,t:1,q:1,l:1,i:1});var Pva=void 0;function pV(){Pva||(Pva=(new b4).b());return Pva}function c4(){this.ab=null;this.a=!1}c4.prototype=new l;c4.prototype.constructor=c4;c=c4.prototype;c.b=function(){this.ab="Number";this.a=!0;return this};c.u=function(){return"NumberLabel"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"NumberLabel"};c.r=function(){return-1907359477};
+c.x=function(){return Y(new Z,this)};c.Qj=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/InputBox.scala: 30");return this.ab};c.$classData=g({z_:0},!1,"org.nlogo.core.NumericInput$NumberLabel$",{z_:1,d:1,A_:1,t:1,q:1,l:1,i:1});var Qva=void 0;function oV(){Qva||(Qva=(new c4).b());return Qva}function d4(){this.Nd=this.gb=this.Ma=this.hb=this.Sa=0}d4.prototype=new l;d4.prototype.constructor=d4;c=d4.prototype;
+c.u=function(){return"Output"};c.v=function(){return 5};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.Sz?this.Sa===a.Sa&&this.hb===a.hb&&this.Ma===a.Ma&&this.gb===a.gb&&this.Nd===a.Nd:!1};c.w=function(a){switch(a){case 0:return this.Sa;case 1:return this.hb;case 2:return this.Ma;case 3:return this.gb;case 4:return this.Nd;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function sqa(a,b,d,e,f){var h=new d4;h.Sa=a;h.hb=b;h.Ma=d;h.gb=e;h.Nd=f;return h}c.dm=function(){return this};
+c.r=function(){var a=-889275714,a=V().da(a,this.Sa),a=V().da(a,this.hb),a=V().da(a,this.Ma),a=V().da(a,this.gb),a=V().da(a,this.Nd);return V().pb(a,5)};c.x=function(){return Y(new Z,this)};var tqa=g({Sz:0},!1,"org.nlogo.core.Output",{Sz:1,d:1,Qm:1,t:1,q:1,l:1,i:1});d4.prototype.$classData=tqa;function vV(){this.ab=null;this.gb=this.Ma=this.hb=this.Sa=0;this.io=this.go=null;this.Ui=this.Vi=this.Si=this.Ti=0;this.xn=this.Zm=!1;this.Jn=this.tg=this.sg=null}vV.prototype=new l;
+vV.prototype.constructor=vV;function Aqa(a,b,d,e,f,h,k,p,t,x,E,S,U,ga,ma,va,Ia){a.ab=b;a.Sa=d;a.hb=e;a.Ma=f;a.gb=h;a.go=k;a.io=p;a.Ti=t;a.Si=x;a.Vi=E;a.Ui=S;a.Zm=U;a.xn=ga;a.sg=ma;a.tg=va;a.Jn=Ia;return a}c=vV.prototype;c.u=function(){return"Plot"};c.v=function(){return 16};
+c.o=function(a){if(this===a)return!0;if(Pt(a)){var b=this.ab,d=a.ab;(null===b?null===d:b.o(d))&&this.Sa===a.Sa&&this.hb===a.hb&&this.Ma===a.Ma&&this.gb===a.gb?(b=this.go,d=a.go,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.io,d=a.io,b=null===b?null===d:b.o(d)):b=!1;if(b&&this.Ti===a.Ti&&this.Si===a.Si&&this.Vi===a.Vi&&this.Ui===a.Ui&&this.Zm===a.Zm&&this.xn===a.xn&&this.sg===a.sg&&this.tg===a.tg)return b=this.Jn,a=a.Jn,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.ab;case 1:return this.Sa;case 2:return this.hb;case 3:return this.Ma;case 4:return this.gb;case 5:return this.go;case 6:return this.io;case 7:return this.Ti;case 8:return this.Si;case 9:return this.Vi;case 10:return this.Ui;case 11:return this.Zm;case 12:return this.xn;case 13:return this.sg;case 14:return this.tg;case 15:return this.Jn;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+function Rva(a,b){var d=b.y(a.sg),e=b.y(a.tg),f=a.Jn;b=function(a,b){return function(a){var d=b.y(a.sg),e=b.y(a.tg);return wqa(new uV,a.ab,a.rl,a.vl,a.Bb,a.jm,d,e)}}(a,b);var h=B().s;if(h===B().s)if(f===y())b=y();else{for(var h=f.$(),k=h=Ng(new Og,b(h),y()),f=f.aa();f!==y();)var p=f.$(),p=Ng(new Og,b(p),y()),k=k.Ia=p,f=f.aa();b=h}else{for(h=Mc(f,h);!f.z();)k=f.$(),h.Qa(b(k)),f=f.aa();b=h.Da()}return Aqa(new vV,a.ab,a.Sa,a.hb,a.Ma,a.gb,a.go,a.io,a.Ti,a.Si,a.Vi,a.Ui,a.Zm,a.xn,d,e,b)}
+c.dm=function(a){return Rva(this,a)};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.ab)),a=V().da(a,this.Sa),a=V().da(a,this.hb),a=V().da(a,this.Ma),a=V().da(a,this.gb),a=V().da(a,OD(V(),this.go)),a=V().da(a,OD(V(),this.io)),a=V().da(a,RF(V(),this.Ti)),a=V().da(a,RF(V(),this.Si)),a=V().da(a,RF(V(),this.Vi)),a=V().da(a,RF(V(),this.Ui)),a=V().da(a,this.Zm?1231:1237),a=V().da(a,this.xn?1231:1237),a=V().da(a,OD(V(),this.sg)),a=V().da(a,OD(V(),this.tg)),a=V().da(a,OD(V(),this.Jn));return V().pb(a,16)};
+c.x=function(){return Y(new Z,this)};function Pt(a){return!!(a&&a.$classData&&a.$classData.n.QH)}var zqa=g({QH:0},!1,"org.nlogo.core.Plot",{QH:1,d:1,Qm:1,t:1,q:1,l:1,i:1});vV.prototype.$classData=zqa;function Hi(){this.ho=0;this.tn=!1;this.Ak=null}Hi.prototype=new l;Hi.prototype.constructor=Hi;c=Hi.prototype;c.u=function(){return"LinkLine"};c.tE=function(){return this.tn};c.v=function(){return 3};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.cI&&this.ho===a.ho&&this.tn===a.tn){var b=this.Ak;a=a.Ak;return null===b?null===a:b.o(a)}return!1};c.tG=function(){return this.ho};c.w=function(a){switch(a){case 0:return this.ho;case 1:return this.tn;case 2:return this.Ak;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.YC=function(){return this.Ak};
+c.r=function(){var a=-889275714,a=V().da(a,RF(V(),this.ho)),a=V().da(a,this.tn?1231:1237),a=V().da(a,OD(V(),this.Ak));return V().pb(a,3)};c.x=function(){return Y(new Z,this)};c.yu=function(a,b,d){this.ho=a;this.tn=b;this.Ak=d;return this};c.$classData=g({cI:0},!1,"org.nlogo.core.ShapeParser$LinkLine",{cI:1,d:1,H_:1,t:1,q:1,l:1,i:1});function rV(){this.mi=this.Y=null;this.Dq=!1}rV.prototype=new l;rV.prototype.constructor=rV;c=rV.prototype;c.u=function(){return"StringInput"};c.v=function(){return 3};
+c.o=function(a){return this===a?!0:TX(a)?this.Y===a.Y&&this.mi===a.mi?this.Dq===a.Dq:!1:!1};c.aT=function(){var a=oo();return $b(a,this.Y,!1,!1)};c.w=function(a){switch(a){case 0:return this.Y;case 1:return this.mi;case 2:return this.Dq;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.pe=function(){return this.mi.Qj()};function nqa(a,b,d,e){a.Y=b;a.mi=d;a.Dq=e;return a}
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.Y)),a=V().da(a,OD(V(),this.mi)),a=V().da(a,this.Dq?1231:1237);return V().pb(a,3)};c.x=function(){return Y(new Z,this)};function TX(a){return!!(a&&a.$classData&&a.$classData.n.jI)}c.$classData=g({jI:0},!1,"org.nlogo.core.StringInput",{jI:1,d:1,OZ:1,t:1,q:1,l:1,i:1});function e4(){this.ab=null;this.a=!1}e4.prototype=new l;e4.prototype.constructor=e4;c=e4.prototype;c.b=function(){this.ab="String (commands)";this.a=!0;return this};c.u=function(){return"CommandLabel"};
+c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"CommandLabel"};c.r=function(){return 2102450825};c.x=function(){return Y(new Z,this)};c.Qj=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/InputBox.scala: 56");return this.ab};c.$classData=g({Q_:0},!1,"org.nlogo.core.StringInput$CommandLabel$",{Q_:1,d:1,kI:1,t:1,q:1,l:1,i:1});var Sva=void 0;
+function mqa(){Sva||(Sva=(new e4).b());return Sva}function f4(){this.ab=null;this.a=!1}f4.prototype=new l;f4.prototype.constructor=f4;c=f4.prototype;c.b=function(){this.ab="String (reporter)";this.a=!0;return this};c.u=function(){return"ReporterLabel"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"ReporterLabel"};c.r=function(){return 1026604659};c.x=function(){return Y(new Z,this)};
+c.Qj=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/InputBox.scala: 55");return this.ab};c.$classData=g({R_:0},!1,"org.nlogo.core.StringInput$ReporterLabel$",{R_:1,d:1,kI:1,t:1,q:1,l:1,i:1});var Tva=void 0;function lqa(){Tva||(Tva=(new f4).b());return Tva}function g4(){this.ab=null;this.a=!1}g4.prototype=new l;g4.prototype.constructor=g4;c=g4.prototype;c.b=function(){this.ab="String";this.a=!0;return this};
+c.u=function(){return"StringLabel"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"StringLabel"};c.r=function(){return 139409731};c.x=function(){return Y(new Z,this)};c.Qj=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/InputBox.scala: 54");return this.ab};c.$classData=g({S_:0},!1,"org.nlogo.core.StringInput$StringLabel$",{S_:1,d:1,kI:1,t:1,q:1,l:1,i:1});
+var Uva=void 0;function kqa(){Uva||(Uva=(new g4).b());return Uva}function h4(){this.Ff=this.Dl=null;this.Ng=this.Og=!1}h4.prototype=new l;h4.prototype.constructor=h4;c=h4.prototype;c.u=function(){return"Breed"};c.v=function(){return 4};c.o=function(a){if(this===a)return!0;if(Eo(a)){var b=this.Dl,d=a.Dl;(null===b?null===d:b.o(d))?(b=this.Ff,d=a.Ff,b=null===b?null===d:b.o(d)):b=!1;return b&&this.Og===a.Og?this.Ng===a.Ng:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.Dl;case 1:return this.Ff;case 2:return this.Og;case 3:return this.Ng;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function yma(a,b,d,e){var f=new h4;f.Dl=a;f.Ff=b;f.Og=d;f.Ng=e;return f}c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.Dl)),a=V().da(a,OD(V(),this.Ff)),a=V().da(a,this.Og?1231:1237),a=V().da(a,this.Ng?1231:1237);return V().pb(a,4)};c.x=function(){return Y(new Z,this)};
+function Eo(a){return!!(a&&a.$classData&&a.$classData.n.lI)}c.$classData=g({lI:0},!1,"org.nlogo.core.StructureDeclarations$Breed",{lI:1,d:1,Nw:1,t:1,q:1,l:1,i:1});function CP(){this.Of=this.g=null}CP.prototype=new l;CP.prototype.constructor=CP;c=CP.prototype;c.RD=function(a,b){this.g=a;this.Of=b;return this};c.u=function(){return"Extensions"};c.v=function(){return 2};
+c.o=function(a){if(this===a)return!0;if(No(a)){var b=this.g,d=a.g;if(null===b?null===d:b.o(d))return b=this.Of,a=a.Of,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.g;case 1:return this.Of;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function No(a){return!!(a&&a.$classData&&a.$classData.n.mI)}
+c.$classData=g({mI:0},!1,"org.nlogo.core.StructureDeclarations$Extensions",{mI:1,d:1,Nw:1,t:1,q:1,l:1,i:1});function GP(){this.Of=this.g=null}GP.prototype=new l;GP.prototype.constructor=GP;c=GP.prototype;c.RD=function(a,b){this.g=a;this.Of=b;return this};c.u=function(){return"Includes"};c.v=function(){return 2};c.o=function(a){if(this===a)return!0;if(Oo(a)){var b=this.g,d=a.g;if(null===b?null===d:b.o(d))return b=this.Of,a=a.Of,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.g;case 1:return this.Of;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Oo(a){return!!(a&&a.$classData&&a.$classData.n.oI)}c.$classData=g({oI:0},!1,"org.nlogo.core.StructureDeclarations$Includes",{oI:1,d:1,Nw:1,t:1,q:1,l:1,i:1});function IP(){this.wa=null;this.sn=!1;this.si=this.pn=null}IP.prototype=new l;IP.prototype.constructor=IP;c=IP.prototype;c.u=function(){return"Procedure"};
+c.v=function(){return 4};c.o=function(a){if(this===a)return!0;if(Po(a)){var b=this.wa,d=a.wa;(null===b?null===d:b.o(d))&&this.sn===a.sn?(b=this.pn,d=a.pn,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.si,a=a.si,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.wa;case 1:return this.sn;case 2:return this.pn;case 3:return this.si;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.wa)),a=V().da(a,this.sn?1231:1237),a=V().da(a,OD(V(),this.pn)),a=V().da(a,OD(V(),this.si));return V().pb(a,4)};c.x=function(){return Y(new Z,this)};function Po(a){return!!(a&&a.$classData&&a.$classData.n.pI)}c.$classData=g({pI:0},!1,"org.nlogo.core.StructureDeclarations$Procedure",{pI:1,d:1,Nw:1,t:1,q:1,l:1,i:1});function xP(){this.Of=this.Fg=null}xP.prototype=new l;xP.prototype.constructor=xP;c=xP.prototype;c.u=function(){return"Variables"};
+c.v=function(){return 2};c.o=function(a){if(this===a)return!0;if(Mo(a)){var b=this.Fg,d=a.Fg;if(null===b?null===d:b.o(d))return b=this.Of,a=a.Of,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Fg;case 1:return this.Of;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Mo(a){return!!(a&&a.$classData&&a.$classData.n.qI)}
+c.$classData=g({qI:0},!1,"org.nlogo.core.StructureDeclarations$Variables",{qI:1,d:1,Nw:1,t:1,q:1,l:1,i:1});function i4(){this.ab=null;this.Bb=this.Nd=this.gb=this.Ma=this.hb=this.Sa=0;this.pr=!1}i4.prototype=new l;i4.prototype.constructor=i4;c=i4.prototype;c.u=function(){return"TextBox"};c.v=function(){return 8};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.$z){var b=this.ab,d=a.ab;return(null===b?null===d:b.o(d))&&this.Sa===a.Sa&&this.hb===a.hb&&this.Ma===a.Ma&&this.gb===a.gb&&this.Nd===a.Nd&&this.Bb===a.Bb?this.pr===a.pr:!1}return!1};c.w=function(a){switch(a){case 0:return this.ab;case 1:return this.Sa;case 2:return this.hb;case 3:return this.Ma;case 4:return this.gb;case 5:return this.Nd;case 6:return this.Bb;case 7:return this.pr;default:throw(new P).c(""+a);}};
+c.k=function(){return X(W(),this)};function Hqa(a,b,d,e,f,h,k,p){var t=new i4;t.ab=a;t.Sa=b;t.hb=d;t.Ma=e;t.gb=f;t.Nd=h;t.Bb=k;t.pr=p;return t}c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.ab)),a=V().da(a,this.Sa),a=V().da(a,this.hb),a=V().da(a,this.Ma),a=V().da(a,this.gb),a=V().da(a,this.Nd),a=V().da(a,RF(V(),this.Bb)),a=V().da(a,this.pr?1231:1237);return V().pb(a,8)};c.dm=function(){return this};c.x=function(){return Y(new Z,this)};
+var Iqa=g({$z:0},!1,"org.nlogo.core.TextBox",{$z:1,d:1,Qm:1,t:1,q:1,l:1,i:1});i4.prototype.$classData=Iqa;function um(){this.sa=this.Y=this.kb=this.Yb=null}um.prototype=new l;um.prototype.constructor=um;function tm(a,b,d,e,f){a.Yb=b;a.kb=d;a.Y=e;a.sa=f;return a}c=um.prototype;c.u=function(){return"Token"};c.v=function(){return 3};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.tI?this.Yb===a.Yb&&this.kb===a.kb?bn(cn(),this.Y,a.Y):!1:!1};
+c.w=function(a){switch(a){case 0:return this.Yb;case 1:return this.kb;case 2:return this.Y;default:throw(new P).c(""+a);}};function ih(a,b,d,e){a=tm(new um,d,e,b,a.sa);b.L(a);return a}c.Oc=function(){return this.sa};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};var Bda=g({tI:0},!1,"org.nlogo.core.Token",{tI:1,d:1,no:1,t:1,q:1,l:1,i:1});um.prototype.$classData=Bda;function j4(){}j4.prototype=new l;j4.prototype.constructor=j4;c=j4.prototype;
+c.b=function(){return this};c.u=function(){return"Bad"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Bad"};c.r=function(){return 66533};c.x=function(){return Y(new Z,this)};c.$classData=g({X_:0},!1,"org.nlogo.core.TokenType$Bad$",{X_:1,d:1,vi:1,t:1,q:1,l:1,i:1});var Vva=void 0;function ym(){Vva||(Vva=(new j4).b());return Vva}function fm(){}fm.prototype=new l;fm.prototype.constructor=fm;c=fm.prototype;c.b=function(){return this};c.u=function(){return"CloseBrace"};
+c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"CloseBrace"};c.r=function(){return-94940357};c.x=function(){return Y(new Z,this)};c.$classData=g({Y_:0},!1,"org.nlogo.core.TokenType$CloseBrace$",{Y_:1,d:1,vi:1,t:1,q:1,l:1,i:1});var em=void 0;function k4(){}k4.prototype=new l;k4.prototype.constructor=k4;c=k4.prototype;c.b=function(){return this};c.u=function(){return"CloseBracket"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"CloseBracket"};
+c.r=function(){return-1043360848};c.x=function(){return Y(new Z,this)};c.$classData=g({Z_:0},!1,"org.nlogo.core.TokenType$CloseBracket$",{Z_:1,d:1,vi:1,t:1,q:1,l:1,i:1});var Wva=void 0;function lm(){Wva||(Wva=(new k4).b());return Wva}function l4(){}l4.prototype=new l;l4.prototype.constructor=l4;c=l4.prototype;c.b=function(){return this};c.u=function(){return"CloseParen"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"CloseParen"};c.r=function(){return-82501102};
+c.x=function(){return Y(new Z,this)};c.$classData=g({$_:0},!1,"org.nlogo.core.TokenType$CloseParen$",{$_:1,d:1,vi:1,t:1,q:1,l:1,i:1});var Xva=void 0;function jm(){Xva||(Xva=(new l4).b());return Xva}function dm(){}dm.prototype=new l;dm.prototype.constructor=dm;c=dm.prototype;c.b=function(){return this};c.u=function(){return"Comma"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Comma"};c.r=function(){return 65290933};c.x=function(){return Y(new Z,this)};
+c.$classData=g({a0:0},!1,"org.nlogo.core.TokenType$Comma$",{a0:1,d:1,vi:1,t:1,q:1,l:1,i:1});var cm=void 0;function m4(){}m4.prototype=new l;m4.prototype.constructor=m4;c=m4.prototype;c.b=function(){return this};c.u=function(){return"Command"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Command"};c.r=function(){return-1679919317};c.x=function(){return Y(new Z,this)};c.$classData=g({b0:0},!1,"org.nlogo.core.TokenType$Command$",{b0:1,d:1,vi:1,t:1,q:1,l:1,i:1});
+var Yva=void 0;function ag(){Yva||(Yva=(new m4).b());return Yva}function n4(){}n4.prototype=new l;n4.prototype.constructor=n4;c=n4.prototype;c.b=function(){return this};c.u=function(){return"Comment"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Comment"};c.r=function(){return-1679915457};c.x=function(){return Y(new Z,this)};c.$classData=g({c0:0},!1,"org.nlogo.core.TokenType$Comment$",{c0:1,d:1,vi:1,t:1,q:1,l:1,i:1});var Zva=void 0;
+function nm(){Zva||(Zva=(new n4).b());return Zva}function o4(){}o4.prototype=new l;o4.prototype.constructor=o4;c=o4.prototype;c.b=function(){return this};c.u=function(){return"Eof"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Eof"};c.r=function(){return 69852};c.x=function(){return Y(new Z,this)};c.$classData=g({d0:0},!1,"org.nlogo.core.TokenType$Eof$",{d0:1,d:1,vi:1,t:1,q:1,l:1,i:1});var $va=void 0;function Bc(){$va||($va=(new o4).b());return $va}
+function p4(){}p4.prototype=new l;p4.prototype.constructor=p4;c=p4.prototype;c.b=function(){return this};c.u=function(){return"Extension"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Extension"};c.r=function(){return 1391410207};c.x=function(){return Y(new Z,this)};c.$classData=g({e0:0},!1,"org.nlogo.core.TokenType$Extension$",{e0:1,d:1,vi:1,t:1,q:1,l:1,i:1});var awa=void 0;function Wca(){awa||(awa=(new p4).b());return awa}function q4(){}q4.prototype=new l;
+q4.prototype.constructor=q4;c=q4.prototype;c.b=function(){return this};c.u=function(){return"Ident"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Ident"};c.r=function(){return 70496720};c.x=function(){return Y(new Z,this)};c.$classData=g({f0:0},!1,"org.nlogo.core.TokenType$Ident$",{f0:1,d:1,vi:1,t:1,q:1,l:1,i:1});var bwa=void 0;function mm(){bwa||(bwa=(new q4).b());return bwa}function r4(){}r4.prototype=new l;r4.prototype.constructor=r4;c=r4.prototype;
+c.b=function(){return this};c.u=function(){return"Keyword"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Keyword"};c.r=function(){return 850245065};c.x=function(){return Y(new Z,this)};c.$classData=g({g0:0},!1,"org.nlogo.core.TokenType$Keyword$",{g0:1,d:1,vi:1,t:1,q:1,l:1,i:1});var cwa=void 0;function lP(){cwa||(cwa=(new r4).b());return cwa}function s4(){}s4.prototype=new l;s4.prototype.constructor=s4;c=s4.prototype;c.b=function(){return this};c.u=function(){return"Literal"};
+c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Literal"};c.r=function(){return 1847113871};c.x=function(){return Y(new Z,this)};c.$classData=g({h0:0},!1,"org.nlogo.core.TokenType$Literal$",{h0:1,d:1,vi:1,t:1,q:1,l:1,i:1});var dwa=void 0;function Bm(){dwa||(dwa=(new s4).b());return dwa}function t4(){}t4.prototype=new l;t4.prototype.constructor=t4;c=t4.prototype;c.b=function(){return this};c.u=function(){return"OpenBrace"};c.v=function(){return 0};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"OpenBrace"};c.r=function(){return-771509783};c.x=function(){return Y(new Z,this)};c.$classData=g({i0:0},!1,"org.nlogo.core.TokenType$OpenBrace$",{i0:1,d:1,vi:1,t:1,q:1,l:1,i:1});var ewa=void 0;function Kca(){ewa||(ewa=(new t4).b());return ewa}function u4(){}u4.prototype=new l;u4.prototype.constructor=u4;c=u4.prototype;c.b=function(){return this};c.u=function(){return"OpenBracket"};c.v=function(){return 0};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"OpenBracket"};c.r=function(){return 1608449758};c.x=function(){return Y(new Z,this)};c.$classData=g({j0:0},!1,"org.nlogo.core.TokenType$OpenBracket$",{j0:1,d:1,vi:1,t:1,q:1,l:1,i:1});var fwa=void 0;function km(){fwa||(fwa=(new u4).b());return fwa}function v4(){}v4.prototype=new l;v4.prototype.constructor=v4;c=v4.prototype;c.b=function(){return this};c.u=function(){return"OpenParen"};c.v=function(){return 0};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"OpenParen"};c.r=function(){return-759070528};c.x=function(){return Y(new Z,this)};c.$classData=g({k0:0},!1,"org.nlogo.core.TokenType$OpenParen$",{k0:1,d:1,vi:1,t:1,q:1,l:1,i:1});var gwa=void 0;function im(){gwa||(gwa=(new v4).b());return gwa}function w4(){}w4.prototype=new l;w4.prototype.constructor=w4;c=w4.prototype;c.b=function(){return this};c.u=function(){return"Reporter"};c.v=function(){return 0};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Reporter"};c.r=function(){return-362395391};c.x=function(){return Y(new Z,this)};c.$classData=g({l0:0},!1,"org.nlogo.core.TokenType$Reporter$",{l0:1,d:1,vi:1,t:1,q:1,l:1,i:1});var hwa=void 0;function bg(){hwa||(hwa=(new w4).b());return hwa}function x4(){}x4.prototype=new bqa;x4.prototype.constructor=x4;c=x4.prototype;c.b=function(){aV.prototype.qb.call(this,0);return this};c.u=function(){return"Continuous"};c.v=function(){return 0};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Continuous"};c.r=function(){return-1922388177};c.x=function(){return Y(new Z,this)};c.$classData=g({n0:0},!1,"org.nlogo.core.UpdateMode$Continuous$",{n0:1,vI:1,d:1,l:1,i:1,t:1,q:1});var iwa=void 0;function Mqa(){iwa||(iwa=(new x4).b());return iwa}function y4(){}y4.prototype=new bqa;y4.prototype.constructor=y4;c=y4.prototype;c.b=function(){aV.prototype.qb.call(this,1);return this};c.u=function(){return"TickBased"};c.v=function(){return 0};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"TickBased"};c.r=function(){return 1899965430};c.x=function(){return Y(new Z,this)};c.$classData=g({o0:0},!1,"org.nlogo.core.UpdateMode$TickBased$",{o0:1,vI:1,d:1,l:1,i:1,t:1,q:1});var jwa=void 0;function Nqa(){jwa||(jwa=(new y4).b());return jwa}function z4(){}z4.prototype=new l;z4.prototype.constructor=z4;c=z4.prototype;c.b=function(){return this};c.u=function(){return"Vertical"};c.v=function(){return 0};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Vertical"};c.r=function(){return-1919497322};c.x=function(){return Y(new Z,this)};c.$classData=g({p0:0},!1,"org.nlogo.core.Vertical$",{p0:1,d:1,KH:1,t:1,q:1,l:1,i:1});var kwa=void 0;function Eqa(){kwa||(kwa=(new z4).b());return kwa}function zV(){this.gb=this.Ma=this.hb=this.Sa=0;this.hs=null;this.Nd=0;this.zp=null;this.cr=!1;this.jr=null;this.sm=this.vm=this.dq=0;this.Jm=!1;this.tm=this.wm=0;this.Km=!1;this.a=this.ym=0}zV.prototype=new l;
+zV.prototype.constructor=zV;c=zV.prototype;c.u=function(){return"View"};c.v=function(){return 10};function sga(a){if(0===(64&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Widget.scala: 133");return a.ym}
+c.o=function(a){if(this===a)return!0;if(mR(a)){if(this.Sa===a.Sa&&this.hb===a.hb&&this.Ma===a.Ma&&this.gb===a.gb)var b=this.hs,d=a.hs,b=null===b?null===d:b.o(d);else b=!1;b&&this.Nd===a.Nd&&this.zp===a.zp&&this.cr===a.cr?(b=this.jr,d=a.jr,b=null===b?null===d:b.o(d)):b=!1;return b?this.dq===a.dq:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.Sa;case 1:return this.hb;case 2:return this.Ma;case 3:return this.gb;case 4:return this.hs;case 5:return this.Nd;case 6:return this.zp;case 7:return this.cr;case 8:return this.jr;case 9:return this.dq;default:throw(new P).c(""+a);}};function oga(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Widget.scala: 125");return a.vm}c.k=function(){return X(W(),this)};
+function uga(a){if(0===(32&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Widget.scala: 131");return a.Km}function rga(a){if(0===(16&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Widget.scala: 130");return a.tm}
+function Jqa(a,b,d,e,f,h,k,p,t,x,E){a.Sa=b;a.hb=d;a.Ma=e;a.gb=f;a.hs=h;a.Nd=k;a.zp=p;a.cr=t;a.jr=x;a.dq=E;a.vm=h.vm;a.a=(1|a.a)<<24>>24;a.sm=h.sm;a.a=(2|a.a)<<24>>24;a.Jm=h.Jm;a.a=(4|a.a)<<24>>24;a.wm=h.wm;a.a=(8|a.a)<<24>>24;a.tm=h.tm;a.a=(16|a.a)<<24>>24;a.Km=h.Km;a.a=(32|a.a)<<24>>24;a.ym=h.ym;a.a=(64|a.a)<<24>>24;return a}c.dm=function(){return this};
+c.r=function(){var a=-889275714,a=V().da(a,this.Sa),a=V().da(a,this.hb),a=V().da(a,this.Ma),a=V().da(a,this.gb),a=V().da(a,OD(V(),this.hs)),a=V().da(a,this.Nd),a=V().da(a,OD(V(),this.zp)),a=V().da(a,this.cr?1231:1237),a=V().da(a,OD(V(),this.jr)),a=V().da(a,RF(V(),this.dq));return V().pb(a,10)};function pga(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Widget.scala: 126");return a.sm}
+function qga(a){if(0===(8&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Widget.scala: 129");return a.wm}c.x=function(){return Y(new Z,this)};function tga(a){if(0===(4&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Widget.scala: 127");return a.Jm}function mR(a){return!!(a&&a.$classData&&a.$classData.n.wI)}
+var Lqa=g({wI:0},!1,"org.nlogo.core.View",{wI:1,d:1,Qm:1,t:1,q:1,l:1,i:1});zV.prototype.$classData=Lqa;function tV(){this.Fb=null}tV.prototype=new l;tV.prototype.constructor=tV;c=tV.prototype;c.u=function(){return"BooleanLine"};c.v=function(){return 1};c.pi=function(a){return this.Lq(a)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.yI){var b=this.Fb;a=a.Fb;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Fb;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.cq=function(a){return a?"1":"0"};c.Qi=function(a){return"1"===a||"0"===a};c.Lq=function(a){return"1"===a};c.r=function(){return R(Q(),this)};c.Ja=function(a){this.Fb=a;return this};c.gi=function(a){return this.cq(!!a)};c.x=function(){return Y(new Z,this)};c.zh=function(){return this.Fb};c.$classData=g({yI:0},!1,"org.nlogo.core.model.BooleanLine",{yI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});
+function lV(){this.Fb=null}lV.prototype=new l;lV.prototype.constructor=lV;c=lV.prototype;c.u=function(){return"CharLine"};c.v=function(){return 1};c.pi=function(a){a=65535&(a.charCodeAt(0)|0);return(new Ke).Xa(a)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.zI){var b=this.Fb;a=a.Fb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Fb;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.Qi=function(a){return 1<=(a.length|0)};c.r=function(){return R(Q(),this)};c.Ja=function(a){this.Fb=a;return this};c.gi=function(a){return ba.String.fromCharCode(null===a?0:a.Y)};c.x=function(){return Y(new Z,this)};c.zh=function(){return this.Fb};c.$classData=g({zI:0},!1,"org.nlogo.core.model.CharLine",{zI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function wV(){this.Fb=null}wV.prototype=new l;wV.prototype.constructor=wV;c=wV.prototype;c.u=function(){return"DoubleLine"};c.v=function(){return 1};
+c.pi=function(a){a=(new Sb).c(a);return Hh(Ih(),a.R)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.AI){var b=this.Fb;a=a.Fb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Fb;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Qi=function(a){try{var b=(new Sb).c(a),d=Ih(),e=(new rA).j(Hh(d,b.R))}catch(f){if(a=Un(vg(),f),null!==a){b=nw(ow(),a);if(b.z())throw ug(vg(),a);a=b.X();e=(new qA).wd(a)}else throw f;}return e.$x()};
+c.r=function(){return R(Q(),this)};c.Ja=function(a){this.Fb=a;return this};c.gi=function(a){return""+ +a};c.x=function(){return Y(new Z,this)};c.zh=function(){return this.Fb};c.$classData=g({AI:0},!1,"org.nlogo.core.model.DoubleLine",{AI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function hV(){this.Fb=null}hV.prototype=new l;hV.prototype.constructor=hV;c=hV.prototype;c.u=function(){return"EscapedStringLine"};c.v=function(){return 1};c.pi=function(a){return qj(Lg(),a)};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.BI){var b=this.Fb;a=a.Fb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Fb;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Qi=function(){return!0};c.r=function(){return R(Q(),this)};c.Ja=function(a){this.Fb=a;return this};c.gi=function(a){return Kg(Lg(),a)};c.x=function(){return Y(new Z,this)};c.zh=function(){return this.Fb};
+c.$classData=g({BI:0},!1,"org.nlogo.core.model.EscapedStringLine",{BI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function dV(){this.Fb=null}dV.prototype=new l;dV.prototype.constructor=dV;c=dV.prototype;c.u=function(){return"IntLine"};c.v=function(){return 1};c.pi=function(a){a=(new Sb).c(a);return vi(ti(),a.R,10)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.CI){var b=this.Fb;a=a.Fb;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Fb;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Qi=function(a){try{var b=(new Sb).c(a),d=ti(),e=(new rA).j(vi(d,b.R,10))}catch(f){if(a=Un(vg(),f),null!==a){b=nw(ow(),a);if(b.z())throw ug(vg(),a);a=b.X();e=(new qA).wd(a)}else throw f;}return e.$x()};c.r=function(){return R(Q(),this)};c.Ja=function(a){this.Fb=a;return this};c.gi=function(a){return""+(a|0)};c.x=function(){return Y(new Z,this)};c.zh=function(){return this.Fb};
+c.$classData=g({CI:0},!1,"org.nlogo.core.model.IntLine",{CI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function yV(){this.Fb=null}yV.prototype=new l;yV.prototype.constructor=yV;c=yV.prototype;c.u=function(){return"InvertedBooleanLine"};c.v=function(){return 1};c.pi=function(a){return this.Lq(a)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.DI){var b=this.Fb;a=a.Fb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Fb;default:throw(new P).c(""+a);}};
+c.k=function(){return X(W(),this)};c.cq=function(a){return a?"0":"1"};c.Qi=function(a){return"0"===a||"1"===a};c.Lq=function(a){return"0"===a};c.r=function(){return R(Q(),this)};c.Ja=function(a){this.Fb=a;return this};c.gi=function(a){return this.cq(!!a)};c.x=function(){return Y(new Z,this)};c.zh=function(){return this.Fb};c.$classData=g({DI:0},!1,"org.nlogo.core.model.InvertedBooleanLine",{DI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function kV(){this.Bq=null}kV.prototype=new l;kV.prototype.constructor=kV;
+c=kV.prototype;c.u=function(){return"MapLine"};c.v=function(){return 1};c.pi=function(a){return wg(this.Bq,lwa(a)).X()};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.EI){var b=this.Bq;a=a.Bq;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Bq;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Qi=function(a){for(var b=this.Bq,d=dc(new ec,gc());!b.z();){var e=b.$();hc(d,e);b=b.aa()}return d.Oa.ib(a)};
+c.uq=function(a){this.Bq=a;return this};c.r=function(){return R(Q(),this)};c.gi=function(a){return wg(this.Bq,mwa(a)).X()};c.x=function(){return Y(new Z,this)};c.zh=function(){return F()};c.$classData=g({EI:0},!1,"org.nlogo.core.model.MapLine",{EI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function A4(){this.qG=null}A4.prototype=new M_;A4.prototype.constructor=A4;function mwa(a){var b=new A4;b.qG=a;return b}c=A4.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(bn(cn(),e,this.qG))return d}return b.y(a)};
+c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&(a=a.na(),bn(cn(),a,this.qG))?!0:!1};c.$classData=g({t0:0},!1,"org.nlogo.core.model.MapLine$$anonfun$format$7",{t0:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function B4(){this.GE=null}B4.prototype=new M_;B4.prototype.constructor=B4;c=B4.prototype;c.zc=function(a,b){if(null!==a){var d=a.na();if(a.ja()===this.GE)return d}return b.y(a)};function lwa(a){var b=new B4;b.GE=a;return b}c.Ya=function(a){return this.Bc(a)};
+c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&a.ja()===this.GE?!0:!1};c.$classData=g({u0:0},!1,"org.nlogo.core.model.MapLine$$anonfun$parse$6",{u0:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function fV(){this.er=this.Hq=null}fV.prototype=new l;fV.prototype.constructor=fV;c=fV.prototype;c.u=function(){return"OptionLine"};c.v=function(){return 2};c.pi=function(a){return this.Hq===a?F():(new J).j(this.er.pi(a))};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.FI&&this.Hq===a.Hq){var b=this.er;a=a.er;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Hq;case 1:return this.er;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Qi=function(a){return this.Hq===a||this.er.Qi(a)};c.r=function(){return R(Q(),this)};c.gi=function(a){if(F()===a)a=this.Hq;else if(Fk(a))a=this.er.gi(a.U);else throw(new q).j(a);return a};
+c.x=function(){return Y(new Z,this)};function eV(a,b){a.Hq="NIL";a.er=b;return a}c.zh=function(){return F()};c.$classData=g({FI:0},!1,"org.nlogo.core.model.OptionLine",{FI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function sV(){this.Fb=null}sV.prototype=new l;sV.prototype.constructor=sV;c=sV.prototype;c.u=function(){return"OptionalEscapedStringLine"};c.v=function(){return 1};c.pi=function(a){return"NIL"===a?"":qj(Lg(),a)};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.GI){var b=this.Fb;a=a.Fb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Fb;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Qi=function(a){if(null===a)throw(new ye).b();return""!==a};c.r=function(){return R(Q(),this)};c.Ja=function(a){this.Fb=a;return this};c.gi=function(a){if(null===a)throw(new ye).b();return""===a?"NIL":Kg(Lg(),a)};c.x=function(){return Y(new Z,this)};
+c.zh=function(){return this.Fb};c.$classData=g({GI:0},!1,"org.nlogo.core.model.OptionalEscapedStringLine",{GI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function jV(){this.nv=null}jV.prototype=new l;jV.prototype.constructor=jV;c=jV.prototype;c.u=function(){return"ReservedLine"};c.v=function(){return 1};c.pi=function(){};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.HI?this.nv===a.nv:!1};c.w=function(a){switch(a){case 0:return this.nv;default:throw(new P).c(""+a);}};
+c.k=function(){return X(W(),this)};c.Qi=function(){return!0};c.c=function(a){this.nv=a;return this};c.r=function(){return R(Q(),this)};c.gi=function(){return this.nv};c.x=function(){return Y(new Z,this)};c.zh=function(){return F()};c.$classData=g({HI:0},!1,"org.nlogo.core.model.ReservedLine",{HI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function cV(){this.Sk=null}cV.prototype=new l;cV.prototype.constructor=cV;c=cV.prototype;c.u=function(){return"SpecifiedLine"};c.v=function(){return 1};c.pi=function(){};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.II?this.Sk===a.Sk:!1};c.w=function(a){switch(a){case 0:return this.Sk;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Qi=function(a){return a===this.Sk};c.c=function(a){this.Sk=a;return this};c.r=function(){return R(Q(),this)};c.gi=function(){return this.Sk};c.x=function(){return Y(new Z,this)};c.zh=function(){return F()};
+c.$classData=g({II:0},!1,"org.nlogo.core.model.SpecifiedLine",{II:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function xV(){this.Fb=null}xV.prototype=new l;xV.prototype.constructor=xV;c=xV.prototype;c.u=function(){return"StringBooleanLine"};c.v=function(){return 1};c.pi=function(a){return this.Lq(a)};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.JI){var b=this.Fb;a=a.Fb;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Fb;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.cq=function(a){return a?"true":"false"};c.Qi=function(a){return"true"===a||"false"===a};c.Lq=function(a){return"true"===a};c.r=function(){return R(Q(),this)};c.Ja=function(a){this.Fb=a;return this};c.gi=function(a){return this.cq(!!a)};c.x=function(){return Y(new Z,this)};c.zh=function(){return this.Fb};
+c.$classData=g({JI:0},!1,"org.nlogo.core.model.StringBooleanLine",{JI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function gV(){this.Fb=null}gV.prototype=new l;gV.prototype.constructor=gV;c=gV.prototype;c.u=function(){return"StringLine"};c.v=function(){return 1};c.pi=function(a){return a};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.KI){var b=this.Fb;a=a.Fb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Fb;default:throw(new P).c(""+a);}};
+c.k=function(){return X(W(),this)};c.Qi=function(){return!0};c.r=function(){return R(Q(),this)};c.Ja=function(a){this.Fb=a;return this};c.gi=function(a){return a};c.x=function(){return Y(new Z,this)};c.zh=function(){return this.Fb};c.$classData=g({KI:0},!1,"org.nlogo.core.model.StringLine",{KI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function iV(){this.Fb=null}iV.prototype=new l;iV.prototype.constructor=iV;c=iV.prototype;c.u=function(){return"TNilBooleanLine"};c.v=function(){return 1};c.pi=function(a){return this.Lq(a)};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.LI){var b=this.Fb;a=a.Fb;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Fb;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.cq=function(a){return a?"T":"NIL"};c.Qi=function(a){return"T"===a||"NIL"===a};c.Lq=function(a){return"T"===a};c.r=function(){return R(Q(),this)};c.Ja=function(a){this.Fb=a;return this};c.gi=function(a){return this.cq(!!a)};
+c.x=function(){return Y(new Z,this)};c.zh=function(){return this.Fb};c.$classData=g({LI:0},!1,"org.nlogo.core.model.TNilBooleanLine",{LI:1,d:1,Dj:1,t:1,q:1,l:1,i:1});function Mm(){this.Or=null}Mm.prototype=new l;Mm.prototype.constructor=Mm;c=Mm.prototype;c.u=function(){return"BracketedArguments"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.jA){var b=this.Or;a=a.Or;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Or;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.G=function(a){this.Or=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.vk=function(){var a=this.Or,b=m(new n,function(){return function(a){return a.Yb.toUpperCase()}}(this)),d=r();return a.xa(b,d.s)};c.$classData=g({jA:0},!1,"org.nlogo.core.prim.Lambda$BracketedArguments",{jA:1,d:1,iA:1,t:1,q:1,l:1,i:1});function Qn(){this.uo=null}
+Qn.prototype=new l;Qn.prototype.constructor=Qn;c=Qn.prototype;c.u=function(){return"ConciseArguments"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(LO(a)){var b=this.uo;a=a.uo;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.uo;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.G=function(a){this.uo=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.vk=function(){return this.uo};
+function LO(a){return!!(a&&a.$classData&&a.$classData.n.TJ)}c.$classData=g({TJ:0},!1,"org.nlogo.core.prim.Lambda$ConciseArguments",{TJ:1,d:1,iA:1,t:1,q:1,l:1,i:1});function Rm(){this.sr=!1;this.uo=null;this.a=!1}Rm.prototype=new l;Rm.prototype.constructor=Rm;c=Rm.prototype;c.u=function(){return"NoArguments"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.kA?this.sr===a.sr:!1};
+c.w=function(a){switch(a){case 0:return this.sr;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){var a=-889275714,a=V().da(a,this.sr?1231:1237);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};c.od=function(a){this.sr=a;this.uo=I(r(),y());this.a=!0;return this};c.vk=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/Lambda.scala: 26");return this.uo};
+c.$classData=g({kA:0},!1,"org.nlogo.core.prim.Lambda$NoArguments",{kA:1,d:1,iA:1,t:1,q:1,l:1,i:1});function Tm(){this.ri=null}Tm.prototype=new l;Tm.prototype.constructor=Tm;c=Tm.prototype;c.u=function(){return"UnbracketedArgument"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.lA){var b=this.ri;a=a.ri;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.ri;default:throw(new P).c(""+a);}};
+c.k=function(){return X(W(),this)};c.Jf=function(a){this.ri=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.vk=function(){return I(r(),(new w).f([this.ri.Yb.toUpperCase()]))};c.$classData=g({lA:0},!1,"org.nlogo.core.prim.Lambda$UnbracketedArgument",{lA:1,d:1,iA:1,t:1,q:1,l:1,i:1});function C4(){this.a=this.Co=!1}C4.prototype=new l;C4.prototype.constructor=C4;c=C4.prototype;c.b=function(){this.a=this.Co=!0;return this};c.u=function(){return"Accept"};c.v=function(){return 0};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Accept"};c.QE=function(){return tl()};c.r=function(){return 1955373352};c.x=function(){return Y(new Z,this)};c.Bw=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/lex/LexStates.scala: 11");return this.Co};c.$classData=g({M0:0},!1,"org.nlogo.lex.Accept$",{M0:1,d:1,aQ:1,t:1,q:1,l:1,i:1});var nwa=void 0;
+function tl(){nwa||(nwa=(new C4).b());return nwa}function D4(){this.a=this.Co=!1}D4.prototype=new l;D4.prototype.constructor=D4;c=D4.prototype;c.b=function(){this.Co=!1;this.a=!0;return this};c.u=function(){return"Error"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Error"};c.QE=function(a){return a};c.r=function(){return 67232232};c.x=function(){return Y(new Z,this)};
+c.Bw=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/lex/LexStates.scala: 26");return this.Co};c.$classData=g({Q0:0},!1,"org.nlogo.lex.Error$",{Q0:1,d:1,aQ:1,t:1,q:1,l:1,i:1});var owa=void 0;function zl(){owa||(owa=(new D4).b());return owa}function E4(){this.a=this.Co=!1}E4.prototype=new l;E4.prototype.constructor=E4;c=E4.prototype;c.b=function(){this.Co=!1;this.a=!0;return this};c.u=function(){return"Finished"};
+c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"Finished"};c.QE=function(a){return tl()===a?tl():ul()};c.r=function(){return-609016686};c.x=function(){return Y(new Z,this)};c.Bw=function(){if(!this.a)throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/lex/LexStates.scala: 16");return this.Co};c.$classData=g({R0:0},!1,"org.nlogo.lex.Finished$",{R0:1,d:1,aQ:1,t:1,q:1,l:1,i:1});var pwa=void 0;
+function ul(){pwa||(pwa=(new E4).b());return pwa}function GO(){}GO.prototype=new M_;GO.prototype.constructor=GO;c=GO.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.Ec();if(!nn(D(),vj(),e))return d}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null===a||(a=a.Ec(),nn(D(),vj(),a))?!1:!0};c.$classData=g({b1:0},!1,"org.nlogo.parse.AgentTypeChecker$AgentTypeCheckerVisitor$$anonfun$1",{b1:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});
+function GV(){}GV.prototype=new M_;GV.prototype.constructor=GV;GV.prototype.Ya=function(a){return this.dp(a|0)};GV.prototype.dp=function(a){return-1!==a};GV.prototype.eb=function(a,b){a|=0;return-1!==a?(new FV).ia(a,kc()):b.y(a)};GV.prototype.$classData=g({d1:0},!1,"org.nlogo.parse.AgentVariableReporterHandler$$anonfun$$nestedInanonfun$getAgentVariableReporter$16$1",{d1:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Qc(){this.wc=0}Qc.prototype=new l;Qc.prototype.constructor=Qc;c=Qc.prototype;c.u=function(){return"Stmt"};
+c.v=function(){return 1};c.o=function(a){return this===a?!0:kma(a)?this.wc===a.wc:!1};c.w=function(a){switch(a){case 0:return this.wc;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.qb=function(a){this.wc=a;return this};c.r=function(){var a=-889275714,a=V().da(a,this.wc);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};function kma(a){return!!(a&&a.$classData&&a.$classData.n.jQ)}c.$classData=g({jQ:0},!1,"org.nlogo.parse.AstPath$Stmt",{jQ:1,d:1,sB:1,t:1,q:1,l:1,i:1});
+function QO(){this.re=!1;this.ga=null}QO.prototype=new l;QO.prototype.constructor=QO;c=QO.prototype;c.u=function(){return"BlockContext"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.tB&&a.ga===this.ga?this.re===a.re:!1};c.w=function(a){switch(a){case 0:return this.re;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Kx=function(){return(new QO).Dk(this.ga,!0)};c.Dk=function(a,b){this.re=b;if(null===a)throw ug(vg(),null);this.ga=a;return this};
+c.r=function(){var a=-889275714,a=V().da(a,this.re?1231:1237);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};c.$classData=g({tB:0},!1,"org.nlogo.parse.ControlFlowVerifier$BlockContext",{tB:1,d:1,uB:1,t:1,q:1,l:1,i:1});function UO(){this.re=!1;this.ga=null}UO.prototype=new l;UO.prototype.constructor=UO;c=UO.prototype;c.u=function(){return"CommandContext"};c.v=function(){return 1};c.o=function(a){return this===a?!0:ema(a)&&a.ga===this.ga?this.re===a.re:!1};
+c.w=function(a){switch(a){case 0:return this.re;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Kx=function(){return(new UO).Dk(this.ga,!0)};c.Dk=function(a,b){this.re=b;if(null===a)throw ug(vg(),null);this.ga=a;return this};c.r=function(){var a=-889275714,a=V().da(a,this.re?1231:1237);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};function ema(a){return!!(a&&a.$classData&&a.$classData.n.kQ)}
+c.$classData=g({kQ:0},!1,"org.nlogo.parse.ControlFlowVerifier$CommandContext",{kQ:1,d:1,uB:1,t:1,q:1,l:1,i:1});function SO(){this.re=!1;this.ga=null}SO.prototype=new l;SO.prototype.constructor=SO;c=SO.prototype;c.u=function(){return"CommandLambdaContext"};c.v=function(){return 1};c.o=function(a){return this===a?!0:fma(a)&&a.ga===this.ga?this.re===a.re:!1};c.w=function(a){switch(a){case 0:return this.re;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.Kx=function(){return(new SO).Dk(this.ga,!0)};c.Dk=function(a,b){this.re=b;if(null===a)throw ug(vg(),null);this.ga=a;return this};c.r=function(){var a=-889275714,a=V().da(a,this.re?1231:1237);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};function fma(a){return!!(a&&a.$classData&&a.$classData.n.lQ)}c.$classData=g({lQ:0},!1,"org.nlogo.parse.ControlFlowVerifier$CommandLambdaContext",{lQ:1,d:1,uB:1,t:1,q:1,l:1,i:1});function TO(){this.re=!1;this.ga=null}TO.prototype=new l;
+TO.prototype.constructor=TO;c=TO.prototype;c.u=function(){return"ReporterContext"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.vB&&a.ga===this.ga?this.re===a.re:!1};c.w=function(a){switch(a){case 0:return this.re;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Kx=function(){return(new TO).Dk(this.ga,!0)};c.Dk=function(a,b){this.re=b;if(null===a)throw ug(vg(),null);this.ga=a;return this};
+c.r=function(){var a=-889275714,a=V().da(a,this.re?1231:1237);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};c.$classData=g({vB:0},!1,"org.nlogo.parse.ControlFlowVerifier$ReporterContext",{vB:1,d:1,uB:1,t:1,q:1,l:1,i:1});function Fn(){this.QY=null}Fn.prototype=new M_;Fn.prototype.constructor=Fn;Fn.prototype.Jf=function(a){this.QY=a;return this};Fn.prototype.Ya=function(a){return Np(a)};Fn.prototype.eb=function(a,b){Np(a)?(a=(new F4).As(a.Zc),a.L(this.QY)):a=b.y(a);return a};
+Fn.prototype.$classData=g({D1:0},!1,"org.nlogo.parse.LetVariableScope$$anonfun$1",{D1:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function pP(){this.wc=0;this.ga=null}pP.prototype=new l;pP.prototype.constructor=pP;function uma(a,b,d){a.wc=d;if(null===b)throw ug(vg(),null);a.ga=b;return a}c=pP.prototype;c.u=function(){return"Pos"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.nQ&&a.ga===this.ga?this.wc===a.wc:!1};
+c.w=function(a){switch(a){case 0:return this.wc;default:throw(new P).c(""+a);}};c.k=function(){return"0."+this.wc};c.r=function(){var a=-889275714,a=V().da(a,this.wc);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};c.$classData=g({nQ:0},!1,"org.nlogo.parse.SeqReader$Pos",{nQ:1,d:1,Lpa:1,t:1,q:1,l:1,i:1});function DP(){}DP.prototype=new M_;DP.prototype.constructor=DP;c=DP.prototype;c.qq=function(){return this};c.sl=function(a){if(null!==a){var b=a.kb;a=a.Y;if(mm()===b&&"BREED"===a)return!0}return!1};
+c.gl=function(a,b){if(null!==a){var d=a.kb,e=a.Y;if(mm()===d&&"BREED"===e)return a}return b.y(a)};c.Ya=function(a){return this.sl(a)};c.eb=function(a,b){return this.gl(a,b)};c.$classData=g({T1:0},!1,"org.nlogo.parse.StructureCombinators$$anonfun$breedKeyword$1",{T1:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function vP(){}vP.prototype=new M_;vP.prototype.constructor=vP;c=vP.prototype;c.qq=function(){return this};c.sl=function(a){if(null!==a){var b=a.kb;a=a.Y;if(lP()===b&&Ag(a)&&Gp(Ha(),a,"-OWN"))return!0}return!1};
+c.gl=function(a,b){if(null!==a){var d=a.kb,e=a.Y;if(lP()===d&&Ag(e)&&Gp(Ha(),e,"-OWN"))return a}return b.y(a)};c.Ya=function(a){return this.sl(a)};c.eb=function(a,b){return this.gl(a,b)};c.$classData=g({U1:0},!1,"org.nlogo.parse.StructureCombinators$$anonfun$breedVariables$3",{U1:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function BP(){this.Eq=null}BP.prototype=new M_;BP.prototype.constructor=BP;c=BP.prototype;c.sl=function(a){if(null!==a){var b=a.kb;a=a.Y;if(lP()===b&&this.Eq===a)return!0}return!1};
+c.gl=function(a,b){if(null!==a){var d=a.kb,e=a.Y;if(lP()===d&&this.Eq===e)return a}return b.y(a)};c.Ya=function(a){return this.sl(a)};c.eb=function(a,b){return this.gl(a,b)};c.$classData=g({V1:0},!1,"org.nlogo.parse.StructureCombinators$$anonfun$keyword$1",{V1:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function HP(){}HP.prototype=new M_;HP.prototype.constructor=HP;c=HP.prototype;c.qq=function(){return this};c.sl=function(a){if(null!==a){a=a.kb;var b=lP();null===a||a!==b?(b=Bc(),a=!(null!==a&&a===b)):a=!1;if(a)return!0}return!1};
+c.gl=function(a,b){if(null!==a){var d=a.kb,e=lP();null===d||d!==e?(e=Bc(),d=!(null!==d&&d===e)):d=!1;if(d)return a}return b.y(a)};c.Ya=function(a){return this.sl(a)};c.eb=function(a,b){return this.gl(a,b)};c.$classData=g({W1:0},!1,"org.nlogo.parse.StructureCombinators$$anonfun$nonKeyword$1",{W1:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function zP(){}zP.prototype=new M_;zP.prototype.constructor=zP;c=zP.prototype;c.qq=function(){return this};c.sl=function(a){if(null!==a){var b=a.kb;a=a.Y;if(Bm()===b&&Ag(a))return!0}return!1};
+c.gl=function(a,b){if(null!==a){var d=a.kb,e=a.Y;if(Bm()===d&&Ag(e))return a}return b.y(a)};c.Ya=function(a){return this.sl(a)};c.eb=function(a,b){return this.gl(a,b)};c.$classData=g({X1:0},!1,"org.nlogo.parse.StructureCombinators$$anonfun$string$1",{X1:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function AP(){this.iG=null}AP.prototype=new M_;AP.prototype.constructor=AP;c=AP.prototype;c.sl=function(a){return null!==a&&this.iG===a.kb?!0:!1};c.gl=function(a,b){return null!==a&&this.iG===a.kb?a:b.y(a)};c.Ya=function(a){return this.sl(a)};
+c.eb=function(a,b){return this.gl(a,b)};c.$classData=g({Y1:0},!1,"org.nlogo.parse.StructureCombinators$$anonfun$tokenType$1",{Y1:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function np(){}np.prototype=new M_;np.prototype.constructor=np;c=np.prototype;c.b=function(){return this};c.Uu=function(a){return Oo(a)};c.Ya=function(a){return this.Uu(a)};c.eb=function(a,b){return this.Jt(a,b)};c.Jt=function(a,b){return Oo(a)?a.Of:b.y(a)};
+c.$classData=g({$1:0},!1,"org.nlogo.parse.StructureConverter$$anonfun$1",{$1:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function op(){}op.prototype=new M_;op.prototype.constructor=op;c=op.prototype;c.Uu=function(a){return Po(a)};c.Ya=function(a){return this.Uu(a)};c.eb=function(a,b){return this.Jt(a,b)};c.Jt=function(a,b){if(Po(a)){rea();b=tma(a);var d=a.si.ee(2).Je();a=tm(new um,"",Bc(),"",a.si.hd().sa);var e=r();b=(new A).e(b,d.mc(a,e.s))}else b=b.y(a);return b};c.Ja=function(){return this};
+c.$classData=g({a2:0},!1,"org.nlogo.parse.StructureConverter$$anonfun$2",{a2:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function pp(){}pp.prototype=new M_;pp.prototype.constructor=pp;c=pp.prototype;c.b=function(){return this};c.Uu=function(a){return No(a)};c.Ya=function(a){return this.Uu(a)};c.eb=function(a,b){return this.Jt(a,b)};c.Jt=function(a,b){if(No(a)){a=a.Of;b=m(new n,function(){return function(a){return a.g}}(this));var d=r();return a.xa(b,d.s)}return b.y(a)};
+c.$classData=g({b2:0},!1,"org.nlogo.parse.StructureConverter$$anonfun$convert$4",{b2:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function G4(){}G4.prototype=new l;G4.prototype.constructor=G4;c=G4.prototype;c.b=function(){return this};c.u=function(){return"BreedCommand"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"BreedCommand"};c.r=function(){return 1500620631};c.x=function(){return Y(new Z,this)};
+c.$classData=g({g2:0},!1,"org.nlogo.parse.SymbolType$BreedCommand$",{g2:1,d:1,Ah:1,t:1,q:1,l:1,i:1});var qwa=void 0;function Fo(){qwa||(qwa=(new G4).b());return qwa}function H4(){}H4.prototype=new l;H4.prototype.constructor=H4;c=H4.prototype;c.b=function(){return this};c.u=function(){return"BreedReporter"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"BreedReporter"};c.r=function(){return-549904811};c.x=function(){return Y(new Z,this)};
+c.$classData=g({h2:0},!1,"org.nlogo.parse.SymbolType$BreedReporter$",{h2:1,d:1,Ah:1,t:1,q:1,l:1,i:1});var rwa=void 0;function Go(){rwa||(rwa=(new H4).b());return rwa}function I4(){}I4.prototype=new l;I4.prototype.constructor=I4;c=I4.prototype;c.b=function(){return this};c.u=function(){return"LinkBreed"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"LinkBreed"};c.r=function(){return 352830842};c.x=function(){return Y(new Z,this)};
+c.$classData=g({k2:0},!1,"org.nlogo.parse.SymbolType$LinkBreed$",{k2:1,d:1,Ah:1,t:1,q:1,l:1,i:1});var swa=void 0;function Wo(){swa||(swa=(new I4).b());return swa}function J4(){}J4.prototype=new l;J4.prototype.constructor=J4;c=J4.prototype;c.b=function(){return this};c.u=function(){return"LinkBreedSingular"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"LinkBreedSingular"};c.r=function(){return-1843994703};c.x=function(){return Y(new Z,this)};
+c.$classData=g({l2:0},!1,"org.nlogo.parse.SymbolType$LinkBreedSingular$",{l2:1,d:1,Ah:1,t:1,q:1,l:1,i:1});var twa=void 0;function ap(){twa||(twa=(new J4).b());return twa}function K4(){}K4.prototype=new l;K4.prototype.constructor=K4;c=K4.prototype;c.b=function(){return this};c.u=function(){return"PrimitiveCommand"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"PrimitiveCommand"};c.r=function(){return 1944693892};c.x=function(){return Y(new Z,this)};
+c.$classData=g({o2:0},!1,"org.nlogo.parse.SymbolType$PrimitiveCommand$",{o2:1,d:1,Ah:1,t:1,q:1,l:1,i:1});var uwa=void 0;function xp(){uwa||(uwa=(new K4).b());return uwa}function L4(){}L4.prototype=new l;L4.prototype.constructor=L4;c=L4.prototype;c.b=function(){return this};c.u=function(){return"PrimitiveReporter"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"PrimitiveReporter"};c.r=function(){return 331464392};c.x=function(){return Y(new Z,this)};
+c.$classData=g({p2:0},!1,"org.nlogo.parse.SymbolType$PrimitiveReporter$",{p2:1,d:1,Ah:1,t:1,q:1,l:1,i:1});var vwa=void 0;function yp(){vwa||(vwa=(new L4).b());return vwa}function M4(){}M4.prototype=new l;M4.prototype.constructor=M4;c=M4.prototype;c.b=function(){return this};c.u=function(){return"ProcedureSymbol"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"ProcedureSymbol"};c.r=function(){return-1314721237};c.x=function(){return Y(new Z,this)};
+c.$classData=g({q2:0},!1,"org.nlogo.parse.SymbolType$ProcedureSymbol$",{q2:1,d:1,Ah:1,t:1,q:1,l:1,i:1});var wwa=void 0;function $o(){wwa||(wwa=(new M4).b());return wwa}function N4(){}N4.prototype=new l;N4.prototype.constructor=N4;c=N4.prototype;c.b=function(){return this};c.u=function(){return"TurtleBreed"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"TurtleBreed"};c.r=function(){return-1704002184};c.x=function(){return Y(new Z,this)};
+c.$classData=g({t2:0},!1,"org.nlogo.parse.SymbolType$TurtleBreed$",{t2:1,d:1,Ah:1,t:1,q:1,l:1,i:1});var xwa=void 0;function Yo(){xwa||(xwa=(new N4).b());return xwa}function O4(){}O4.prototype=new l;O4.prototype.constructor=O4;c=O4.prototype;c.b=function(){return this};c.u=function(){return"TurtleBreedSingular"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"TurtleBreedSingular"};c.r=function(){return-1875035729};c.x=function(){return Y(new Z,this)};
+c.$classData=g({u2:0},!1,"org.nlogo.parse.SymbolType$TurtleBreedSingular$",{u2:1,d:1,Ah:1,t:1,q:1,l:1,i:1});var ywa=void 0;function bp(){ywa||(ywa=(new O4).b());return ywa}function YV(){}YV.prototype=new M_;YV.prototype.constructor=YV;c=YV.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({D2:0},!1,"org.nlogo.tortoise.compiler.BrowserCompiler$compilation2JsonWriter$writer$macro$20$2$$anonfun$apply$8",{D2:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Wq(){this.sW=this.qT=this.tT=this.Va=null}Wq.prototype=new M_;Wq.prototype.constructor=Wq;c=Wq.prototype;c.GC=function(a,b){return xb(a)?(b=bd(this.Va),Uq(b,a,this.tT,this.qT,this.sW)):b.y(a)};c.Ya=function(a){return this.nE(a)};c.eb=function(a,b){return this.GC(a,b)};c.nE=function(a){return xb(a)};
+c.$classData=g({J2:0},!1,"org.nlogo.tortoise.compiler.CommandPrims$$anonfun$args$2$1",{J2:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function P4(){Wt.call(this);this.iT=null}P4.prototype=new Cua;P4.prototype.constructor=P4;function Dga(a,b,d){var e=new P4;e.iT=b;Wt.prototype.Au.call(e,a,d);return e}P4.prototype.$classData=g({yB:0},!1,"org.nlogo.tortoise.compiler.CompiledPlot",{yB:1,zB:1,d:1,t:1,q:1,l:1,i:1});function jW(){}jW.prototype=new M_;jW.prototype.constructor=jW;c=jW.prototype;
+c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};c.$classData=g({S2:0},!1,"org.nlogo.tortoise.compiler.CompiledWidget$compiledPen2Json$writer$macro$22$2$$anonfun$apply$5",{S2:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function oW(){}oW.prototype=new l;oW.prototype.constructor=oW;c=oW.prototype;c.b=function(){return this};c.u=function(){return"NoPropagation"};
+c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"NoPropagation"};c.r=function(){return-824474325};c.x=function(){return Y(new Z,this)};c.$classData=g({Y2:0},!1,"org.nlogo.tortoise.compiler.CompilerFlags$NoPropagation$",{Y2:1,d:1,Z2:1,t:1,q:1,l:1,i:1});var lra=void 0;function Q4(){}Q4.prototype=new l;Q4.prototype.constructor=Q4;c=Q4.prototype;c.b=function(){return this};c.u=function(){return"WidgetPropagation"};c.v=function(){return 0};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"WidgetPropagation"};c.r=function(){return 1268345032};c.x=function(){return Y(new Z,this)};c.$classData=g({$2:0},!1,"org.nlogo.tortoise.compiler.CompilerFlags$WidgetPropagation$",{$2:1,d:1,Z2:1,t:1,q:1,l:1,i:1});var zwa=void 0;function Wea(){zwa||(zwa=(new Q4).b());return zwa}function R4(){this.Wf=null}R4.prototype=new l;R4.prototype.constructor=R4;c=R4.prototype;c.u=function(){return"FailureCompilerException"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.AB?this.Wf===a.Wf:!1};c.w=function(a){switch(a){case 0:return this.Wf;default:throw(new P).c(""+a);}};function vq(a){var b=new R4;b.Wf=a;return b}c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({AB:0},!1,"org.nlogo.tortoise.compiler.FailureCompilerException",{AB:1,d:1,MQ:1,t:1,q:1,l:1,i:1});function wq(){this.Wf=null}wq.prototype=new l;
+wq.prototype.constructor=wq;c=wq.prototype;c.u=function(){return"FailureException"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.BB){var b=this.Wf;a=a.Wf;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Wf;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.wd=function(a){this.Wf=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({BB:0},!1,"org.nlogo.tortoise.compiler.FailureException",{BB:1,d:1,MQ:1,t:1,q:1,l:1,i:1});function Dq(){this.Sk=null}Dq.prototype=new l;Dq.prototype.constructor=Dq;c=Dq.prototype;c.u=function(){return"FailureString"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.CB?this.Sk===a.Sk:!1};c.w=function(a){switch(a){case 0:return this.Sk;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.c=function(a){this.Sk=a;return this};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({CB:0},!1,"org.nlogo.tortoise.compiler.FailureString",{CB:1,d:1,MQ:1,t:1,q:1,l:1,i:1});function hu(){this.wg=this.za=null}hu.prototype=new l;hu.prototype.constructor=hu;c=hu.prototype;c.u=function(){return"JsFunction"};c.v=function(){return 2};c.Ku=function(a,b){this.za=a;this.wg=b;return this};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.CQ){var b=this.za,d=a.za;if(null===b?null===d:b.o(d))return b=this.wg,a=a.wg,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.za;case 1:return this.wg;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.EW=function(a){return u((new v).G((new w).f(['"','":',""])),(new w).f([a,this.gG()]))};c.r=function(){return R(Q(),this)};c.gG=function(){return Or(fd(),this.za,this.wg.zb("\n"))};
+c.x=function(){return Y(new Z,this)};c.$classData=g({CQ:0},!1,"org.nlogo.tortoise.compiler.JavascriptObject$JsFunction",{CQ:1,d:1,k3:1,t:1,q:1,l:1,i:1});function S4(){this.$u=null}S4.prototype=new l;S4.prototype.constructor=S4;c=S4.prototype;c.u=function(){return"JsonValueElement"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.DQ){var b=this.$u;a=a.$u;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.$u;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function wfa(a){var b=new S4;b.$u=a;return b}c.EW=function(a){a=[(new A).e(a,this.$u)];for(var b=dc(new ec,Eu()),d=0,e=a.length|0;d<e;)hc(b,a[d]),d=1+d|0;a=(new su).ac(b.Oa);a=pd(qd(),rd(qd(),a));a=(new Sb).c(a);b=a.R.length|0;a=He(Ie(),a.R,1,b);a=(new Sb).c(a);return Cm(a,1)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({DQ:0},!1,"org.nlogo.tortoise.compiler.JavascriptObject$JsonValueElement",{DQ:1,d:1,k3:1,t:1,q:1,l:1,i:1});function hs(){}hs.prototype=new M_;hs.prototype.constructor=hs;hs.prototype.b=function(){return this};hs.prototype.Ya=function(){return!0};
+hs.prototype.eb=function(a){if(Eg(a)){var b=B().s;a=L(a,b);var b=(new hs).b(),d=B();a=a.xa(b,d.s);b=vg();if(Ku(a))return a.Rd;if(Lu(a))return a.pa;d=[];a.ua(m(new n,function(a,b){return function(a){return b.push(a)|0}}(b,d)));return d}return rh()===a?Hfa():a};hs.prototype.$classData=g({n3:0},!1,"org.nlogo.tortoise.compiler.LiteralConverter$$anonfun$org$nlogo$tortoise$compiler$LiteralConverter$$nlValueToJSValue$1$1",{n3:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Ts(){}Ts.prototype=new M_;
+Ts.prototype.constructor=Ts;Ts.prototype.b=function(){return this};Ts.prototype.Ya=function(a){return!!(a&&a.$classData&&a.$classData.n.yB)};Ts.prototype.eb=function(a,b){return a&&a.$classData&&a.$classData.n.yB?a:b.y(a)};Ts.prototype.$classData=g({J3:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$$anonfun$1",{J3:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Vs(){}Vs.prototype=new M_;Vs.prototype.constructor=Vs;c=Vs.prototype;c.b=function(){return this};c.HC=function(a,b){return Awa(a)?a.rv:b.y(a)};
+c.oE=function(a){return Awa(a)};c.Ya=function(a){return this.oE(a)};c.eb=function(a,b){return this.HC(a,b)};c.$classData=g({K3:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$$anonfun$2",{K3:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Ws(){}Ws.prototype=new M_;Ws.prototype.constructor=Ws;c=Ws.prototype;c.b=function(){return this};c.HC=function(a,b){return Bwa(a)?a.um:b.y(a)};c.oE=function(a){return Bwa(a)};c.Ya=function(a){return this.oE(a)};c.eb=function(a,b){return this.HC(a,b)};
+c.$classData=g({L3:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$$anonfun$3",{L3:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function ct(){this.um=null}ct.prototype=new l;ct.prototype.constructor=ct;c=ct.prototype;c.u=function(){return"ErrorAlert"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(Bwa(a)){var b=this.um;a=a.um;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.um;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.G=function(a){this.um=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Bwa(a){return!!(a&&a.$classData&&a.$classData.n.JQ)}c.$classData=g({JQ:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$ErrorAlert",{JQ:1,d:1,M3:1,t:1,q:1,l:1,i:1});function ft(){this.rv=null}ft.prototype=new l;ft.prototype.constructor=ft;c=ft.prototype;c.u=function(){return"SuccessfulComponent"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Awa(a)?this.rv===a.rv:!1};
+c.w=function(a){switch(a){case 0:return this.rv;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.c=function(a){this.rv=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Awa(a){return!!(a&&a.$classData&&a.$classData.n.KQ)}c.$classData=g({KQ:0},!1,"org.nlogo.tortoise.compiler.PlotCompiler$SuccessfulComponent",{KQ:1,d:1,M3:1,t:1,q:1,l:1,i:1});function T4(){this.ro=null}T4.prototype=new M_;T4.prototype.constructor=T4;c=T4.prototype;
+c.qn=function(a){return Cwa(a)||Dwa(a)||Ewa(a)||Fwa(a)||Gwa(a)||tr(a)||nQ(a)};
+c.Xm=function(a,b){return Cwa(a)||Dwa(a)?(b=u((new v).G((new w).f(["SelfManager.self().","Variable"])),(new w).f([this.ro])),(new A).e(b,a.wa.toLowerCase())):Ewa(a)||Fwa(a)?(b=u((new v).G((new w).f(["SelfManager.self().","Variable"])),(new w).f([this.ro])),a=gh(a),(new A).e(b,a.toLowerCase())):Gwa(a)?(b=u((new v).G((new w).f(["SelfManager.self().","Variable"])),(new w).f([this.ro])),(new A).e(b,a.$k.toLowerCase())):tr(a)?(b=u((new v).G((new w).f(["SelfManager.self().","PatchVariable"])),(new w).f([this.ro])),
+a=gh(a),(new A).e(b,a.toLowerCase())):nQ(a)?(b=u((new v).G((new w).f(["world.observer.","Global"])),(new w).f([this.ro])),a=gh(a),(new A).e(b,a.toLowerCase())):b.y(a)};function Paa(a){var b=new T4;b.ro=a;return b}c.Ya=function(a){return this.qn(a)};c.eb=function(a,b){return this.Xm(a,b)};c.$classData=g({P3:0},!1,"org.nlogo.tortoise.compiler.PrimUtils$VariablePrims$$anonfun$procedureAndVarName$1",{P3:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function lt(){this.tW=this.rT=this.uT=this.Va=null}lt.prototype=new M_;
+lt.prototype.constructor=lt;c=lt.prototype;c.GC=function(a,b){return xb(a)?(b=bd(this.Va),Uq(b,a,this.uT,this.rT,this.tW)):b.y(a)};c.Ya=function(a){return this.nE(a)};c.eb=function(a,b){return this.GC(a,b)};c.nE=function(a){return xb(a)};c.$classData=g({U3:0},!1,"org.nlogo.tortoise.compiler.ReporterPrims$$anonfun$args$1$1",{U3:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function ot(){}ot.prototype=new M_;ot.prototype.constructor=ot;c=ot.prototype;c.b=function(){return this};
+c.qn=function(a){return Hwa(a)||Mn(a)||Iwa(a)||Jwa(a)||Kwa(a)||Lwa(a)||Mwa(a)};c.Xm=function(a,b){return Hwa(a)?"+":Mn(a)?"-":Iwa(a)?"*":Jwa(a)?"%":Kwa(a)?"\x26\x26":Lwa(a)?"||":Mwa(a)?"!\x3d":b.y(a)};c.Ya=function(a){return this.qn(a)};c.eb=function(a,b){return this.Xm(a,b)};c.$classData=g({$3:0},!1,"org.nlogo.tortoise.compiler.SimplePrims$InfixReporter$$anonfun$unapply$2",{$3:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Yq(){}Yq.prototype=new M_;Yq.prototype.constructor=Yq;c=Yq.prototype;c.b=function(){return this};
+c.mE=function(a){return Nwa(a)||Owa(a)||Pwa(a)||Qwa(a)||Rwa(a)||Swa(a)||Twa(a)||Uwa(a)||Vwa(a)||!!(a&&a.$classData&&a.$classData.n.IB)||!!(a&&a.$classData&&a.$classData.n.HB)||eQ(a)||Wwa(a)||Xwa(a)||Ywa(a)||Zwa(a)||$wa(a)||axa(a)||bxa(a)||cxa(a)||dxa(a)||exa(a)||fxa(a)||gxa(a)||hxa(a)||ixa(a)||jxa(a)||kxa(a)||lxa(a)||mxa(a)||nxa(a)||oxa(a)||pxa(a)||qxa(a)||rxa(a)||sxa(a)||txa(a)||uxa(a)||vxa(a)||wxa(a)||xxa(a)||yxa(a)||zxa(a)||Axa(a)||Bxa(a)||Cxa(a)||Dxa(a)||Exa(a)||Fxa(a)||Gxa(a)||Hxa(a)||Ixa(a)||
+Jxa(a)||Kxa(a)||Lxa(a)||Mxa(a)||Nxa(a)||Oxa(a)||Pxa(a)||Qxa(a)||Rxa(a)||Sxa(a)||Txa(a)||Uxa(a)||Vxa(a)||Wxa(a)||Xxa(a)||Yxa(a)||Zxa(a)||$xa(a)||aya(a)||bya(a)||cya(a)||dya(a)||eya(a)||fya(a)||gya(a)||hya(a)||iya(a)||jya(a)||kya(a)||lya(a)||mya(a)||nya(a)||oya(a)||pya(a)};
+c.FC=function(a,b){return Nwa(a)?"PrintPrims.print":Owa(a)?"PrintPrims.show(SelfManager.self)":Pwa(a)?"PrintPrims.type":Qwa(a)?"PrintPrims.write":Rwa(a)?"OutputPrims.clear":Swa(a)?"OutputPrims.print":Twa(a)?"OutputPrims.show(SelfManager.self)":Uwa(a)?"OutputPrims.type":Vwa(a)?"OutputPrims.write":a&&a.$classData&&a.$classData.n.IB?"SelfManager.self()._optimalFdOne":a&&a.$classData&&a.$classData.n.HB?"SelfManager.self()._optimalFdLessThan1":eQ(a)?"SelfManager.self().fd":Wwa(a)?"SelfManager.self().jumpIfAble":
+Xwa(a)?"SelfManager.self().die":Ywa(a)?"SelfManager.self().face":Zwa(a)?"SelfManager.self().faceXY":$wa(a)?"SelfManager.self().followMe":axa(a)?"SelfManager.self().goHome":bxa(a)?"SelfManager.self().moveTo":cxa(a)?"SelfManager.self().penManager.lowerPen":dxa(a)?"SelfManager.self().penManager.useEraser":exa(a)?"SelfManager.self().penManager.raisePen":fxa(a)?"SelfManager.self().rideMe":gxa(a)?"SelfManager.self().right":hxa(a)?"SelfManager.self().setXY":ixa(a)?"SelfManager.self().stamp":jxa(a)?"SelfManager.self().stampErase":
+kxa(a)?"SelfManager.self().tie":lxa(a)?"SelfManager.self().untie":mxa(a)?"SelfManager.self().watchMe":nxa(a)?"plotManager.disableAutoplotting":oxa(a)?"plotManager.enableAutoplotting":pxa(a)?"plotManager.clearAllPlots":qxa(a)?"plotManager.clearPlot":rxa(a)?"plotManager.createTemporaryPen":sxa(a)?"plotManager.drawHistogramFrom":txa(a)?"plotManager.lowerPen":uxa(a)?"plotManager.resetPen":vxa(a)?"plotManager.raisePen":wxa(a)?"plotManager.plotValue":xxa(a)?"plotManager.plotPoint":yxa(a)?"plotManager.setCurrentPen":
+zxa(a)?"plotManager.setCurrentPlot":Axa(a)?"plotManager.setHistogramBarCount":Bxa(a)?"plotManager.setPenColor":Cxa(a)?"plotManager.setPenInterval":Dxa(a)?"plotManager.setPenMode":Exa(a)?"plotManager.setXRange":Fxa(a)?"plotManager.setYRange":Gxa(a)?"plotManager.setupPlots":Hxa(a)?"plotManager.updatePlots":Ixa(a)?"world.clearAll":Jxa(a)?"world.clearDrawing":Kxa(a)?"world.importDrawing":Lxa(a)?"world.observer.clearCodeGlobals":Mxa(a)?"world.clearPatches":Nxa(a)?"world.turtleManager.clearTurtles":Oxa(a)?
+"world.ticker.clear":Pxa(a)?"world.clearLinks":Qxa(a)?"world.resize":Rxa(a)?"world.setPatchSize":Sxa(a)?"world.ticker.reset":Txa(a)?"world.ticker.tick":Uxa(a)?"world.ticker.tickAdvance":Vxa(a)?"workspace.timer.reset":Wxa(a)?"workspace.rng.setSeed":Xxa(a)?"world.observer.follow":Yxa(a)?"world.observer.ride":Zxa(a)?"world.observer.watch":$xa(a)?"world.observer.resetPerspective":aya(a)?"LayoutManager.layoutSpring":bya(a)?"LayoutManager.layoutCircle":cya(a)?"LayoutManager.layoutRadial":dya(a)?"LayoutManager.layoutTutte":
+eya(a)?"world.changeTopology":fya(a)?"Tasks.apply":gya(a)?"Prims.stdout":hya(a)?"UserDialogPrims.confirm":iya(a)?"ImportExportPrims.exportOutput":jya(a)?"ImportExportPrims.exportPlot":kya(a)?"ImportExportPrims.exportAllPlots":lya(a)?"ImportExportPrims.exportView":mya(a)?"ImportExportPrims.exportWorld":nya(a)?"Prims.wait":oya(a)?"ImportExportPrims.importWorld":pya(a)?"notImplemented('display', undefined)":b.y(a)};c.Ya=function(a){return this.mE(a)};c.eb=function(a,b){return this.FC(a,b)};
+c.$classData=g({a4:0},!1,"org.nlogo.tortoise.compiler.SimplePrims$NormalCommand$$anonfun$unapply$6",{a4:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function pt(){}pt.prototype=new M_;pt.prototype.constructor=pt;c=pt.prototype;c.b=function(){return this};
+c.qn=function(a){return qya(a)||rya(a)||$P(a)||!!(a&&a.$classData&&a.$classData.n.DB)||!!(a&&a.$classData&&a.$classData.n.EB)||!!(a&&a.$classData&&a.$classData.n.KB)||!!(a&&a.$classData&&a.$classData.n.JB)||sya(a)||tya(a)||uya(a)||vya(a)||wya(a)||xya(a)||yya(a)||zya(a)||Aya(a)||Bya(a)||Cya(a)||Dya(a)||Eya(a)||Fya(a)||Gya(a)||Hya(a)||Iya(a)||Jya(a)||Kya(a)||Lya(a)||uW(a)||sW(a)||Mya(a)||Nya(a)||Oya(a)||Pya(a)||Qya(a)||Rya(a)||Sya(a)||Tya(a)||Uya(a)||Vya(a)||Wya(a)||Xya(a)||Yya(a)||Zya(a)||$ya(a)||
+aza(a)||bza(a)||cza(a)||dza(a)||eza(a)||fza(a)||gza(a)||hza(a)||iza(a)||jza(a)||kza(a)||lza(a)||mza(a)||nza(a)||oza(a)||pza(a)||qza(a)||jQ(a)||rza(a)||rW(a)||sza(a)||tza(a)||uza(a)||vza(a)||wza(a)||xza(a)||yza(a)||zza(a)||Aza(a)||Bza(a)||Cza(a)||Dza(a)||Eza(a)||Fza(a)||Gza(a)||Hza(a)||Iza(a)||Jza(a)||Kza(a)||Lza(a)||Mza(a)||Nza(a)||Oza(a)||Pza(a)||Qza(a)||Rza(a)||Sza(a)||Tza(a)||Uza(a)||Vza(a)||Wza(a)||Xza(a)||Yza(a)||Zza(a)||$za(a)||aAa(a)||bAa(a)||cAa(a)||dAa(a)||eAa(a)||fAa(a)||gAa(a)||Qs(a)||
+hAa(a)||iAa(a)||jAa(a)||rQ(a)||kAa(a)||lAa(a)||mAa(a)||nAa(a)||oAa(a)||pAa(a)||qAa(a)||rAa(a)||sAa(a)||tAa(a)||uAa(a)||vAa(a)||wAa(a)||xAa(a)||yAa(a)||zAa(a)||AAa(a)||BAa(a)||CAa(a)||DAa(a)||EAa(a)||FAa(a)||GAa(a)||HAa(a)||IAa(a)||JAa(a)||KAa(a)||LAa(a)};
+c.Xm=function(a,b){return qya(a)?"SelfPrims.linkHeading":rya(a)?"SelfPrims.linkLength":$P(a)?"SelfPrims.other":a&&a.$classData&&a.$classData.n.DB?"SelfPrims._optimalAnyOther":a&&a.$classData&&a.$classData.n.EB?"SelfPrims._optimalCountOther":a&&a.$classData&&a.$classData.n.KB?"world._optimalPatchRow":a&&a.$classData&&a.$classData.n.JB?"world._optimalPatchCol":sya(a)?"SelfManager.self().bothEnds":tya(a)?"SelfManager.self().canMove":uya(a)?"SelfManager.self().distance":vya(a)?"SelfManager.self().distanceXY":
+wya(a)?"SelfManager.self().dx":xya(a)?"SelfManager.self().dy":yya(a)?"SelfManager.myself":zya(a)?"SelfManager.self().otherEnd":Aya(a)?"SelfManager.self().patchAhead":Bya(a)?"SelfManager.self().patchAtHeadingAndDistance":Cya(a)?"SelfManager.self().getPatchHere":Dya(a)?"SelfManager.self().patchLeftAndAhead":Eya(a)?"SelfManager.self().patchRightAndAhead":Fya(a)?"SelfManager.self":Gya(a)?"SelfManager.self().towards":Hya(a)?"SelfManager.self().towardsXY":Iya(a)?"SelfManager.self().turtlesAt":Jya(a)?"SelfManager.self().turtlesHere":
+Kya(a)?"SelfManager.self().inCone":Lya(a)?"SelfManager.self().inRadius":uW(a)?"SelfManager.self().getNeighbors":sW(a)?"SelfManager.self().getNeighbors4":Mya(a)?"SelfManager.self().patchAt":Nya(a)?"ListPrims.butFirst":Oya(a)?"ListPrims.butLast":Pya(a)?"ListPrims.empty":Qya(a)?"ListPrims.first":Rya(a)?"ListPrims.fput":Sya(a)?"ListPrims.insertItem":Tya(a)?"ListPrims.item":Uya(a)?"ListPrims.last":Vya(a)?"ListPrims.length":Wya(a)?"ListPrims.lput":Xya(a)?"ListPrims.max":Yya(a)?"ListPrims.mean":Zya(a)?"ListPrims.median":
+$ya(a)?"ListPrims.member":aza(a)?"ListPrims.min":bza(a)?"ListPrims.modes":cza(a)?"ListPrims.nOf":dza(a)?"ListPrims.position":eza(a)?"ListPrims.removeDuplicates":fza(a)?"ListPrims.removeItem":gza(a)?"ListPrims.remove":hza(a)?"ListPrims.replaceItem":iza(a)?"ListPrims.reverse":jza(a)?"ListPrims.shuffle":kza(a)?"ListPrims.sort":lza(a)?"ListPrims.sortBy":mza(a)?"ListPrims.standardDeviation":nza(a)?"ListPrims.sublist":oza(a)?"ListPrims.substring":pza(a)?"ListPrims.variance":qza(a)?"ListPrims.list":jQ(a)?
+"ListPrims.oneOf":rza(a)?"ListPrims.sentence":rW(a)?"ListPrims.sum":sza(a)?"plotManager.isAutoplotting":tza(a)?"plotManager.getPlotName":uza(a)?"plotManager.hasPenWithName":vza(a)?"plotManager.getPlotXMax":wza(a)?"plotManager.getPlotXMin":xza(a)?"plotManager.getPlotYMax":yza(a)?"plotManager.getPlotYMin":zza(a)?"MousePrims.isDown":Aza(a)?"MousePrims.isInside":Bza(a)?"MousePrims.getX":Cza(a)?"MousePrims.getY":Dza(a)?"NLMath.abs":Eza(a)?"NLMath.acos":Fza(a)?"NLMath.asin":Gza(a)?"NLMath.atan":Hza(a)?
+"NLMath.ceil":Iza(a)?"NLMath.cos":Jza(a)?"NLMath.exp":Kza(a)?"NLMath.floor":Lza(a)?"NLMath.toInt":Mza(a)?"NLMath.ln":Nza(a)?"NLMath.log":Oza(a)?"NLMath.mod":Pza(a)?"NLMath.pow":Qza(a)?"NLMath.precision":Rza(a)?"NLMath.round":Sza(a)?"NLMath.sin":Tza(a)?"NLMath.sqrt":Uza(a)?"NLMath.subtractHeadings":Vza(a)?"NLMath.tan":Wza(a)?"ColorModel.nearestColorNumberOfHSB":Xza(a)?"ColorModel.nearestColorNumberOfRGB":Yza(a)?"ColorModel.colorToHSB":Zza(a)?"ColorModel.colorToRGB":$za(a)?"ColorModel.hsbToRGB":aAa(a)?
+"ColorModel.genRGBFromComponents":bAa(a)?"ColorModel.scaleColor":cAa(a)?"ColorModel.areRelatedByShade":dAa(a)?"ColorModel.wrapColor":eAa(a)?"Prims.div":fAa(a)?"world.turtleManager.getTurtle":gAa(a)?"world.getPatchAt":Qs(a)?"Prims.equality":hAa(a)?"!Prims.equality":iAa(a)?"world.turtles":jAa(a)?"world.links":rQ(a)?"world.patches":kAa(a)?"world.ticker.tickCount":lAa(a)?"workspace.timer.elapsed":mAa(a)?"Tasks.map":nAa(a)?"Prims.random":oAa(a)?"Prims.generateNewSeed":pAa(a)?"Random.save":qAa(a)?"Prims.randomExponential":
+rAa(a)?"Prims.randomFloat":sAa(a)?"Prims.randomNormal":tAa(a)?"Prims.randomPoisson":uAa(a)?"Prims.randomGamma":vAa(a)?"Prims.linkSet":wAa(a)?"Prims.patchSet":xAa(a)?"Prims.turtleSet":yAa(a)?"Prims.turtlesOn":zAa(a)?"Prims.gt":AAa(a)?"Prims.lt":BAa(a)?"Prims.gte":CAa(a)?"Prims.lte":DAa(a)?"world.linkManager.getLink":EAa(a)?"Tasks.apply":FAa(a)?"Prims.boom":GAa(a)?"world.observer.subject":HAa(a)?"Prims.dateAndTime":IAa(a)?"Prims.nanoTime":JAa(a)?"UserDialogPrims.yesOrNo":KAa(a)?"UserDialogPrims.input":
+LAa(a)?"Prims.readFromString":b.y(a)};c.Ya=function(a){return this.qn(a)};c.eb=function(a,b){return this.Xm(a,b)};c.$classData=g({b4:0},!1,"org.nlogo.tortoise.compiler.SimplePrims$NormalReporter$$anonfun$unapply$3",{b4:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Xq(){}Xq.prototype=new M_;Xq.prototype.constructor=Xq;c=Xq.prototype;c.b=function(){return this};c.mE=function(a){return MAa(a)||NO(a)||NAa(a)||OAa(a)||PAa(a)||QAa(a)||RAa(a)};
+c.FC=function(a,b){return MAa(a)?"":NO(a)?"throw new Exception.StopInterrupt":NAa(a)?"":OAa(a)?"SelfManager.self().hideTurtle(true);":PAa(a)?"SelfManager.self().hideTurtle(false);":QAa(a)?"":RAa(a)?"":b.y(a)};c.Ya=function(a){return this.mE(a)};c.eb=function(a,b){return this.FC(a,b)};c.$classData=g({c4:0},!1,"org.nlogo.tortoise.compiler.SimplePrims$SimpleCommand$$anonfun$unapply$5",{c4:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function nt(){}nt.prototype=new M_;nt.prototype.constructor=nt;c=nt.prototype;
+c.b=function(){return this};c.qn=function(a){return!!(a&&a.$classData&&a.$classData.n.F0)||SAa(a)||TAa(a)||UAa(a)||VAa(a)||WAa(a)||XAa(a)||YAa(a)||ZAa(a)||$Aa(a)||aBa(a)||bBa(a)||cBa(a)||dBa(a)||eBa(a)||fBa(a)||gBa(a)||hBa(a)||iBa(a)||jBa(a)||kBa(a)};
+c.Xm=function(a,b){return a&&a.$classData&&a.$classData.n.F0?"Nobody":SAa(a)?"ColorModel.BASE_COLORS":TAa(a)?"Object.keys(world.linkShapeMap)":UAa(a)?"world.topology.maxPxcor":VAa(a)?"world.topology.maxPycor":WAa(a)?"world.topology.minPxcor":XAa(a)?"world.topology.minPycor":YAa(a)?"Meta.isApplet":ZAa(a)?"Meta.version":$Aa(a)?"Meta.isWeb":aBa(a)?"new LinkSet([], world)":bBa(a)?"new PatchSet([], world)":cBa(a)?"new TurtleSet([], world)":dBa(a)?"world.patchSize":eBa(a)?"Prims.randomPatchCoord(world.topology.minPxcor, world.topology.maxPxcor)":
+fBa(a)?"Prims.randomPatchCoord(world.topology.minPycor, world.topology.maxPycor)":gBa(a)?"Prims.randomCoord(world.topology.minPxcor, world.topology.maxPxcor)":hBa(a)?"Prims.randomCoord(world.topology.minPycor, world.topology.maxPycor)":iBa(a)?"Object.keys(world.turtleShapeMap)":jBa(a)?"world.topology.height":kBa(a)?"world.topology.width":b.y(a)};c.Ya=function(a){return this.qn(a)};c.eb=function(a,b){return this.Xm(a,b)};
+c.$classData=g({d4:0},!1,"org.nlogo.tortoise.compiler.SimplePrims$SimpleReporter$$anonfun$unapply$1",{d4:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function qt(){}qt.prototype=new M_;qt.prototype.constructor=qt;c=qt.prototype;c.b=function(){return this};c.qn=function(a){return lBa(a)||mBa(a)||nBa(a)||oBa(a)||pBa(a)||qBa(a)||rBa(a)||sBa(a)||tBa(a)||uBa(a)||vBa(a)||wBa(a)||xBa(a)||yBa(a)||zBa(a)||ABa(a)||BBa(a)};
+c.Xm=function(a,b){return lBa(a)?u((new v).G((new w).f(["isValidAgent()"])),y()):mBa(a)?u((new v).G((new w).f(["isAgentSet()"])),y()):nBa(a)?u((new v).G((new w).f(["isCommandLambda()"])),y()):oBa(a)?u((new v).G((new w).f(["isReporterLambda()"])),y()):pBa(a)?u((new v).G((new w).f(["isBoolean()"])),y()):qBa(a)?u((new v).G((new w).f(["isBreed(",")"])),(new w).f([ed(fd(),a.ka)])):rBa(a)?u((new v).G((new w).f(["isDirectedLink()"])),y()):sBa(a)?u((new v).G((new w).f(["isValidLink()"])),y()):tBa(a)?u((new v).G((new w).f(["isLinkSet()"])),
+y()):uBa(a)?u((new v).G((new w).f(["isList()"])),y()):vBa(a)?u((new v).G((new w).f(["isNumber()"])),y()):wBa(a)?u((new v).G((new w).f(["isPatch()"])),y()):xBa(a)?u((new v).G((new w).f(["isPatchSet()"])),y()):yBa(a)?u((new v).G((new w).f(["isString()"])),y()):zBa(a)?u((new v).G((new w).f(["isValidTurtle()"])),y()):ABa(a)?u((new v).G((new w).f(["isTurtleSet()"])),y()):BBa(a)?u((new v).G((new w).f(["isUndirectedLink()"])),y()):b.y(a)};c.Ya=function(a){return this.qn(a)};
+c.eb=function(a,b){return this.Xm(a,b)};c.$classData=g({e4:0},!1,"org.nlogo.tortoise.compiler.SimplePrims$TypeCheck$$anonfun$unapply$4",{e4:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Ys(){this.bw=this.xf=this.wg=this.Fe=null;this.a=!1}Ys.prototype=new l;Ys.prototype.constructor=Ys;c=Ys.prototype;c.u=function(){return"JsDeclare"};c.cw=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/TortoiseSymbol.scala: 14");return this.bw};
+c.v=function(){return 3};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.NQ&&this.Fe===a.Fe&&this.wg===a.wg){var b=this.xf;a=a.xf;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Fe;case 1:return this.wg;case 2:return this.xf;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.fs=function(){return this.xf};
+c.Ek=function(a,b,d){this.Fe=a;this.wg=b;this.xf=d;this.bw=u((new v).G((new w).f(["var "," \x3d ",";"])),(new w).f([a,b]));this.a=!0;return this};c.r=function(){return R(Q(),this)};c.Ln=function(){return this.Fe};c.x=function(){return Y(new Z,this)};var CBa=g({NQ:0},!1,"org.nlogo.tortoise.compiler.TortoiseSymbol$JsDeclare",{NQ:1,d:1,Ow:1,t:1,q:1,l:1,i:1});Ys.prototype.$classData=CBa;function U4(){this.xf=this.uv=this.kl=this.Fe=null}U4.prototype=new l;U4.prototype.constructor=U4;c=U4.prototype;
+c.u=function(){return"JsDepend"};c.cw=function(){return u((new v).G((new w).f(["var "," \x3d tortoise_require('","')","(",");"])),(new w).f([this.Fe,this.kl,this.uv,this.xf.zb(", ")]))};function hga(){var a=new U4,b=I(r(),(new w).f(["workspace"]));a.Fe="Extensions";a.kl="extensions/all";a.uv=".initialize";a.xf=b;return a}c.v=function(){return 4};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.OQ&&this.Fe===a.Fe&&this.kl===a.kl&&this.uv===a.uv){var b=this.xf;a=a.xf;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Fe;case 1:return this.kl;case 2:return this.uv;case 3:return this.xf;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.fs=function(){return this.xf};c.r=function(){return R(Q(),this)};c.Ln=function(){return this.Fe};c.x=function(){return Y(new Z,this)};
+var DBa=g({OQ:0},!1,"org.nlogo.tortoise.compiler.TortoiseSymbol$JsDepend",{OQ:1,d:1,Ow:1,t:1,q:1,l:1,i:1});U4.prototype.$classData=DBa;function Xs(){this.xf=this.kl=this.Fe=null;this.a=!1}Xs.prototype=new l;Xs.prototype.constructor=Xs;c=Xs.prototype;c.u=function(){return"JsRequire"};c.Dd=function(a,b){this.Fe=a;this.kl=b;this.xf=I(r(),y());this.a=!0;return this};c.cw=function(){return u((new v).G((new w).f(["var "," \x3d tortoise_require('","');"])),(new w).f([this.Fe,this.kl]))};c.v=function(){return 2};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.PQ?this.Fe===a.Fe&&this.kl===a.kl:!1};c.w=function(a){switch(a){case 0:return this.Fe;case 1:return this.kl;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.fs=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/TortoiseSymbol.scala: 24");return this.xf};c.r=function(){return R(Q(),this)};c.Ln=function(){return this.Fe};
+c.x=function(){return Y(new Z,this)};var EBa=g({PQ:0},!1,"org.nlogo.tortoise.compiler.TortoiseSymbol$JsRequire",{PQ:1,d:1,Ow:1,t:1,q:1,l:1,i:1});Xs.prototype.$classData=EBa;function $s(){this.xf=this.wg=this.Fe=null}$s.prototype=new l;$s.prototype.constructor=$s;c=$s.prototype;c.u=function(){return"JsStatement"};c.cw=function(){return this.wg};c.v=function(){return 3};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.QQ&&this.Fe===a.Fe&&this.wg===a.wg){var b=this.xf;a=a.xf;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Fe;case 1:return this.wg;case 2:return this.xf;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.fs=function(){return this.xf};c.Ek=function(a,b,d){this.Fe=a;this.wg=b;this.xf=d;return this};c.r=function(){return R(Q(),this)};c.Ln=function(){return this.Fe};
+c.x=function(){return Y(new Z,this)};var FBa=g({QQ:0},!1,"org.nlogo.tortoise.compiler.TortoiseSymbol$JsStatement",{QQ:1,d:1,Ow:1,t:1,q:1,l:1,i:1});$s.prototype.$classData=FBa;function Ct(){this.bw=this.Fe=this.xf=this.px=this.za=null;this.a=0}Ct.prototype=new l;Ct.prototype.constructor=Ct;c=Ct.prototype;c.u=function(){return"WorkspaceInit"};
+c.cw=function(){if(0===(4&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/TortoiseSymbol.scala: 38");return this.bw};c.v=function(){return 2};
+c.Ku=function(a,b){this.za=a;this.px=b;var d=I(r(),(new w).f(["modelConfig","modelConfig.plots","modelConfig.output"])),e=r();this.xf=d.Vc(b,e.s);this.a=(1|this.a)<<24>>24;this.Fe="workspace";this.a=(2|this.a)<<24>>24;b=(new v).G((new w).f(["var workspace \x3d tortoise_require('engine/workspace')(modelConfig)",";"]));d=m(new n,function(){return function(a){return a.Mc("(",", ",")")}}(this));e=r();this.bw=u(b,(new w).f([a.xa(d,e.s).zb("")]));this.a=(4|this.a)<<24>>24;return this};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.RQ){var b=this.za,d=a.za;if(null===b?null===d:b.o(d))return b=this.px,a=a.px,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.za;case 1:return this.px;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.fs=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/TortoiseSymbol.scala: 36");return this.xf};
+c.r=function(){return R(Q(),this)};c.Ln=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/TortoiseSymbol.scala: 37");return this.Fe};c.x=function(){return Y(new Z,this)};var GBa=g({RQ:0},!1,"org.nlogo.tortoise.compiler.TortoiseSymbol$WorkspaceInit",{RQ:1,d:1,Ow:1,t:1,q:1,l:1,i:1});Ct.prototype.$classData=GBa;function V4(){}V4.prototype=new l;V4.prototype.constructor=V4;c=V4.prototype;c.b=function(){return this};c.u=function(){return"NotCompiled"};
+c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"NotCompiled"};c.r=function(){return 1487347812};c.x=function(){return Y(new Z,this)};c.$classData=g({k4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$NotCompiled$",{k4:1,d:1,Pw:1,t:1,q:1,l:1,i:1});var HBa=void 0;function Hga(){HBa||(HBa=(new V4).b());return HBa}function Ut(){this.Yr=this.Kj=this.Jj=null}Ut.prototype=new l;Ut.prototype.constructor=Ut;c=Ut.prototype;c.u=function(){return"PlotWidgetCompilation"};
+c.v=function(){return 3};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.MB&&this.Jj===a.Jj&&this.Kj===a.Kj){var b=this.Yr;a=a.Yr;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Jj;case 1:return this.Kj;case 2:return this.Yr;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Ek=function(a,b,d){this.Jj=a;this.Kj=b;this.Yr=d;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({MB:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$PlotWidgetCompilation",{MB:1,d:1,Pw:1,t:1,q:1,l:1,i:1});function $t(){this.as=this.Wr=this.Xr=null}$t.prototype=new l;$t.prototype.constructor=$t;c=$t.prototype;c.u=function(){return"SliderCompilation"};c.v=function(){return 3};c.o=function(a){return this===a?!0:gu(a)?this.Xr===a.Xr&&this.Wr===a.Wr&&this.as===a.as:!1};
+c.w=function(a){switch(a){case 0:return this.Xr;case 1:return this.Wr;case 2:return this.as;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.TC=function(){var a=r(),b=(new A).e("compiledMin",this.Xr),d=(new A).e("compiledMax",this.Wr);return I(a,(new w).f([b,d,(new A).e("compiledStep",this.as)]))};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function gu(a){return!!(a&&a.$classData&&a.$classData.n.SQ)}
+c.$classData=g({SQ:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$SliderCompilation",{SQ:1,d:1,Pw:1,t:1,q:1,l:1,i:1});function bu(){this.$r=null}bu.prototype=new l;bu.prototype.constructor=bu;c=bu.prototype;c.u=function(){return"SourceCompilation"};c.v=function(){return 1};c.o=function(a){return this===a?!0:fu(a)?this.$r===a.$r:!1};c.w=function(a){switch(a){case 0:return this.$r;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.TC=function(){return I(r(),(new w).f([(new A).e("compiledSource",this.$r)]))};c.c=function(a){this.$r=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function fu(a){return!!(a&&a.$classData&&a.$classData.n.TQ)}c.$classData=g({TQ:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$SourceCompilation",{TQ:1,d:1,Pw:1,t:1,q:1,l:1,i:1});function au(){this.Kj=this.Jj=null}au.prototype=new l;au.prototype.constructor=au;c=au.prototype;
+c.Dd=function(a,b){this.Jj=a;this.Kj=b;return this};c.u=function(){return"UpdateableCompilation"};c.v=function(){return 2};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.NB?this.Jj===a.Jj&&this.Kj===a.Kj:!1};c.w=function(a){switch(a){case 0:return this.Jj;case 1:return this.Kj;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({NB:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$UpdateableCompilation",{NB:1,d:1,Pw:1,t:1,q:1,l:1,i:1});function IW(){}IW.prototype=new M_;IW.prototype.constructor=IW;c=IW.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({n4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$24$2$$anonfun$apply$6",{n4:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function JW(){}JW.prototype=new M_;JW.prototype.constructor=JW;c=JW.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({p4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$26$2$$anonfun$apply$7",{p4:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function KW(){}KW.prototype=new M_;KW.prototype.constructor=KW;c=KW.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({r4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$28$2$$anonfun$apply$8",{r4:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function LW(){}LW.prototype=new M_;LW.prototype.constructor=LW;c=LW.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({t4:0},!1,"org.nlogo.tortoise.compiler.WidgetCompilation$widgetCompilation2Json$writer$macro$30$2$$anonfun$apply$9",{t4:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function dX(){this.nw=0;this.Qu=!1;this.du=null;this.ho=0;this.tn=!1;this.Ak=null;this.a=0}dX.prototype=new l;dX.prototype.constructor=dX;c=dX.prototype;c.tE=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 82");return this.tn};c.u=function(){return"JsonLinkLine"};
+c.v=function(){return 3};c.tG=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 81");return this.ho};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.WQ&&this.nw===a.nw&&this.Qu===a.Qu){var b=this.du;a=a.du;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.nw;case 1:return this.Qu;case 2:return this.du;default:throw(new P).c(""+a);}};
+c.k=function(){return X(W(),this)};c.YC=function(){if(0===(4&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 83");return this.Ak};c.r=function(){var a=-889275714,a=V().da(a,RF(V(),this.nw)),a=V().da(a,this.Qu?1231:1237),a=V().da(a,OD(V(),this.du));return V().pb(a,3)};c.x=function(){return Y(new Z,this)};
+c.yu=function(a,b,d){this.nw=a;this.Qu=b;this.du=d;this.ho=a;this.a=(1|this.a)<<24>>24;this.tn=b;this.a=(2|this.a)<<24>>24;this.Ak=d;this.a=(4|this.a)<<24>>24;return this};c.$classData=g({WQ:0},!1,"org.nlogo.tortoise.compiler.json.JsonLinkLine",{WQ:1,d:1,H_:1,t:1,q:1,l:1,i:1});function Wu(){}Wu.prototype=new M_;Wu.prototype.constructor=Wu;Wu.prototype.b=function(){return this};
+Wu.prototype.Ya=function(a){var b=!1;return"number"===typeof a&&(b=!0,vu(wu(),+a))?!0:b||Pa(a)||Ca(a)||"boolean"===typeof a||Ag(a)?!0:!1};Wu.prototype.eb=function(a,b){var d=!1,e=null;return"number"===typeof a&&(d=!0,e=a,vu(wu(),+e))?(new xu).qb(Na(+e)):d?(new yu).Xj(+e):Pa(a)?(new xu).qb(a|0):Ca(a)?(new xu).qb(a.la):"boolean"===typeof a?(new Au).od(!!a):Ag(a)?(new zu).c(a):b.y(a)};
+Wu.prototype.$classData=g({N4:0},!1,"org.nlogo.tortoise.compiler.json.JsonSerializer$$anonfun$1",{N4:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Xu(){}Xu.prototype=new M_;Xu.prototype.constructor=Xu;Xu.prototype.b=function(){return this};Xu.prototype.Ya=function(a){return vua(a)||!!(a&&a.$classData&&a.$classData.n.st)||Eg(a)};
+Xu.prototype.eb=function(a,b){if(vua(a)){a=wua(a);b=m(new n,function(){return function(a){var b=a.pe();a=$ga(jv(),a).$e();return(new A).e(b,a)}}(this));var d=r();a=a.xa(b,d.s);return(new su).ac(Vg(Wg(),a))}if(a&&a.$classData&&a.$classData.n.st)return $ga(jv(),a).$e();if(Eg(a)){b=a.uc;dk();a=ek().nc;a=Mc(b,a);for(b=gk(b);b.Yh;)d=b.ma(),a.Qa(Zu(Gt(),d));return(new Bu).G(a.Da().ob())}return b.y(a)};
+Xu.prototype.$classData=g({O4:0},!1,"org.nlogo.tortoise.compiler.json.JsonSerializer$$anonfun$2",{O4:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Yu(){}Yu.prototype=new M_;Yu.prototype.constructor=Yu;Yu.prototype.b=function(){return this};Yu.prototype.Ya=function(a){if(IBa(a)){var b=a.na();if(null!==a.ja()&&null!==b)return!0}return a&&a.$classData&&a.$classData.n.he||Fk(a)&&null!==a.U||F()===a?!0:!1};
+Yu.prototype.eb=function(a,b){if(IBa(a)){var d=a.ja(),e=a.na();if(null!==d&&null!==e)return B(),a=(new w).f([Zu(Gt(),d),Zu(Gt(),e)]),b=B().s,(new Bu).G(L(a,b))}if(a&&a.$classData&&a.$classData.n.he){b=a.gg();dk();a=ek().nc;a=Mc(b,a);for(b=gk(b);b.Yh;){d=b.ma();if(null===d)throw(new q).j(d);a.Qa(Zu(Gt(),d))}return(new Bu).G(a.Da().ob())}return Fk(a)&&(d=a.U,null!==d)?Zu(Gt(),d):F()===a?uu():b.y(a)};
+Yu.prototype.$classData=g({P4:0},!1,"org.nlogo.tortoise.compiler.json.JsonSerializer$$anonfun$3",{P4:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Bu(){this.Oa=null}Bu.prototype=new l;Bu.prototype.constructor=Bu;c=Bu.prototype;c.u=function(){return"JsArray"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(Ju(a)){var b=this.Oa;a=a.Oa;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Oa;default:throw(new P).c(""+a);}};c.k=function(){return od(this)};
+c.G=function(a){this.Oa=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Ju(a){return!!(a&&a.$classData&&a.$classData.n.aR)}c.$classData=g({aR:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsArray",{aR:1,d:1,Hr:1,t:1,q:1,l:1,i:1});function Au(){this.Zl=!1}Au.prototype=new l;Au.prototype.constructor=Au;c=Au.prototype;c.u=function(){return"JsBool"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Iu(a)?this.Zl===a.Zl:!1};
+c.w=function(a){switch(a){case 0:return this.Zl;default:throw(new P).c(""+a);}};c.k=function(){return od(this)};c.r=function(){var a=-889275714,a=V().da(a,this.Zl?1231:1237);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};c.od=function(a){this.Zl=a;return this};function Iu(a){return!!(a&&a.$classData&&a.$classData.n.bR)}c.$classData=g({bR:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsBool",{bR:1,d:1,Hr:1,t:1,q:1,l:1,i:1});function yu(){this.em=0}yu.prototype=new l;
+yu.prototype.constructor=yu;c=yu.prototype;c.u=function(){return"JsDouble"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Gu(a)?this.em===a.em:!1};c.Xj=function(a){this.em=a;return this};c.w=function(a){switch(a){case 0:return this.em;default:throw(new P).c(""+a);}};c.k=function(){return od(this)};c.r=function(){var a=-889275714,a=V().da(a,RF(V(),this.em));return V().pb(a,1)};c.x=function(){return Y(new Z,this)};function Gu(a){return!!(a&&a.$classData&&a.$classData.n.cR)}
+c.$classData=g({cR:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsDouble",{cR:1,d:1,Hr:1,t:1,q:1,l:1,i:1});function xu(){this.hi=0}xu.prototype=new l;xu.prototype.constructor=xu;c=xu.prototype;c.u=function(){return"JsInt"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Fu(a)?this.hi===a.hi:!1};c.w=function(a){switch(a){case 0:return this.hi;default:throw(new P).c(""+a);}};c.k=function(){return od(this)};c.qb=function(a){this.hi=a;return this};
+c.r=function(){var a=-889275714,a=V().da(a,this.hi);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};function Fu(a){return!!(a&&a.$classData&&a.$classData.n.dR)}c.$classData=g({dR:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsInt",{dR:1,d:1,Hr:1,t:1,q:1,l:1,i:1});function W4(){}W4.prototype=new l;W4.prototype.constructor=W4;c=W4.prototype;c.b=function(){return this};c.u=function(){return"JsNull"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return od(this)};
+c.r=function(){return-2067765616};c.x=function(){return Y(new Z,this)};c.$classData=g({u5:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsNull$",{u5:1,d:1,Hr:1,t:1,q:1,l:1,i:1});var JBa=void 0;function uu(){JBa||(JBa=(new W4).b());return JBa}function su(){this.Tg=null}su.prototype=new l;su.prototype.constructor=su;c=su.prototype;c.u=function(){return"JsObject"};c.v=function(){return 1};c.ac=function(a){this.Tg=a;return this};
+c.o=function(a){if(this===a)return!0;if(Mu(a)){var b=this.Tg;a=a.Tg;return null===b?null===a:JP(b,a)}return!1};c.w=function(a){switch(a){case 0:return this.Tg;default:throw(new P).c(""+a);}};c.k=function(){return od(this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Mu(a){return!!(a&&a.$classData&&a.$classData.n.eR)}c.$classData=g({eR:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsObject",{eR:1,d:1,Hr:1,t:1,q:1,l:1,i:1});function zu(){this.Nc=null}
+zu.prototype=new l;zu.prototype.constructor=zu;c=zu.prototype;c.u=function(){return"JsString"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Hu(a)?this.Nc===a.Nc:!1};c.w=function(a){switch(a){case 0:return this.Nc;default:throw(new P).c(""+a);}};c.k=function(){return od(this)};c.c=function(a){this.Nc=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Hu(a){return!!(a&&a.$classData&&a.$classData.n.fR)}
+c.$classData=g({fR:0},!1,"org.nlogo.tortoise.compiler.json.TortoiseJson$JsString",{fR:1,d:1,Hr:1,t:1,q:1,l:1,i:1});function zX(){}zX.prototype=new M_;zX.prototype.constructor=zX;c=zX.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({U5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$210$2$$anonfun$apply$1",{U5:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function BX(){}BX.prototype=new M_;BX.prototype.constructor=BX;c=BX.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({W5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$212$2$$anonfun$apply$2",{W5:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function DX(){}DX.prototype=new M_;DX.prototype.constructor=DX;c=DX.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({Y5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$214$2$$anonfun$apply$3",{Y5:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function EX(){}EX.prototype=new M_;EX.prototype.constructor=EX;c=EX.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({$5:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$216$2$$anonfun$apply$4",{$5:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function FX(){}FX.prototype=new M_;FX.prototype.constructor=FX;c=FX.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({b6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$218$2$$anonfun$apply$5",{b6:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function GX(){}GX.prototype=new M_;GX.prototype.constructor=GX;c=GX.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({d6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$220$2$$anonfun$apply$6",{d6:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function IX(){}IX.prototype=new M_;IX.prototype.constructor=IX;c=IX.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({f6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$222$2$$anonfun$apply$7",{f6:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function KX(){}KX.prototype=new M_;KX.prototype.constructor=KX;c=KX.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({h6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$224$2$$anonfun$apply$8",{h6:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function LX(){}LX.prototype=new M_;LX.prototype.constructor=LX;c=LX.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({j6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$226$2$$anonfun$apply$9",{j6:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function MX(){}MX.prototype=new M_;MX.prototype.constructor=MX;c=MX.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({l6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$228$2$$anonfun$apply$10",{l6:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function PX(){}PX.prototype=new M_;PX.prototype.constructor=PX;c=PX.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({n6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetToJson$$anon$1$writer$macro$230$2$$anonfun$apply$11",{n6:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function YX(){}YX.prototype=new M_;YX.prototype.constructor=YX;c=YX.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({y6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$dims2Json$writer$macro$234$2$$anonfun$apply$4",{y6:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function bY(){}bY.prototype=new M_;bY.prototype.constructor=bY;c=bY.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(Fk(e))return(new A).e(d,e.U)}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&Fk(a.na())?!0:!1};
+c.$classData=g({C6:0},!1,"org.nlogo.tortoise.compiler.json.WidgetWrite$pen2Json$writer$macro$232$2$$anonfun$apply$3",{C6:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function vR(){}vR.prototype=new M_;vR.prototype.constructor=vR;c=vR.prototype;c.b=function(){return this};c.$j=function(){return!0};c.Ym=function(){var a=y(),b=fn(a),b=la(Wa(wd),[b]),d;d=0;for(a=iv(a);a.ta();){var e=a.ma();b.m[d]=e;d=1+d|0}return(new A).e(!1,b)};c.Ya=function(a){return this.$j(a)};c.eb=function(a,b){return this.Ym(a,b)};
+c.$classData=g({I6:0},!1,"org.scalajs.testinterface.HTMLRunner$$anonfun$scheduleTask$7",{I6:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Yv(){}Yv.prototype=new M_;Yv.prototype.constructor=Yv;Yv.prototype.b=function(){return this};Yv.prototype.Ya=function(a){return ud(a)};Yv.prototype.eb=function(a,b){return ud(a)?a:b.y(a)};Yv.prototype.$classData=g({V6:0},!1,"org.scalajs.testinterface.TestDetector$$anonfun$tryLoadFromExportsNamespace$1$1",{V6:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Xv(){}
+Xv.prototype=new M_;Xv.prototype.constructor=Xv;Xv.prototype.b=function(){return this};Xv.prototype.Ya=function(a){return gl(pa(vd),a.El)};Xv.prototype.eb=function(a,b){return gl(pa(vd),a.El)?Bha(a):b.y(a)};Xv.prototype.$classData=g({W6:0},!1,"org.scalajs.testinterface.TestDetector$$anonfun$tryLoadFromReflect$1$1",{W6:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function NR(){this.$S=this.Oo=null}NR.prototype=new l;NR.prototype.constructor=NR;c=NR.prototype;c.u=function(){return"JsError"};c.v=function(){return 1};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.QB){var b=this.Oo;a=a.Oo;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Oo;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Mt=function(){return this.$S};c.iU=function(a){return a.y(this.Oo)};c.G=function(a){this.Oo=a;this.$S=F();return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({QB:0},!1,"play.api.libs.json.JsError",{QB:1,d:1,B7:1,t:1,q:1,l:1,i:1});function X4(){this.Sg=null}X4.prototype=new Iua;X4.prototype.constructor=X4;X4.prototype.b=function(){l2.prototype.uq.call(this,(B(),y()));return this};X4.prototype.$classData=g({A7:0},!1,"play.api.libs.json.JsPath$",{A7:1,RB:1,d:1,t:1,q:1,l:1,i:1});var KBa=void 0;function MR(){KBa||(KBa=(new X4).b());return KBa}function IR(){this.Sg=this.Y=null}IR.prototype=new l;IR.prototype.constructor=IR;c=IR.prototype;
+c.u=function(){return"JsSuccess"};c.v=function(){return 2};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.SB&&bn(cn(),this.Y,a.Y)){var b=this.Sg;a=a.Sg;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Y;case 1:return this.Sg;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.Mt=function(){return(new J).j(this.Y)};c.iU=function(a,b){return b.y(this.Y)};
+function HR(a,b){var d=(new l2).uq((MR(),y()));a.Y=b;a.Sg=d;return a}c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({SB:0},!1,"play.api.libs.json.JsSuccess",{SB:1,d:1,B7:1,t:1,q:1,l:1,i:1});function By(){this.$l=null}By.prototype=new Jua;By.prototype.constructor=By;c=By.prototype;c.u=function(){return"\\/-"};c.v=function(){return 1};c.o=function(a){return this===a?!0:$0(a)?bn(cn(),this.$l,a.$l):!1};
+c.w=function(a){switch(a){case 0:return this.$l;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.j=function(a){this.$l=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function $0(a){return!!(a&&a.$classData&&a.$classData.n.tR)}c.$classData=g({tR:0},!1,"scalaz.$bslash$div$minus",{tR:1,O7:1,d:1,t:1,q:1,l:1,i:1});function Dy(){this.ha=null}Dy.prototype=new Jua;Dy.prototype.constructor=Dy;c=Dy.prototype;c.u=function(){return"-\\/"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:Z0(a)?bn(cn(),this.ha,a.ha):!1};c.w=function(a){switch(a){case 0:return this.ha;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.j=function(a){this.ha=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Z0(a){return!!(a&&a.$classData&&a.$classData.n.uR)}c.$classData=g({uR:0},!1,"scalaz.$minus$bslash$div",{uR:1,O7:1,d:1,t:1,q:1,l:1,i:1});function zS(a){a.Fl(LBa(a))}function Y4(){this.ga=null}
+Y4.prototype=new l;Y4.prototype.constructor=Y4;function LBa(a){var b=new Y4;if(null===a)throw ug(vg(),null);b.ga=a;return b}Y4.prototype.$classData=g({i8:0},!1,"scalaz.BindRec$$anon$3",{i8:1,d:1,Lma:1,mC:1,Kr:1,uk:1,$i:1});function Z4(){}Z4.prototype=new Oua;Z4.prototype.constructor=Z4;function MBa(){}MBa.prototype=Z4.prototype;function bq(){this.fc=null}bq.prototype=new Vua;bq.prototype.constructor=bq;c=bq.prototype;c.u=function(){return"Failure"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:aq(a)?bn(cn(),this.fc,a.fc):!1};c.w=function(a){switch(a){case 0:return this.fc;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.j=function(a){this.fc=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function aq(a){return!!(a&&a.$classData&&a.$classData.n.zR)}c.$classData=g({zR:0},!1,"scalaz.Failure",{zR:1,l$:1,d:1,t:1,q:1,l:1,i:1});
+function $4(){this.Fi=this.Ug=this.yd=this.Ib=this.Wa=this.Aa=this.qf=null}$4.prototype=new Ix;$4.prototype.constructor=$4;c=$4.prototype;c.u=function(){return"Four"};c.v=function(){return 5};c.vw=function(){Bn(Cn(),"Digit overflow")};c.o=function(a){return this===a?!0:Zx(a)?bn(cn(),this.qf,a.qf)&&bn(cn(),this.Aa,a.Aa)&&bn(cn(),this.Wa,a.Wa)&&bn(cn(),this.Ib,a.Ib)&&bn(cn(),this.yd,a.yd):!1};
+c.w=function(a){switch(a){case 0:return this.qf;case 1:return this.Aa;case 2:return this.Wa;case 3:return this.Ib;case 4:return this.yd;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.ua=function(a){a.y(this.Aa);a.y(this.Wa);a.y(this.Ib);a.y(this.yd)};c.Ms=function(){return this.Fi};c.yw=function(){Bn(Cn(),"Digit overflow")};function NBa(a,b,d,e,f,h,k){a.qf=b;a.Aa=d;a.Wa=e;a.Ib=f;a.yd=h;a.Ug=k;a.Fi=b;return a}
+c.iy=function(a,b){Vx();var d=a.y(this.Aa),e=a.y(this.Wa),f=a.y(this.Ib);a=a.y(this.yd);return NBa(new $4,b.Oe(b.Oe(b.Oe(b.Nl(d),e),f),a),d,e,f,a,b)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Zx(a){return!!(a&&a.$classData&&a.$classData.n.BR)}c.$classData=g({BR:0},!1,"scalaz.Four",{BR:1,cC:1,d:1,t:1,q:1,l:1,i:1});function Hy(){this.So=this.Lr=null}Hy.prototype=new zy;Hy.prototype.constructor=Hy;c=Hy.prototype;c.u=function(){return"Gosub"};c.v=function(){return 2};
+function Gy(a,b,d){a.Lr=b;a.So=d;return a}c.o=function(a){if(this===a)return!0;if(Fy(a)){var b=this.Lr,d=a.Lr;if(null===b?null===d:b.o(d))return b=this.So,a=a.So,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Lr;case 1:return this.So;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Fy(a){return!!(a&&a.$classData&&a.$classData.n.DR)}
+c.$classData=g({DR:0},!1,"scalaz.Free$Gosub",{DR:1,CR:1,d:1,t:1,q:1,l:1,i:1});function Ey(){this.ha=null}Ey.prototype=new zy;Ey.prototype.constructor=Ey;c=Ey.prototype;c.u=function(){return"Return"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Ay(a)?bn(cn(),this.ha,a.ha):!1};c.w=function(a){switch(a){case 0:return this.ha;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.j=function(a){this.ha=a;return this};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};function Ay(a){return!!(a&&a.$classData&&a.$classData.n.ER)}c.$classData=g({ER:0},!1,"scalaz.Free$Return",{ER:1,CR:1,d:1,t:1,q:1,l:1,i:1});function a5(){this.ha=null}a5.prototype=new zy;a5.prototype.constructor=a5;c=a5.prototype;c.u=function(){return"Suspend"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Cy(a)?bn(cn(),this.ha,a.ha):!1};c.w=function(a){switch(a){case 0:return this.ha;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.j=function(a){this.ha=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Cy(a){return!!(a&&a.$classData&&a.$classData.n.FR)}c.$classData=g({FR:0},!1,"scalaz.Free$Suspend",{FR:1,CR:1,d:1,t:1,q:1,l:1,i:1});function jq(){this.fd=this.bd=null}jq.prototype=new Pua;jq.prototype.constructor=jq;c=jq.prototype;c.u=function(){return"ICons"};c.v=function(){return 2};
+c.o=function(a){if(this===a)return!0;if(iq(a)&&bn(cn(),this.bd,a.bd)){var b=this.fd;a=a.fd;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.bd;case 1:return this.fd;default:throw(new P).c(""+a);}};c.Sb=function(a,b){this.bd=a;this.fd=b;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function iq(a){return!!(a&&a.$classData&&a.$classData.n.GR)}c.$classData=g({GR:0},!1,"scalaz.ICons",{GR:1,T8:1,d:1,t:1,q:1,l:1,i:1});
+function y2(){}y2.prototype=new Pua;y2.prototype.constructor=y2;c=y2.prototype;c.b=function(){return this};c.u=function(){return"INil"};c.v=function(){return 0};c.o=function(a){return hq(a)};c.w=function(a){throw(new P).c(""+a);};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function hq(a){return!!(a&&a.$classData&&a.$classData.n.HR)}c.$classData=g({HR:0},!1,"scalaz.INil",{HR:1,T8:1,d:1,t:1,q:1,l:1,i:1});function b5(){}b5.prototype=new Rua;b5.prototype.constructor=b5;
+function OBa(){}OBa.prototype=b5.prototype;function mS(){this.Fi=this.Ug=this.Aa=this.qf=null}mS.prototype=new Ix;mS.prototype.constructor=mS;c=mS.prototype;c.u=function(){return"One"};c.v=function(){return 2};c.vw=function(a){return Yna(new kS,this.Ug.Oe(this.qf,a),this.Aa,a,this.Ug)};c.o=function(a){return this===a?!0:Sx(a)?bn(cn(),this.qf,a.qf)&&bn(cn(),this.Aa,a.Aa):!1};c.w=function(a){switch(a){case 0:return this.qf;case 1:return this.Aa;default:throw(new P).c(""+a);}};
+c.k=function(){return X(W(),this)};c.ua=function(a){a.y(this.Aa)};c.Ms=function(){return this.Fi};c.yw=function(a){return Yna(new kS,this.Ug.Bo(a,this.qf),a,this.Aa,this.Ug)};c.iy=function(a,b){return ky(Vx(),a.y(this.Aa),b)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Sx(a){return!!(a&&a.$classData&&a.$classData.n.NR)}c.$classData=g({NR:0},!1,"scalaz.One",{NR:1,cC:1,d:1,t:1,q:1,l:1,i:1});function c5(){}c5.prototype=new Sua;c5.prototype.constructor=c5;
+function PBa(){}PBa.prototype=c5.prototype;function d5(){}d5.prototype=new Tua;d5.prototype.constructor=d5;function QBa(){}QBa.prototype=d5.prototype;function dq(){this.ha=null}dq.prototype=new Vua;dq.prototype.constructor=dq;c=dq.prototype;c.u=function(){return"Success"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Zp(a)?bn(cn(),this.ha,a.ha):!1};c.w=function(a){switch(a){case 0:return this.ha;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.j=function(a){this.ha=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Zp(a){return!!(a&&a.$classData&&a.$classData.n.PR)}c.$classData=g({PR:0},!1,"scalaz.Success",{PR:1,l$:1,d:1,t:1,q:1,l:1,i:1});function e5(){this.Fi=this.Ug=this.Ib=this.Wa=this.Aa=this.qf=null}e5.prototype=new Ix;e5.prototype.constructor=e5;c=e5.prototype;c.u=function(){return"Three"};function RBa(a,b,d,e,f,h){a.qf=b;a.Aa=d;a.Wa=e;a.Ib=f;a.Ug=h;a.Fi=b;return a}c.v=function(){return 4};
+c.vw=function(a){return NBa(new $4,this.Ug.Oe(this.qf,a),this.Aa,this.Wa,this.Ib,a,this.Ug)};c.o=function(a){return this===a?!0:Yx(a)?bn(cn(),this.qf,a.qf)&&bn(cn(),this.Aa,a.Aa)&&bn(cn(),this.Wa,a.Wa)&&bn(cn(),this.Ib,a.Ib):!1};c.w=function(a){switch(a){case 0:return this.qf;case 1:return this.Aa;case 2:return this.Wa;case 3:return this.Ib;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.ua=function(a){a.y(this.Aa);a.y(this.Wa);a.y(this.Ib)};c.Ms=function(){return this.Fi};
+c.yw=function(a){return NBa(new $4,this.Ug.Bo(a,this.qf),a,this.Aa,this.Wa,this.Ib,this.Ug)};c.iy=function(a,b){Vx();var d=a.y(this.Aa),e=a.y(this.Wa);a=a.y(this.Ib);return RBa(new e5,b.Oe(b.Oe(b.Nl(d),e),a),d,e,a,b)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Yx(a){return!!(a&&a.$classData&&a.$classData.n.QR)}c.$classData=g({QR:0},!1,"scalaz.Three",{QR:1,cC:1,d:1,t:1,q:1,l:1,i:1});
+function SBa(a,b,d,e){b=a.kz(b,d,Jz().kg);return foa(a,b,sb(new tb,function(a,b){return function(d,e){return b.sc(d,K(function(a,b){return function(){return b}}(a,e)))}}(a,e)))}function kS(){this.Fi=this.Ug=this.Wa=this.Aa=this.qf=null}kS.prototype=new Ix;kS.prototype.constructor=kS;function Yna(a,b,d,e,f){a.qf=b;a.Aa=d;a.Wa=e;a.Ug=f;a.Fi=b;return a}c=kS.prototype;c.u=function(){return"Two"};c.v=function(){return 3};c.vw=function(a){return RBa(new e5,this.Ug.Oe(this.qf,a),this.Aa,this.Wa,a,this.Ug)};
+c.o=function(a){return this===a?!0:Wx(a)?bn(cn(),this.qf,a.qf)&&bn(cn(),this.Aa,a.Aa)&&bn(cn(),this.Wa,a.Wa):!1};c.w=function(a){switch(a){case 0:return this.qf;case 1:return this.Aa;case 2:return this.Wa;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.ua=function(a){a.y(this.Aa);a.y(this.Wa)};c.Ms=function(){return this.Fi};c.yw=function(a){return RBa(new e5,this.Ug.Bo(a,this.qf),a,this.Aa,this.Wa,this.Ug)};c.iy=function(a,b){return ly(Vx(),a.y(this.Aa),a.y(this.Wa),b)};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Wx(a){return!!(a&&a.$classData&&a.$classData.n.RR)}c.$classData=g({RR:0},!1,"scalaz.Two",{RR:1,cC:1,d:1,t:1,q:1,l:1,i:1});function f5(){}f5.prototype=new Uua;f5.prototype.constructor=f5;function TBa(){}TBa.prototype=f5.prototype;function Sd(){this.ga=null}Sd.prototype=new l;Sd.prototype.constructor=Sd;c=Sd.prototype;c.sc=function(a,b){Pz();a=null===a?0:a.Y;b=ne(b);b=65535&da(a,null===b?0:b.Y);return(new Ke).Xa(b)};
+c.Rh=function(){};c.ag=function(){};c.xe=function(){Pz();return(new Ke).Xa(1)};c.hf=function(){};c.qg=function(){};c.Yd=function(a){if(null===a)throw ug(vg(),null);this.ga=a;Cd(this);dz(this);zd(this);wz(this);gS(this);return this};c.Df=function(){};c.$classData=g({y$:0},!1,"scalaz.std.AnyValInstances$$anon$10",{y$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1});function Ud(){this.ga=null}Ud.prototype=new l;Ud.prototype.constructor=Ud;c=Ud.prototype;c.sc=function(a,b){Pz();b=ne(b);return da(a|0,b|0)<<16>>16};
+c.Rh=function(){};c.ag=function(){};c.xe=function(){Pz();return 1};c.hf=function(){};c.qg=function(){};c.Yd=function(a){if(null===a)throw ug(vg(),null);this.ga=a;Cd(this);dz(this);zd(this);wz(this);gS(this);return this};c.Df=function(){};c.$classData=g({z$:0},!1,"scalaz.std.AnyValInstances$$anon$11",{z$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1});function Wd(){this.ga=null}Wd.prototype=new l;Wd.prototype.constructor=Wd;c=Wd.prototype;c.sc=function(a,b){Pz();b=ne(b);return da(a|0,b|0)};c.Rh=function(){};
+c.ag=function(){};c.xe=function(){Pz();return 1};c.hf=function(){};c.qg=function(){};c.Yd=function(a){if(null===a)throw ug(vg(),null);this.ga=a;Cd(this);dz(this);zd(this);wz(this);gS(this);return this};c.Df=function(){};c.$classData=g({A$:0},!1,"scalaz.std.AnyValInstances$$anon$12",{A$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1});function Yd(){this.ga=null}Yd.prototype=new l;Yd.prototype.constructor=Yd;c=Yd.prototype;
+c.sc=function(a,b){Pz();var d=Qa(a);a=d.la;d=d.qa;b=ne(b);b=Qa(b);var e=b.la,f=65535&a,h=a>>>16|0,k=65535&e,p=e>>>16|0,t=da(f,k),k=da(h,k),x=da(f,p),f=t+((k+x|0)<<16)|0,t=(t>>>16|0)+x|0;a=(((da(a,b.qa)+da(d,e)|0)+da(h,p)|0)+(t>>>16|0)|0)+(((65535&t)+k|0)>>>16|0)|0;return(new Vb).ia(f,a)};c.Rh=function(){};c.ag=function(){};c.xe=function(){Pz();return(new Vb).ia(1,0)};c.hf=function(){};c.qg=function(){};
+c.Yd=function(a){if(null===a)throw ug(vg(),null);this.ga=a;Cd(this);dz(this);zd(this);wz(this);gS(this);return this};c.Df=function(){};c.$classData=g({B$:0},!1,"scalaz.std.AnyValInstances$$anon$13",{B$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1});function Qd(){this.ga=null}Qd.prototype=new l;Qd.prototype.constructor=Qd;c=Qd.prototype;c.sc=function(a,b){Pz();b=ne(b);return da(a|0,b|0)<<24>>24};c.Rh=function(){};c.ag=function(){};c.xe=function(){Pz();return 1};c.hf=function(){};c.qg=function(){};
+c.Yd=function(a){if(null===a)throw ug(vg(),null);this.ga=a;Cd(this);dz(this);zd(this);wz(this);gS(this);return this};c.Df=function(){};c.$classData=g({L$:0},!1,"scalaz.std.AnyValInstances$$anon$9",{L$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1});function g5(){this.Va=null}g5.prototype=new M_;g5.prototype.constructor=g5;g5.prototype.Ya=function(){return!0};g5.prototype.eb=function(){return this.Va.JX};
+g5.prototype.$classData=g({oaa:0},!1,"scalaz.std.PartialFunctionInstances$$anon$1$$anonfun$1",{oaa:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function h5(){}h5.prototype=new l;h5.prototype.constructor=h5;c=h5.prototype;c.sc=function(a,b){Pz();b=ne(b);return Nf(a,b)};c.Sd=function(a){return Dd(this,a)};c.ag=function(){};c.xe=function(){Pz();return cf().Wm};c.ah=function(a){return na(a)};c.Xg=function(){};c.hf=function(){};c.qg=function(){};c.aE=function(){Cd(this);dz(this);zd(this);wz(this);Jd(this);return this};
+c.Df=function(){};c.$classData=g({Daa:0},!1,"scalaz.std.java.math.BigIntegerInstances$$anon$2",{Daa:1,d:1,Hf:1,vf:1,vg:1,hg:1,gh:1});function be(){}be.prototype=new l;be.prototype.constructor=be;c=be.prototype;c.sc=function(a,b){Pz();b=ne(b);return(new m_).nn(Nf(a.le,b.le))};c.Sd=function(a){return Dd(this,a)};c.ag=function(){};c.xe=function(){Pz();return l_(n_(),1)};c.ah=function(a){return na(a)};c.dE=function(){Cd(this);dz(this);zd(this);wz(this);Jd(this);return this};c.Xg=function(){};c.hf=function(){};
+c.qg=function(){};c.Df=function(){};c.$classData=g({Oaa:0},!1,"scalaz.std.math.BigInts$$anon$2",{Oaa:1,d:1,Hf:1,vf:1,vg:1,hg:1,gh:1});function sA(){}sA.prototype=new M_;sA.prototype.constructor=sA;c=sA.prototype;c.$j=function(){return!0};c.Ym=function(a){return(new qA).wd(a)};c.Ya=function(a){return this.$j(a)};c.eb=function(a,b){return this.Ym(a,b)};c.$classData=g({uba:0},!1,"utest.framework.TestTreeSeq$$anonfun$$nestedInanonfun$runFuture$1$1",{uba:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});
+function i5(){this.NY=this.Va=null}i5.prototype=new M_;i5.prototype.constructor=i5;c=i5.prototype;c.$j=function(){return!0};c.Ym=function(a){return Roa(a)?(new J).j(a):(new J).j(UBa(this.NY,a&&a.$classData&&a.$classData.n.AE&&"Boxed Error"===a.Nc?a.zf:a))};function ija(a,b){var d=new i5;if(null===a)throw ug(vg(),null);d.Va=a;d.NY=b;return d}c.Ya=function(a){return this.$j(a)};c.eb=function(a,b){return this.Ym(a,b)};
+c.$classData=g({vba:0},!1,"utest.framework.TestTreeSeq$$anonfun$1",{vba:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function bZ(){}bZ.prototype=new M_;bZ.prototype.constructor=bZ;c=bZ.prototype;c.zc=function(a,b){if(null!==a){var d=a.ja(),e=a.na();if(""!==e)return""+d+("\n"+e).split("\n").join("\n\u001b[31m")}return b.y(a)};c.Ya=function(a){return this.Bc(a)};c.eb=function(a,b){return this.zc(a,b)};c.Bc=function(a){return null!==a&&""!==a.na()?!0:!1};
+c.$classData=g({Dba:0},!1,"utest.runner.MasterRunner$$anonfun$1",{Dba:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function j5(){this.AV=null}j5.prototype=new M_;j5.prototype.constructor=j5;c=j5.prototype;c.$j=function(){return!0};c.Ym=function(a){for(var b=this.AV,d=0,e=b.m.length;d<e;)b.m[d].jG(a),d=1+d|0};function Yoa(a){var b=new j5;b.AV=a;return b}c.Ya=function(a){return this.$j(a)};c.eb=function(a,b){return this.Ym(a,b)};
+c.$classData=g({Gba:0},!1,"utest.runner.Task$$anonfun$1",{Gba:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function A(){this.Db=this.lb=null}A.prototype=new l;A.prototype.constructor=A;function VBa(){}c=VBa.prototype=A.prototype;c.u=function(){return"Tuple2"};c.Zi=function(){return this.ja()|0};c.v=function(){return 2};c.o=function(a){return this===a?!0:IBa(a)?bn(cn(),this.ja(),a.ja())&&bn(cn(),this.na(),a.na()):!1};
+c.w=function(a){a:switch(a){case 0:a=this.ja();break a;case 1:a=this.na();break a;default:throw(new P).c(""+a);}return a};c.e=function(a,b){this.lb=a;this.Db=b;return this};c.k=function(){return"("+this.ja()+","+this.na()+")"};c.na=function(){return this.Db};c.Ec=function(){return this.na()|0};c.r=function(){return R(Q(),this)};c.ja=function(){return this.lb};c.x=function(){return Y(new Z,this)};function IBa(a){return!!(a&&a.$classData&&a.$classData.n.tC)}
+var Zm=g({tC:0},!1,"scala.Tuple2",{tC:1,d:1,Gda:1,t:1,q:1,l:1,i:1});A.prototype.$classData=Zm;function ac(){this.tf=this.Eb=this.fb=null}ac.prototype=new l;ac.prototype.constructor=ac;c=ac.prototype;c.u=function(){return"Tuple3"};c.v=function(){return 3};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.DS?bn(cn(),this.fb,a.fb)&&bn(cn(),this.Eb,a.Eb)&&bn(cn(),this.tf,a.tf):!1};
+c.w=function(a){a:switch(a){case 0:a=this.fb;break a;case 1:a=this.Eb;break a;case 2:a=this.tf;break a;default:throw(new P).c(""+a);}return a};c.k=function(){return"("+this.fb+","+this.Eb+","+this.tf+")"};c.Bd=function(a,b,d){this.fb=a;this.Eb=b;this.tf=d;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({DS:0},!1,"scala.Tuple3",{DS:1,d:1,ppa:1,t:1,q:1,l:1,i:1});function c2(){this.wr=this.tf=this.Eb=this.fb=null}c2.prototype=new l;
+c2.prototype.constructor=c2;c=c2.prototype;c.u=function(){return"Tuple4"};c.v=function(){return 4};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.ES?bn(cn(),this.fb,a.fb)&&bn(cn(),this.Eb,a.Eb)&&bn(cn(),this.tf,a.tf)&&bn(cn(),this.wr,a.wr):!1};c.w=function(a){return ipa(this,a)};c.k=function(){return"("+this.fb+","+this.Eb+","+this.tf+","+this.wr+")"};c.mm=function(a,b,d,e){this.fb=a;this.Eb=b;this.tf=d;this.wr=e;return this};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.$classData=g({ES:0},!1,"scala.Tuple4",{ES:1,d:1,qpa:1,t:1,q:1,l:1,i:1});function xU(){DT.call(this)}xU.prototype=new Zua;xU.prototype.constructor=xU;xU.prototype.qb=function(a){DT.prototype.gc.call(this,"Array index out of range: "+a,null);return this};xU.prototype.$classData=g({Wba:0},!1,"java.lang.ArrayIndexOutOfBoundsException",{Wba:1,wE:1,ef:1,xd:1,Lc:1,d:1,i:1});function hZ(){DT.call(this)}hZ.prototype=new Q2;hZ.prototype.constructor=hZ;
+hZ.prototype.c=function(a){DT.prototype.gc.call(this,a,null);return this};var ska=g({xE:0},!1,"java.lang.NumberFormatException",{xE:1,vn:1,ef:1,xd:1,Lc:1,d:1,i:1});hZ.prototype.$classData=ska;function wF(){DT.call(this)}wF.prototype=new Zua;wF.prototype.constructor=wF;wF.prototype.b=function(){DT.prototype.gc.call(this,null,null);return this};wF.prototype.qb=function(a){DT.prototype.gc.call(this,"String index out of range: "+a,null);return this};
+wF.prototype.$classData=g({wca:0},!1,"java.lang.StringIndexOutOfBoundsException",{wca:1,wE:1,ef:1,xd:1,Lc:1,d:1,i:1});function t1(){DT.call(this)}t1.prototype=new Yua;t1.prototype.constructor=t1;t1.prototype.b=function(){DT.prototype.gc.call(this,null,null);return this};t1.prototype.$classData=g({Jca:0},!1,"java.util.FormatterClosedException",{Jca:1,fV:1,ef:1,xd:1,Lc:1,d:1,i:1});function k5(){DT.call(this)}k5.prototype=new Q2;k5.prototype.constructor=k5;function l5(){}l5.prototype=k5.prototype;
+function IB(){this.td=null}IB.prototype=new l;IB.prototype.constructor=IB;c=IB.prototype;c.u=function(){return"DisjunctNode"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(LB(a)){var b=this.td;a=a.td;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.td;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.G=function(a){this.td=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+function LB(a){return!!(a&&a.$classData&&a.$classData.n.lV)}c.$classData=g({lV:0},!1,"java.util.regex.GroupStartMap$DisjunctNode",{lV:1,d:1,mV:1,t:1,q:1,l:1,i:1});function vB(){this.Iq=0}vB.prototype=new l;vB.prototype.constructor=vB;c=vB.prototype;c.u=function(){return"OriginallyGroupped"};c.v=function(){return 1};c.o=function(a){return this===a?!0:rB(a)?this.Iq===a.Iq:!1};c.w=function(a){switch(a){case 0:return this.Iq;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.qb=function(a){this.Iq=a;return this};c.r=function(){var a=-889275714,a=V().da(a,this.Iq);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};function rB(a){return!!(a&&a.$classData&&a.$classData.n.nV)}c.$classData=g({nV:0},!1,"java.util.regex.GroupStartMap$OriginallyGroupped",{nV:1,d:1,dda:1,t:1,q:1,l:1,i:1});function oB(){this.Ma=this.Sa=null}oB.prototype=new l;oB.prototype.constructor=oB;c=oB.prototype;c.Dd=function(a,b){this.Sa=a;this.Ma=b;return this};c.u=function(){return"OriginallyWrapped"};
+c.v=function(){return 2};c.o=function(a){return this===a?!0:mB(a)?this.Sa===a.Sa&&this.Ma===a.Ma:!1};c.w=function(a){switch(a){case 0:return this.Sa;case 1:return this.Ma;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function mB(a){return!!(a&&a.$classData&&a.$classData.n.oV)}c.$classData=g({oV:0},!1,"java.util.regex.GroupStartMap$OriginallyWrapped",{oV:1,d:1,dda:1,t:1,q:1,l:1,i:1});
+function sB(){this.td=null}sB.prototype=new l;sB.prototype.constructor=sB;c=sB.prototype;c.u=function(){return"ParentNode"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(KB(a)){var b=this.td;a=a.td;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.td;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.G=function(a){this.td=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+function KB(a){return!!(a&&a.$classData&&a.$classData.n.pV)}c.$classData=g({pV:0},!1,"java.util.regex.GroupStartMap$ParentNode",{pV:1,d:1,mV:1,t:1,q:1,l:1,i:1});function xB(){this.op=null}xB.prototype=new l;xB.prototype.constructor=xB;c=xB.prototype;c.u=function(){return"RegexLeaf"};c.v=function(){return 1};c.o=function(a){return this===a?!0:nB(a)?this.op===a.op:!1};c.w=function(a){switch(a){case 0:return this.op;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.c=function(a){this.op=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function nB(a){return!!(a&&a.$classData&&a.$classData.n.qV)}c.$classData=g({qV:0},!1,"java.util.regex.GroupStartMap$RegexLeaf",{qV:1,d:1,mV:1,t:1,q:1,l:1,i:1});function m5(){}m5.prototype=new $ua;m5.prototype.constructor=m5;c=m5.prototype;c.b=function(){return this};c.u=function(){return"None"};c.v=function(){return 0};c.z=function(){return!0};c.X=function(){throw(new Du).c("None.get");};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"None"};c.r=function(){return 2433880};c.x=function(){return Y(new Z,this)};c.$classData=g({qda:0},!1,"scala.None$",{qda:1,KW:1,d:1,t:1,q:1,l:1,i:1});var WBa=void 0;function F(){WBa||(WBa=(new m5).b());return WBa}function fC(){}fC.prototype=new M_;fC.prototype.constructor=fC;fC.prototype.b=function(){return this};fC.prototype.Ya=function(){return!0};fC.prototype.eb=function(){return ld().Tq};
+fC.prototype.$classData=g({vda:0},!1,"scala.PartialFunction$$anonfun$1",{vda:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function t_(){this.ms=this.ls=null}t_.prototype=new M_;t_.prototype.constructor=t_;c=t_.prototype;c.y=function(a){return this.ls.eb(a,this.ms)};c.Ij=function(a){return XBa(this,a)};c.xl=function(a){return s_(new t_,this.ls,this.ms.xl(a))};function XBa(a,b){return s_(new t_,a.ls.Ij(b),a.ms.Ij(b))}c.Ya=function(a){return this.ls.Ya(a)||this.ms.Ya(a)};
+c.eb=function(a,b){var d=this.ls.eb(a,ld().Tq);return bC(ld(),d)?this.ms.eb(a,b):d};c.Ca=function(a){return XBa(this,a)};function s_(a,b,d){a.ls=b;a.ms=d;return a}c.$classData=g({yda:0},!1,"scala.PartialFunction$OrElse",{yda:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function J(){this.U=null}J.prototype=new $ua;J.prototype.constructor=J;c=J.prototype;c.u=function(){return"Some"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Fk(a)?bn(cn(),this.U,a.U):!1};c.z=function(){return!1};
+c.w=function(a){switch(a){case 0:return this.U;default:throw(new P).c(""+a);}};c.X=function(){return this.U};c.k=function(){return X(W(),this)};c.j=function(a){this.U=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Fk(a){return!!(a&&a.$classData&&a.$classData.n.LW)}c.$classData=g({LW:0},!1,"scala.Some",{LW:1,KW:1,d:1,t:1,q:1,l:1,i:1});function U2(){DT.call(this)}U2.prototype=new Q2;U2.prototype.constructor=U2;
+U2.prototype.Cd=function(a,b){var d=(new v).G((new w).f(["invalid escape "," index ",' in "','". Use \\\\\\\\ for literal \\\\.']));oF(Je(),0<=b&&b<(a.length|0));if(b===(-1+(a.length|0)|0))var e="at terminal";else var e=(new v).G((new w).f(["'\\\\","' not one of "," at"])),f=65535&(a.charCodeAt(1+b|0)|0),e=u(e,(new w).f([(new Ke).Xa(f),"[\\b, \\t, \\n, \\f, \\r, \\\\, \\\", \\']"]));a=u(d,(new w).f([e,b,a]));DT.prototype.gc.call(this,a,null);return this};
+U2.prototype.$classData=g({Jda:0},!1,"scala.StringContext$InvalidEscapeException",{Jda:1,vn:1,ef:1,xd:1,Lc:1,d:1,i:1});function K2(){this.lb=null}K2.prototype=new l;K2.prototype.constructor=K2;c=K2.prototype;c.u=function(){return"Tuple1"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.NW?bn(cn(),this.lb,a.lb):!1};c.w=function(a){a:switch(a){case 0:a=this.lb;break a;default:throw(new P).c(""+a);}return a};c.k=function(){return"("+this.lb+")"};
+c.j=function(a){this.lb=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({NW:0},!1,"scala.Tuple1",{NW:1,d:1,npa:1,t:1,q:1,l:1,i:1});function n5(){}n5.prototype=new bva;n5.prototype.constructor=n5;function o5(){}o5.prototype=n5.prototype;function xC(){this.Jk=DA();this.bo=null}xC.prototype=new bva;xC.prototype.constructor=xC;c=xC.prototype;
+c.o=function(a){if(a&&a.$classData&&a.$classData.n.eF){var b=this.bo.Vk(this.Jk),d=b.la,b=b.qa;a=a.bo.Vk(a.Jk);return d===a.la&&b===a.qa}return this===a};c.k=function(){var a=this.Jk+" ",b=vC().VY.y(this.bo),d=this.Jk,e=d.qa;return a+(b+(1===d.la&&0===e?"":"s"))};c.xg=function(a){return this.bn(a)};
+function wC(a,b,d){a.Jk=b;a.bo=d;yA().Et===d?b=p5(a,(new Vb).ia(-1,2147483647)):yA().Zw===d?b=p5(a,(new Vb).ia(-1511828489,2147483)):yA().Dt===d?b=p5(a,(new Vb).ia(2077252342,2147)):yA().Ft===d?b=p5(a,(new Vb).ia(633437444,2)):yA().ax===d?b=p5(a,(new Vb).ia(153722867,0)):yA().Iw===d?b=p5(a,(new Vb).ia(2562047,0)):yA().Cr===d?b=p5(a,(new Vb).ia(106751,0)):(d=yA().Cr.Vp(b,d),b=d.la,d=d.qa,b=(-1===d?2147376897<=(-2147483648^b):-1<d)&&(0===d?-2147376897>=(-2147483648^b):0>d));if(!b)throw(new Ne).c("requirement failed: Duration is limited to +-(2^63-1)ns (ca. 292 years)");
+return a}c.bn=function(a){if(a&&a.$classData&&a.$classData.n.eF){var b=this.bo.Vk(this.Jk),d=b.la,b=b.qa,d=(new q5).JD((new Vb).ia(d,b)),b=a.bo.Vk(a.Jk);a=b.la;var b=b.qa,d=d.tc,e=Qa((new Vb).ia(d.la,d.qa)),d=e.la,e=e.qa,b=Qa((new Vb).ia(a,b));a=b.la;b=b.qa;Ra();return e===b?d===a?0:(-2147483648^d)<(-2147483648^a)?-1:1:e<b?-1:1}return-a.bn(this)|0};
+function p5(a,b){var d=b.la,e=b.qa,e=0!==d?~e:-e|0,f=a.Jk,h=f.qa;return(e===h?(-2147483648^(-d|0))<=(-2147483648^f.la):e<h)?(d=a.Jk,a=d.la,d=d.qa,e=b.qa,d===e?(-2147483648^a)<=(-2147483648^b.la):d<e):!1}c.r=function(){return this.bo.Vk(this.Jk).la};c.$classData=g({eF:0},!1,"scala.concurrent.duration.FiniteDuration",{eF:1,dF:1,d:1,l:1,i:1,Cm:1,Ed:1});function GC(){this.Hi=null}GC.prototype=new l;GC.prototype.constructor=GC;c=GC.prototype;c.hw=function(){return!1};c.k=function(){return ata(this)};
+c.nl=function(){return this};c.jp=function(a,b){e_(Ysa(b,a),this.Hi)};c.uG=function(){return this};c.rG=function(){return(new J).j(this.Hi)};c.Oh=function(){return this};c.rD=function(){return this};c.Us=function(a,b){return Qja(this,a,b)};c.$classData=g({bea:0},!1,"scala.concurrent.impl.Promise$KeptPromise$Failed",{bea:1,d:1,cea:1,WW:1,SW:1,cF:1,PW:1});function FC(){this.Hi=null}FC.prototype=new l;FC.prototype.constructor=FC;c=FC.prototype;c.hw=function(){return!1};c.k=function(){return ata(this)};
+c.nl=function(a,b){return Kja(this,a,b)};c.jp=function(a,b){e_(Ysa(b,a),this.Hi)};c.uG=function(a,b,d){return Oja(this,a,b,d)};c.Oh=function(a,b){return Mja(this,a,b)};c.rG=function(){return(new J).j(this.Hi)};c.rD=function(a,b){return Pja(this,a,b)};c.Us=function(){return this};c.$classData=g({dea:0},!1,"scala.concurrent.impl.Promise$KeptPromise$Successful",{dea:1,d:1,cea:1,WW:1,SW:1,cF:1,PW:1});function r5(){this.oW=this.PC=this.dx=this.cx=null}r5.prototype=new l;r5.prototype.constructor=r5;
+function YBa(){}c=YBa.prototype=r5.prototype;c.yg=function(a,b){$D(this,a,b)};c.nb=function(){return this};c.ma=function(){var a=this.ny();return(new Ke).Xa(a)};c.b=function(){this.PC=null;null===this.dx&&null===this.dx&&(this.dx=(new MT).Ju(this));this.oW=this.dx;return this};c.$m=function(){return Sp(new Qp,this)};c.Hg=function(){return this};c.z=function(){return!this.ta()};c.ob=function(){var a=B().s;return bE(this,a)};c.ny=function(){return this.oW.ny()};
+function kpa(a){null===a.cx&&null===a.cx&&(a.cx=(new LT).Ju(a));return a.cx}c.Mc=function(a,b,d){return cc(this,a,b,d)};c.zb=function(a){return cc(this,"",a,"")};c.k=function(){return VT(this)};c.ua=function(a){XT(this,a)};c.Gb=function(a,b){return nl(this,a,b)};c.gg=function(){dk();var a=ek().nc;return bE(this,a)};c.Ha=function(){return as(this)};c.Td=function(){var a=i0().s;return bE(this,a)};c.ta=function(){return this.Bf.ta()};c.Mf=function(){return cc(this,"","","")};c.Jc=function(){return Vv(this)};
+function Uja(a){return a}c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return Vv(this)};c.gd=function(){var a=ol(),a=pl(a);return bE(this,a)};c.sf=function(a,b){return nl(this,a,b)};c.Ae=function(a,b,d){ZT(this,a,b,d)};c.Eg=function(){return!1};c.Ko=function(a){return $T(this,a)};c.we=function(){for(var a=dc(new ec,gc());this.Bf.ta();){var b=this.ny(),b=(new Ke).Xa(b);hc(a,b)}return a.Oa};c.fg=function(a){return hE(this,a)};c.ve=function(a){return iE(this,a)};c.Ke=function(){return kd(this)};
+c.zo=function(){null!==this.PC&&ne(this.PC)};function qA(){this.Bk=null}qA.prototype=new gva;qA.prototype.constructor=qA;c=qA.prototype;c.u=function(){return"Failure"};c.$x=function(){return!1};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(iw(a)){var b=this.Bk;a=a.Bk;return null===b?null===a:b.o(a)}return!1};c.DV=function(){return this};c.w=function(a){switch(a){case 0:return this.Bk;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.ua=function(){};
+c.wd=function(a){this.Bk=a;return this};c.AD=function(a){return ne(a)};c.pD=function(){return(new rA).j(this.Bk)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.dw=function(){return F()};c.pE=function(){return!0};c.AW=function(a){try{return a.Ya(this.Bk)?(new rA).j(a.y(this.Bk)):this}catch(d){a=Un(vg(),d);if(null!==a){var b=nw(ow(),a);if(!b.z())return a=b.X(),(new qA).wd(a);throw ug(vg(),a);}throw d;}};function iw(a){return!!(a&&a.$classData&&a.$classData.n.aX)}
+c.$classData=g({aX:0},!1,"scala.util.Failure",{aX:1,eX:1,d:1,t:1,q:1,l:1,i:1});function Jh(){this.U=null}Jh.prototype=new fva;Jh.prototype.constructor=Jh;c=Jh.prototype;c.u=function(){return"Left"};c.v=function(){return 1};c.o=function(a){return this===a?!0:zm(a)?bn(cn(),this.U,a.U):!1};c.w=function(a){switch(a){case 0:return this.U;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.j=function(a){this.U=a;return this};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};function zm(a){return!!(a&&a.$classData&&a.$classData.n.bX)}c.$classData=g({bX:0},!1,"scala.util.Left",{bX:1,Tea:1,d:1,t:1,q:1,l:1,i:1});function Lh(){this.U=null}Lh.prototype=new fva;Lh.prototype.constructor=Lh;c=Lh.prototype;c.u=function(){return"Right"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Am(a)?bn(cn(),this.U,a.U):!1};c.w=function(a){switch(a){case 0:return this.U;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.j=function(a){this.U=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Am(a){return!!(a&&a.$classData&&a.$classData.n.cX)}c.$classData=g({cX:0},!1,"scala.util.Right",{cX:1,Tea:1,d:1,t:1,q:1,l:1,i:1});function rA(){this.U=null}rA.prototype=new gva;rA.prototype.constructor=rA;c=rA.prototype;c.u=function(){return"Success"};c.$x=function(){return!0};c.v=function(){return 1};c.o=function(a){return this===a?!0:hw(a)?bn(cn(),this.U,a.U):!1};
+c.DV=function(a){try{return(new rA).j(a.y(this.U))}catch(d){a=Un(vg(),d);if(null!==a){var b=nw(ow(),a);if(!b.z())return a=b.X(),(new qA).wd(a);throw ug(vg(),a);}throw d;}};c.w=function(a){switch(a){case 0:return this.U;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.ua=function(a){a.y(this.U)};c.j=function(a){this.U=a;return this};c.AD=function(){return this.U};c.pD=function(){return(new qA).wd((new il).c("Success.failed"))};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.dw=function(){return(new J).j(this.U)};c.pE=function(){return!1};c.AW=function(){return this};function hw(a){return!!(a&&a.$classData&&a.$classData.n.dX)}c.$classData=g({dX:0},!1,"scala.util.Success",{dX:1,eX:1,d:1,t:1,q:1,l:1,i:1});function HD(){this.mD=null}HD.prototype=new M_;HD.prototype.constructor=HD;c=HD.prototype;c.$j=function(a){return qka(GD(),a,this.mD)};c.Ym=function(a,b){if(qka(GD(),a,this.mD))throw ug(vg(),a);return b.y(a)};c.Ya=function(a){return this.$j(a)};
+c.G=function(a){this.mD=a;return this};c.eb=function(a,b){return this.Ym(a,b)};c.$classData=g({afa:0},!1,"scala.util.control.Exception$$anonfun$pfFromExceptions$1",{afa:1,Hb:1,d:1,fa:1,Ea:1,l:1,i:1});function Sr(){this.qm=this.Jba=this.TF=null;this.Cn=0;this.rx=!1}Sr.prototype=new H1;Sr.prototype.constructor=Sr;c=Sr.prototype;c.ma=function(){return this.xm()};c.gr=function(a){s5(this);return this.qm.gr(a)};c.k=function(){return VT(this)};c.Uj=function(){s5(this);return this.qm.Uj()};
+c.xm=function(){var a=this.Cn;switch(a){case 0:if(!this.ta())throw(new Du).b();this.xm();break;case 1:this.Cn=2;break;case 2:this.Cn=0;this.xm();break;case 3:throw(new Du).b();default:throw(new q).j(a);}return Oh(this.qm)};function s5(a){var b=a.Cn;switch(b){case 0:if(!a.ta())throw(new he).b();break;case 1:break;case 2:break;case 3:throw(new he).b();default:throw(new q).j(b);}}
+c.ta=function(){var a=this.Cn;switch(a){case 0:this.Cn=Nh(this.qm)?1:3;break;case 1:break;case 2:this.Cn=0;this.ta();break;case 3:break;default:throw(new q).j(a);}return 1===this.Cn};c.UF=function(){return this.TF};c.Rk=function(){s5(this);return this.qm.Rk()};c.lu=function(a){s5(this);return this.qm.lu(a)};c.$classData=g({nfa:0},!1,"scala.util.matching.Regex$MatchIterator",{nfa:1,Hd:1,d:1,ad:1,La:1,Ka:1,mfa:1});function Tr(){this.Va=this.kF=null}Tr.prototype=new H1;Tr.prototype.constructor=Tr;
+Tr.prototype.ma=function(){return pfa(this)};Tr.prototype.ta=function(){return this.Va.ta()};function pfa(a){a.Va.xm();var b=a.Va.qm,d=new RT;d.xc=a.Va.TF;d.fv=b;d.Ua=b.Rk();d.$a=b.Uj();mpa(d);npa(d);return d}Tr.prototype.$classData=g({ofa:0},!1,"scala.util.matching.Regex$MatchIterator$$anon$1",{ofa:1,Hd:1,d:1,ad:1,La:1,Ka:1,Ipa:1});function le(){this.fe=this.zm=this.ga=null}le.prototype=new VD;le.prototype.constructor=le;c=le.prototype;c.u=function(){return"Success"};c.v=function(){return 2};
+c.o=function(a){return this===a?!0:oe(a)&&a.ga===this.ga?bn(cn(),this.zm,a.zm)?this.fe===a.fe:!1:!1};c.w=function(a){switch(a){case 0:return this.zm;case 1:return this.fe;default:throw(new P).c(""+a);}};c.k=function(){return"["+oP(this.fe)+"] parsed: "+this.zm};c.hU=function(a){return a.y(this.zm).y(this.fe)};c.EC=function(){return this};function ke(a,b,d,e){a.zm=d;a.fe=e;UD.prototype.bp.call(a,b);return a}c.r=function(){return R(Q(),this)};c.EV=function(a){return ke(new le,this.ga,a.y(this.zm),this.fe)};
+c.x=function(){return Y(new Z,this)};function oe(a){return!!(a&&a.$classData&&a.$classData.n.lX)}c.$classData=g({lX:0},!1,"scala.util.parsing.combinator.Parsers$Success",{lX:1,jX:1,d:1,t:1,q:1,l:1,i:1});function t5(a,b){if(b&&b.$classData&&b.$classData.n.pj){var d;if(!(d=a===b)&&(d=a.Ha()===b.Ha()))try{d=a.$F(b)}catch(e){if(e&&e.$classData&&e.$classData.n.bca)d=!1;else throw e;}a=d}else a=!1;return a}function Qp(){this.fq=null;this.ol=!1;this.Va=null}Qp.prototype=new H1;Qp.prototype.constructor=Qp;
+c=Qp.prototype;c.ma=function(){return this.ol?(this.ol=!1,this.fq):this.Va.ma()};c.$m=function(){return this};c.$=function(){this.ol||(this.fq=this.ma(),this.ol=!0);return this.fq};c.ta=function(){return this.ol||this.Va.ta()};function Sp(a,b){if(null===b)throw ug(vg(),null);a.Va=b;a.ol=!1;return a}c.$classData=g({Cfa:0},!1,"scala.collection.Iterator$$anon$1",{Cfa:1,Hd:1,d:1,ad:1,La:1,Ka:1,vfa:1});
+function u5(a,b,d){d=d.cf(a.Fd());a.ua(m(new n,function(a,b,d){return function(a){return d.Zb(b.y(a).nb())}}(a,b,d)));return d.Da()}function L(a,b){b=b.hh();Cpa(b,a);b.Zb(a.lc());return b.Da()}function ZBa(a,b){var d=a.db(),e=(new gE).od(!1);a.ua(m(new n,function(a,b,d,e){return function(a){e.Ba||b.y(a)||(e.Ba=!0);return e.Ba?d.Qa(a):void 0}}(a,b,d,e)));return d.Da()}
+function v5(a){if(a.z())throw(new il).c("empty.init");var b=a.$(),b=(new Al).j(b),d=(new gE).od(!1),e=a.db();oU(e,a,-1);a.ua(m(new n,function(a,b,d,e){return function(a){d.Ba?e.Qa(b.Ba):d.Ba=!0;b.Ba=a}}(a,b,d,e)));return e.Da()}function w5(a){return a.Mc(a.Ze()+"(",", ",")")}function Ek(a){return a.z()?F():(new J).j(a.$())}function x5(a,b,d){var e=a.db();a.ua(m(new n,function(a,b,d,e){return function(a){return!!b.y(a)!==d?e.Qa(a):void 0}}(a,b,d,e)));return e.Da()}
+function WO(a){return a.z()?F():(new J).j(a.hd())}function Ht(a,b,d){d=d.cf(a.Fd());if(b&&b.$classData&&b.$classData.n.Id){var e=b.nb().Ha();oU(d,a,e)}d.Zb(a.lc());d.Zb(b.nb());return d.Da()}function Lt(a,b){var d=a.db(),e=a.db();a.ua(m(new n,function(a,b,d,e){return function(a){return(b.y(a)?d:e).Qa(a)}}(a,b,d,e)));return(new A).e(d.Da(),e.Da())}function $Ba(a){var b=a.$(),b=(new Al).j(b);a.ua(m(new n,function(a,b){return function(a){b.Ba=a}}(a,b)));return b.Ba}
+function aCa(a){if(a.z())throw(new il).c("empty.tail");return a.ee(1)}function Mga(a,b){var d=(new Av).b();a.ua(m(new n,function(a,b,d){return function(k){var p=b.y(k);return d.zD(p,K(function(a){return function(){return a.db()}}(a))).Qa(k)}}(a,b,d)));b=dc(new ec,gc());Xb(new Yb,d,m(new n,function(){return function(a){return null!==a}}(a))).ua(m(new n,function(a,b){return function(a){if(null!==a)return b.Qa((new A).e(a.ja(),a.na().Da()));throw(new q).j(a);}}(a,b)));return b.Oa}
+function Cr(a,b,d){d=Mc(a,d);a.ua(m(new n,function(a,b,d){return function(a){return d.Qa(b.y(a))}}(a,b,d)));return d.Da()}function Mc(a,b){b=b.cf(a.Fd());Cpa(b,a);return b}function y5(a,b,d){d=d.cf(a.Fd());a.ua(b.Am(m(new n,function(a,b){return function(a){return b.Qa(a)}}(a,d))));return d.Da()}
+function z5(a){a=oa(a.Fd()).Bg();for(var b=-1+(a.length|0)|0;;)if(-1!==b&&36===(65535&(a.charCodeAt(b)|0)))b=-1+b|0;else break;if(-1===b||46===(65535&(a.charCodeAt(b)|0)))return"";for(var d="";;){for(var e=1+b|0;;)if(-1!==b&&57>=(65535&(a.charCodeAt(b)|0))&&48<=(65535&(a.charCodeAt(b)|0)))b=-1+b|0;else break;for(var f=b;;)if(-1!==b&&36!==(65535&(a.charCodeAt(b)|0))&&46!==(65535&(a.charCodeAt(b)|0)))b=-1+b|0;else break;var h=1+b|0;if(b===f&&e!==(a.length|0))return d;for(;;)if(-1!==b&&36===(65535&(a.charCodeAt(b)|
+0)))b=-1+b|0;else break;var f=-1===b?!0:46===(65535&(a.charCodeAt(b)|0)),k;(k=f)||(k=65535&(a.charCodeAt(h)|0),k=!(90<k&&127>k||65>k));if(k){e=a.substring(h,e);h=d;if(null===h)throw(new ye).b();d=""===h?e:""+e+(new Ke).Xa(46)+d;if(f)return d}}}function A5(){this.s=null}A5.prototype=new kta;A5.prototype.constructor=A5;function B5(){}B5.prototype=A5.prototype;function C5(){r3.call(this)}C5.prototype=new uva;C5.prototype.constructor=C5;C5.prototype.nU=function(a){return D5(a)};
+C5.prototype.$classData=g({aga:0},!1,"scala.collection.immutable.HashMap$HashTrieMap$$anon$1",{aga:1,Yga:1,Hd:1,d:1,ad:1,La:1,Ka:1});function E5(){r3.call(this)}E5.prototype=new uva;E5.prototype.constructor=E5;E5.prototype.nU=function(a){return a.Zf};E5.prototype.$classData=g({fga:0},!1,"scala.collection.immutable.HashSet$HashTrieSet$$anon$1",{fga:1,Yga:1,Hd:1,d:1,ad:1,La:1,Ka:1});function F5(){}F5.prototype=new C_;F5.prototype.constructor=F5;F5.prototype.b=function(){return this};
+F5.prototype.js=function(){return Eu()};F5.prototype.$classData=g({mga:0},!1,"scala.collection.immutable.ListMap$",{mga:1,NX:1,Mv:1,Lv:1,d:1,l:1,i:1});var bCa=void 0;function Wg(){bCa||(bCa=(new F5).b());return bCa}function G5(){}G5.prototype=new m3;G5.prototype.constructor=G5;G5.prototype.b=function(){return this};G5.prototype.Fx=function(){return lh()};G5.prototype.$classData=g({Gga:0},!1,"scala.collection.immutable.Set$",{Gga:1,OX:1,zF:1,xF:1,Xe:1,d:1,Ye:1});var cCa=void 0;
+function ol(){cCa||(cCa=(new G5).b());return cCa}function H5(){this.dk=null}H5.prototype=new Ava;H5.prototype.constructor=H5;H5.prototype.b=function(){B3.prototype.b.call(this);return this};H5.prototype.Da=function(){return dCa(this)};function dCa(a){return a.dk.ec.Jc().fj(m(new n,function(){return function(a){return a.Jc()}}(a)),(xg(),(new yg).b()))}function I5(a){return!!(a&&a.$classData&&a.$classData.n.YX)}
+H5.prototype.$classData=g({YX:0},!1,"scala.collection.immutable.Stream$StreamBuilder",{YX:1,cqa:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1});function aG(){this.eu=this.Aq=this.Ot=0;this.TT=this.RT=this.PT=this.NT=this.LT=this.hu=null}aG.prototype=new l;aG.prototype.constructor=aG;c=aG.prototype;c.kc=function(){return this.PT};c.b=function(){this.hu=la(Wa(Ua),[32]);this.eu=1;this.Aq=this.Ot=0;return this};c.yf=function(){return this.eu};c.md=function(a){return bG(this,a)};c.Jo=function(a){this.TT=a};c.Ce=function(){return this.hu};
+c.Yc=function(a){this.NT=a};c.ud=function(){return this.RT};
+function bG(a,b){if(a.Aq>=a.hu.m.length){var d=32+a.Ot|0,e=a.Ot^d;if(1024>e)1===a.yf()&&(a.oc(la(Wa(Ua),[32])),a.yb().m[0]=a.Ce(),a.Oj(1+a.yf()|0)),a.Rc(la(Wa(Ua),[32])),a.yb().m[31&(d>>>5|0)]=a.Ce();else if(32768>e)2===a.yf()&&(a.Yc(la(Wa(Ua),[32])),a.Lb().m[0]=a.yb(),a.Oj(1+a.yf()|0)),a.Rc(la(Wa(Ua),[32])),a.oc(la(Wa(Ua),[32])),a.yb().m[31&(d>>>5|0)]=a.Ce(),a.Lb().m[31&(d>>>10|0)]=a.yb();else if(1048576>e)3===a.yf()&&(a.De(la(Wa(Ua),[32])),a.kc().m[0]=a.Lb(),a.Oj(1+a.yf()|0)),a.Rc(la(Wa(Ua),[32])),
+a.oc(la(Wa(Ua),[32])),a.Yc(la(Wa(Ua),[32])),a.yb().m[31&(d>>>5|0)]=a.Ce(),a.Lb().m[31&(d>>>10|0)]=a.yb(),a.kc().m[31&(d>>>15|0)]=a.Lb();else if(33554432>e)4===a.yf()&&(a.jh(la(Wa(Ua),[32])),a.ud().m[0]=a.kc(),a.Oj(1+a.yf()|0)),a.Rc(la(Wa(Ua),[32])),a.oc(la(Wa(Ua),[32])),a.Yc(la(Wa(Ua),[32])),a.De(la(Wa(Ua),[32])),a.yb().m[31&(d>>>5|0)]=a.Ce(),a.Lb().m[31&(d>>>10|0)]=a.yb(),a.kc().m[31&(d>>>15|0)]=a.Lb(),a.ud().m[31&(d>>>20|0)]=a.kc();else if(1073741824>e)5===a.yf()&&(a.Jo(la(Wa(Ua),[32])),a.Ih().m[0]=
+a.ud(),a.Oj(1+a.yf()|0)),a.Rc(la(Wa(Ua),[32])),a.oc(la(Wa(Ua),[32])),a.Yc(la(Wa(Ua),[32])),a.De(la(Wa(Ua),[32])),a.jh(la(Wa(Ua),[32])),a.yb().m[31&(d>>>5|0)]=a.Ce(),a.Lb().m[31&(d>>>10|0)]=a.yb(),a.kc().m[31&(d>>>15|0)]=a.Lb(),a.ud().m[31&(d>>>20|0)]=a.kc(),a.Ih().m[31&(d>>>25|0)]=a.ud();else throw(new Ne).b();a.Ot=d;a.Aq=0}a.hu.m[a.Aq]=b;a.Aq=1+a.Aq|0;return a}c.Da=function(){return cG(this)};c.dg=function(a,b){pU(this,a,b)};c.oc=function(a){this.LT=a};c.jh=function(a){this.RT=a};c.yb=function(){return this.LT};
+c.Ih=function(){return this.TT};function cG(a){var b=a.Ot+a.Aq|0;if(0===b)return dk().el;var d=(new J5).Q(0,b,0);Qe(d,a,a.eu);1<a.eu&&nba(d,0,-1+b|0);return d}c.Qa=function(a){return bG(this,a)};c.qc=function(){};c.Oj=function(a){this.eu=a};c.Lb=function(){return this.NT};c.Rc=function(a){this.hu=a};c.Zb=function(a){return oE(this,a)};c.De=function(a){this.PT=a};c.$classData=g({aha:0},!1,"scala.collection.immutable.VectorBuilder",{aha:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1,bY:1});
+function K5(){this.iD=this.la=this.vo=this.hD=0;this.Yh=!1;this.$C=0;this.UT=this.ST=this.QT=this.OT=this.MT=this.cD=null}K5.prototype=new H1;K5.prototype.constructor=K5;c=K5.prototype;
+c.ma=function(){if(!this.Yh)throw(new Du).c("reached iterator end");var a=this.cD.m[this.la];this.la=1+this.la|0;if(this.la===this.iD)if((this.vo+this.la|0)<this.hD){var b=32+this.vo|0,d=this.vo^b;if(1024>d)this.Rc(this.yb().m[31&(b>>>5|0)]);else if(32768>d)this.oc(this.Lb().m[31&(b>>>10|0)]),this.Rc(this.yb().m[0]);else if(1048576>d)this.Yc(this.kc().m[31&(b>>>15|0)]),this.oc(this.Lb().m[0]),this.Rc(this.yb().m[0]);else if(33554432>d)this.De(this.ud().m[31&(b>>>20|0)]),this.Yc(this.kc().m[0]),this.oc(this.Lb().m[0]),
+this.Rc(this.yb().m[0]);else if(1073741824>d)this.jh(this.Ih().m[31&(b>>>25|0)]),this.De(this.ud().m[0]),this.Yc(this.kc().m[0]),this.oc(this.Lb().m[0]),this.Rc(this.yb().m[0]);else throw(new Ne).b();this.vo=b;b=this.hD-this.vo|0;this.iD=32>b?b:32;this.la=0}else this.Yh=!1;return a};c.kc=function(){return this.QT};c.yf=function(){return this.$C};c.Jo=function(a){this.UT=a};c.ia=function(a,b){this.hD=b;this.vo=-32&a;this.la=31&a;a=b-this.vo|0;this.iD=32>a?a:32;this.Yh=(this.vo+this.la|0)<b;return this};
+c.Ce=function(){return this.cD};c.Yc=function(a){this.OT=a};c.ud=function(){return this.ST};c.oc=function(a){this.MT=a};c.ta=function(){return this.Yh};c.jh=function(a){this.ST=a};c.yb=function(){return this.MT};c.Ih=function(){return this.UT};c.Oj=function(a){this.$C=a};c.Lb=function(){return this.OT};c.Rc=function(a){this.cD=a};c.De=function(a){this.QT=a};c.$classData=g({bha:0},!1,"scala.collection.immutable.VectorIterator",{bha:1,Hd:1,d:1,ad:1,La:1,Ka:1,bY:1});function dG(){}dG.prototype=new E_;
+dG.prototype.constructor=dG;dG.prototype.b=function(){return this};dG.prototype.fi=function(){return(new Av).b()};dG.prototype.js=function(){return(new Av).b()};dG.prototype.$classData=g({Dha:0},!1,"scala.collection.mutable.HashMap$",{Dha:1,QX:1,Mv:1,Lv:1,d:1,l:1,i:1});var Lla=void 0;function D0(){}D0.prototype=new E_;D0.prototype.constructor=D0;D0.prototype.b=function(){return this};D0.prototype.fi=function(){return(new L5).b()};D0.prototype.js=function(){return(new L5).b()};
+D0.prototype.$classData=g({Pha:0},!1,"scala.collection.mutable.LinkedHashMap$",{Pha:1,QX:1,Mv:1,Lv:1,d:1,l:1,i:1});var Nta=void 0;function M5(){this.Nt=!1}M5.prototype=new uua;M5.prototype.constructor=M5;function eCa(){}eCa.prototype=M5.prototype;M5.prototype.ox=function(a){pT(this,null===a?"null":na(a));return this};M5.prototype.Mba=function(){P1.prototype.Lba.call(this);return this};M5.prototype.nx=function(a){Ha();a=ba.String.fromCharCode(a);qT(this,a);return this};
+function N5(){this.Ux=this.oz=this.Bx=this.hy=null}N5.prototype=new l;N5.prototype.constructor=N5;c=N5.prototype;c.u=function(){return"BoundedNumericConstraintSpecification"};c.v=function(){return 4};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.JH?HF(cn(),this.hy,a.hy)&&HF(cn(),this.Bx,a.Bx)&&HF(cn(),this.oz,a.oz)&&HF(cn(),this.Ux,a.Ux):!1};
+c.w=function(a){switch(a){case 0:return this.hy;case 1:return this.Bx;case 2:return this.oz;case 3:return this.Ux;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function fCa(a,b,d,e){var f=new N5;f.hy=a;f.Bx=b;f.oz=d;f.Ux=e;return f}c.$classData=g({JH:0},!1,"org.nlogo.core.ConstraintSpecification$BoundedNumericConstraintSpecification",{JH:1,d:1,$Z:1,ZZ:1,t:1,q:1,l:1,i:1});
+g({a_:0},!1,"org.nlogo.core.ConstraintSpecification$UnboundedNumericConstraintSpecification",{a_:1,d:1,$Z:1,ZZ:1,t:1,q:1,l:1,i:1});function O5(){this.zg=this.az=this.US=null;this.a=0}O5.prototype=new l;O5.prototype.constructor=O5;c=O5.prototype;c.b=function(){P5=this;this.zg=pQ();this.a=(8|this.a)<<24>>24;this.a=(1|this.a)<<24>>24;this.US=YF();this.a=(2|this.a)<<24>>24;Qpa||(Qpa=(new MU).b());this.az=Qpa;this.a=(4|this.a)<<24>>24;return this};c.u=function(){return"NetLogoCore"};c.v=function(){return 0};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"NetLogoCore"};function wp(a){if(0===(4&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Dialect.scala: 22");return a.az}function oQ(a){if(0===(2&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/Dialect.scala: 21");return a.US}c.r=function(){return 1784079495};
+c.x=function(){return Y(new Z,this)};c.$classData=g({u_:0},!1,"org.nlogo.core.NetLogoCore$",{u_:1,d:1,uja:1,Bja:1,t:1,q:1,l:1,i:1});var P5=void 0;function pQ(){P5||(P5=(new O5).b());return P5}function xi(){this.Bb=null;this.hc=this.pc=!1;this.dn=this.rk=this.qk=0}xi.prototype=new l;xi.prototype.constructor=xi;c=xi.prototype;c.u=function(){return"Circle"};c.v=function(){return 6};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.aI){var b=this.Bb,d=a.Bb;return(null===b?null===d:b.o(d))&&this.pc===a.pc&&this.hc===a.hc&&this.qk===a.qk&&this.rk===a.rk?this.dn===a.dn:!1}return!1};c.w=function(a){switch(a){case 0:return this.Bb;case 1:return this.pc;case 2:return this.hc;case 3:return this.qk;case 4:return this.rk;case 5:return this.dn;default:throw(new P).c(""+a);}};c.ND=function(a,b,d,e,f,h){this.Bb=a;this.pc=b;this.hc=d;this.qk=e;this.rk=f;this.dn=h;return this};
+c.k=function(){return X(W(),this)};c.aD=function(){return this.dn};c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.Bb)),a=V().da(a,this.pc?1231:1237),a=V().da(a,this.hc?1231:1237),a=V().da(a,this.qk),a=V().da(a,this.rk),a=V().da(a,this.dn);return V().pb(a,6)};c.ll=function(){return this.pc};c.x=function(){return Y(new Z,this)};c.$classData=g({aI:0},!1,"org.nlogo.core.ShapeParser$Circle",{aI:1,d:1,Uz:1,Gp:1,t:1,q:1,l:1,i:1});function zi(){this.Bb=null;this.hc=!1;this.fn=this.Wn=null}
+zi.prototype=new l;zi.prototype.constructor=zi;c=zi.prototype;c.u=function(){return"Line"};c.v=function(){return 4};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.bI){var b=this.Bb,d=a.Bb;(null===b?null===d:b.o(d))&&this.hc===a.hc?(b=this.Wn,d=a.Wn,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.fn,a=a.fn,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Bb;case 1:return this.hc;case 2:return this.Wn;case 3:return this.fn;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.ku=function(){return this.fn};function cca(a,b,d,e,f){a.Bb=b;a.hc=d;a.Wn=e;a.fn=f;return a}c.Rv=function(){return this.Wn};c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.Bb)),a=V().da(a,this.hc?1231:1237),a=V().da(a,OD(V(),this.Wn)),a=V().da(a,OD(V(),this.fn));return V().pb(a,4)};c.ll=function(){return!1};
+c.x=function(){return Y(new Z,this)};c.$classData=g({bI:0},!1,"org.nlogo.core.ShapeParser$Line",{bI:1,d:1,Vz:1,Gp:1,t:1,q:1,l:1,i:1});function Ei(){this.wa=null;this.Mj=0;this.ln=this.yn=null}Ei.prototype=new l;Ei.prototype.constructor=Ei;c=Ei.prototype;c.u=function(){return"LinkShape"};c.v=function(){return 4};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.dI){if(this.wa===a.wa&&this.Mj===a.Mj)var b=this.yn,d=a.yn,b=null===b?null===d:b.o(d);else b=!1;if(b)return b=this.ln,a=a.ln,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.wa;case 1:return this.Mj;case 2:return this.yn;case 3:return this.ln;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.HD=function(){return this.ln};c.pe=function(){return this.wa};
+function mca(a,b,d,e,f){a.wa=b;a.Mj=d;a.yn=e;a.ln=f;return a}c.HE=function(){return this.yn};c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.wa)),a=V().da(a,RF(V(),this.Mj)),a=V().da(a,OD(V(),this.yn)),a=V().da(a,OD(V(),this.ln));return V().pb(a,4)};c.x=function(){return Y(new Z,this)};c.$classData=g({dI:0},!1,"org.nlogo.core.ShapeParser$LinkShape",{dI:1,d:1,XH:1,st:1,t:1,q:1,l:1,i:1});function Ci(){this.Bb=null;this.hc=this.pc=!1;this.Kn=null}Ci.prototype=new l;Ci.prototype.constructor=Ci;
+c=Ci.prototype;c.u=function(){return"Polygon"};function fca(a,b,d,e,f){a.Bb=b;a.pc=d;a.hc=e;a.Kn=f;return a}c.v=function(){return 4};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.eI){var b=this.Bb,d=a.Bb;if((null===b?null===d:b.o(d))&&this.pc===a.pc&&this.hc===a.hc)return b=this.Kn,a=a.Kn,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Bb;case 1:return this.pc;case 2:return this.hc;case 3:return this.Kn;default:throw(new P).c(""+a);}};
+c.k=function(){return X(W(),this)};c.vy=function(){return this.Kn};c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.Bb)),a=V().da(a,this.pc?1231:1237),a=V().da(a,this.hc?1231:1237),a=V().da(a,OD(V(),this.Kn));return V().pb(a,4)};c.ll=function(){return this.pc};c.x=function(){return Y(new Z,this)};c.$classData=g({eI:0},!1,"org.nlogo.core.ShapeParser$Polygon",{eI:1,d:1,Wz:1,Gp:1,t:1,q:1,l:1,i:1});function Ai(){this.Bb=null;this.hc=this.pc=!1;this.zn=this.co=null}Ai.prototype=new l;
+Ai.prototype.constructor=Ai;c=Ai.prototype;c.u=function(){return"Rectangle"};c.v=function(){return 5};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.fI){var b=this.Bb,d=a.Bb;(null===b?null===d:b.o(d))&&this.pc===a.pc&&this.hc===a.hc?(b=this.co,d=a.co,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.zn,a=a.zn,null===b?null===a:b.o(a)}return!1};c.lw=function(){return this.co};
+c.w=function(a){switch(a){case 0:return this.Bb;case 1:return this.pc;case 2:return this.hc;case 3:return this.co;case 4:return this.zn;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};function dca(a,b,d,e,f,h){a.Bb=b;a.pc=d;a.hc=e;a.co=f;a.zn=h;return a}c.ev=function(){return this.zn};c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.Bb)),a=V().da(a,this.pc?1231:1237),a=V().da(a,this.hc?1231:1237),a=V().da(a,OD(V(),this.co)),a=V().da(a,OD(V(),this.zn));return V().pb(a,5)};
+c.ll=function(){return this.pc};c.x=function(){return Y(new Z,this)};c.$classData=g({fI:0},!1,"org.nlogo.core.ShapeParser$Rectangle",{fI:1,d:1,Xz:1,Gp:1,t:1,q:1,l:1,i:1});function Ii(){this.wa=null;this.On=!1;this.Tj=0;this.kh=null}Ii.prototype=new l;Ii.prototype.constructor=Ii;c=Ii.prototype;c.u=function(){return"VectorShape"};c.v=function(){return 4};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.gI&&this.wa===a.wa&&this.On===a.On&&this.Tj===a.Tj){var b=this.kh;a=a.kh;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.wa;case 1:return this.On;case 2:return this.Tj;case 3:return this.kh;default:throw(new P).c(""+a);}};c.aF=function(){return this.On};c.k=function(){return X(W(),this)};c.pe=function(){return this.wa};c.fE=function(a,b,d,e){this.wa=a;this.On=b;this.Tj=d;this.kh=e;return this};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.wa)),a=V().da(a,this.On?1231:1237),a=V().da(a,this.Tj),a=V().da(a,OD(V(),this.kh));return V().pb(a,4)};c.x=function(){return Y(new Z,this)};c.$classData=g({gI:0},!1,"org.nlogo.core.ShapeParser$VectorShape",{gI:1,d:1,ZH:1,st:1,t:1,q:1,l:1,i:1});function Zc(){this.wc=0}Zc.prototype=new l;Zc.prototype.constructor=Zc;c=Zc.prototype;c.u=function(){return"CmdBlk"};c.v=function(){return 1};c.o=function(a){return this===a?!0:YO(a)?this.wc===a.wc:!1};
+c.w=function(a){switch(a){case 0:return this.wc;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.qb=function(a){this.wc=a;return this};c.r=function(){var a=-889275714,a=V().da(a,this.wc);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};function YO(a){return!!(a&&a.$classData&&a.$classData.n.fQ)}c.$classData=g({fQ:0},!1,"org.nlogo.parse.AstPath$CmdBlk",{fQ:1,d:1,gQ:1,sB:1,t:1,q:1,l:1,i:1});function Xc(){this.wc=0}Xc.prototype=new l;Xc.prototype.constructor=Xc;c=Xc.prototype;
+c.u=function(){return"RepArg"};c.v=function(){return 1};c.o=function(a){return this===a?!0:aP(a)?this.wc===a.wc:!1};c.w=function(a){switch(a){case 0:return this.wc;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.qb=function(a){this.wc=a;return this};c.r=function(){var a=-889275714,a=V().da(a,this.wc);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};function aP(a){return!!(a&&a.$classData&&a.$classData.n.hQ)}
+c.$classData=g({hQ:0},!1,"org.nlogo.parse.AstPath$RepArg",{hQ:1,d:1,gQ:1,sB:1,t:1,q:1,l:1,i:1});function ad(){this.wc=0}ad.prototype=new l;ad.prototype.constructor=ad;c=ad.prototype;c.u=function(){return"RepBlk"};c.v=function(){return 1};c.o=function(a){return this===a?!0:$O(a)?this.wc===a.wc:!1};c.w=function(a){switch(a){case 0:return this.wc;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.qb=function(a){this.wc=a;return this};
+c.r=function(){var a=-889275714,a=V().da(a,this.wc);return V().pb(a,1)};c.x=function(){return Y(new Z,this)};function $O(a){return!!(a&&a.$classData&&a.$classData.n.iQ)}c.$classData=g({iQ:0},!1,"org.nlogo.parse.AstPath$RepBlk",{iQ:1,d:1,gQ:1,sB:1,t:1,q:1,l:1,i:1});function Zo(){this.ka=null}Zo.prototype=new l;Zo.prototype.constructor=Zo;c=Zo.prototype;c.u=function(){return"BreedVariable"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Io(a)?this.ka===a.ka:!1};
+c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.c=function(a){this.ka=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Io(a){return!!(a&&a.$classData&&a.$classData.n.qQ)}c.$classData=g({qQ:0},!1,"org.nlogo.parse.SymbolType$BreedVariable",{qQ:1,d:1,Ah:1,Tm:1,t:1,q:1,l:1,i:1});function Q5(){}Q5.prototype=new l;Q5.prototype.constructor=Q5;c=Q5.prototype;c.b=function(){return this};
+c.u=function(){return"GlobalVariable"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"GlobalVariable"};c.r=function(){return 1869525855};c.x=function(){return Y(new Z,this)};c.$classData=g({i2:0},!1,"org.nlogo.parse.SymbolType$GlobalVariable$",{i2:1,d:1,Ah:1,Tm:1,t:1,q:1,l:1,i:1});var gCa=void 0;function Vo(){gCa||(gCa=(new Q5).b());return gCa}function R5(){}R5.prototype=new l;R5.prototype.constructor=R5;c=R5.prototype;c.b=function(){return this};c.u=function(){return"LambdaVariable"};
+c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"LambdaVariable"};c.r=function(){return 128622467};c.x=function(){return Y(new Z,this)};c.$classData=g({j2:0},!1,"org.nlogo.parse.SymbolType$LambdaVariable$",{j2:1,d:1,Ah:1,Tm:1,t:1,q:1,l:1,i:1});var hCa=void 0;function Pm(){hCa||(hCa=(new R5).b());return hCa}function Xo(){this.ka=null}Xo.prototype=new l;Xo.prototype.constructor=Xo;c=Xo.prototype;c.u=function(){return"LinkBreedVariable"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:Ko(a)?this.ka===a.ka:!1};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.c=function(a){this.ka=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Ko(a){return!!(a&&a.$classData&&a.$classData.n.rQ)}c.$classData=g({rQ:0},!1,"org.nlogo.parse.SymbolType$LinkBreedVariable",{rQ:1,d:1,Ah:1,Tm:1,t:1,q:1,l:1,i:1});function S5(){}S5.prototype=new l;
+S5.prototype.constructor=S5;c=S5.prototype;c.b=function(){return this};c.u=function(){return"LinkVariable"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"LinkVariable"};c.r=function(){return 68329654};c.x=function(){return Y(new Z,this)};c.$classData=g({m2:0},!1,"org.nlogo.parse.SymbolType$LinkVariable$",{m2:1,d:1,Ah:1,Tm:1,t:1,q:1,l:1,i:1});var iCa=void 0;function Jo(){iCa||(iCa=(new S5).b());return iCa}function $n(){this.Zc=null}$n.prototype=new l;
+$n.prototype.constructor=$n;c=$n.prototype;c.u=function(){return"LocalVariable"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(Np(a)){var b=this.Zc;a=a.Zc;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Zc;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.As=function(a){this.Zc=a;return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+function Np(a){return!!(a&&a.$classData&&a.$classData.n.sQ)}c.$classData=g({sQ:0},!1,"org.nlogo.parse.SymbolType$LocalVariable",{sQ:1,d:1,Ah:1,Tm:1,t:1,q:1,l:1,i:1});function T5(){}T5.prototype=new l;T5.prototype.constructor=T5;c=T5.prototype;c.b=function(){return this};c.u=function(){return"PatchVariable"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"PatchVariable"};c.r=function(){return 1484111556};c.x=function(){return Y(new Z,this)};
+c.$classData=g({n2:0},!1,"org.nlogo.parse.SymbolType$PatchVariable$",{n2:1,d:1,Ah:1,Tm:1,t:1,q:1,l:1,i:1});var jCa=void 0;function Uo(){jCa||(jCa=(new T5).b());return jCa}function U5(){}U5.prototype=new l;U5.prototype.constructor=U5;c=U5.prototype;c.b=function(){return this};c.u=function(){return"ProcedureVariable"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"ProcedureVariable"};c.r=function(){return 530675279};c.x=function(){return Y(new Z,this)};
+c.$classData=g({r2:0},!1,"org.nlogo.parse.SymbolType$ProcedureVariable$",{r2:1,d:1,Ah:1,Tm:1,t:1,q:1,l:1,i:1});var kCa=void 0;function sc(){kCa||(kCa=(new U5).b());return kCa}function dp(){}dp.prototype=new l;dp.prototype.constructor=dp;dp.prototype.b=function(){return this};
+function lCa(a){if(xp()===a||yp()===a)return 0;if(Fo()===a||Go()===a)return 2;if(Yo()===a||bp()===a||Wo()===a||ap()===a)return 4;if(Vo()===a)return 5;if(Ho()===a||Uo()===a||Jo()===a)return 6;if(Io(a)||Ko(a))return 7;if($o()===a)return 9;if(Np(a)||Pm()===a||sc()===a)return 10;throw(new q).j(a);}dp.prototype.zk=function(a,b){(null===a?null===b:a.o(b))?b=0:(a=lCa(a),b=lCa(b),b=a===b?0:a<b?-1:1);return b};
+dp.prototype.$classData=g({s2:0},!1,"org.nlogo.parse.SymbolType$SymbolTypeOrdering$",{s2:1,d:1,Cv:1,av:1,Dv:1,Bv:1,l:1,i:1});var cp=void 0;function V5(){}V5.prototype=new l;V5.prototype.constructor=V5;c=V5.prototype;c.b=function(){return this};c.u=function(){return"TurtleVariable"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return"TurtleVariable"};c.r=function(){return 1254064120};c.x=function(){return Y(new Z,this)};
+c.$classData=g({v2:0},!1,"org.nlogo.parse.SymbolType$TurtleVariable$",{v2:1,d:1,Ah:1,Tm:1,t:1,q:1,l:1,i:1});var mCa=void 0;function Ho(){mCa||(mCa=(new V5).b());return mCa}function Kt(){}Kt.prototype=new l;Kt.prototype.constructor=Kt;Kt.prototype.b=function(){return this};Kt.prototype.zk=function(a,b){var d=I(r(),(new w).f([pa(EBa),pa(DBa),pa(FBa),pa(CBa),pa(GBa)])),e=oa(a),f=oa(b);e===f?(a=a.Ln(),b=b.Ln(),b=a===b?0:a<b?-1:1):b=d.pl(e)-d.pl(f)|0;return b};
+Kt.prototype.$classData=g({j4:0},!1,"org.nlogo.tortoise.compiler.TortoiseSymbol$$anon$1",{j4:1,d:1,Cv:1,av:1,Dv:1,Bv:1,l:1,i:1});function OW(){this.Bb=null;this.hc=this.pc=!1;this.dn=this.fu=this.rk=this.qk=0;this.a=!1}OW.prototype=new l;OW.prototype.constructor=OW;c=OW.prototype;c.u=function(){return"JsonCircle"};c.v=function(){return 6};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.UQ){var b=this.Bb,d=a.Bb;return(null===b?null===d:b.o(d))&&this.pc===a.pc&&this.hc===a.hc&&this.qk===a.qk&&this.rk===a.rk?this.fu===a.fu:!1}return!1};c.w=function(a){switch(a){case 0:return this.Bb;case 1:return this.pc;case 2:return this.hc;case 3:return this.qk;case 4:return this.rk;case 5:return this.fu;default:throw(new P).c(""+a);}};
+c.ND=function(a,b,d,e,f,h){this.Bb=a;this.pc=b;this.hc=d;this.qk=e;this.rk=f;this.dn=this.fu=h;this.a=!0;return this};c.k=function(){return X(W(),this)};c.aD=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 26");return this.dn};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.Bb)),a=V().da(a,this.pc?1231:1237),a=V().da(a,this.hc?1231:1237),a=V().da(a,this.qk),a=V().da(a,this.rk),a=V().da(a,this.fu);return V().pb(a,6)};c.ll=function(){return this.pc};c.x=function(){return Y(new Z,this)};c.$classData=g({UQ:0},!1,"org.nlogo.tortoise.compiler.json.JsonCircle",{UQ:1,d:1,Uz:1,Gp:1,t:1,q:1,l:1,i:1});function NW(){this.Bb=null;this.hc=this.pc=!1;this.tw=this.pw=this.sw=this.ow=0;this.fn=this.Wn=null;this.a=0}
+NW.prototype=new l;NW.prototype.constructor=NW;c=NW.prototype;c.u=function(){return"JsonLine"};c.v=function(){return 7};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.VQ){var b=this.Bb,d=a.Bb;return(null===b?null===d:b.o(d))&&this.pc===a.pc&&this.hc===a.hc&&this.ow===a.ow&&this.sw===a.sw&&this.pw===a.pw?this.tw===a.tw:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.Bb;case 1:return this.pc;case 2:return this.hc;case 3:return this.ow;case 4:return this.sw;case 5:return this.pw;case 6:return this.tw;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.ku=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 40");return this.fn};
+c.OD=function(a,b,d,e,f,h,k){this.Bb=a;this.pc=b;this.hc=d;this.ow=e;this.sw=f;this.pw=h;this.tw=k;this.Wn=(new yi).ia(e,f);this.a=(1|this.a)<<24>>24;this.fn=(new yi).ia(h,k);this.a=(2|this.a)<<24>>24;return this};c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.Bb)),a=V().da(a,this.pc?1231:1237),a=V().da(a,this.hc?1231:1237),a=V().da(a,this.ow),a=V().da(a,this.sw),a=V().da(a,this.pw),a=V().da(a,this.tw);return V().pb(a,7)};
+c.Rv=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 39");return this.Wn};c.ll=function(){return this.pc};c.x=function(){return Y(new Z,this)};c.$classData=g({VQ:0},!1,"org.nlogo.tortoise.compiler.json.JsonLine",{VQ:1,d:1,Vz:1,Gp:1,t:1,q:1,l:1,i:1});function W5(){this.wa=null;this.Mj=0;this.ln=this.yn=this.gu=this.dv=null;this.a=0}W5.prototype=new l;W5.prototype.constructor=W5;c=W5.prototype;
+c.u=function(){return"JsonLinkShape"};c.v=function(){return 4};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.XQ){if(this.wa===a.wa&&this.Mj===a.Mj)var b=this.dv,d=a.dv,b=null===b?null===d:b.o(d);else b=!1;if(b)return b=this.gu,a=a.gu,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.wa;case 1:return this.Mj;case 2:return this.dv;case 3:return this.gu;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.HD=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 93");return this.ln};function yra(a,b,d,e){var f=new W5;f.wa=a;f.Mj=b;f.dv=d;f.gu=e;f.yn=d;f.a=(1|f.a)<<24>>24;f.ln=e;f.a=(2|f.a)<<24>>24;return f}c.pe=function(){return this.wa};c.HE=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 92");return this.yn};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.wa)),a=V().da(a,RF(V(),this.Mj)),a=V().da(a,OD(V(),this.dv)),a=V().da(a,OD(V(),this.gu));return V().pb(a,4)};c.x=function(){return Y(new Z,this)};c.$classData=g({XQ:0},!1,"org.nlogo.tortoise.compiler.json.JsonLinkShape",{XQ:1,d:1,XH:1,st:1,t:1,q:1,l:1,i:1});function X5(){this.Bb=null;this.hc=this.pc=!1;this.Kn=this.uw=this.qw=null;this.a=!1}X5.prototype=new l;X5.prototype.constructor=X5;c=X5.prototype;c.u=function(){return"JsonPolygon"};c.v=function(){return 5};
+function qra(a,b,d,e,f){var h=new X5;h.Bb=a;h.pc=b;h.hc=d;h.qw=e;h.uw=f;a=r();h.Kn=e.Ge(f,a.s);h.a=!0;return h}c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.YQ){var b=this.Bb,d=a.Bb;(null===b?null===d:b.o(d))&&this.pc===a.pc&&this.hc===a.hc?(b=this.qw,d=a.qw,b=null===b?null===d:b.o(d)):b=!1;if(b)return b=this.uw,a=a.uw,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.Bb;case 1:return this.pc;case 2:return this.hc;case 3:return this.qw;case 4:return this.uw;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.vy=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 64");return this.Kn};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.Bb)),a=V().da(a,this.pc?1231:1237),a=V().da(a,this.hc?1231:1237),a=V().da(a,OD(V(),this.qw)),a=V().da(a,OD(V(),this.uw));return V().pb(a,5)};c.ll=function(){return this.pc};c.x=function(){return Y(new Z,this)};c.$classData=g({YQ:0},!1,"org.nlogo.tortoise.compiler.json.JsonPolygon",{YQ:1,d:1,Wz:1,Gp:1,t:1,q:1,l:1,i:1});function PW(){this.Bb=null;this.hc=this.pc=!1;this.Ui=this.Si=this.Vi=this.Ti=0;this.zn=this.co=null;this.a=0}PW.prototype=new l;
+PW.prototype.constructor=PW;c=PW.prototype;c.u=function(){return"JsonRectangle"};c.v=function(){return 7};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.ZQ){var b=this.Bb,d=a.Bb;return(null===b?null===d:b.o(d))&&this.pc===a.pc&&this.hc===a.hc&&this.Ti===a.Ti&&this.Vi===a.Vi&&this.Si===a.Si?this.Ui===a.Ui:!1}return!1};
+c.lw=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 53");return this.co};c.w=function(a){switch(a){case 0:return this.Bb;case 1:return this.pc;case 2:return this.hc;case 3:return this.Ti;case 4:return this.Vi;case 5:return this.Si;case 6:return this.Ui;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.OD=function(a,b,d,e,f,h,k){this.Bb=a;this.pc=b;this.hc=d;this.Ti=e;this.Vi=f;this.Si=h;this.Ui=k;this.co=(new yi).ia(e,f);this.a=(1|this.a)<<24>>24;this.zn=(new yi).ia(h,k);this.a=(2|this.a)<<24>>24;return this};c.ev=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 54");return this.zn};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.Bb)),a=V().da(a,this.pc?1231:1237),a=V().da(a,this.hc?1231:1237),a=V().da(a,this.Ti),a=V().da(a,this.Vi),a=V().da(a,this.Si),a=V().da(a,this.Ui);return V().pb(a,7)};c.ll=function(){return this.pc};c.x=function(){return Y(new Z,this)};c.$classData=g({ZQ:0},!1,"org.nlogo.tortoise.compiler.json.JsonRectangle",{ZQ:1,d:1,Xz:1,Gp:1,t:1,q:1,l:1,i:1});function YW(){this.wa=null;this.Av=!1;this.Tj=0;this.kh=null;this.a=this.On=!1}YW.prototype=new l;
+YW.prototype.constructor=YW;c=YW.prototype;c.u=function(){return"JsonVectorShape"};c.v=function(){return 4};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.$Q&&this.wa===a.wa&&this.Av===a.Av&&this.Tj===a.Tj){var b=this.kh;a=a.kh;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.wa;case 1:return this.Av;case 2:return this.Tj;case 3:return this.kh;default:throw(new P).c(""+a);}};
+c.aF=function(){if(!this.a)throw(new z).c("Uninitialized field: /Users/el_ergo/Github/Tortoise/compiler/shared/src/main/scala/json/JsonShapes.scala: 73");return this.On};c.k=function(){return X(W(),this)};c.pe=function(){return this.wa};c.fE=function(a,b,d,e){this.wa=a;this.Av=b;this.Tj=d;this.kh=e;this.On=b;this.a=!0;return this};c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.wa)),a=V().da(a,this.Av?1231:1237),a=V().da(a,this.Tj),a=V().da(a,OD(V(),this.kh));return V().pb(a,4)};
+c.x=function(){return Y(new Z,this)};c.$classData=g({$Q:0},!1,"org.nlogo.tortoise.compiler.json.JsonVectorShape",{$Q:1,d:1,ZH:1,st:1,t:1,q:1,l:1,i:1});function jx(){this.Y=null}jx.prototype=new l;jx.prototype.constructor=jx;c=jx.prototype;c.u=function(){return"JsArray"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(tx(a)){var b=this.Y;a=a.Y;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Y;default:throw(new P).c(""+a);}};c.k=function(){return Yw(this)};
+c.Wx=function(a){this.Y=a;return this};c.Yk=function(a){return a.Mk(this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function tx(a){return!!(a&&a.$classData&&a.$classData.n.iR)}c.$classData=g({iR:0},!1,"play.api.libs.json.JsArray",{iR:1,d:1,oo:1,Um:1,t:1,q:1,l:1,i:1});function Y5(){this.Y=!1;this.uW=0}Y5.prototype=new l;Y5.prototype.constructor=Y5;function nCa(){}c=nCa.prototype=Y5.prototype;c.v=function(){return this.uW};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.PB)&&this.Y===a.Y};c.w=function(a){if(0===a)return this.Y;throw(new q).j(a);};c.k=function(){return Yw(this)};c.Yk=function(a){return a.Mk(this)};c.r=function(){return this.Y?1231:1237};c.od=function(a){this.Y=a;this.uW=1;return this};function xr(){this.Y=null}xr.prototype=new l;xr.prototype.constructor=xr;c=xr.prototype;c.u=function(){return"JsDefined"};c.v=function(){return 1};
+c.o=function(a){var b;i2();b=this.Y;Sw(a)?(a=null===a?null:a.Y,b=null===b?null===a:b.o(a)):b=!1;return b};c.w=function(a){a:switch(i2(),a){case 0:a=this.Y;break a;default:throw(new P).c(""+a);}return a};c.k=function(){i2();var a=this.Y;return X(W(),(new xr).ji(a))};c.Yk=function(a){return Ar(this,a)};c.r=function(){return this.Y.r()};c.ji=function(a){this.Y=a;return this};c.x=function(){i2();return Y(new Z,(new xr).ji(this.Y))};function Sw(a){return!!(a&&a.$classData&&a.$classData.n.jR)}
+c.$classData=g({jR:0},!1,"play.api.libs.json.JsDefined",{jR:1,d:1,x7:1,Um:1,t:1,q:1,l:1,i:1});function Z5(){}Z5.prototype=new l;Z5.prototype.constructor=Z5;c=Z5.prototype;c.b=function(){return this};c.u=function(){return"JsNull"};c.v=function(){return 0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return Yw(this)};c.Yk=function(a){return a.Mk(this)};c.r=function(){return-2067765616};c.x=function(){return Y(new Z,this)};
+c.$classData=g({y7:0},!1,"play.api.libs.json.JsNull$",{y7:1,d:1,oo:1,Um:1,t:1,q:1,l:1,i:1});var oCa=void 0;function Kha(){oCa||(oCa=(new Z5).b());return oCa}function dx(){this.Y=null}dx.prototype=new l;dx.prototype.constructor=dx;c=dx.prototype;c.u=function(){return"JsNumber"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(sx(a)){var b=this.Y;a=a.Y;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Y;default:throw(new P).c(""+a);}};c.k=function(){return Yw(this)};
+c.Yk=function(a){return a.Mk(this)};function cx(a,b){a.Y=b;return a}c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function sx(a){return!!(a&&a.$classData&&a.$classData.n.lR)}c.$classData=g({lR:0},!1,"play.api.libs.json.JsNumber",{lR:1,d:1,oo:1,Um:1,t:1,q:1,l:1,i:1});function C0(){this.jw=this.Y=this.eU=null;this.ya=0}C0.prototype=new l;C0.prototype.constructor=C0;c=C0.prototype;c.u=function(){return"JsObject"};c.v=function(){return 1};
+function Gua(a){if(0===(2&a.ya)&&0===(2&a.ya)){var b=a.jw;a.Y=b&&b.$classData&&b.$classData.n.tj?b:b.we(Je().Qk);a.ya=(2|a.ya)<<24>>24}return a.Y}function pCa(a){0===(1&a.ya)&&0===(1&a.ya)&&(a.eU=a.jw.Ic(),a.ya=(1|a.ya)<<24>>24);return a.eU}c.o=function(a){if(ux(a)){var b=pCa(this).gd();a=pCa(a).gd();return null===b?null===a:t5(b,a)}return!1};c.w=function(a){switch(a){case 0:return this.jw;default:throw(new P).c(""+a);}};c.k=function(){return Yw(this)};c.Yk=function(a){return a.Mk(this)};
+c.r=function(){var a=pCa(this).gd(),b=Q();return PD(b,a,b.Qy)};c.x=function(){return Y(new Z,this)};function ux(a){return!!(a&&a.$classData&&a.$classData.n.mR)}c.$classData=g({mR:0},!1,"play.api.libs.json.JsObject",{mR:1,d:1,oo:1,Um:1,t:1,q:1,l:1,i:1});function ax(){this.Y=null}ax.prototype=new l;ax.prototype.constructor=ax;c=ax.prototype;c.u=function(){return"JsString"};c.v=function(){return 1};c.o=function(a){return this===a?!0:rx(a)?this.Y===a.Y:!1};
+c.w=function(a){switch(a){case 0:return this.Y;default:throw(new P).c(""+a);}};c.k=function(){return Yw(this)};c.Yk=function(a){return a.Mk(this)};c.r=function(){return R(Q(),this)};c.c=function(a){this.Y=a;return this};c.x=function(){return Y(new Z,this)};function rx(a){return!!(a&&a.$classData&&a.$classData.n.oR)}c.$classData=g({oR:0},!1,"play.api.libs.json.JsString",{oR:1,d:1,oo:1,Um:1,t:1,q:1,l:1,i:1});function $5(){this.ija=this.Kw=this.ex=this.Ew=this.Vba=this.Iba=this.Jw=this.Sg=null}
+$5.prototype=new l;$5.prototype.constructor=$5;$5.prototype.b=function(){a6=this;Ina(this);this.Sg=this;m(new n,function(){return function(a){return a}}(this));Pna||(Pna=(new TR).b());m(new n,function(){return function(a){Je();var b=(new w).f([a]);a=b.pa.length|0;a=la(Wa(Iha),[a]);var d;d=0;for(b=Ve(new We,b,0,b.pa.length|0);b.ta();){var e=b.ma();a.m[d]=e;d=1+d|0}return(new jx).Wx(Et(0,a))}}(this));Ona||(Ona=(new SR).b());return this};
+function Zea(){var a=ER();null===ER().Ew&&null===ER().Ew&&(ER().Ew=(new LR).sq(a));return ER().Ew}function yr(){var a=ER();null===ER().ex&&null===ER().ex&&(ER().ex=(new QR).sq(a));return ER().ex}function $ea(){var a=ER();null===ER().Jw&&null===ER().Jw&&(ER().Jw=(new OR).sq(a));return ER().Jw}function Yea(){var a=ER();null===ER().Kw&&null===ER().Kw&&(ER().Kw=(new PR).sq(a));return ER().Kw}$5.prototype.$classData=g({E7:0},!1,"play.api.libs.json.Reads$",{E7:1,d:1,$ja:1,eka:1,aka:1,dka:1,bka:1,cka:1});
+var a6=void 0;function ER(){a6||(a6=(new $5).b());return a6}function b6(){}b6.prototype=new Pta;b6.prototype.constructor=b6;b6.prototype.b=function(){Ax.prototype.b.call(this);return this};function qCa(){var a=Wia();return m(new n,function(){return function(a){return(new Dy).j(a)}}(a))}b6.prototype.$classData=g({P7:0},!1,"scalaz.$bslash$div$",{P7:1,kka:1,lka:1,mka:1,nka:1,d:1,l:1,i:1});var rCa=void 0;function Wia(){rCa||(rCa=(new b6).b());return rCa}function c6(){this.ga=null}c6.prototype=new l;
+c6.prototype.constructor=c6;c=c6.prototype;c.cd=function(a,b){return Kua(this,a,b)};c.th=function(){};c.TD=function(a){if(null===a)throw ug(vg(),null);this.ga=a;Ad(this);Ky(this);tS(this);uS(this);return this};c.wh=function(a,b,d){return Y0(d,a,b,this)};c.nh=function(a){return Jy(this,a)};c.Wg=function(){};
+function sCa(a,b,d){b=(new A).e(ne(d),ne(b));var e=b.lb;d=b.Db;if($0(e)&&(e=e.$l,$0(d)))return(new By).j(e.y(d.$l));e=b.lb;d=b.Db;if($0(e)&&(e=e.$l,Z0(d)))return(new Dy).j(a.ga.cd(d.ha,e));e=b.lb;d=b.Db;if(Z0(e)&&(e=e.ha,$0(d)))return(new Dy).j(a.ga.cd(e,m(new n,function(a,b){return function(a){return a.y(b)}}(a,d.$l))));e=b.lb;d=b.Db;if(Z0(e)&&(e=e.ha,Z0(d)))return(new Dy).j(a.ga.wf(K(function(a,b){return function(){return b}}(a,d.ha)),K(function(a,b){return function(){return b}}(a,e))));throw(new q).j(b);
+}c.Qd=function(a){return(new By).j(ne(a))};c.pg=function(){};c.wf=function(a,b){return sCa(this,a,b)};c.sh=function(){};c.$classData=g({X7:0},!1,"scalaz.Apply$$anon$3",{X7:1,d:1,Bh:1,Dh:1,fh:1,ug:1,Eh:1,Ch:1});function d6(){this.ga=null}d6.prototype=new l;d6.prototype.constructor=d6;function tCa(a){var b=new d6;if(null===a)throw ug(vg(),null);b.ga=a;return b}d6.prototype.$classData=g({$7:0},!1,"scalaz.Arrow$$anon$2",{$7:1,d:1,Jma:1,bba:1,Xw:1,cba:1,pC:1,SR:1});function $z(){}$z.prototype=new C2;
+$z.prototype.constructor=$z;$z.prototype.b=function(){return this};$z.prototype.$classData=g({a9:0},!1,"scalaz.IndexedReaderWriterStateT$",{a9:1,iC:1,jC:1,eC:1,fC:1,gC:1,d:1,hC:1});var Ria=void 0;function e6(){}e6.prototype=new OBa;e6.prototype.constructor=e6;function uCa(){}uCa.prototype=e6.prototype;function f6(){this.ga=null}f6.prototype=new l;f6.prototype.constructor=f6;function vCa(a){var b=new f6;if(null===a)throw ug(vg(),null);b.ga=a;return b}
+f6.prototype.$classData=g({q9:0},!1,"scalaz.Monad$$anon$3",{q9:1,d:1,Yaa:1,lC:1,Kr:1,uk:1,$i:1,mC:1});function g6(){}g6.prototype=new PBa;g6.prototype.constructor=g6;function wCa(){}wCa.prototype=g6.prototype;function h6(){}h6.prototype=new QBa;h6.prototype.constructor=h6;function xCa(){}xCa.prototype=h6.prototype;function i6(){this.ga=null}i6.prototype=new l;i6.prototype.constructor=i6;function qz(a){var b=new i6;if(null===a)throw ug(vg(),null);b.ga=a;return b}
+i6.prototype.$classData=g({g$:0},!1,"scalaz.Traverse1$$anon$4",{g$:1,d:1,Coa:1,oba:1,uk:1,$i:1,nC:1,Waa:1});function TW(){}TW.prototype=new TBa;TW.prototype.constructor=TW;TW.prototype.b=function(){return this};TW.prototype.$classData=g({h$:0},!1,"scalaz.Unapply$",{h$:1,Mla:1,Nla:1,Ola:1,Pla:1,Qla:1,Rla:1,d:1});var sra=void 0;function j6(){this.hn=null}j6.prototype=new l;j6.prototype.constructor=j6;function Tt(a){var b=new j6;b.hn=a;Ad(b);Ky(b);tS(b);uS(b);return b}c=j6.prototype;
+c.cd=function(a,b){return Lra(a,b)};c.th=function(){};c.wh=function(a,b,d){return Y0(d,a,b,this)};c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Qd=function(a){return(new dq).j(ne(a))};c.pg=function(){};c.wf=function(a,b){return Iga(ne(a),b,this.hn)};c.sh=function(){};c.$classData=g({n$:0},!1,"scalaz.ValidationInstances3$$anon$2",{n$:1,d:1,Bh:1,Dh:1,fh:1,ug:1,Eh:1,Ch:1});function aA(){}aA.prototype=new C2;aA.prototype.constructor=aA;aA.prototype.b=function(){return this};
+aA.prototype.$classData=g({r$:0},!1,"scalaz.package$IndexedReaderWriterState$",{r$:1,iC:1,jC:1,eC:1,fC:1,gC:1,d:1,hC:1});var Sia=void 0;function cA(){}cA.prototype=new C2;cA.prototype.constructor=cA;cA.prototype.b=function(){return this};cA.prototype.$classData=g({s$:0},!1,"scalaz.package$ReaderWriterState$",{s$:1,iC:1,jC:1,eC:1,fC:1,gC:1,d:1,hC:1});var Uia=void 0;function bA(){}bA.prototype=new C2;bA.prototype.constructor=bA;bA.prototype.b=function(){return this};
+bA.prototype.$classData=g({t$:0},!1,"scalaz.package$ReaderWriterStateT$",{t$:1,iC:1,jC:1,eC:1,fC:1,gC:1,d:1,hC:1});var Tia=void 0;function Nd(){this.ga=null}Nd.prototype=new l;Nd.prototype.constructor=Nd;c=Nd.prototype;c.sc=function(a,b){Pz();return a?!0:!!ne(b)};c.Rh=function(){};c.ag=function(){};c.xe=function(){Pz();return!1};c.hf=function(){};c.Gv=function(){};c.qg=function(){};
+c.Yd=function(a){if(null===a)throw ug(vg(),null);this.ga=a;Cd(this);dz(this);zd(this);wz(this);gS(this);this.Gv(lsa(this));return this};c.Df=function(){};c.$classData=g({E$:0},!1,"scalaz.std.AnyValInstances$$anon$2",{E$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1,vR:1});function Od(){this.ga=null}Od.prototype=new l;Od.prototype.constructor=Od;c=Od.prototype;c.sc=function(a,b){Pz();return a?!!ne(b):!1};c.Rh=function(){};c.ag=function(){};c.xe=function(){Pz();return!0};c.hf=function(){};c.Gv=function(){};c.qg=function(){};
+c.Yd=function(a){if(null===a)throw ug(vg(),null);this.ga=a;Cd(this);dz(this);zd(this);wz(this);gS(this);this.Gv(lsa(this));return this};c.Df=function(){};c.$classData=g({F$:0},!1,"scalaz.std.AnyValInstances$$anon$3",{F$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1,vR:1});function Pd(){}Pd.prototype=new l;Pd.prototype.constructor=Pd;c=Pd.prototype;c.sc=function(a,b){return((a|0)+(ne(b)|0)|0)<<24>>24};c.Sd=function(a){return Dd(this,a)};c.Rh=function(){};c.ag=function(){};c.ah=function(a){return""+(a|0)};c.xe=function(){return 0};
+c.Xg=function(){};c.hf=function(){};c.qg=function(){};c.Yd=function(){Cd(this);dz(this);zd(this);wz(this);gS(this);Jd(this);return this};c.Df=function(){};c.$classData=g({G$:0},!1,"scalaz.std.AnyValInstances$$anon$4",{G$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1,gh:1});function Rd(){}Rd.prototype=new l;Rd.prototype.constructor=Rd;c=Rd.prototype;c.sc=function(a,b){a=null===a?0:a.Y;b=ne(b);return(new Ke).Xa(65535&(a+(null===b?0:b.Y)|0))};c.Sd=function(a){return Dd(this,a)};c.Rh=function(){};c.ag=function(){};
+c.ah=function(a){return ba.String.fromCharCode(null===a?0:a.Y)};c.xe=function(){return(new Ke).Xa(0)};c.Xg=function(){};c.hf=function(){};c.qg=function(){};c.Yd=function(){Cd(this);dz(this);zd(this);wz(this);gS(this);Jd(this);return this};c.Df=function(){};c.$classData=g({H$:0},!1,"scalaz.std.AnyValInstances$$anon$5",{H$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1,gh:1});function Td(){}Td.prototype=new l;Td.prototype.constructor=Td;c=Td.prototype;c.sc=function(a,b){return((a|0)+(ne(b)|0)|0)<<16>>16};
+c.Sd=function(a){return Dd(this,a)};c.Rh=function(){};c.ag=function(){};c.ah=function(a){return""+(a|0)};c.xe=function(){return 0};c.Xg=function(){};c.hf=function(){};c.qg=function(){};c.Yd=function(){Cd(this);dz(this);zd(this);wz(this);gS(this);Jd(this);return this};c.Df=function(){};c.$classData=g({I$:0},!1,"scalaz.std.AnyValInstances$$anon$6",{I$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1,gh:1});function Vd(){}Vd.prototype=new l;Vd.prototype.constructor=Vd;c=Vd.prototype;
+c.sc=function(a,b){return(a|0)+(ne(b)|0)|0};c.Sd=function(a){return Dd(this,a)};c.Rh=function(){};c.ag=function(){};c.ah=function(a){return""+(a|0)};c.xe=function(){return 0};c.Xg=function(){};c.hf=function(){};c.qg=function(){};c.Yd=function(){Cd(this);dz(this);zd(this);wz(this);gS(this);Jd(this);return this};c.Df=function(){};c.$classData=g({J$:0},!1,"scalaz.std.AnyValInstances$$anon$7",{J$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1,gh:1});function Xd(){}Xd.prototype=new l;Xd.prototype.constructor=Xd;c=Xd.prototype;
+c.sc=function(a,b){var d=Qa(a);a=Qa(ne(b));b=d.la;var d=d.qa,e=a.qa;a=b+a.la|0;return(new Vb).ia(a,(-2147483648^a)<(-2147483648^b)?1+(d+e|0)|0:d+e|0)};c.Sd=function(a){return Dd(this,a)};c.Rh=function(){};c.ag=function(){};c.ah=function(a){var b=Qa(a);a=b.la;b=b.qa;return yU(Ra(),a,b)};c.xe=function(){return DA()};c.Xg=function(){};c.hf=function(){};c.qg=function(){};c.Yd=function(){Cd(this);dz(this);zd(this);wz(this);gS(this);Jd(this);return this};c.Df=function(){};
+c.$classData=g({K$:0},!1,"scalaz.std.AnyValInstances$$anon$8",{K$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1,gh:1});function k6(){}k6.prototype=new l;k6.prototype.constructor=k6;c=k6.prototype;c.ok=function(a){return py(this,a)};c.Ok=function(){};c.Yq=function(){};c.Wj=function(a,b,d){return coa(this,a,b,d)};c.dt=function(){};c.zi=function(a,b,d){return hia(this,a,b,d)};c.at=function(){};c.$classData=g({paa:0},!1,"scalaz.std.SetInstances$$anon$1",{paa:1,d:1,cl:1,dl:1,zt:1,Ct:1,Jr:1,Aka:1});function l6(){}
+l6.prototype=new l;l6.prototype.constructor=l6;c=l6.prototype;c.cd=function(a,b){return Kua(this,a,b)};c.th=function(){};c.wh=function(a,b,d){return Y0(d,a,b,this)};c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Qd=function(a){Pz();return yCa(oc().zS,a)};c.ZD=function(){Ad(this);Ky(this);tS(this);uS(this);return this};c.pg=function(){};
+c.wf=function(a,b){Pz();if(ne(b).z()||ne(a).z())oc(),a=YT();else{var d=ne(b).$(),e=ne(a),d=d.y(e.$());a=sE(new tE,d,K(function(a,b,d){return function(){return a.wf(K(function(a,b){return function(){Pz();return ne(b).aa()}}(a,b)),K(function(a,b){return function(){Pz();return ne(b).aa()}}(a,d)))}}(this,a,b)))}return a};c.sh=function(){};c.$classData=g({raa:0},!1,"scalaz.std.StreamInstances$$anon$2",{raa:1,d:1,Bh:1,Dh:1,fh:1,ug:1,Eh:1,Ch:1});function m6(){}m6.prototype=new l;
+m6.prototype.constructor=m6;c=m6.prototype;c.sc=function(a,b){b=ne(b);return zf(Ef(),a,b)};c.Sd=function(a){return Dd(this,a)};c.Rh=function(){};c.ag=function(){};c.ah=function(a){return lf(nf(),a)};c.xe=function(){return cf().Hj};c.Xg=function(){};c.hf=function(){};c.qg=function(){};c.aE=function(){Cd(this);dz(this);zd(this);wz(this);gS(this);Jd(this);return this};c.Df=function(){};c.$classData=g({Caa:0},!1,"scalaz.std.java.math.BigIntegerInstances$$anon$1",{Caa:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1,gh:1});
+function n6(){}n6.prototype=new l;n6.prototype.constructor=n6;c=n6.prototype;c.sc=function(a,b){b=ne(b);return JR(new KR,yta(a.Fc,b.Fc),a.jy)};c.Sd=function(a){return Dd(this,a)};c.Rh=function(){};c.ag=function(){};c.ah=function(a){return a.Fc.k()};c.xe=function(){return Lha(bx(),DA())};c.Xg=function(){};c.hf=function(){};c.qg=function(){};c.cE=function(){Cd(this);dz(this);zd(this);wz(this);gS(this);Jd(this);return this};c.Df=function(){};
+c.$classData=g({Kaa:0},!1,"scalaz.std.math.BigDecimalInstances$$anon$1",{Kaa:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1,gh:1});function ae(){}ae.prototype=new l;ae.prototype.constructor=ae;c=ae.prototype;c.sc=function(a,b){b=ne(b);a=a.le;b=b.le;return(new m_).nn(zf(Ef(),a,b))};c.Sd=function(a){return Dd(this,a)};c.Rh=function(){};c.ag=function(){};c.ah=function(a){a=a.le;return lf(nf(),a)};c.xe=function(){return eta(n_(),DA())};c.dE=function(){Cd(this);dz(this);zd(this);wz(this);gS(this);Jd(this);return this};
+c.Xg=function(){};c.hf=function(){};c.qg=function(){};c.Df=function(){};c.$classData=g({Naa:0},!1,"scalaz.std.math.BigInts$$anon$1",{Naa:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1,gh:1});function jA(){DT.call(this);this.uy=null}jA.prototype=new lZ;jA.prototype.constructor=jA;c=jA.prototype;c.u=function(){return"NoSuchTestException"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.WR){var b=this.uy;a=a.uy;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.uy;default:throw(new P).c(""+a);}};c.G=function(a){this.uy=a;a="["+a.zb(".")+"]";DT.prototype.gc.call(this,a,null);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({WR:0},!1,"utest.NoSuchTestException",{WR:1,xd:1,Lc:1,d:1,i:1,t:1,q:1,l:1});function o6(){DT.call(this);this.sy=this.Hx=null}o6.prototype=new lZ;o6.prototype.constructor=o6;c=o6.prototype;c.u=function(){return"SkippedOuterFailure"};c.v=function(){return 2};
+c.o=function(a){if(this===a)return!0;if(Roa(a)){var b=this.Hx,d=a.Hx;if(null===b?null===d:b.o(d))return b=this.sy,a=a.sy,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Hx;case 1:return this.sy;default:throw(new P).c(""+a);}};function UBa(a,b){var d=new o6;d.Hx=a;d.sy=b;a=a.zb(".");DT.prototype.gc.call(d,a,b);return d}c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Roa(a){return!!(a&&a.$classData&&a.$classData.n.XR)}
+c.$classData=g({XR:0},!1,"utest.SkippedOuterFailure",{XR:1,xd:1,Lc:1,d:1,i:1,t:1,q:1,l:1});function TA(){this.lT=null}TA.prototype=new l;TA.prototype.constructor=TA;TA.prototype.zk=function(a,b){return this.lT.zk(a,b)};TA.prototype.$classData=g({Eca:0},!1,"java.util.Arrays$$anon$3",{Eca:1,d:1,Cv:1,av:1,Dv:1,Bv:1,l:1,i:1});function w1(){DT.call(this);this.cT=0;this.oD=null}w1.prototype=new l5;w1.prototype.constructor=w1;
+w1.prototype.Lh=function(){return"Conversion \x3d "+(new Ke).Xa(this.cT)+", Flags \x3d "+this.oD};w1.prototype.Xa=function(a){this.cT=a;DT.prototype.gc.call(this,null,null);this.oD=null;return this};w1.prototype.$classData=g({Fca:0},!1,"java.util.FormatFlagsConversionMismatchException",{Fca:1,zE:1,vn:1,ef:1,xd:1,Lc:1,d:1,i:1});function s1(){DT.call(this);this.tD=null}s1.prototype=new l5;s1.prototype.constructor=s1;s1.prototype.b=function(){DT.prototype.gc.call(this,null,null);this.tD=null;return this};
+s1.prototype.Lh=function(){return"Flags \x3d '"+this.tD+"'"};s1.prototype.c=function(a){s1.prototype.b.call(this);if(null===a)throw(new ye).b();this.tD=a;return this};s1.prototype.$classData=g({Kca:0},!1,"java.util.IllegalFormatFlagsException",{Kca:1,zE:1,vn:1,ef:1,xd:1,Lc:1,d:1,i:1});function u1(){DT.call(this);this.Sq=null}u1.prototype=new l5;u1.prototype.constructor=u1;u1.prototype.b=function(){DT.prototype.gc.call(this,null,null);this.Sq=null;return this};
+u1.prototype.Lh=function(){return"Format specifier '"+this.Sq+"'"};u1.prototype.c=function(a){u1.prototype.b.call(this);if(null===a)throw(new ye).b();this.Sq=a;return this};u1.prototype.$classData=g({Lca:0},!1,"java.util.MissingFormatArgumentException",{Lca:1,zE:1,vn:1,ef:1,xd:1,Lc:1,d:1,i:1});function v1(){DT.call(this);this.Sq=null}v1.prototype=new l5;v1.prototype.constructor=v1;v1.prototype.b=function(){DT.prototype.gc.call(this,null,null);this.Sq=null;return this};v1.prototype.Lh=function(){return this.Sq};
+v1.prototype.c=function(a){v1.prototype.b.call(this);if(null===a)throw(new ye).b();this.Sq=a;return this};v1.prototype.$classData=g({Mca:0},!1,"java.util.MissingFormatWidthException",{Mca:1,zE:1,vn:1,ef:1,xd:1,Lc:1,d:1,i:1});function YZ(){this.xp=null}YZ.prototype=new l;YZ.prototype.constructor=YZ;c=YZ.prototype;c.u=function(){return"Deadline"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.TW){var b=this.xp;a=a.xp;return null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.xp;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.xg=function(a){return this.xp.bn(a.xp)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({TW:0},!1,"scala.concurrent.duration.Deadline",{TW:1,d:1,Cm:1,Ed:1,t:1,q:1,l:1,i:1});function a_(){}a_.prototype=new o5;a_.prototype.constructor=a_;c=a_.prototype;c.b=function(){return this};c.o=function(){return!1};c.k=function(){return"Duration.Undefined"};
+c.xg=function(a){return this.bn(a)};c.bn=function(a){return a===this?0:1};c.$classData=g({Vda:0},!1,"scala.concurrent.duration.Duration$$anon$1",{Vda:1,UW:1,dF:1,d:1,l:1,i:1,Cm:1,Ed:1});function b_(){}b_.prototype=new o5;b_.prototype.constructor=b_;c=b_.prototype;c.b=function(){return this};c.k=function(){return"Duration.Inf"};c.xg=function(a){return this.bn(a)};c.bn=function(a){return a===vC().IS?-1:a===this?0:1};
+c.$classData=g({Wda:0},!1,"scala.concurrent.duration.Duration$$anon$2",{Wda:1,UW:1,dF:1,d:1,l:1,i:1,Cm:1,Ed:1});function c_(){}c_.prototype=new o5;c_.prototype.constructor=c_;c=c_.prototype;c.b=function(){return this};c.k=function(){return"Duration.MinusInf"};c.xg=function(a){return this.bn(a)};c.bn=function(a){return a===this?0:-1};c.$classData=g({Xda:0},!1,"scala.concurrent.duration.Duration$$anon$3",{Xda:1,UW:1,dF:1,d:1,l:1,i:1,Cm:1,Ed:1});function p6(){r5.call(this);this.Bf=null}
+p6.prototype=new YBa;p6.prototype.constructor=p6;function Vja(a){var b=new p6;r5.prototype.b.call(b);b.Bf=a.Ta();return b}p6.prototype.$classData=g({fea:0},!1,"scala.io.Source$$anon$1",{fea:1,xpa:1,d:1,ad:1,La:1,Ka:1,Dr:1,Yu:1});function q6(){this.ej=this.ga=null}q6.prototype=new l;q6.prototype.constructor=q6;q6.prototype.zk=function(a,b){return this.ga.zk(this.ej.y(a),this.ej.y(b))};q6.prototype.$classData=g({sea:0},!1,"scala.math.Ordering$$anon$5",{sea:1,d:1,Cv:1,av:1,Dv:1,Bv:1,l:1,i:1});
+function xn(){this.El=null}xn.prototype=new l;xn.prototype.constructor=xn;c=xn.prototype;c.Qg=function(a){var b=this.Gd();return b===pa(bb)?la(Wa(bb),[a]):b===pa(cb)?la(Wa(cb),[a]):b===pa(Za)?la(Wa(Za),[a]):b===pa(db)?la(Wa(db),[a]):b===pa(eb)?la(Wa(eb),[a]):b===pa(fb)?la(Wa(fb),[a]):b===pa(gb)?la(Wa(gb),[a]):b===pa(Ya)?la(Wa(Ya),[a]):b===pa(Xa)?la(Wa(Ba),[a]):OA(QA(),this.Gd(),a)};c.o=function(a){var b;a&&a.$classData&&a.$classData.n.Ii?(b=this.Gd(),a=a.Gd(),b=b===a):b=!1;return b};
+c.k=function(){return eva(this,this.El)};c.Gd=function(){return this.El};c.Dg=function(a){this.El=a;return this};c.r=function(){return OD(V(),this.El)};c.$classData=g({zea:0},!1,"scala.reflect.ClassTag$GenericClassTag",{zea:1,d:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});function re(){ST.call(this)}re.prototype=new opa;re.prototype.constructor=re;c=re.prototype;c.u=function(){return"Error"};c.v=function(){return 2};c.on=function(a,b,d){ST.prototype.on.call(this,a,b,d);return this};
+c.o=function(a){return this===a?!0:pe(a)&&a.ga===this.ga?this.Kk===a.Kk?this.fe===a.fe:!1:!1};c.w=function(a){switch(a){case 0:return this.Kk;case 1:return this.fe;default:throw(new P).c(""+a);}};c.k=function(){var a=oP(this.fe),b=this.Kk,d=oP(this.fe);return"["+a+"] error: "+b+"\n\n"+kba(d)};c.EC=function(){return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function pe(a){return!!(a&&a.$classData&&a.$classData.n.hX)}
+c.$classData=g({hX:0},!1,"scala.util.parsing.combinator.Parsers$Error",{hX:1,hF:1,jX:1,d:1,t:1,q:1,l:1,i:1});function te(){ST.call(this)}te.prototype=new opa;te.prototype.constructor=te;c=te.prototype;c.u=function(){return"Failure"};c.v=function(){return 2};c.on=function(a,b,d){ST.prototype.on.call(this,a,b,d);return this};c.o=function(a){return this===a?!0:qe(a)&&a.ga===this.ga?this.Kk===a.Kk?this.fe===a.fe:!1:!1};
+c.w=function(a){switch(a){case 0:return this.Kk;case 1:return this.fe;default:throw(new P).c(""+a);}};c.k=function(){var a=oP(this.fe),b=this.Kk,d=oP(this.fe);return"["+a+"] failure: "+b+"\n\n"+kba(d)};c.EC=function(a){a=ne(a);if(oe(a))return a;if(a&&a.$classData&&a.$classData.n.hF){var b=oP(a.fe),d=oP(this.fe);return b.wc<d.wc?this:a}throw(new q).j(a);};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function qe(a){return!!(a&&a.$classData&&a.$classData.n.iX)}
+c.$classData=g({iX:0},!1,"scala.util.parsing.combinator.Parsers$Failure",{iX:1,hF:1,jX:1,d:1,t:1,q:1,l:1,i:1});function r6(){this.s=null}r6.prototype=new B5;r6.prototype.constructor=r6;r6.prototype.b=function(){dU.prototype.b.call(this);return this};r6.prototype.db=function(){ko();return(new jc).b()};r6.prototype.$classData=g({Nfa:0},!1,"scala.collection.Seq$",{Nfa:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1});var zCa=void 0;function r(){zCa||(zCa=(new r6).b());return zCa}function s6(){this.s=null}
+s6.prototype=new B5;s6.prototype.constructor=s6;function t6(){}t6.prototype=s6.prototype;function u6(){}u6.prototype=new C_;u6.prototype.constructor=u6;u6.prototype.b=function(){v6=this;zpa(new jU,sb(new tb,function(){return function(a){return a}}(this)));return this};
+function ACa(a,b,d,e,f,h,k){var p=31&(b>>>h|0),t=31&(e>>>h|0);if(p!==t)return a=1<<p|1<<t,b=la(Wa(w6),[2]),p<t?(b.m[0]=d,b.m[1]=f):(b.m[0]=f,b.m[1]=d),x6(new y6,a,b,k);t=la(Wa(w6),[1]);p=1<<p;t.m[0]=ACa(a,b,d,e,f,5+h|0,k);return x6(new y6,p,t,k)}u6.prototype.js=function(){return z6()};u6.prototype.$classData=g({Wfa:0},!1,"scala.collection.immutable.HashMap$",{Wfa:1,NX:1,Mv:1,Lv:1,d:1,Rpa:1,l:1,i:1});var v6=void 0;function A6(){v6||(v6=(new u6).b());return v6}function B6(){this.s=null}
+B6.prototype=new B5;B6.prototype.constructor=B6;B6.prototype.b=function(){dU.prototype.b.call(this);return this};B6.prototype.db=function(){return(new jc).b()};B6.prototype.$classData=g({Fga:0},!1,"scala.collection.immutable.Seq$",{Fga:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1});var BCa=void 0;function ko(){BCa||(BCa=(new B6).b());return BCa}function C6(){}C6.prototype=new l;C6.prototype.constructor=C6;function D6(){}D6.prototype=C6.prototype;C6.prototype.dg=function(a,b){pU(this,a,b)};
+C6.prototype.qc=function(){};C6.prototype.Zb=function(a){return oE(this,a)};function E6(){this.s=null}E6.prototype=new B5;E6.prototype.constructor=E6;E6.prototype.b=function(){dU.prototype.b.call(this);return this};E6.prototype.db=function(){return(new w).b()};E6.prototype.$classData=g({wha:0},!1,"scala.collection.mutable.Buffer$",{wha:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1});var CCa=void 0;function Dc(){CCa||(CCa=(new E6).b());return CCa}function F6(){this.s=null}F6.prototype=new B5;
+F6.prototype.constructor=F6;F6.prototype.b=function(){dU.prototype.b.call(this);return this};F6.prototype.db=function(){return(new e3).b()};F6.prototype.$classData=g({Lha:0},!1,"scala.collection.mutable.IndexedSeq$",{Lha:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1});var DCa=void 0;function ECa(){DCa||(DCa=(new F6).b());return DCa}function jo(){this.s=null}jo.prototype=new B5;jo.prototype.constructor=jo;jo.prototype.b=function(){dU.prototype.b.call(this);return this};jo.prototype.db=function(){return(new e3).b()};
+jo.prototype.$classData=g({eia:0},!1,"scala.collection.mutable.Seq$",{eia:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1});var io=void 0;function G6(){this.s=null}G6.prototype=new B5;G6.prototype.constructor=G6;G6.prototype.b=function(){dU.prototype.b.call(this);return this};G6.prototype.db=function(){return(new w).b()};G6.prototype.$classData=g({xia:0},!1,"scala.scalajs.js.WrappedArray$",{xia:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1});var FCa=void 0;function Gn(){FCa||(FCa=(new G6).b());return FCa}
+function AH(){this.p=this.h=this.g=null;this.a=0}AH.prototype=new l;AH.prototype.constructor=AH;c=AH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_any"};c.v=function(){return 0};c.o=function(a){return tt(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Cj(D())]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 15");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 15");return this.h};function tt(a){return!!(a&&a.$classData&&a.$classData.n.NI)}c.$classData=g({NI:0},!1,"org.nlogo.core.prim._any",{NI:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function IL(){this.p=this.h=this.g=null;this.a=0}IL.prototype=new l;IL.prototype.constructor=IL;c=IL.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_ask"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.aA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Cj(D())|xj(D()),Lj(D())]),b=B().s,a=L(a,b),b=jd().Wc("?");D();var d=F();D();var e=F();D();D();return nc(D(),a,d,e,"OTPL",b,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 21");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 21");return this.h};
+c.$classData=g({aA:0},!1,"org.nlogo.core.prim._ask",{aA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function JL(){this.p=this.h=this.g=null;this.a=0}JL.prototype=new l;JL.prototype.constructor=JL;c=JL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_askconcurrent"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.OI)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};
+c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Cj(D()),Lj(D())]),b=B().s,a=L(a,b),b=jd().Wc("?");D();var d=F();D();var e=F();D();D();return nc(D(),a,d,e,"OTPL",b,!1,!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 28");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 28");return this.h};c.$classData=g({OI:0},!1,"org.nlogo.core.prim._askconcurrent",{OI:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function ML(){this.p=this.h=this.g=null;this.a=0}ML.prototype=new l;ML.prototype.constructor=ML;c=ML.prototype;c.b=function(){M(this);return this};c.u=function(){return"_bk"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.bA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 35");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 35");return this.h};
+c.$classData=g({bA:0},!1,"org.nlogo.core.prim._bk",{bA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function jG(){this.p=this.h=this.g=this.ka=null;this.a=0}jG.prototype=new l;jG.prototype.constructor=jG;c=jG.prototype;c.u=function(){return"_breed"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.cA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};
+c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Dj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 41");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 41");return this.h};c.$classData=g({cA:0},!1,"org.nlogo.core.prim._breed",{cA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function kG(){this.p=this.h=this.g=this.wa=null;this.a=0}kG.prototype=new l;
+kG.prototype.constructor=kG;c=kG.prototype;c.u=function(){return"_breedvariable"};c.v=function(){return 1};c.o=function(a){return this===a?!0:Cwa(a)?this.wa===a.wa:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.wa;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=kc()|vj(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 46");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.wa=a;M(this);return this};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 46");return this.h};function Cwa(a){return!!(a&&a.$classData&&a.$classData.n.PI)}c.$classData=g({PI:0},!1,"org.nlogo.core.prim._breedvariable",{PI:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function IV(){this.p=this.h=this.g=this.Qh=null;this.a=0}IV.prototype=new l;IV.prototype.constructor=IV;
+c=IV.prototype;c.u=function(){return"_call"};c.v=function(){return 1};c.o=function(a){return this===a?!0:pr(a)?this.Qh===a.Qh:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.Qh;default:throw(new P).c(""+a);}};c.k=function(){return u((new v).G((new w).f(["_call(",")"])),(new w).f([this.Qh.pe()]))};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return zaa(this.Qh)};c.LD=function(a){this.Qh=a;M(this);this.M(a.N());return this};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 52");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 52");return this.h};
+function pr(a){return!!(a&&a.$classData&&a.$classData.n.QI)}c.$classData=g({QI:0},!1,"org.nlogo.core.prim._call",{QI:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function HV(){this.p=this.h=this.g=this.Qh=null;this.a=0}HV.prototype=new l;HV.prototype.constructor=HV;c=HV.prototype;c.u=function(){return"_callreport"};c.v=function(){return 1};c.o=function(a){return this===a?!0:rt(a)?this.Qh===a.Qh:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){switch(a){case 0:return this.Qh;default:throw(new P).c(""+a);}};c.k=function(){return u((new v).G((new w).f(["_call(",")"])),(new w).f([this.Qh.pe()]))};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return zaa(this.Qh)};c.LD=function(a){this.Qh=a;M(this);this.M(a.N());return this};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 60");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 60");return this.h};function rt(a){return!!(a&&a.$classData&&a.$classData.n.RI)}c.$classData=g({RI:0},!1,"org.nlogo.core.prim._callreport",{RI:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function PL(){this.p=this.h=this.g=this.Zc=null;this.a=0}PL.prototype=new l;PL.prototype.constructor=PL;c=PL.prototype;c.b=function(){M(this);this.Zc=(new Yn).c("~CAREFULLY_ERROR");this.a=(1|this.a)<<24>>24;return this};c.u=function(){return"_carefully"};c.v=function(){return 0};function Tea(a){if(0===(1&a.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 70");return a.Zc}c.o=function(a){return hr(a)&&!0};
+c.M=function(a){this.h=a;this.a=(4|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(8|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Lj(D()),Lj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();D();var e=F();D();return nc(D(),a,b,d,"OTPL",e,!0,!0)};
+c.K=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 68");return this.g};c.L=function(a){this.g=a;this.a=(2|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(4&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 68");return this.h};
+function hr(a){return!!(a&&a.$classData&&a.$classData.n.SI)}c.$classData=g({SI:0},!1,"org.nlogo.core.prim._carefully",{SI:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function PH(){this.p=this.h=this.g=null;this.a=0}PH.prototype=new l;PH.prototype.constructor=PH;c=PH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_count"};c.v=function(){return 0};c.o=function(a){return st(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};
+c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Cj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 112");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 112");return this.h};function st(a){return!!(a&&a.$classData&&a.$classData.n.WI)}c.$classData=g({WI:0},!1,"org.nlogo.core.prim._count",{WI:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function lG(){this.p=this.h=this.g=this.ka=null;this.a=0}lG.prototype=new l;lG.prototype.constructor=lG;c=lG.prototype;c.b=function(){lG.prototype.c.call(this,"");return this};c.u=function(){return"_createorderedturtles"};c.v=function(){return 1};c.o=function(a){return this===a?!0:jr(a)?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};
+c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),Lj(D())|Sj()]),b=B().s,a=L(a,b),b=jd().Wc("-T--");D();var d=F();D();var e=F();D();D();return nc(D(),a,d,e,"O---",b,!1,!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 118");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 118");return this.h};function jr(a){return!!(a&&a.$classData&&a.$classData.n.XI)}c.$classData=g({XI:0},!1,"org.nlogo.core.prim._createorderedturtles",{XI:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function mG(){this.p=this.h=this.g=this.ka=null;this.a=0}
+mG.prototype=new l;mG.prototype.constructor=mG;c=mG.prototype;c.b=function(){mG.prototype.c.call(this,"");return this};c.u=function(){return"_createturtles"};c.v=function(){return 1};c.o=function(a){return this===a?!0:ir(a)?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),Lj(D())|Sj()]),b=B().s,a=L(a,b),b=jd().Wc("-T--");D();var d=F();D();var e=F();D();D();return nc(D(),a,d,e,"O---",b,!1,!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 126");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 126");return this.h};function ir(a){return!!(a&&a.$classData&&a.$classData.n.YI)}c.$classData=g({YI:0},!1,"org.nlogo.core.prim._createturtles",{YI:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function pL(){this.p=this.h=this.g=null;this.a=0}pL.prototype=new l;pL.prototype.constructor=pL;c=pL.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_done"};c.v=function(){return 0};c.o=function(a){return MAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();D();var e=F();D();return nc(D(),a,b,d,"OTPL",e,!1,!1)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 134");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 134");return this.h};function MAa(a){return!!(a&&a.$classData&&a.$classData.n.ZI)}c.$classData=g({ZI:0},!1,"org.nlogo.core.prim._done",{ZI:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function WH(){this.p=this.h=this.g=this.Zc=null;this.a=0}WH.prototype=new l;WH.prototype.constructor=WH;c=WH.prototype;
+c.b=function(){WH.prototype.Ja.call(this,F());return this};c.u=function(){return"_errormessage"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(vt(a)){var b=this.Zc;a=a.Zc;return null===b?null===a:b.o(a)}return!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.Zc;default:throw(new P).c(""+a);}};c.k=function(){return"_errormessage()"};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 145");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.Ja=function(a){this.Zc=a;M(this);return this};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 145");return this.h};function vt(a){return!!(a&&a.$classData&&a.$classData.n.aJ)}c.$classData=g({aJ:0},!1,"org.nlogo.core.prim._errormessage",{aJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function OV(){this.p=this.h=this.g=this.Jl=null;this.a=0}OV.prototype=new l;OV.prototype.constructor=OV;
+c=OV.prototype;c.u=function(){return"_extern"};c.PD=function(a){this.Jl=a;M(this);return this};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(sr(a)){var b=this.Jl;a=a.Jl;return null===b?null===a:b.o(a)}return!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.Jl;default:throw(new P).c(""+a);}};c.k=function(){var a=(new v).G((new w).f(["_extern(",")"])),b=this.K().Yb;return u(a,(new w).f([b.toUpperCase()]))};
+c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return this.Jl};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 160");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 160");return this.h};function sr(a){return!!(a&&a.$classData&&a.$classData.n.bJ)}c.$classData=g({bJ:0},!1,"org.nlogo.core.prim._extern",{bJ:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function PV(){this.p=this.h=this.g=this.Jl=null;this.a=0}PV.prototype=new l;PV.prototype.constructor=PV;c=PV.prototype;c.u=function(){return"_externreport"};
+c.PD=function(a){this.Jl=a;M(this);return this};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(yt(a)){var b=this.Jl;a=a.Jl;return null===b?null===a:b.o(a)}return!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.Jl;default:throw(new P).c(""+a);}};c.k=function(){var a=(new v).G((new w).f(["_externreport(",")"])),b=this.K().Yb;return u(a,(new w).f([b.toUpperCase()]))};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return this.Jl};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 164");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 164");return this.h};function yt(a){return!!(a&&a.$classData&&a.$classData.n.cJ)}c.$classData=g({cJ:0},!1,"org.nlogo.core.prim._externreport",{cJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function pM(){this.p=this.h=this.g=null;this.a=0}pM.prototype=new l;pM.prototype.constructor=pM;c=pM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_fd"};c.v=function(){return 0};c.o=function(a){return eQ(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 168");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 168");return this.h};function eQ(a){return!!(a&&a.$classData&&a.$classData.n.dJ)}c.$classData=g({dJ:0},!1,"org.nlogo.core.prim._fd",{dJ:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function nG(){this.p=this.h=this.g=this.ka=null;this.a=0}nG.prototype=new l;nG.prototype.constructor=nG;c=nG.prototype;
+c.b=function(){nG.prototype.c.call(this,"");return this};c.u=function(){return"_hatch"};c.v=function(){return 1};c.o=function(a){return this===a?!0:nr(a)?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),Lj(D())|Sj()]),b=B().s,a=L(a,b),b=jd().Wc("-T--");D();var d=F();D();var e=F();D();D();return nc(D(),a,d,e,"-T--",b,!1,!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 182");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 182");return this.h};function nr(a){return!!(a&&a.$classData&&a.$classData.n.fJ)}c.$classData=g({fJ:0},!1,"org.nlogo.core.prim._hatch",{fJ:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function sI(){this.p=this.h=this.g=null;this.a=0}sI.prototype=new l;sI.prototype.constructor=sI;c=sI.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_inradius"};c.v=function(){return 0};c.o=function(a){return Lya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=Dj(D())|Ej(D());B();var b=(new w).f([N(D())]),d=B().s,b=L(b,d),d=Dj(D())|Ej(D()),e=2+C()|0;D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"-TP-",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 190");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 190");return this.h};function Lya(a){return!!(a&&a.$classData&&a.$classData.n.gJ)}c.$classData=g({gJ:0},!1,"org.nlogo.core.prim._inradius",{gJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function cN(){this.p=this.h=this.g=null;this.a=0}cN.prototype=new l;cN.prototype.constructor=cN;c=cN.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_jump"};c.v=function(){return 0};c.o=function(a){return Wwa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 199");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 199");return this.h};function Wwa(a){return!!(a&&a.$classData&&a.$classData.n.hJ)}c.$classData=g({hJ:0},!1,"org.nlogo.core.prim._jump",{hJ:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function Um(){this.wa=null;this.vj=!1;this.p=this.h=this.g=null;this.a=0}Um.prototype=new l;Um.prototype.constructor=Um;c=Um.prototype;c.u=function(){return"_lambdavariable"};
+c.v=function(){return 2};c.o=function(a){return this===a?!0:qo(a)?this.wa===a.wa&&this.vj===a.vj:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.wa;case 1:return this.vj;default:throw(new P).c(""+a);}};c.k=function(){return u((new v).G((new w).f(["_lambdavariable(",")"])),(new w).f([this.wa]))};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=kc(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 214");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){Um.prototype.eE.call(this,a,!1);return this};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.wa)),a=V().da(a,this.vj?1231:1237);return V().pb(a,2)};c.x=function(){return Y(new Z,this)};c.eE=function(a,b){this.wa=a;this.vj=b;M(this);return this};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 214");return this.h};function qo(a){return!!(a&&a.$classData&&a.$classData.n.iJ)}
+c.$classData=g({iJ:0},!1,"org.nlogo.core.prim._lambdavariable",{iJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function uL(){this.p=this.h=this.g=this.Zc=null;this.a=0}uL.prototype=new l;uL.prototype.constructor=uL;c=uL.prototype;c.b=function(){uL.prototype.Ja.call(this,F());return this};c.u=function(){return"_let"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(Xn(a)){var b=this.Zc;a=a.Zc;return null===b?null===a:b.o(a)}return!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};
+c.w=function(a){switch(a){case 0:return this.Zc;default:throw(new P).c(""+a);}};c.k=function(){var a=this.Zc;a.z()?a=F():(a=a.X(),a=(new J).j(X(W(),a)));return"_let("+(a.z()?"":a.X())+")"};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc(),kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 229");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};function Hda(a,b){b=(new uL).Ja((new J).j(b));return hh(a,b)}c.Ja=function(a){this.Zc=a;M(this);return this};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 229");return this.h};function Xn(a){return!!(a&&a.$classData&&a.$classData.n.kJ)}c.$classData=g({kJ:0},!1,"org.nlogo.core.prim._let",{kJ:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function bP(){this.p=this.h=this.g=null;this.a=0}bP.prototype=new l;bP.prototype.constructor=bP;c=bP.prototype;c.b=function(){M(this);return this};c.u=function(){return"_letname"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.lJ)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=kc(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 241");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 241");return this.h};c.$classData=g({lJ:0},!1,"org.nlogo.core.prim._letname",{lJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function F4(){this.p=this.h=this.g=this.Zc=null;this.a=0}F4.prototype=new l;F4.prototype.constructor=F4;c=F4.prototype;c.u=function(){return"_letvariable"};c.v=function(){return 1};
+c.o=function(a){if(this===a)return!0;if(Zq(a)){var b=this.Zc;a=a.Zc;return null===b?null===a:b.o(a)}return!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.Zc;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.As=function(a){this.Zc=a;M(this);return this};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=kc(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 246");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 246");return this.h};function Zq(a){return!!(a&&a.$classData&&a.$classData.n.mJ)}c.$classData=g({mJ:0},!1,"org.nlogo.core.prim._letvariable",{mJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function oG(){this.p=this.h=this.g=this.wa=null;this.a=0}oG.prototype=new l;oG.prototype.constructor=oG;c=oG.prototype;c.u=function(){return"_linkbreedvariable"};
+c.v=function(){return 1};c.o=function(a){return this===a?!0:Dwa(a)?this.wa===a.wa:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.wa;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=kc()|vj(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"---L",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 251");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.wa=a;M(this);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 251");return this.h};function Dwa(a){return!!(a&&a.$classData&&a.$classData.n.nJ)}c.$classData=g({nJ:0},!1,"org.nlogo.core.prim._linkbreedvariable",{nJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function EV(){this.dd=this.Vd=0;this.p=this.h=this.g=null;this.a=0}EV.prototype=new l;EV.prototype.constructor=EV;c=EV.prototype;c.u=function(){return"_linkvariable"};
+c.v=function(){return 2};c.o=function(a){return this===a?!0:Fwa(a)?this.Vd===a.Vd&&this.dd===a.dd:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.Vd;case 1:return this.dd;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.ia=function(a,b){this.Vd=a;this.dd=b;M(this);return this};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=this.dd|vj(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"---L",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 257");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){var a=-889275714,a=V().da(a,this.Vd),a=V().da(a,this.dd);return V().pb(a,2)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 257");return this.h};function Fwa(a){return!!(a&&a.$classData&&a.$classData.n.oJ)}c.$classData=g({oJ:0},!1,"org.nlogo.core.prim._linkvariable",{oJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function uJ(){this.p=this.h=this.g=null;this.a=0}uJ.prototype=new l;uJ.prototype.constructor=uJ;c=uJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_neighbors"};c.v=function(){return 0};c.o=function(a){return uW(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=Ej(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-TP-",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 277");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 277");return this.h};function uW(a){return!!(a&&a.$classData&&a.$classData.n.rJ)}c.$classData=g({rJ:0},!1,"org.nlogo.core.prim._neighbors",{rJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function vJ(){this.p=this.h=this.g=null;this.a=0}vJ.prototype=new l;vJ.prototype.constructor=vJ;c=vJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_neighbors4"};c.v=function(){return 0};c.o=function(a){return sW(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Ej(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 283");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 283");return this.h};function sW(a){return!!(a&&a.$classData&&a.$classData.n.sJ)}c.$classData=g({sJ:0},!1,"org.nlogo.core.prim._neighbors4",{sJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function EJ(){this.p=this.h=this.g=null;this.a=0}EJ.prototype=new l;EJ.prototype.constructor=EJ;c=EJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_of"};c.v=function(){return 0};c.o=function(a){return ut(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Mj(D());B();var b=(new w).f([xj(D())|Cj(D())]),d=B().s,b=L(b,d),d=kc(),e=1+C()|0,f=jd().Wc("?");D();var h=F();D();var k=F();D();return G(new H,e,a,b,d,h,k,!0,"OTPL",f,f.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 315");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 315");return this.h};function ut(a){return!!(a&&a.$classData&&a.$classData.n.vJ)}c.$classData=g({vJ:0},!1,"org.nlogo.core.prim._of",{vJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function FJ(){this.p=this.h=this.g=null;this.a=0}FJ.prototype=new l;FJ.prototype.constructor=FJ;c=FJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_oneof"};
+c.v=function(){return 0};c.o=function(a){return jQ(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Cj(D())|Bj(D())]),b=B().s,a=L(a,b),b=kc(),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 326");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 326");return this.h};function jQ(a){return!!(a&&a.$classData&&a.$classData.n.wJ)}c.$classData=g({wJ:0},!1,"org.nlogo.core.prim._oneof",{wJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function HJ(){this.p=this.h=this.g=null;this.a=0}HJ.prototype=new l;HJ.prototype.constructor=HJ;c=HJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_other"};c.v=function(){return 0};c.o=function(a){return $P(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Cj(D())]),b=B().s,a=L(a,b),b=Cj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 340");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 340");return this.h};function $P(a){return!!(a&&a.$classData&&a.$classData.n.yJ)}c.$classData=g({yJ:0},!1,"org.nlogo.core.prim._other",{yJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function LJ(){this.p=this.h=this.g=null;this.a=0}LJ.prototype=new l;LJ.prototype.constructor=LJ;c=LJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_patchat"};c.v=function(){return 0};c.o=function(a){return Mya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=Hj(D())|yj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 346");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 346");return this.h};function Mya(a){return!!(a&&a.$classData&&a.$classData.n.zJ)}c.$classData=g({zJ:0},!1,"org.nlogo.core.prim._patchat",{zJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function SJ(){this.p=this.h=this.g=null;this.a=0}SJ.prototype=new l;SJ.prototype.constructor=SJ;c=SJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_patches"};c.v=function(){return 0};c.o=function(a){return rQ(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Ej(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 353");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 353");return this.h};function rQ(a){return!!(a&&a.$classData&&a.$classData.n.AJ)}c.$classData=g({AJ:0},!1,"org.nlogo.core.prim._patches",{AJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function RV(){this.Vd=0;this.p=this.h=this.g=this.wa=null;this.a=0}RV.prototype=new l;RV.prototype.constructor=RV;c=RV.prototype;c.u=function(){return"_procedurevariable"};
+c.v=function(){return 2};c.o=function(a){return this===a?!0:br(a)?this.Vd===a.Vd&&this.wa===a.wa:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.Vd;case 1:return this.wa;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=kc(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.Yo=function(a,b){this.Vd=a;this.wa=b;M(this);return this};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 367");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){var a=-889275714,a=V().da(a,this.Vd),a=V().da(a,OD(V(),this.wa));return V().pb(a,2)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 367");return this.h};function br(a){return!!(a&&a.$classData&&a.$classData.n.CJ)}c.$classData=g({CJ:0},!1,"org.nlogo.core.prim._procedurevariable",{CJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function aK(){this.p=this.h=this.g=null;this.a=0}aK.prototype=new l;aK.prototype.constructor=aK;c=aK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_random"};c.v=function(){return 0};c.o=function(a){return nAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 372");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 372");return this.h};function nAa(a){return!!(a&&a.$classData&&a.$classData.n.DJ)}c.$classData=g({DJ:0},!1,"org.nlogo.core.prim._random",{DJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function zN(){this.p=this.h=this.g=null;this.a=0}zN.prototype=new l;zN.prototype.constructor=zN;c=zN.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_repeat"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.eA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([N(D()),Lj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 378");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 378");return this.h};c.$classData=g({eA:0},!1,"org.nlogo.core.prim._repeat",{eA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function AN(){this.p=this.h=this.g=null;this.a=0}AN.prototype=new l;AN.prototype.constructor=AN;c=AN.prototype;c.b=function(){M(this);return this};c.u=function(){return"_report"};c.v=function(){return 0};
+c.o=function(a){return qr(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 383");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 383");return this.h};function qr(a){return!!(a&&a.$classData&&a.$classData.n.EJ)}c.$classData=g({EJ:0},!1,"org.nlogo.core.prim._report",{EJ:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function IN(){this.p=this.h=this.g=null;this.a=0}IN.prototype=new l;IN.prototype.constructor=IN;c=IN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_run"};c.v=function(){return 0};c.o=function(a){return rr(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())|Kj(D()),uj()|kc()]),d=B().s;return nc(a,L(b,d),(new J).j(1),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 418");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 418");return this.h};function rr(a){return!!(a&&a.$classData&&a.$classData.n.GJ)}c.$classData=g({GJ:0},!1,"org.nlogo.core.prim._run",{GJ:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function JN(){this.p=this.h=this.g=null;this.a=0}JN.prototype=new l;JN.prototype.constructor=JN;c=JN.prototype;c.b=function(){M(this);return this};c.u=function(){return"_set"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.fA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc(),kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 434");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 434");return this.h};c.$classData=g({fA:0},!1,"org.nlogo.core.prim._set",{fA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function pG(){this.p=this.h=this.g=this.ka=null;this.a=0}pG.prototype=new l;pG.prototype.constructor=pG;c=pG.prototype;c.b=function(){pG.prototype.c.call(this,"");return this};c.u=function(){return"_sprout"};
+c.v=function(){return 1};c.o=function(a){return this===a?!0:kr(a)?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),Lj(D())|Sj()]),b=B().s,a=L(a,b),b=jd().Wc("-T--");D();var d=F();D();var e=F();D();D();return nc(D(),a,d,e,"--P-",b,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 439");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 439");return this.h};function kr(a){return!!(a&&a.$classData&&a.$classData.n.IJ)}c.$classData=g({IJ:0},!1,"org.nlogo.core.prim._sprout",{IJ:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function bO(){this.p=this.h=this.g=null;this.a=0}bO.prototype=new l;bO.prototype.constructor=bO;c=bO.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_stop"};c.v=function(){return 0};c.o=function(a){return NO(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 447");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 447");return this.h};function NO(a){return!!(a&&a.$classData&&a.$classData.n.JJ)}c.$classData=g({JJ:0},!1,"org.nlogo.core.prim._stop",{JJ:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function SK(){this.p=this.h=this.g=null;this.a=0}SK.prototype=new l;SK.prototype.constructor=SK;c=SK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_turtle"};c.v=function(){return 0};c.o=function(a){return fAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=Gj(D())|yj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 460");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 460");return this.h};function fAa(a){return!!(a&&a.$classData&&a.$classData.n.MJ)}c.$classData=g({MJ:0},!1,"org.nlogo.core.prim._turtle",{MJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function BV(){this.$k=null;this.dd=0;this.p=this.h=this.g=null;this.a=0}BV.prototype=new l;BV.prototype.constructor=BV;c=BV.prototype;c.u=function(){return"_turtleorlinkvariable"};
+c.v=function(){return 2};c.o=function(a){return this===a?!0:Gwa(a)?this.$k===a.$k&&this.dd===a.dd:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.$k;case 1:return this.dd;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=this.dd|vj(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T-L",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 471");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.Cd=function(a,b){this.$k=a;this.dd=b;M(this);return this};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.$k)),a=V().da(a,this.dd);return V().pb(a,2)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 471");return this.h};function Gwa(a){return!!(a&&a.$classData&&a.$classData.n.NJ)}c.$classData=g({NJ:0},!1,"org.nlogo.core.prim._turtleorlinkvariable",{NJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function UK(){this.p=this.h=this.g=null;this.a=0}UK.prototype=new l;UK.prototype.constructor=UK;c=UK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_turtles"};c.v=function(){return 0};c.o=function(a){return iAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=Dj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 466");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 466");return this.h};function iAa(a){return!!(a&&a.$classData&&a.$classData.n.OJ)}c.$classData=g({OJ:0},!1,"org.nlogo.core.prim._turtles",{OJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function jP(){this.p=this.h=this.g=null;this.a=0}jP.prototype=new l;jP.prototype.constructor=jP;c=jP.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_unknownidentifier"};c.v=function(){return 0};c.o=function(a){return Sm(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=kc(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 487");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 487");return this.h};function Sm(a){return!!(a&&a.$classData&&a.$classData.n.QJ)}c.$classData=g({QJ:0},!1,"org.nlogo.core.prim._unknownidentifier",{QJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function eL(){this.p=this.h=this.g=null;this.a=0}eL.prototype=new l;eL.prototype.constructor=eL;c=eL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_with"};c.v=function(){return 0};c.o=function(a){return wt(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Cj(D());B();var b=(new w).f([Oj(D())]),d=B().s,b=L(b,d),d=Cj(D()),e=2+C()|0,f=jd().Wc("?");D();var h=F();D();var k=F();D();return G(new H,e,a,b,d,h,k,!1,"OTPL",f,f.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 492");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 492");return this.h};function wt(a){return!!(a&&a.$classData&&a.$classData.n.RJ)}c.$classData=g({RJ:0},!1,"org.nlogo.core.prim._with",{RJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function yH(){this.p=this.h=this.g=null;this.a=0}yH.prototype=new l;yH.prototype.constructor=yH;c=yH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_all"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.mA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Cj(D()),Oj(D())]),b=B().s,a=L(a,b),b=zj(D()),d=jd().Wc("?"),e=C();D();var f=mc();D();var h=F();D();var k=F();D();D();return G(new H,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 9");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 9");return this.h};c.$classData=g({mA:0},!1,"org.nlogo.core.prim.etc._all",{mA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function mL(){this.p=this.h=this.g=null;this.a=0}mL.prototype=new l;mL.prototype.constructor=mL;c=mL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_apply"};c.v=function(){return 0};
+c.o=function(a){return fya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Kj(D()),Bj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 22");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 22");return this.h};function fya(a){return!!(a&&a.$classData&&a.$classData.n.WJ)}c.$classData=g({WJ:0},!1,"org.nlogo.core.prim.etc._apply",{WJ:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function gH(){this.p=this.h=this.g=null;this.a=0}gH.prototype=new l;gH.prototype.constructor=gH;c=gH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_applyresult"};c.v=function(){return 0};c.o=function(a){return EAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Jj(D()),Bj(D())]),b=B().s,a=L(a,b),b=kc(),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 27");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 27");return this.h};function EAa(a){return!!(a&&a.$classData&&a.$classData.n.XJ)}c.$classData=g({XJ:0},!1,"org.nlogo.core.prim.etc._applyresult",{XJ:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function EH(){this.p=this.h=this.g=null;this.a=0}EH.prototype=new l;EH.prototype.constructor=EH;c=EH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_atpoints"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.nA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=Dj(D())|Ej(D());B();var b=(new w).f([Bj(D())]),d=B().s,b=L(b,d),d=Cj(D()),e=2+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 29");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 29");return this.h};c.$classData=g({nA:0},!1,"org.nlogo.core.prim.etc._atpoints",{nA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function HH(){this.p=this.h=this.g=null;this.a=0}HH.prototype=new l;HH.prototype.constructor=HH;c=HH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_basecolors"};
+c.v=function(){return 0};c.o=function(a){return SAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Bj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 45");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 45");return this.h};function SAa(a){return!!(a&&a.$classData&&a.$classData.n.eK)}c.$classData=g({eK:0},!1,"org.nlogo.core.prim.etc._basecolors",{eK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function NL(){this.p=this.h=this.g=null;this.a=0}NL.prototype=new l;NL.prototype.constructor=NL;c=NL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_beep"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.fK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 50");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 50");return this.h};c.$classData=g({fK:0},!1,"org.nlogo.core.prim.etc._beep",{fK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function IH(){this.p=this.h=this.g=null;this.a=0}IH.prototype=new l;IH.prototype.constructor=IH;c=IH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_behaviorspacerunnumber"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.gK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 54");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 54");return this.h};c.$classData=g({gK:0},!1,"org.nlogo.core.prim.etc._behaviorspacerunnumber",{gK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function nL(){this.p=this.h=this.g=null;this.a=0}nL.prototype=new l;nL.prototype.constructor=nL;c=nL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_bench"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.hK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 59");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 59");return this.h};c.$classData=g({hK:0},!1,"org.nlogo.core.prim.etc._bench",{hK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function iH(){this.p=this.h=this.g=null;this.a=0}iH.prototype=new l;iH.prototype.constructor=iH;c=iH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_block"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.iK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Qj()]),b=B().s,a=L(a,b),b=Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 65");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 65");return this.h};c.$classData=g({iK:0},!1,"org.nlogo.core.prim.etc._block",{iK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function hH(){this.p=this.h=this.g=null;this.a=0}hH.prototype=new l;hH.prototype.constructor=hH;c=hH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_boom"};c.v=function(){return 0};
+c.o=function(a){return FAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=kc(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 71");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 71");return this.h};function FAa(a){return!!(a&&a.$classData&&a.$classData.n.jK)}c.$classData=g({jK:0},!1,"org.nlogo.core.prim.etc._boom",{jK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function LH(){this.p=this.h=this.g=null;this.a=0}LH.prototype=new l;LH.prototype.constructor=LH;c=LH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_bothends"};c.v=function(){return 0};c.o=function(a){return sya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Cj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"---L",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 76");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 76");return this.h};function sya(a){return!!(a&&a.$classData&&a.$classData.n.kK)}c.$classData=g({kK:0},!1,"org.nlogo.core.prim.etc._bothends",{kK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function rG(){this.p=this.h=this.g=this.ka=null;this.a=0}rG.prototype=new l;rG.prototype.constructor=rG;c=rG.prototype;c.u=function(){return"_breedat"};
+c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.oA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=Dj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 6");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 6");return this.h};c.$classData=g({oA:0},!1,"org.nlogo.core.prim.etc._breedat",{oA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function wG(){this.p=this.h=this.g=this.ka=null;this.a=0}wG.prototype=new l;wG.prototype.constructor=wG;c=wG.prototype;c.u=function(){return"_breedhere"};
+c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.pA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Dj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 13");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 13");return this.h};c.$classData=g({pA:0},!1,"org.nlogo.core.prim.etc._breedhere",{pA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function xG(){this.p=this.h=this.g=this.ka=null;this.a=0}xG.prototype=new l;xG.prototype.constructor=xG;c=xG.prototype;c.u=function(){return"_breedon"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.qA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Gj(D())|Hj(D())|Dj(D())|Ej(D())]),b=B().s,a=L(a,b),b=Dj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 19");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 19");return this.h};c.$classData=g({qA:0},!1,"org.nlogo.core.prim.etc._breedon",{qA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function yG(){this.p=this.h=this.g=this.ka=null;this.a=0}yG.prototype=new l;
+yG.prototype.constructor=yG;c=yG.prototype;c.u=function(){return"_breedsingular"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.rA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=Gj(D())|yj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 25");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 25");return this.h};c.$classData=g({rA:0},!1,"org.nlogo.core.prim.etc._breedsingular",{rA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function JH(){this.p=this.h=this.g=null;this.a=0}JH.prototype=new l;JH.prototype.constructor=JH;c=JH.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_butfirst"};c.v=function(){return 0};c.o=function(a){return Nya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Bj(D())|Aj(D())]),b=B().s,a=L(a,b),b=Bj(D())|Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 37");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 37");return this.h};function Nya(a){return!!(a&&a.$classData&&a.$classData.n.lK)}c.$classData=g({lK:0},!1,"org.nlogo.core.prim.etc._butfirst",{lK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function KH(){this.p=this.h=this.g=null;this.a=0}KH.prototype=new l;KH.prototype.constructor=KH;c=KH.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_butlast"};c.v=function(){return 0};c.o=function(a){return Oya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Bj(D())|Aj(D())]),b=B().s,a=L(a,b),b=Bj(D())|Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 43");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 43");return this.h};function Oya(a){return!!(a&&a.$classData&&a.$classData.n.mK)}c.$classData=g({mK:0},!1,"org.nlogo.core.prim.etc._butlast",{mK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function MH(){this.p=this.h=this.g=null;this.a=0}MH.prototype=new l;MH.prototype.constructor=MH;c=MH.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_canmove"};c.v=function(){return 0};c.o=function(a){return tya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 49");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 49");return this.h};function tya(a){return!!(a&&a.$classData&&a.$classData.n.nK)}c.$classData=g({nK:0},!1,"org.nlogo.core.prim.etc._canmove",{nK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function oL(){this.p=this.h=this.g=null;this.a=0}oL.prototype=new l;oL.prototype.constructor=oL;c=oL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_changetopology"};c.v=function(){return 0};c.o=function(a){return eya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([zj(D()),zj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 88");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 88");return this.h};function eya(a){return!!(a&&a.$classData&&a.$classData.n.pK)}c.$classData=g({pK:0},!1,"org.nlogo.core.prim.etc._changetopology",{pK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function kH(){this.p=this.h=this.g=null;this.a=0}kH.prototype=new l;kH.prototype.constructor=kH;c=kH.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_checksum"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.qK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"O---",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 93");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 93");return this.h};c.$classData=g({qK:0},!1,"org.nlogo.core.prim.etc._checksum",{qK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function jH(){this.p=this.h=this.g=null;this.a=0}jH.prototype=new l;jH.prototype.constructor=jH;c=jH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_checksyntax"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.rK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Aj(D())]),b=B().s,a=L(a,b),b=Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 56");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 56");return this.h};c.$classData=g({rK:0},!1,"org.nlogo.core.prim.etc._checksyntax",{rK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function OL(){this.p=this.h=this.g=null;this.a=0}OL.prototype=new l;OL.prototype.constructor=OL;c=OL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_clearall"};c.v=function(){return 0};
+c.o=function(a){return Ixa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 99");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 99");return this.h};function Ixa(a){return!!(a&&a.$classData&&a.$classData.n.sK)}c.$classData=g({sK:0},!1,"org.nlogo.core.prim.etc._clearall",{sK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function QL(){this.p=this.h=this.g=null;this.a=0}QL.prototype=new l;QL.prototype.constructor=QL;c=QL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_cleardrawing"};c.v=function(){return 0};c.o=function(a){return Jxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 109");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 109");return this.h};function Jxa(a){return!!(a&&a.$classData&&a.$classData.n.uK)}c.$classData=g({uK:0},!1,"org.nlogo.core.prim.etc._cleardrawing",{uK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function SL(){this.p=this.h=this.g=null;this.a=0}SL.prototype=new l;SL.prototype.constructor=SL;c=SL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_clearglobals"};c.v=function(){return 0};c.o=function(a){return Lxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 114");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 114");return this.h};function Lxa(a){return!!(a&&a.$classData&&a.$classData.n.vK)}c.$classData=g({vK:0},!1,"org.nlogo.core.prim.etc._clearglobals",{vK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function TL(){this.p=this.h=this.g=null;this.a=0}TL.prototype=new l;TL.prototype.constructor=TL;c=TL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_clearlinks"};c.v=function(){return 0};c.o=function(a){return Pxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 119");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 119");return this.h};function Pxa(a){return!!(a&&a.$classData&&a.$classData.n.wK)}c.$classData=g({wK:0},!1,"org.nlogo.core.prim.etc._clearlinks",{wK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function UL(){this.p=this.h=this.g=null;this.a=0}UL.prototype=new l;UL.prototype.constructor=UL;c=UL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_clearoutput"};c.v=function(){return 0};c.o=function(a){return Rwa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 124");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 124");return this.h};function Rwa(a){return!!(a&&a.$classData&&a.$classData.n.xK)}c.$classData=g({xK:0},!1,"org.nlogo.core.prim.etc._clearoutput",{xK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function VL(){this.p=this.h=this.g=null;this.a=0}VL.prototype=new l;VL.prototype.constructor=VL;c=VL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_clearpatches"};c.v=function(){return 0};c.o=function(a){return Mxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 128");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 128");return this.h};function Mxa(a){return!!(a&&a.$classData&&a.$classData.n.yK)}c.$classData=g({yK:0},!1,"org.nlogo.core.prim.etc._clearpatches",{yK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function XL(){this.p=this.h=this.g=null;this.a=0}XL.prototype=new l;XL.prototype.constructor=XL;c=XL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_clearticks"};c.v=function(){return 0};c.o=function(a){return Oxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 133");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 133");return this.h};function Oxa(a){return!!(a&&a.$classData&&a.$classData.n.AK)}c.$classData=g({AK:0},!1,"org.nlogo.core.prim.etc._clearticks",{AK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function YL(){this.p=this.h=this.g=null;this.a=0}YL.prototype=new l;YL.prototype.constructor=YL;c=YL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_clearturtles"};c.v=function(){return 0};c.o=function(a){return Nxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 138");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 138");return this.h};function Nxa(a){return!!(a&&a.$classData&&a.$classData.n.BK)}c.$classData=g({BK:0},!1,"org.nlogo.core.prim.etc._clearturtles",{BK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function QH(){this.p=this.h=this.g=null;this.a=0}QH.prototype=new l;QH.prototype.constructor=QH;c=QH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_dateandtime"};c.v=function(){return 0};c.o=function(a){return HAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 149");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 149");return this.h};function HAa(a){return!!(a&&a.$classData&&a.$classData.n.EK)}c.$classData=g({EK:0},!1,"org.nlogo.core.prim.etc._dateandtime",{EK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function $L(){this.p=this.h=this.g=null;this.a=0}$L.prototype=new l;$L.prototype.constructor=$L;c=$L.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_die"};c.v=function(){return 0};c.o=function(a){return Xwa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T-L",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 62");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 62");return this.h};function Xwa(a){return!!(a&&a.$classData&&a.$classData.n.FK)}c.$classData=g({FK:0},!1,"org.nlogo.core.prim.etc._die",{FK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function aM(){this.p=this.h=this.g=null;this.a=0}aM.prototype=new l;aM.prototype.constructor=aM;c=aM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_diffuse"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.yA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([vj(),N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 154");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 154");return this.h};c.$classData=g({yA:0},!1,"org.nlogo.core.prim.etc._diffuse",{yA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function bM(){this.p=this.h=this.g=null;this.a=0}bM.prototype=new l;bM.prototype.constructor=bM;c=bM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_diffuse4"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.zA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([vj(),N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 160");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 160");return this.h};c.$classData=g({zA:0},!1,"org.nlogo.core.prim.etc._diffuse4",{zA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function cM(){this.p=this.h=this.g=null;this.a=0}cM.prototype=new l;cM.prototype.constructor=cM;c=cM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_display"};c.v=function(){return 0};
+c.o=function(a){return pya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 166");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 166");return this.h};function pya(a){return!!(a&&a.$classData&&a.$classData.n.GK)}c.$classData=g({GK:0},!1,"org.nlogo.core.prim.etc._display",{GK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function RH(){this.p=this.h=this.g=null;this.a=0}RH.prototype=new l;RH.prototype.constructor=RH;c=RH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_distance"};c.v=function(){return 0};c.o=function(a){return uya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Gj(D())|Hj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 67");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 67");return this.h};function uya(a){return!!(a&&a.$classData&&a.$classData.n.HK)}c.$classData=g({HK:0},!1,"org.nlogo.core.prim.etc._distance",{HK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function SH(){this.p=this.h=this.g=null;this.a=0}SH.prototype=new l;SH.prototype.constructor=SH;c=SH.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_distancexy"};c.v=function(){return 0};c.o=function(a){return vya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 170");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 170");return this.h};function vya(a){return!!(a&&a.$classData&&a.$classData.n.IK)}c.$classData=g({IK:0},!1,"org.nlogo.core.prim.etc._distancexy",{IK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function dM(){this.p=this.h=this.g=null;this.a=0}dM.prototype=new l;dM.prototype.constructor=dM;c=dM.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_downhill"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.AA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([vj()]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 177");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 177");return this.h};c.$classData=g({AA:0},!1,"org.nlogo.core.prim.etc._downhill",{AA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function eM(){this.p=this.h=this.g=null;this.a=0}eM.prototype=new l;eM.prototype.constructor=eM;c=eM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_downhill4"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.BA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([vj()]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 183");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 183");return this.h};c.$classData=g({BA:0},!1,"org.nlogo.core.prim.etc._downhill4",{BA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function lH(){this.p=this.h=this.g=null;this.a=0}lH.prototype=new l;lH.prototype.constructor=lH;c=lH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_dump"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.KK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"O---",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 189");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 189");return this.h};c.$classData=g({KK:0},!1,"org.nlogo.core.prim.etc._dump",{KK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function oH(){this.p=this.h=this.g=null;this.a=0}oH.prototype=new l;oH.prototype.constructor=oH;c=oH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_dump1"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.LK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 195");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 195");return this.h};c.$classData=g({LK:0},!1,"org.nlogo.core.prim.etc._dump1",{LK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function mH(){this.p=this.h=this.g=null;this.a=0}mH.prototype=new l;mH.prototype.constructor=mH;c=mH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_dumpextensionprims"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.MK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 200");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 200");return this.h};c.$classData=g({MK:0},!1,"org.nlogo.core.prim.etc._dumpextensionprims",{MK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function nH(){this.p=this.h=this.g=null;this.a=0}nH.prototype=new l;nH.prototype.constructor=nH;c=nH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_dumpextensions"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.NK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 205");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 205");return this.h};c.$classData=g({NK:0},!1,"org.nlogo.core.prim.etc._dumpextensions",{NK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function TH(){this.p=this.h=this.g=null;this.a=0}TH.prototype=new l;TH.prototype.constructor=TH;c=TH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_dx"};c.v=function(){return 0};
+c.o=function(a){return wya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 210");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 210");return this.h};function wya(a){return!!(a&&a.$classData&&a.$classData.n.OK)}c.$classData=g({OK:0},!1,"org.nlogo.core.prim.etc._dx",{OK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function UH(){this.p=this.h=this.g=null;this.a=0}UH.prototype=new l;UH.prototype.constructor=UH;c=UH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_dy"};c.v=function(){return 0};c.o=function(a){return xya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 216");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 216");return this.h};function xya(a){return!!(a&&a.$classData&&a.$classData.n.PK)}c.$classData=g({PK:0},!1,"org.nlogo.core.prim.etc._dy",{PK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function VH(){this.p=this.h=this.g=null;this.a=0}VH.prototype=new l;VH.prototype.constructor=VH;c=VH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_empty"};c.v=function(){return 0};c.o=function(a){return Pya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())|Aj(D())]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 82");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 82");return this.h};function Pya(a){return!!(a&&a.$classData&&a.$classData.n.QK)}c.$classData=g({QK:0},!1,"org.nlogo.core.prim.etc._empty",{QK:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function fM(){this.p=this.h=this.g=null;this.a=0}fM.prototype=new l;fM.prototype.constructor=fM;c=fM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_error"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.CA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 222");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 222");return this.h};c.$classData=g({CA:0},!1,"org.nlogo.core.prim.etc._error",{CA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function gM(){this.p=this.h=this.g=null;this.a=0}gM.prototype=new l;gM.prototype.constructor=gM;c=gM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_every"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.DA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([N(D()),Lj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 227");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 227");return this.h};c.$classData=g({DA:0},!1,"org.nlogo.core.prim.etc._every",{DA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function qL(){this.p=this.h=this.g=null;this.a=0}qL.prototype=new l;qL.prototype.constructor=qL;c=qL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_experimentstepend"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.SK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 238");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 238");return this.h};c.$classData=g({SK:0},!1,"org.nlogo.core.prim.etc._experimentstepend",{SK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function rL(){this.p=this.h=this.g=null;this.a=0}rL.prototype=new l;rL.prototype.constructor=rL;c=rL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_exportdrawing"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.TK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 88");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 88");return this.h};c.$classData=g({TK:0},!1,"org.nlogo.core.prim.etc._exportdrawing",{TK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function iM(){this.p=this.h=this.g=null;this.a=0}iM.prototype=new l;iM.prototype.constructor=iM;c=iM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_exportinterface"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.UK)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 243");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 243");return this.h};c.$classData=g({UK:0},!1,"org.nlogo.core.prim.etc._exportinterface",{UK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function jM(){this.p=this.h=this.g=null;this.a=0}jM.prototype=new l;jM.prototype.constructor=jM;c=jM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_exportoutput"};c.v=function(){return 0};
+c.o=function(a){return iya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 93");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 93");return this.h};function iya(a){return!!(a&&a.$classData&&a.$classData.n.VK)}c.$classData=g({VK:0},!1,"org.nlogo.core.prim.etc._exportoutput",{VK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function lM(){this.p=this.h=this.g=null;this.a=0}lM.prototype=new l;lM.prototype.constructor=lM;c=lM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_exportview"};c.v=function(){return 0};c.o=function(a){return lya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 98");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 98");return this.h};function lya(a){return!!(a&&a.$classData&&a.$classData.n.YK)}c.$classData=g({YK:0},!1,"org.nlogo.core.prim.etc._exportview",{YK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function mM(){this.p=this.h=this.g=null;this.a=0}mM.prototype=new l;mM.prototype.constructor=mM;c=mM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_exportworld"};c.v=function(){return 0};c.o=function(a){return mya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 103");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 103");return this.h};function mya(a){return!!(a&&a.$classData&&a.$classData.n.ZK)}c.$classData=g({ZK:0},!1,"org.nlogo.core.prim.etc._exportworld",{ZK:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function YH(){this.p=this.h=this.g=null;this.a=0}YH.prototype=new l;YH.prototype.constructor=YH;c=YH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_extracthsb"};c.v=function(){return 0};c.o=function(a){return Yza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())|Bj(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 108");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 108");return this.h};function Yza(a){return!!(a&&a.$classData&&a.$classData.n.$K)}c.$classData=g({$K:0},!1,"org.nlogo.core.prim.etc._extracthsb",{$K:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function ZH(){this.p=this.h=this.g=null;this.a=0}ZH.prototype=new l;ZH.prototype.constructor=ZH;c=ZH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_extractrgb"};c.v=function(){return 0};c.o=function(a){return Zza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 114");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 114");return this.h};function Zza(a){return!!(a&&a.$classData&&a.$classData.n.aL)}c.$classData=g({aL:0},!1,"org.nlogo.core.prim.etc._extractrgb",{aL:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function nM(){this.p=this.h=this.g=null;this.a=0}nM.prototype=new l;nM.prototype.constructor=nM;c=nM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_face"};c.v=function(){return 0};c.o=function(a){return Ywa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Gj(D())|Hj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 248");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 248");return this.h};function Ywa(a){return!!(a&&a.$classData&&a.$classData.n.bL)}c.$classData=g({bL:0},!1,"org.nlogo.core.prim.etc._face",{bL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function oM(){this.p=this.h=this.g=null;this.a=0}oM.prototype=new l;oM.prototype.constructor=oM;c=oM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_facexy"};c.v=function(){return 0};c.o=function(a){return Zwa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 254");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 254");return this.h};function Zwa(a){return!!(a&&a.$classData&&a.$classData.n.cL)}c.$classData=g({cL:0},!1,"org.nlogo.core.prim.etc._facexy",{cL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function $H(){this.p=this.h=this.g=null;this.a=0}$H.prototype=new l;$H.prototype.constructor=$H;c=$H.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_fileatend"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.dL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=zj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 260");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 260");return this.h};c.$classData=g({dL:0},!1,"org.nlogo.core.prim.etc._fileatend",{dL:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function qM(){this.p=this.h=this.g=null;this.a=0}qM.prototype=new l;qM.prototype.constructor=qM;c=qM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_fileclose"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.eL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 265");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 265");return this.h};c.$classData=g({eL:0},!1,"org.nlogo.core.prim.etc._fileclose",{eL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function rM(){this.p=this.h=this.g=null;this.a=0}rM.prototype=new l;rM.prototype.constructor=rM;c=rM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_filecloseall"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.fL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 269");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 269");return this.h};c.$classData=g({fL:0},!1,"org.nlogo.core.prim.etc._filecloseall",{fL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function sM(){this.p=this.h=this.g=null;this.a=0}sM.prototype=new l;sM.prototype.constructor=sM;c=sM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_filedelete"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.gL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 273");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 273");return this.h};c.$classData=g({gL:0},!1,"org.nlogo.core.prim.etc._filedelete",{gL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function aI(){this.p=this.h=this.g=null;this.a=0}aI.prototype=new l;aI.prototype.constructor=aI;c=aI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_fileexists"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.hL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Aj(D())]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 278");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 278");return this.h};c.$classData=g({hL:0},!1,"org.nlogo.core.prim.etc._fileexists",{hL:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function tM(){this.p=this.h=this.g=null;this.a=0}tM.prototype=new l;tM.prototype.constructor=tM;c=tM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_fileflush"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.iL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 284");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 284");return this.h};c.$classData=g({iL:0},!1,"org.nlogo.core.prim.etc._fileflush",{iL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function uM(){this.p=this.h=this.g=null;this.a=0}uM.prototype=new l;uM.prototype.constructor=uM;c=uM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_fileopen"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.jL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 288");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 288");return this.h};c.$classData=g({jL:0},!1,"org.nlogo.core.prim.etc._fileopen",{jL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function vM(){this.p=this.h=this.g=null;this.a=0}vM.prototype=new l;vM.prototype.constructor=vM;c=vM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_fileprint"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.kL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 293");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 293");return this.h};c.$classData=g({kL:0},!1,"org.nlogo.core.prim.etc._fileprint",{kL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function bI(){this.p=this.h=this.g=null;this.a=0}bI.prototype=new l;bI.prototype.constructor=bI;c=bI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_fileread"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.lL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Fr(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 298");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 298");return this.h};c.$classData=g({lL:0},!1,"org.nlogo.core.prim.etc._fileread",{lL:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function cI(){this.p=this.h=this.g=null;this.a=0}cI.prototype=new l;cI.prototype.constructor=cI;c=cI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_filereadchars"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.mL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 303");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 303");return this.h};c.$classData=g({mL:0},!1,"org.nlogo.core.prim.etc._filereadchars",{mL:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function dI(){this.p=this.h=this.g=null;this.a=0}dI.prototype=new l;dI.prototype.constructor=dI;c=dI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_filereadline"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.nL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 309");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 309");return this.h};c.$classData=g({nL:0},!1,"org.nlogo.core.prim.etc._filereadline",{nL:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function wM(){this.p=this.h=this.g=null;this.a=0}wM.prototype=new l;wM.prototype.constructor=wM;c=wM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_fileshow"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.oL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 314");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 314");return this.h};c.$classData=g({oL:0},!1,"org.nlogo.core.prim.etc._fileshow",{oL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function xM(){this.p=this.h=this.g=null;this.a=0}xM.prototype=new l;xM.prototype.constructor=xM;c=xM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_filetype"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.pL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 319");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 319");return this.h};c.$classData=g({pL:0},!1,"org.nlogo.core.prim.etc._filetype",{pL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function yM(){this.p=this.h=this.g=null;this.a=0}yM.prototype=new l;yM.prototype.constructor=yM;c=yM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_filewrite"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.qL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Fr()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 324");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 324");return this.h};c.$classData=g({qL:0},!1,"org.nlogo.core.prim.etc._filewrite",{qL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function eI(){this.p=this.h=this.g=null;this.a=0}eI.prototype=new l;eI.prototype.constructor=eI;c=eI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_filter"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.EA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Jj(D()),Bj(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 329");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 329");return this.h};c.$classData=g({EA:0},!1,"org.nlogo.core.prim.etc._filter",{EA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function fI(){this.p=this.h=this.g=null;this.a=0}fI.prototype=new l;fI.prototype.constructor=fI;c=fI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_first"};c.v=function(){return 0};
+c.o=function(a){return Qya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())|Aj(D())]),b=B().s,a=L(a,b),b=kc(),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 120");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 120");return this.h};function Qya(a){return!!(a&&a.$classData&&a.$classData.n.rL)}c.$classData=g({rL:0},!1,"org.nlogo.core.prim.etc._first",{rL:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function zM(){this.p=this.h=this.g=null;this.a=0}zM.prototype=new l;zM.prototype.constructor=zM;c=zM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_follow"};c.v=function(){return 0};c.o=function(a){return Xxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Gj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 126");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 126");return this.h};function Xxa(a){return!!(a&&a.$classData&&a.$classData.n.tL)}c.$classData=g({tL:0},!1,"org.nlogo.core.prim.etc._follow",{tL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function AM(){this.p=this.h=this.g=null;this.a=0}AM.prototype=new l;AM.prototype.constructor=AM;c=AM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_followme"};c.v=function(){return 0};c.o=function(a){return $wa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 341");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 341");return this.h};function $wa(a){return!!(a&&a.$classData&&a.$classData.n.uL)}c.$classData=g({uL:0},!1,"org.nlogo.core.prim.etc._followme",{uL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function BM(){this.p=this.h=this.g=null;this.a=0}BM.prototype=new l;BM.prototype.constructor=BM;c=BM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_foreach"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.FA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([uj()|Bj(D()),Kj(D())]),d=B().s;return nc(a,L(b,d),(new J).j(2),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 346");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 346");return this.h};c.$classData=g({FA:0},!1,"org.nlogo.core.prim.etc._foreach",{FA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function sL(){this.p=this.h=this.g=null;this.a=0}sL.prototype=new l;sL.prototype.constructor=sL;c=sL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_foreverbuttonend"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.vL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();D();var e=F();D();return nc(D(),a,b,d,"OTPL",e,!1,!1)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 354");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 354");return this.h};c.$classData=g({vL:0},!1,"org.nlogo.core.prim.etc._foreverbuttonend",{vL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function CM(){this.p=this.h=this.g=null;this.a=0}CM.prototype=new l;CM.prototype.constructor=CM;c=CM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hidelink"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.GA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"---L",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 364");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 364");return this.h};c.$classData=g({GA:0},!1,"org.nlogo.core.prim.etc._hidelink",{GA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function DM(){this.p=this.h=this.g=null;this.a=0}DM.prototype=new l;DM.prototype.constructor=DM;c=DM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hideturtle"};c.v=function(){return 0};
+c.o=function(a){return OAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 369");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 369");return this.h};function OAa(a){return!!(a&&a.$classData&&a.$classData.n.yL)}c.$classData=g({yL:0},!1,"org.nlogo.core.prim.etc._hideturtle",{yL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function FM(){this.p=this.h=this.g=null;this.a=0}FM.prototype=new l;FM.prototype.constructor=FM;c=FM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_home"};c.v=function(){return 0};c.o=function(a){return axa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 374");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 374");return this.h};function axa(a){return!!(a&&a.$classData&&a.$classData.n.AL)}c.$classData=g({AL:0},!1,"org.nlogo.core.prim.etc._home",{AL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function iI(){this.p=this.h=this.g=null;this.a=0}iI.prototype=new l;iI.prototype.constructor=iI;c=iI.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_hsb"};c.v=function(){return 0};c.o=function(a){return $za(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D()),N(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 146");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 146");return this.h};function $za(a){return!!(a&&a.$classData&&a.$classData.n.BL)}c.$classData=g({BL:0},!1,"org.nlogo.core.prim.etc._hsb",{BL:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function WM(){this.p=this.h=this.g=null;this.a=0}WM.prototype=new l;WM.prototype.constructor=WM;c=WM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_if"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.HA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([zj(D()),Lj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 379");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 379");return this.h};c.$classData=g({HA:0},!1,"org.nlogo.core.prim.etc._if",{HA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function XM(){this.p=this.h=this.g=null;this.a=0}XM.prototype=new l;XM.prototype.constructor=XM;c=XM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_ifelse"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.IA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([zj(D()),Lj(D()),Lj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 384");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 384");return this.h};c.$classData=g({IA:0},!1,"org.nlogo.core.prim.etc._ifelse",{IA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function tL(){this.p=this.h=this.g=null;this.a=0}tL.prototype=new l;tL.prototype.constructor=tL;c=tL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_ignore"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.KA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 401");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 401");return this.h};c.$classData=g({KA:0},!1,"org.nlogo.core.prim.etc._ignore",{KA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function YM(){this.p=this.h=this.g=null;this.a=0}YM.prototype=new l;YM.prototype.constructor=YM;c=YM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_importdrawing"};c.v=function(){return 0};
+c.o=function(a){return Kxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Aj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 152");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 152");return this.h};function Kxa(a){return!!(a&&a.$classData&&a.$classData.n.CL)}c.$classData=g({CL:0},!1,"org.nlogo.core.prim.etc._importdrawing",{CL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function ZM(){this.p=this.h=this.g=null;this.a=0}ZM.prototype=new l;ZM.prototype.constructor=ZM;c=ZM.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_importpatchcolors"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.DL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Aj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 406");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 406");return this.h};c.$classData=g({DL:0},!1,"org.nlogo.core.prim.etc._importpatchcolors",{DL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function $M(){this.p=this.h=this.g=null;this.a=0}$M.prototype=new l;$M.prototype.constructor=$M;c=$M.prototype;c.b=function(){M(this);return this};c.u=function(){return"_importpcolorsrgb"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.EL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Aj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 158");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 158");return this.h};c.$classData=g({EL:0},!1,"org.nlogo.core.prim.etc._importpcolorsrgb",{EL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function aN(){this.p=this.h=this.g=null;this.a=0}aN.prototype=new l;aN.prototype.constructor=aN;c=aN.prototype;c.b=function(){M(this);return this};c.u=function(){return"_importworld"};c.v=function(){return 0};
+c.o=function(a){return oya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Aj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 164");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 164");return this.h};function oya(a){return!!(a&&a.$classData&&a.$classData.n.FL)}c.$classData=g({FL:0},!1,"org.nlogo.core.prim.etc._importworld",{FL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function rI(){this.p=this.h=this.g=null;this.a=0}rI.prototype=new l;rI.prototype.constructor=rI;c=rI.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_incone"};c.v=function(){return 0};c.o=function(a){return Kya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Dj(D())|Ej(D());B();var b=(new w).f([N(D()),N(D())]),d=B().s,b=L(b,d),d=Dj(D())|Ej(D()),e=2+C()|0;D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"-T--",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 170");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 170");return this.h};function Kya(a){return!!(a&&a.$classData&&a.$classData.n.GL)}c.$classData=g({GL:0},!1,"org.nlogo.core.prim.etc._incone",{GL:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function zG(){this.p=this.h=this.g=this.ka=null;this.a=0}zG.prototype=new l;zG.prototype.constructor=zG;c=zG.prototype;
+c.b=function(){zG.prototype.c.call(this,null);return this};c.u=function(){return"_inlinkfrom"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.LA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([xj(D())]),b=B().s,a=L(a,b),b=xj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 31");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 31");return this.h};c.$classData=g({LA:0},!1,"org.nlogo.core.prim.etc._inlinkfrom",{LA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function AG(){this.p=this.h=this.g=this.ka=null;this.a=0}AG.prototype=new l;AG.prototype.constructor=AG;c=AG.prototype;
+c.b=function(){AG.prototype.c.call(this,null);return this};c.u=function(){return"_inlinkneighbor"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.MA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([xj(D())]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 39");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 39");return this.h};c.$classData=g({MA:0},!1,"org.nlogo.core.prim.etc._inlinkneighbor",{MA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function BG(){this.p=this.h=this.g=this.ka=null;this.a=0}BG.prototype=new l;BG.prototype.constructor=BG;c=BG.prototype;
+c.b=function(){BG.prototype.c.call(this,null);return this};c.u=function(){return"_inlinkneighbors"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.NA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=Cj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 47");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 47");return this.h};c.$classData=g({NA:0},!1,"org.nlogo.core.prim.etc._inlinkneighbors",{NA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function bN(){this.p=this.h=this.g=null;this.a=0}bN.prototype=new l;bN.prototype.constructor=bN;c=bN.prototype;c.b=function(){M(this);return this};c.u=function(){return"_inspect"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.IL)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([xj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 418");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 418");return this.h};c.$classData=g({IL:0},!1,"org.nlogo.core.prim.etc._inspect",{IL:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function CG(){this.p=this.h=this.g=this.ka=null;this.a=0}CG.prototype=new l;CG.prototype.constructor=CG;c=CG.prototype;c.u=function(){return"_isbreed"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:qBa(a)?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 54");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 54");return this.h};function qBa(a){return!!(a&&a.$classData&&a.$classData.n.PL)}c.$classData=g({PL:0},!1,"org.nlogo.core.prim.etc._isbreed",{PL:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function LI(){this.p=this.h=this.g=null;this.a=0}LI.prototype=new l;LI.prototype.constructor=LI;c=LI.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_item"};c.v=function(){return 0};c.o=function(a){return Tya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),Bj(D())|Aj(D())]),b=B().s,a=L(a,b),b=kc(),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 179");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 179");return this.h};function Tya(a){return!!(a&&a.$classData&&a.$classData.n.aM)}c.$classData=g({aM:0},!1,"org.nlogo.core.prim.etc._item",{aM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function MI(){this.p=this.h=this.g=null;this.a=0}MI.prototype=new l;MI.prototype.constructor=MI;c=MI.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_last"};c.v=function(){return 0};c.o=function(a){return Uya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())|Aj(D())]),b=B().s,a=L(a,b),b=kc(),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 185");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 185");return this.h};function Uya(a){return!!(a&&a.$classData&&a.$classData.n.bM)}c.$classData=g({bM:0},!1,"org.nlogo.core.prim.etc._last",{bM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function dN(){this.p=this.h=this.g=null;this.a=0}dN.prototype=new l;dN.prototype.constructor=dN;c=dN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_layoutcircle"};c.v=function(){return 0};c.o=function(a){return bya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Dj(D())|Bj(D()),N(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 191");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 191");return this.h};function bya(a){return!!(a&&a.$classData&&a.$classData.n.cM)}c.$classData=g({cM:0},!1,"org.nlogo.core.prim.etc._layoutcircle",{cM:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function eN(){this.p=this.h=this.g=null;this.a=0}eN.prototype=new l;eN.prototype.constructor=eN;c=eN.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_layoutradial"};c.v=function(){return 0};c.o=function(a){return cya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Dj(D()),Fj(D()),Gj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 196");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 196");return this.h};function cya(a){return!!(a&&a.$classData&&a.$classData.n.dM)}c.$classData=g({dM:0},!1,"org.nlogo.core.prim.etc._layoutradial",{dM:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function fN(){this.p=this.h=this.g=null;this.a=0}fN.prototype=new l;fN.prototype.constructor=fN;c=fN.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_layoutspring"};c.v=function(){return 0};c.o=function(a){return aya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Dj(D()),Fj(D()),N(D()),N(D()),N(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 201");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 201");return this.h};function aya(a){return!!(a&&a.$classData&&a.$classData.n.eM)}c.$classData=g({eM:0},!1,"org.nlogo.core.prim.etc._layoutspring",{eM:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function gN(){this.p=this.h=this.g=null;this.a=0}gN.prototype=new l;gN.prototype.constructor=gN;c=gN.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_layouttutte"};c.v=function(){return 0};c.o=function(a){return dya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Dj(D()),Fj(D()),N(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 207");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 207");return this.h};function dya(a){return!!(a&&a.$classData&&a.$classData.n.fM)}c.$classData=g({fM:0},!1,"org.nlogo.core.prim.etc._layouttutte",{fM:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function hN(){this.p=this.h=this.g=null;this.a=0}hN.prototype=new l;hN.prototype.constructor=hN;c=hN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_left"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.OA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 525");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 525");return this.h};c.$classData=g({OA:0},!1,"org.nlogo.core.prim.etc._left",{OA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function OI(){this.p=this.h=this.g=null;this.a=0}OI.prototype=new l;OI.prototype.constructor=OI;c=OI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_link"};c.v=function(){return 0};
+c.o=function(a){return DAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=Ij(D())|yj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 531");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 531");return this.h};function DAa(a){return!!(a&&a.$classData&&a.$classData.n.iM)}c.$classData=g({iM:0},!1,"org.nlogo.core.prim.etc._link",{iM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function DG(){this.p=this.h=this.g=this.ka=null;this.a=0}DG.prototype=new l;DG.prototype.constructor=DG;c=DG.prototype;c.u=function(){return"_linkbreed"};
+c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.PA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Fj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 60");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 60");return this.h};c.$classData=g({PA:0},!1,"org.nlogo.core.prim.etc._linkbreed",{PA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function EG(){this.p=this.h=this.g=this.ka=null;this.a=0}EG.prototype=new l;EG.prototype.constructor=EG;c=EG.prototype;c.u=function(){return"_linkbreedsingular"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.QA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=Ij(D())|yj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 65");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 65");return this.h};c.$classData=g({QA:0},!1,"org.nlogo.core.prim.etc._linkbreedsingular",{QA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function vL(){this.p=this.h=this.g=null;this.a=0}vL.prototype=new l;vL.prototype.constructor=vL;c=vL.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_linkcode"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.jM)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();return nc(D(),a,b,d,"---L",e,!1,!1)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 537");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 537");return this.h};c.$classData=g({jM:0},!1,"org.nlogo.core.prim.etc._linkcode",{jM:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function PI(){this.p=this.h=this.g=null;this.a=0}PI.prototype=new l;PI.prototype.constructor=PI;c=PI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_linkheading"};c.v=function(){return 0};
+c.o=function(a){return qya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"---L",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 226");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 226");return this.h};function qya(a){return!!(a&&a.$classData&&a.$classData.n.kM)}c.$classData=g({kM:0},!1,"org.nlogo.core.prim.etc._linkheading",{kM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function QI(){this.p=this.h=this.g=null;this.a=0}QI.prototype=new l;QI.prototype.constructor=QI;c=QI.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_linklength"};c.v=function(){return 0};c.o=function(a){return rya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"---L",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 543");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 543");return this.h};function rya(a){return!!(a&&a.$classData&&a.$classData.n.lM)}c.$classData=g({lM:0},!1,"org.nlogo.core.prim.etc._linklength",{lM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function FG(){this.p=this.h=this.g=this.ka=null;this.a=0}FG.prototype=new l;FG.prototype.constructor=FG;c=FG.prototype;
+c.b=function(){FG.prototype.c.call(this,null);return this};c.u=function(){return"_linkneighbor"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.RA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([xj(D())]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 71");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 71");return this.h};c.$classData=g({RA:0},!1,"org.nlogo.core.prim.etc._linkneighbor",{RA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function GG(){this.p=this.h=this.g=this.ka=null;this.a=0}GG.prototype=new l;GG.prototype.constructor=GG;c=GG.prototype;
+c.b=function(){GG.prototype.c.call(this,null);return this};c.u=function(){return"_linkneighbors"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.SA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=Cj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 79");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 79");return this.h};c.$classData=g({SA:0},!1,"org.nlogo.core.prim.etc._linkneighbors",{SA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function TI(){this.p=this.h=this.g=null;this.a=0}TI.prototype=new l;TI.prototype.constructor=TI;c=TI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_links"};
+c.v=function(){return 0};c.o=function(a){return jAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Fj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 549");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 549");return this.h};function jAa(a){return!!(a&&a.$classData&&a.$classData.n.mM)}c.$classData=g({mM:0},!1,"org.nlogo.core.prim.etc._links",{mM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function RI(){this.p=this.h=this.g=null;this.a=0}RI.prototype=new l;RI.prototype.constructor=RI;c=RI.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_linkset"};c.v=function(){return 0};c.o=function(a){return vAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([uj()|Ij(D())|Fj(D())|yj(D())|Bj(D())]),b=B().s,a=L(a,b),b=Fj(D()),d=(new J).j(1),e=(new J).j(0),f=C();D();var h=mc();D();D();D();var k=F();D();return G(new H,f,h,a,b,d,e,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 232");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 232");return this.h};function vAa(a){return!!(a&&a.$classData&&a.$classData.n.nM)}c.$classData=g({nM:0},!1,"org.nlogo.core.prim.etc._linkset",{nM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function SI(){this.p=this.h=this.g=null;this.a=0}SI.prototype=new l;SI.prototype.constructor=SI;c=SI.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_linkshapes"};c.v=function(){return 0};c.o=function(a){return TAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Bj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 554");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 554");return this.h};function TAa(a){return!!(a&&a.$classData&&a.$classData.n.oM)}c.$classData=g({oM:0},!1,"org.nlogo.core.prim.etc._linkshapes",{oM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function HG(){this.p=this.h=this.g=this.ka=null;this.a=0}HG.prototype=new l;HG.prototype.constructor=HG;c=HG.prototype;
+c.b=function(){HG.prototype.c.call(this,null);return this};c.u=function(){return"_linkwith"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.TA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([xj(D())]),b=B().s,a=L(a,b),b=Ij(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 86");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 86");return this.h};c.$classData=g({TA:0},!1,"org.nlogo.core.prim.etc._linkwith",{TA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function iN(){this.p=this.h=this.g=null;this.a=0}iN.prototype=new l;iN.prototype.constructor=iN;c=iN.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_loop"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.UA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Lj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 559");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 559");return this.h};c.$classData=g({UA:0},!1,"org.nlogo.core.prim.etc._loop",{UA:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function YI(){this.p=this.h=this.g=null;this.a=0}YI.prototype=new l;YI.prototype.constructor=YI;c=YI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_map"};c.v=function(){return 0};
+c.o=function(a){return mAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Jj(D()),uj()|Bj(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=(new J).j(2),e=C();D();var f=mc();D();var h=F();D();D();D();var k=F();D();return G(new H,e,f,a,b,d,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 570");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 570");return this.h};function mAa(a){return!!(a&&a.$classData&&a.$classData.n.sM)}c.$classData=g({sM:0},!1,"org.nlogo.core.prim.etc._map",{sM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function $I(){this.p=this.h=this.g=null;this.a=0}$I.prototype=new l;$I.prototype.constructor=$I;c=$I.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_maxnof"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.VA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),Cj(D()),Pj(D())]),b=B().s,a=L(a,b),b=Cj(D()),d=jd().Wc("?"),e=C();D();var f=mc();D();var h=F();D();var k=F();D();D();return G(new H,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 259");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 259");return this.h};c.$classData=g({VA:0},!1,"org.nlogo.core.prim.etc._maxnof",{VA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function aJ(){this.p=this.h=this.g=null;this.a=0}aJ.prototype=new l;aJ.prototype.constructor=aJ;c=aJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_maxoneof"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.WA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Cj(D()),Pj(D())]),b=B().s,a=L(a,b),b=xj(D()),d=jd().Wc("?"),e=C();D();var f=mc();D();var h=F();D();var k=F();D();D();return G(new H,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 267");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 267");return this.h};c.$classData=g({WA:0},!1,"org.nlogo.core.prim.etc._maxoneof",{WA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function bJ(){this.p=this.h=this.g=null;this.a=0}bJ.prototype=new l;bJ.prototype.constructor=bJ;c=bJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_maxpxcor"};c.v=function(){return 0};
+c.o=function(a){return UAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 577");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 577");return this.h};function UAa(a){return!!(a&&a.$classData&&a.$classData.n.uM)}c.$classData=g({uM:0},!1,"org.nlogo.core.prim.etc._maxpxcor",{uM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function cJ(){this.p=this.h=this.g=null;this.a=0}cJ.prototype=new l;cJ.prototype.constructor=cJ;c=cJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_maxpycor"};c.v=function(){return 0};c.o=function(a){return VAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 582");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 582");return this.h};function VAa(a){return!!(a&&a.$classData&&a.$classData.n.vM)}c.$classData=g({vM:0},!1,"org.nlogo.core.prim.etc._maxpycor",{vM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function eJ(){this.p=this.h=this.g=null;this.a=0}eJ.prototype=new l;eJ.prototype.constructor=eJ;c=eJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_median"};c.v=function(){return 0};c.o=function(a){return Zya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 281");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 281");return this.h};function Zya(a){return!!(a&&a.$classData&&a.$classData.n.xM)}c.$classData=g({xM:0},!1,"org.nlogo.core.prim.etc._median",{xM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function fJ(){this.p=this.h=this.g=null;this.a=0}fJ.prototype=new l;fJ.prototype.constructor=fJ;c=fJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_member"};c.v=function(){return 0};c.o=function(a){return $ya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc(),Bj(D())|Aj(D())|Cj(D())]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 287");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 287");return this.h};function $ya(a){return!!(a&&a.$classData&&a.$classData.n.yM)}c.$classData=g({yM:0},!1,"org.nlogo.core.prim.etc._member",{yM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function hJ(){this.p=this.h=this.g=null;this.a=0}hJ.prototype=new l;hJ.prototype.constructor=hJ;c=hJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_minnof"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.XA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),Cj(D()),Pj(D())]),b=B().s,a=L(a,b),b=Cj(D()),d=jd().Wc("?"),e=C();D();var f=mc();D();var h=F();D();var k=F();D();D();return G(new H,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 299");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 299");return this.h};c.$classData=g({XA:0},!1,"org.nlogo.core.prim.etc._minnof",{XA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function iJ(){this.p=this.h=this.g=null;this.a=0}iJ.prototype=new l;iJ.prototype.constructor=iJ;c=iJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_minoneof"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.YA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Cj(D()),Pj(D())]),b=B().s,a=L(a,b),b=xj(D()),d=jd().Wc("?"),e=C();D();var f=mc();D();var h=F();D();var k=F();D();D();return G(new H,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 307");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 307");return this.h};c.$classData=g({YA:0},!1,"org.nlogo.core.prim.etc._minoneof",{YA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function jJ(){this.p=this.h=this.g=null;this.a=0}jJ.prototype=new l;jJ.prototype.constructor=jJ;c=jJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_minpxcor"};c.v=function(){return 0};
+c.o=function(a){return WAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 587");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 587");return this.h};function WAa(a){return!!(a&&a.$classData&&a.$classData.n.AM)}c.$classData=g({AM:0},!1,"org.nlogo.core.prim.etc._minpxcor",{AM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function kJ(){this.p=this.h=this.g=null;this.a=0}kJ.prototype=new l;kJ.prototype.constructor=kJ;c=kJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_minpycor"};c.v=function(){return 0};c.o=function(a){return XAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 592");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 592");return this.h};function XAa(a){return!!(a&&a.$classData&&a.$classData.n.BM)}c.$classData=g({BM:0},!1,"org.nlogo.core.prim.etc._minpycor",{BM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function wL(){this.p=this.h=this.g=null;this.a=0}wL.prototype=new l;wL.prototype.constructor=wL;c=wL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_mkdir"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.CM)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 597");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 597");return this.h};c.$classData=g({CM:0},!1,"org.nlogo.core.prim.etc._mkdir",{CM:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function nJ(){this.p=this.h=this.g=null;this.a=0}nJ.prototype=new l;nJ.prototype.constructor=nJ;c=nJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_mousedown"};c.v=function(){return 0};
+c.o=function(a){return zza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=zj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 602");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 602");return this.h};function zza(a){return!!(a&&a.$classData&&a.$classData.n.FM)}c.$classData=g({FM:0},!1,"org.nlogo.core.prim.etc._mousedown",{FM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function oJ(){this.p=this.h=this.g=null;this.a=0}oJ.prototype=new l;oJ.prototype.constructor=oJ;c=oJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_mouseinside"};c.v=function(){return 0};c.o=function(a){return Aza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=zj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 607");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 607");return this.h};function Aza(a){return!!(a&&a.$classData&&a.$classData.n.GM)}c.$classData=g({GM:0},!1,"org.nlogo.core.prim.etc._mouseinside",{GM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function pJ(){this.p=this.h=this.g=null;this.a=0}pJ.prototype=new l;pJ.prototype.constructor=pJ;c=pJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_mousexcor"};c.v=function(){return 0};c.o=function(a){return Bza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 612");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 612");return this.h};function Bza(a){return!!(a&&a.$classData&&a.$classData.n.HM)}c.$classData=g({HM:0},!1,"org.nlogo.core.prim.etc._mousexcor",{HM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function qJ(){this.p=this.h=this.g=null;this.a=0}qJ.prototype=new l;qJ.prototype.constructor=qJ;c=qJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_mouseycor"};c.v=function(){return 0};c.o=function(a){return Cza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 617");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 617");return this.h};function Cza(a){return!!(a&&a.$classData&&a.$classData.n.IM)}c.$classData=g({IM:0},!1,"org.nlogo.core.prim.etc._mouseycor",{IM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function jN(){this.p=this.h=this.g=null;this.a=0}jN.prototype=new l;jN.prototype.constructor=jN;c=jN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_moveto"};c.v=function(){return 0};c.o=function(a){return bxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Gj(D())|Hj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 329");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 329");return this.h};function bxa(a){return!!(a&&a.$classData&&a.$classData.n.JM)}c.$classData=g({JM:0},!1,"org.nlogo.core.prim.etc._moveto",{JM:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function IG(){this.p=this.h=this.g=this.ka=null;this.a=0}IG.prototype=new l;IG.prototype.constructor=IG;c=IG.prototype;
+c.b=function(){IG.prototype.c.call(this,null);return this};c.u=function(){return"_myinlinks"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.ZA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=Fj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 94");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 94");return this.h};c.$classData=g({ZA:0},!1,"org.nlogo.core.prim.etc._myinlinks",{ZA:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function JG(){this.p=this.h=this.g=this.ka=null;this.a=0}JG.prototype=new l;JG.prototype.constructor=JG;c=JG.prototype;
+c.b=function(){JG.prototype.c.call(this,null);return this};c.u=function(){return"_mylinks"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.$A?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=Fj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 101");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 101");return this.h};c.$classData=g({$A:0},!1,"org.nlogo.core.prim.etc._mylinks",{$A:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function KG(){this.p=this.h=this.g=this.ka=null;this.a=0}KG.prototype=new l;KG.prototype.constructor=KG;c=KG.prototype;
+c.b=function(){KG.prototype.c.call(this,null);return this};c.u=function(){return"_myoutlinks"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.aB?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=Fj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 108");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 108");return this.h};c.$classData=g({aB:0},!1,"org.nlogo.core.prim.etc._myoutlinks",{aB:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function rJ(){this.p=this.h=this.g=null;this.a=0}rJ.prototype=new l;rJ.prototype.constructor=rJ;c=rJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_myself"};
+c.v=function(){return 0};c.o=function(a){return yya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=xj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-TPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 335");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 335");return this.h};function yya(a){return!!(a&&a.$classData&&a.$classData.n.LM)}c.$classData=g({LM:0},!1,"org.nlogo.core.prim.etc._myself",{LM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function pH(){this.p=this.h=this.g=null;this.a=0}pH.prototype=new l;pH.prototype.constructor=pH;c=pH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_nanotime"};c.v=function(){return 0};c.o=function(a){return IAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 630");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 630");return this.h};function IAa(a){return!!(a&&a.$classData&&a.$classData.n.MM)}c.$classData=g({MM:0},!1,"org.nlogo.core.prim.etc._nanotime",{MM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function wJ(){this.p=this.h=this.g=null;this.a=0}wJ.prototype=new l;wJ.prototype.constructor=wJ;c=wJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_netlogoapplet"};c.v=function(){return 0};c.o=function(a){return YAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=zj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 635");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 635");return this.h};function YAa(a){return!!(a&&a.$classData&&a.$classData.n.NM)}c.$classData=g({NM:0},!1,"org.nlogo.core.prim.etc._netlogoapplet",{NM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function xJ(){this.p=this.h=this.g=null;this.a=0}xJ.prototype=new l;xJ.prototype.constructor=xJ;c=xJ.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_netlogoversion"};c.v=function(){return 0};c.o=function(a){return ZAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 640");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 640");return this.h};function ZAa(a){return!!(a&&a.$classData&&a.$classData.n.OM)}c.$classData=g({OM:0},!1,"org.nlogo.core.prim.etc._netlogoversion",{OM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function yJ(){this.p=this.h=this.g=null;this.a=0}yJ.prototype=new l;yJ.prototype.constructor=yJ;c=yJ.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_netlogoweb"};c.v=function(){return 0};c.o=function(a){return $Aa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=zj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 645");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 645");return this.h};function $Aa(a){return!!(a&&a.$classData&&a.$classData.n.PM)}c.$classData=g({PM:0},!1,"org.nlogo.core.prim.etc._netlogoweb",{PM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function zJ(){this.p=this.h=this.g=null;this.a=0}zJ.prototype=new l;zJ.prototype.constructor=zJ;c=zJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_newseed"};c.v=function(){return 0};c.o=function(a){return oAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 650");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 650");return this.h};function oAa(a){return!!(a&&a.$classData&&a.$classData.n.QM)}c.$classData=g({QM:0},!1,"org.nlogo.core.prim.etc._newseed",{QM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function kN(){this.p=this.h=this.g=null;this.a=0}kN.prototype=new l;kN.prototype.constructor=kN;c=kN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_nodisplay"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.RM)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 655");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 655");return this.h};c.$classData=g({RM:0},!1,"org.nlogo.core.prim.etc._nodisplay",{RM:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function sJ(){this.p=this.h=this.g=null;this.a=0}sJ.prototype=new l;sJ.prototype.constructor=sJ;c=sJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_nof"};c.v=function(){return 0};
+c.o=function(a){return cza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),Cj(D())|Bj(D())]),b=B().s,a=L(a,b),b=Cj(D())|Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 341");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 341");return this.h};function cza(a){return!!(a&&a.$classData&&a.$classData.n.SM)}c.$classData=g({SM:0},!1,"org.nlogo.core.prim.etc._nof",{SM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function AJ(){this.p=this.h=this.g=null;this.a=0}AJ.prototype=new l;AJ.prototype.constructor=AJ;c=AJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_nolinks"};c.v=function(){return 0};c.o=function(a){return aBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Fj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 659");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 659");return this.h};function aBa(a){return!!(a&&a.$classData&&a.$classData.n.TM)}c.$classData=g({TM:0},!1,"org.nlogo.core.prim.etc._nolinks",{TM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function BJ(){this.p=this.h=this.g=null;this.a=0}BJ.prototype=new l;BJ.prototype.constructor=BJ;c=BJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_nopatches"};c.v=function(){return 0};c.o=function(a){return bBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Ej(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 664");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 664");return this.h};function bBa(a){return!!(a&&a.$classData&&a.$classData.n.UM)}c.$classData=g({UM:0},!1,"org.nlogo.core.prim.etc._nopatches",{UM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function CJ(){this.p=this.h=this.g=null;this.a=0}CJ.prototype=new l;CJ.prototype.constructor=CJ;c=CJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_noturtles"};c.v=function(){return 0};c.o=function(a){return cBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Dj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 669");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 669");return this.h};function cBa(a){return!!(a&&a.$classData&&a.$classData.n.VM)}c.$classData=g({VM:0},!1,"org.nlogo.core.prim.etc._noturtles",{VM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function tJ(){this.p=this.h=this.g=null;this.a=0}tJ.prototype=new l;tJ.prototype.constructor=tJ;c=tJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_nvalues"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.bB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),Jj(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 674");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 674");return this.h};c.$classData=g({bB:0},!1,"org.nlogo.core.prim.etc._nvalues",{bB:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function xL(){this.p=this.h=this.g=null;this.a=0}xL.prototype=new l;xL.prototype.constructor=xL;c=xL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_observercode"};
+c.v=function(){return 0};c.o=function(a){return NAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();return nc(D(),a,b,d,"O---",e,!1,!1)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 680");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 680");return this.h};function NAa(a){return!!(a&&a.$classData&&a.$classData.n.WM)}c.$classData=g({WM:0},!1,"org.nlogo.core.prim.etc._observercode",{WM:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function IJ(){this.p=this.h=this.g=null;this.a=0}IJ.prototype=new l;IJ.prototype.constructor=IJ;c=IJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_otherend"};c.v=function(){return 0};c.o=function(a){return zya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=xj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T-L",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 347");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 347");return this.h};function zya(a){return!!(a&&a.$classData&&a.$classData.n.XM)}c.$classData=g({XM:0},!1,"org.nlogo.core.prim.etc._otherend",{XM:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function LG(){this.p=this.h=this.g=this.ka=null;this.a=0}LG.prototype=new l;LG.prototype.constructor=LG;c=LG.prototype;
+c.b=function(){LG.prototype.c.call(this,null);return this};c.u=function(){return"_outlinkneighbor"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.cB?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([xj(D())]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 115");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 115");return this.h};c.$classData=g({cB:0},!1,"org.nlogo.core.prim.etc._outlinkneighbor",{cB:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function MG(){this.p=this.h=this.g=this.ka=null;this.a=0}MG.prototype=new l;MG.prototype.constructor=MG;c=MG.prototype;
+c.b=function(){MG.prototype.c.call(this,null);return this};c.u=function(){return"_outlinkneighbors"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.dB?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=Cj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 123");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 123");return this.h};c.$classData=g({dB:0},!1,"org.nlogo.core.prim.etc._outlinkneighbors",{dB:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function NG(){this.p=this.h=this.g=this.ka=null;this.a=0}NG.prototype=new l;NG.prototype.constructor=NG;c=NG.prototype;
+c.b=function(){NG.prototype.c.call(this,null);return this};c.u=function(){return"_outlinkto"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.eB?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([xj(D())]),b=B().s,a=L(a,b),b=xj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 130");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/breed.scala: 130");return this.h};c.$classData=g({eB:0},!1,"org.nlogo.core.prim.etc._outlinkto",{eB:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function JJ(){this.p=this.h=this.g=null;this.a=0}JJ.prototype=new l;JJ.prototype.constructor=JJ;c=JJ.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_patch"};c.v=function(){return 0};c.o=function(a){return gAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=Hj(D())|yj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 686");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 686");return this.h};function gAa(a){return!!(a&&a.$classData&&a.$classData.n.bN)}c.$classData=g({bN:0},!1,"org.nlogo.core.prim.etc._patch",{bN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function KJ(){this.p=this.h=this.g=null;this.a=0}KJ.prototype=new l;KJ.prototype.constructor=KJ;c=KJ.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_patchahead"};c.v=function(){return 0};c.o=function(a){return Aya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=Hj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 353");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 353");return this.h};function Aya(a){return!!(a&&a.$classData&&a.$classData.n.cN)}c.$classData=g({cN:0},!1,"org.nlogo.core.prim.etc._patchahead",{cN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function MJ(){this.p=this.h=this.g=null;this.a=0}MJ.prototype=new l;MJ.prototype.constructor=MJ;c=MJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_patchatheadinganddistance"};c.v=function(){return 0};c.o=function(a){return Bya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=Hj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 360");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 360");return this.h};function Bya(a){return!!(a&&a.$classData&&a.$classData.n.dN)}c.$classData=g({dN:0},!1,"org.nlogo.core.prim.etc._patchatheadinganddistance",{dN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function yL(){this.p=this.h=this.g=null;this.a=0}yL.prototype=new l;yL.prototype.constructor=yL;c=yL.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_patchcode"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.eN)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();return nc(D(),a,b,d,"--P-",e,!1,!1)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 692");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 692");return this.h};c.$classData=g({eN:0},!1,"org.nlogo.core.prim.etc._patchcode",{eN:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function NJ(){this.p=this.h=this.g=null;this.a=0}NJ.prototype=new l;NJ.prototype.constructor=NJ;c=NJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_patchhere"};c.v=function(){return 0};
+c.o=function(a){return Cya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Hj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 698");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 698");return this.h};function Cya(a){return!!(a&&a.$classData&&a.$classData.n.fN)}c.$classData=g({fN:0},!1,"org.nlogo.core.prim.etc._patchhere",{fN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function OJ(){this.p=this.h=this.g=null;this.a=0}OJ.prototype=new l;OJ.prototype.constructor=OJ;c=OJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_patchleftandahead"};c.v=function(){return 0};c.o=function(a){return Dya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=Hj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 704");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 704");return this.h};function Dya(a){return!!(a&&a.$classData&&a.$classData.n.gN)}c.$classData=g({gN:0},!1,"org.nlogo.core.prim.etc._patchleftandahead",{gN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function PJ(){this.p=this.h=this.g=null;this.a=0}PJ.prototype=new l;PJ.prototype.constructor=PJ;c=PJ.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_patchrightandahead"};c.v=function(){return 0};c.o=function(a){return Eya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=Hj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 711");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 711");return this.h};function Eya(a){return!!(a&&a.$classData&&a.$classData.n.hN)}c.$classData=g({hN:0},!1,"org.nlogo.core.prim.etc._patchrightandahead",{hN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function QJ(){this.p=this.h=this.g=null;this.a=0}QJ.prototype=new l;
+QJ.prototype.constructor=QJ;c=QJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_patchset"};c.v=function(){return 0};c.o=function(a){return wAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([uj()|Hj(D())|Ej(D())|yj(D())|Bj(D())]),b=B().s,a=L(a,b),b=Ej(D()),d=(new J).j(1),e=(new J).j(0),f=C();D();var h=mc();D();D();D();var k=F();D();return G(new H,f,h,a,b,d,e,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 367");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 367");return this.h};function wAa(a){return!!(a&&a.$classData&&a.$classData.n.iN)}c.$classData=g({iN:0},!1,"org.nlogo.core.prim.etc._patchset",{iN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function RJ(){this.p=this.h=this.g=null;this.a=0}RJ.prototype=new l;
+RJ.prototype.constructor=RJ;c=RJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_patchsize"};c.v=function(){return 0};c.o=function(a){return dBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 718");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 718");return this.h};function dBa(a){return!!(a&&a.$classData&&a.$classData.n.jN)}c.$classData=g({jN:0},!1,"org.nlogo.core.prim.etc._patchsize",{jN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function pN(){this.p=this.h=this.g=null;this.a=0}pN.prototype=new l;pN.prototype.constructor=pN;c=pN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_pendown"};c.v=function(){return 0};c.o=function(a){return cxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 723");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 723");return this.h};function cxa(a){return!!(a&&a.$classData&&a.$classData.n.kN)}c.$classData=g({kN:0},!1,"org.nlogo.core.prim.etc._pendown",{kN:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function qN(){this.p=this.h=this.g=null;this.a=0}qN.prototype=new l;qN.prototype.constructor=qN;c=qN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_penerase"};c.v=function(){return 0};c.o=function(a){return dxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 728");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 728");return this.h};function dxa(a){return!!(a&&a.$classData&&a.$classData.n.lN)}c.$classData=g({lN:0},!1,"org.nlogo.core.prim.etc._penerase",{lN:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function rN(){this.p=this.h=this.g=null;this.a=0}rN.prototype=new l;rN.prototype.constructor=rN;c=rN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_penup"};c.v=function(){return 0};c.o=function(a){return exa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 733");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 733");return this.h};function exa(a){return!!(a&&a.$classData&&a.$classData.n.mN)}c.$classData=g({mN:0},!1,"org.nlogo.core.prim.etc._penup",{mN:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function ZJ(){this.p=this.h=this.g=null;this.a=0}ZJ.prototype=new l;ZJ.prototype.constructor=ZJ;c=ZJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_position"};c.v=function(){return 0};c.o=function(a){return dza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc(),Bj(D())|Aj(D())]),b=B().s,a=L(a,b),b=N(D())|zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 375");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 375");return this.h};function dza(a){return!!(a&&a.$classData&&a.$classData.n.BN)}c.$classData=g({BN:0},!1,"org.nlogo.core.prim.etc._position",{BN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function qH(){this.p=this.h=this.g=null;this.a=0}qH.prototype=new l;qH.prototype.constructor=qH;c=qH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_processors"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.FN)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 760");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 760");return this.h};c.$classData=g({FN:0},!1,"org.nlogo.core.prim.etc._processors",{FN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function BL(){this.p=this.h=this.g=null;this.a=0}BL.prototype=new l;BL.prototype.constructor=BL;c=BL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_pwd"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.GN)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 765");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 765");return this.h};c.$classData=g({GN:0},!1,"org.nlogo.core.prim.etc._pwd",{GN:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function bK(){this.p=this.h=this.g=null;this.a=0}bK.prototype=new l;bK.prototype.constructor=bK;c=bK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_randomexponential"};c.v=function(){return 0};
+c.o=function(a){return qAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 770");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 770");return this.h};function qAa(a){return!!(a&&a.$classData&&a.$classData.n.HN)}c.$classData=g({HN:0},!1,"org.nlogo.core.prim.etc._randomexponential",{HN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function cK(){this.p=this.h=this.g=null;this.a=0}cK.prototype=new l;cK.prototype.constructor=cK;c=cK.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_randomfloat"};c.v=function(){return 0};c.o=function(a){return rAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 776");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 776");return this.h};function rAa(a){return!!(a&&a.$classData&&a.$classData.n.IN)}c.$classData=g({IN:0},!1,"org.nlogo.core.prim.etc._randomfloat",{IN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function dK(){this.p=this.h=this.g=null;this.a=0}dK.prototype=new l;dK.prototype.constructor=dK;c=dK.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_randomgamma"};c.v=function(){return 0};c.o=function(a){return uAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 381");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 381");return this.h};function uAa(a){return!!(a&&a.$classData&&a.$classData.n.JN)}c.$classData=g({JN:0},!1,"org.nlogo.core.prim.etc._randomgamma",{JN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function eK(){this.p=this.h=this.g=null;this.a=0}eK.prototype=new l;eK.prototype.constructor=eK;
+c=eK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_randomnormal"};c.v=function(){return 0};c.o=function(a){return sAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 782");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 782");return this.h};function sAa(a){return!!(a&&a.$classData&&a.$classData.n.KN)}c.$classData=g({KN:0},!1,"org.nlogo.core.prim.etc._randomnormal",{KN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function fK(){this.p=this.h=this.g=null;this.a=0}fK.prototype=new l;fK.prototype.constructor=fK;
+c=fK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_randompoisson"};c.v=function(){return 0};c.o=function(a){return tAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 788");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 788");return this.h};function tAa(a){return!!(a&&a.$classData&&a.$classData.n.LN)}c.$classData=g({LN:0},!1,"org.nlogo.core.prim.etc._randompoisson",{LN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function gK(){this.p=this.h=this.g=null;this.a=0}gK.prototype=new l;gK.prototype.constructor=gK;
+c=gK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_randompxcor"};c.v=function(){return 0};c.o=function(a){return eBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 794");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 794");return this.h};function eBa(a){return!!(a&&a.$classData&&a.$classData.n.MN)}c.$classData=g({MN:0},!1,"org.nlogo.core.prim.etc._randompxcor",{MN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function hK(){this.p=this.h=this.g=null;this.a=0}hK.prototype=new l;hK.prototype.constructor=hK;c=hK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_randompycor"};c.v=function(){return 0};c.o=function(a){return fBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 799");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 799");return this.h};function fBa(a){return!!(a&&a.$classData&&a.$classData.n.NN)}c.$classData=g({NN:0},!1,"org.nlogo.core.prim.etc._randompycor",{NN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function yN(){this.p=this.h=this.g=null;this.a=0}yN.prototype=new l;yN.prototype.constructor=yN;c=yN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_randomseed"};c.v=function(){return 0};c.o=function(a){return Wxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([N(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 804");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 804");return this.h};function Wxa(a){return!!(a&&a.$classData&&a.$classData.n.ON)}c.$classData=g({ON:0},!1,"org.nlogo.core.prim.etc._randomseed",{ON:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function rH(){this.p=this.h=this.g=null;this.a=0}rH.prototype=new l;rH.prototype.constructor=rH;c=rH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_randomstate"};c.v=function(){return 0};c.o=function(a){return pAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 809");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 809");return this.h};function pAa(a){return!!(a&&a.$classData&&a.$classData.n.PN)}c.$classData=g({PN:0},!1,"org.nlogo.core.prim.etc._randomstate",{PN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function iK(){this.p=this.h=this.g=null;this.a=0}iK.prototype=new l;iK.prototype.constructor=iK;c=iK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_randomxcor"};c.v=function(){return 0};c.o=function(a){return gBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 814");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 814");return this.h};function gBa(a){return!!(a&&a.$classData&&a.$classData.n.QN)}c.$classData=g({QN:0},!1,"org.nlogo.core.prim.etc._randomxcor",{QN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function jK(){this.p=this.h=this.g=null;this.a=0}jK.prototype=new l;jK.prototype.constructor=jK;c=jK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_randomycor"};c.v=function(){return 0};c.o=function(a){return hBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 819");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 819");return this.h};function hBa(a){return!!(a&&a.$classData&&a.$classData.n.RN)}c.$classData=g({RN:0},!1,"org.nlogo.core.prim.etc._randomycor",{RN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function lK(){this.p=this.h=this.g=null;this.a=0}lK.prototype=new l;lK.prototype.constructor=lK;c=lK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_readfromstring"};c.v=function(){return 0};c.o=function(a){return LAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Aj(D())]),b=B().s,a=L(a,b),b=Fr(),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 832");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 832");return this.h};function LAa(a){return!!(a&&a.$classData&&a.$classData.n.SN)}c.$classData=g({SN:0},!1,"org.nlogo.core.prim.etc._readfromstring",{SN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function mK(){this.p=this.h=this.g=null;this.a=0}mK.prototype=new l;mK.prototype.constructor=mK;c=mK.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_reduce"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.gB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Jj(D()),Bj(D())]),b=B().s,a=L(a,b),b=kc(),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 838");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 838");return this.h};c.$classData=g({gB:0},!1,"org.nlogo.core.prim.etc._reduce",{gB:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function sH(){this.p=this.h=this.g=null;this.a=0}sH.prototype=new l;sH.prototype.constructor=sH;c=sH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_reference"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.TN)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([vj()]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 844");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 844");return this.h};c.$classData=g({TN:0},!1,"org.nlogo.core.prim.etc._reference",{TN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function CL(){this.p=this.h=this.g=null;this.a=0}CL.prototype=new l;CL.prototype.constructor=CL;c=CL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_reloadextensions"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.UN)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"OTPL",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 850");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 850");return this.h};c.$classData=g({UN:0},!1,"org.nlogo.core.prim.etc._reloadextensions",{UN:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function oK(){this.p=this.h=this.g=null;this.a=0}oK.prototype=new l;oK.prototype.constructor=oK;c=oK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_remove"};c.v=function(){return 0};
+c.o=function(a){return gza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc(),Bj(D())|Aj(D())]),b=B().s,a=L(a,b),b=Bj(D())|Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 393");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 393");return this.h};function gza(a){return!!(a&&a.$classData&&a.$classData.n.WN)}c.$classData=g({WN:0},!1,"org.nlogo.core.prim.etc._remove",{WN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function pK(){this.p=this.h=this.g=null;this.a=0}pK.prototype=new l;pK.prototype.constructor=pK;c=pK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_removeduplicates"};c.v=function(){return 0};c.o=function(a){return eza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 399");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 399");return this.h};function eza(a){return!!(a&&a.$classData&&a.$classData.n.XN)}c.$classData=g({XN:0},!1,"org.nlogo.core.prim.etc._removeduplicates",{XN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function qK(){this.p=this.h=this.g=null;this.a=0}qK.prototype=new l;qK.prototype.constructor=qK;c=qK.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_removeitem"};c.v=function(){return 0};c.o=function(a){return fza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),Bj(D())|Aj(D())]),b=B().s,a=L(a,b),b=Bj(D())|Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 405");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 405");return this.h};function fza(a){return!!(a&&a.$classData&&a.$classData.n.YN)}c.$classData=g({YN:0},!1,"org.nlogo.core.prim.etc._removeitem",{YN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function rK(){this.p=this.h=this.g=null;this.a=0}rK.prototype=new l;
+rK.prototype.constructor=rK;c=rK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_replaceitem"};c.v=function(){return 0};c.o=function(a){return hza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),Bj(D())|Aj(D()),kc()]),b=B().s,a=L(a,b),b=Bj(D())|Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 411");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 411");return this.h};function hza(a){return!!(a&&a.$classData&&a.$classData.n.ZN)}c.$classData=g({ZN:0},!1,"org.nlogo.core.prim.etc._replaceitem",{ZN:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function BN(){this.p=this.h=this.g=null;this.a=0}BN.prototype=new l;
+BN.prototype.constructor=BN;c=BN.prototype;c.b=function(){M(this);return this};c.u=function(){return"_resetperspective"};c.v=function(){return 0};c.o=function(a){return $xa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"OTPL",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 855");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 855");return this.h};function $xa(a){return!!(a&&a.$classData&&a.$classData.n.$N)}c.$classData=g({$N:0},!1,"org.nlogo.core.prim.etc._resetperspective",{$N:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function CN(){this.p=this.h=this.g=null;this.a=0}CN.prototype=new l;CN.prototype.constructor=CN;c=CN.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_resetticks"};c.v=function(){return 0};c.o=function(a){return Sxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 860");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 860");return this.h};function Sxa(a){return!!(a&&a.$classData&&a.$classData.n.aO)}c.$classData=g({aO:0},!1,"org.nlogo.core.prim.etc._resetticks",{aO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function DN(){this.p=this.h=this.g=null;this.a=0}DN.prototype=new l;DN.prototype.constructor=DN;c=DN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_resettimer"};c.v=function(){return 0};c.o=function(a){return Vxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 865");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 865");return this.h};function Vxa(a){return!!(a&&a.$classData&&a.$classData.n.bO)}c.$classData=g({bO:0},!1,"org.nlogo.core.prim.etc._resettimer",{bO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function EN(){this.p=this.h=this.g=null;this.a=0}EN.prototype=new l;EN.prototype.constructor=EN;c=EN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_resizeworld"};c.v=function(){return 0};c.o=function(a){return Qxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D()),N(D()),N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 417");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 417");return this.h};function Qxa(a){return!!(a&&a.$classData&&a.$classData.n.cO)}c.$classData=g({cO:0},!1,"org.nlogo.core.prim.etc._resizeworld",{cO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function sK(){this.p=this.h=this.g=null;this.a=0}sK.prototype=new l;sK.prototype.constructor=sK;c=sK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_reverse"};c.v=function(){return 0};c.o=function(a){return iza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())|Aj(D())]),b=B().s,a=L(a,b),b=Bj(D())|Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 423");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 423");return this.h};function iza(a){return!!(a&&a.$classData&&a.$classData.n.dO)}c.$classData=g({dO:0},!1,"org.nlogo.core.prim.etc._reverse",{dO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function tK(){this.p=this.h=this.g=null;this.a=0}tK.prototype=new l;tK.prototype.constructor=tK;c=tK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_rgb"};c.v=function(){return 0};c.o=function(a){return aAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D()),N(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 429");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 429");return this.h};function aAa(a){return!!(a&&a.$classData&&a.$classData.n.eO)}c.$classData=g({eO:0},!1,"org.nlogo.core.prim.etc._rgb",{eO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function FN(){this.p=this.h=this.g=null;this.a=0}FN.prototype=new l;FN.prototype.constructor=FN;c=FN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_ride"};c.v=function(){return 0};c.o=function(a){return Yxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Gj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 435");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 435");return this.h};function Yxa(a){return!!(a&&a.$classData&&a.$classData.n.fO)}c.$classData=g({fO:0},!1,"org.nlogo.core.prim.etc._ride",{fO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function GN(){this.p=this.h=this.g=null;this.a=0}GN.prototype=new l;GN.prototype.constructor=GN;c=GN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_rideme"};c.v=function(){return 0};c.o=function(a){return fxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 869");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 869");return this.h};function fxa(a){return!!(a&&a.$classData&&a.$classData.n.gO)}c.$classData=g({gO:0},!1,"org.nlogo.core.prim.etc._rideme",{gO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function HN(){this.p=this.h=this.g=null;this.a=0}HN.prototype=new l;HN.prototype.constructor=HN;c=HN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_right"};c.v=function(){return 0};c.o=function(a){return gxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 874");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 874");return this.h};function gxa(a){return!!(a&&a.$classData&&a.$classData.n.hO)}c.$classData=g({hO:0},!1,"org.nlogo.core.prim.etc._right",{hO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function vK(){this.p=this.h=this.g=null;this.a=0}vK.prototype=new l;vK.prototype.constructor=vK;c=vK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_runresult"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.hB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Aj(D())|Jj(D()),uj()|kc()]),b=B().s,a=L(a,b),b=kc(),d=(new J).j(1),e=C();D();var f=mc();D();var h=F();D();D();D();var k=F();D();return G(new H,e,f,a,b,d,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 886");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 886");return this.h};c.$classData=g({hB:0},!1,"org.nlogo.core.prim.etc._runresult",{hB:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function yK(){this.p=this.h=this.g=null;this.a=0}yK.prototype=new l;yK.prototype.constructor=yK;c=yK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_self"};
+c.v=function(){return 0};c.o=function(a){return Fya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=xj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-TPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 895");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 895");return this.h};function Fya(a){return!!(a&&a.$classData&&a.$classData.n.kO)}c.$classData=g({kO:0},!1,"org.nlogo.core.prim.etc._self",{kO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function KN(){this.p=this.h=this.g=null;this.a=0}KN.prototype=new l;KN.prototype.constructor=KN;c=KN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_setcurdir"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.lO)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 901");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 901");return this.h};c.$classData=g({lO:0},!1,"org.nlogo.core.prim.etc._setcurdir",{lO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function NN(){this.p=this.h=this.g=null;this.a=0}NN.prototype=new l;NN.prototype.constructor=NN;c=NN.prototype;c.b=function(){M(this);return this};c.u=function(){return"_setdefaultshape"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.iB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Dj(D())|Fj(D()),Aj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 906");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 906");return this.h};c.$classData=g({iB:0},!1,"org.nlogo.core.prim.etc._setdefaultshape",{iB:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function DL(){this.p=this.h=this.g=null;this.a=0}DL.prototype=new l;DL.prototype.constructor=DL;c=DL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_setlinethickness"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.pO)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 915");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 915");return this.h};c.$classData=g({pO:0},!1,"org.nlogo.core.prim.etc._setlinethickness",{pO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function PN(){this.p=this.h=this.g=null;this.a=0}PN.prototype=new l;PN.prototype.constructor=PN;c=PN.prototype;c.b=function(){M(this);return this};c.u=function(){return"_setpatchsize"};c.v=function(){return 0};
+c.o=function(a){return Rxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 447");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 447");return this.h};function Rxa(a){return!!(a&&a.$classData&&a.$classData.n.qO)}c.$classData=g({qO:0},!1,"org.nlogo.core.prim.etc._setpatchsize",{qO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function WN(){this.p=this.h=this.g=null;this.a=0}WN.prototype=new l;WN.prototype.constructor=WN;c=WN.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_setxy"};c.v=function(){return 0};c.o=function(a){return hxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 453");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 453");return this.h};function hxa(a){return!!(a&&a.$classData&&a.$classData.n.xO)}c.$classData=g({xO:0},!1,"org.nlogo.core.prim.etc._setxy",{xO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function zK(){this.p=this.h=this.g=null;this.a=0}zK.prototype=new l;zK.prototype.constructor=zK;c=zK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_shadeof"};c.v=function(){return 0};c.o=function(a){return cAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 459");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 459");return this.h};function cAa(a){return!!(a&&a.$classData&&a.$classData.n.yO)}c.$classData=g({yO:0},!1,"org.nlogo.core.prim.etc._shadeof",{yO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function AK(){this.p=this.h=this.g=null;this.a=0}AK.prototype=new l;AK.prototype.constructor=AK;c=AK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_shapes"};c.v=function(){return 0};c.o=function(a){return iBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Bj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 921");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 921");return this.h};function iBa(a){return!!(a&&a.$classData&&a.$classData.n.zO)}c.$classData=g({zO:0},!1,"org.nlogo.core.prim.etc._shapes",{zO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function YN(){this.p=this.h=this.g=null;this.a=0}YN.prototype=new l;YN.prototype.constructor=YN;c=YN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_showlink"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.jB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"---L",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 926");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 926");return this.h};c.$classData=g({jB:0},!1,"org.nlogo.core.prim.etc._showlink",{jB:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function ZN(){this.p=this.h=this.g=null;this.a=0}ZN.prototype=new l;ZN.prototype.constructor=ZN;c=ZN.prototype;c.b=function(){M(this);return this};c.u=function(){return"_showturtle"};c.v=function(){return 0};
+c.o=function(a){return PAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 931");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 931");return this.h};function PAa(a){return!!(a&&a.$classData&&a.$classData.n.BO)}c.$classData=g({BO:0},!1,"org.nlogo.core.prim.etc._showturtle",{BO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function BK(){this.p=this.h=this.g=null;this.a=0}BK.prototype=new l;BK.prototype.constructor=BK;c=BK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_shuffle"};c.v=function(){return 0};c.o=function(a){return jza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 465");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 465");return this.h};function jza(a){return!!(a&&a.$classData&&a.$classData.n.CO)}c.$classData=g({CO:0},!1,"org.nlogo.core.prim.etc._shuffle",{CO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function EK(){this.p=this.h=this.g=null;this.a=0}EK.prototype=new l;EK.prototype.constructor=EK;c=EK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_sortby"};c.v=function(){return 0};c.o=function(a){return lza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Jj(D()),Bj(D())|Cj(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=jd().Wc("?"),e=C();D();var f=mc();D();var h=F();D();var k=F();D();D();D();return G(new H,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 942");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 942");return this.h};function lza(a){return!!(a&&a.$classData&&a.$classData.n.FO)}c.$classData=g({FO:0},!1,"org.nlogo.core.prim.etc._sortby",{FO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function FK(){this.p=this.h=this.g=null;this.a=0}FK.prototype=new l;FK.prototype.constructor=FK;c=FK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_sorton"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.kB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Mj(D()),Cj(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=jd().Wc("?"),e=C();D();var f=mc();D();var h=F();D();var k=F();D();D();D();return G(new H,e,f,a,b,h,k,!1,"OTPL",d,d.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 949");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 949");return this.h};c.$classData=g({kB:0},!1,"org.nlogo.core.prim.etc._sorton",{kB:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function tH(){this.p=this.h=this.g=null;this.a=0}tH.prototype=new l;tH.prototype.constructor=tH;c=tH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_stacktrace"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.HO)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 956");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 956");return this.h};c.$classData=g({HO:0},!1,"org.nlogo.core.prim.etc._stacktrace",{HO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function $N(){this.p=this.h=this.g=null;this.a=0}$N.prototype=new l;$N.prototype.constructor=$N;c=$N.prototype;c.b=function(){M(this);return this};c.u=function(){return"_stamp"};c.v=function(){return 0};
+c.o=function(a){return ixa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T-L",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 961");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 961");return this.h};function ixa(a){return!!(a&&a.$classData&&a.$classData.n.IO)}c.$classData=g({IO:0},!1,"org.nlogo.core.prim.etc._stamp",{IO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function aO(){this.p=this.h=this.g=null;this.a=0}aO.prototype=new l;aO.prototype.constructor=aO;c=aO.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_stamperase"};c.v=function(){return 0};c.o=function(a){return jxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T-L",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 966");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 966");return this.h};function jxa(a){return!!(a&&a.$classData&&a.$classData.n.JO)}c.$classData=g({JO:0},!1,"org.nlogo.core.prim.etc._stamperase",{JO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function EL(){this.p=this.h=this.g=null;this.a=0}EL.prototype=new l;EL.prototype.constructor=EL;c=EL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_stderr"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.LO)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 971");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 971");return this.h};c.$classData=g({LO:0},!1,"org.nlogo.core.prim.etc._stderr",{LO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function FL(){this.p=this.h=this.g=null;this.a=0}FL.prototype=new l;FL.prototype.constructor=FL;c=FL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_stdout"};c.v=function(){return 0};
+c.o=function(a){return gya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 976");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 976");return this.h};function gya(a){return!!(a&&a.$classData&&a.$classData.n.MO)}c.$classData=g({MO:0},!1,"org.nlogo.core.prim.etc._stdout",{MO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function cO(){this.p=this.h=this.g=null;this.a=0}cO.prototype=new l;cO.prototype.constructor=cO;c=cO.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_stopinspecting"};c.v=function(){return 0};c.o=function(a){return QAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([xj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 981");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 981");return this.h};function QAa(a){return!!(a&&a.$classData&&a.$classData.n.NO)}c.$classData=g({NO:0},!1,"org.nlogo.core.prim.etc._stopinspecting",{NO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function dO(){this.p=this.h=this.g=null;this.a=0}dO.prototype=new l;dO.prototype.constructor=dO;c=dO.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_stopinspectingdeadagents"};c.v=function(){return 0};c.o=function(a){return RAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 986");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 986");return this.h};function RAa(a){return!!(a&&a.$classData&&a.$classData.n.OO)}c.$classData=g({OO:0},!1,"org.nlogo.core.prim.etc._stopinspectingdeadagents",{OO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function IK(){this.p=this.h=this.g=null;this.a=0}IK.prototype=new l;IK.prototype.constructor=IK;c=IK.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_subject"};c.v=function(){return 0};c.o=function(a){return GAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=xj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 990");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 990");return this.h};function GAa(a){return!!(a&&a.$classData&&a.$classData.n.PO)}c.$classData=g({PO:0},!1,"org.nlogo.core.prim.etc._subject",{PO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function JK(){this.p=this.h=this.g=null;this.a=0}JK.prototype=new l;JK.prototype.constructor=JK;c=JK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_sublist"};c.v=function(){return 0};c.o=function(a){return nza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D()),N(D()),N(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 489");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 489");return this.h};function nza(a){return!!(a&&a.$classData&&a.$classData.n.QO)}c.$classData=g({QO:0},!1,"org.nlogo.core.prim.etc._sublist",{QO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function KK(){this.p=this.h=this.g=null;this.a=0}KK.prototype=new l;KK.prototype.constructor=KK;c=KK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_substring"};c.v=function(){return 0};c.o=function(a){return oza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Aj(D()),N(D()),N(D())]),b=B().s,a=L(a,b),b=Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 495");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 495");return this.h};function oza(a){return!!(a&&a.$classData&&a.$classData.n.RO)}c.$classData=g({RO:0},!1,"org.nlogo.core.prim.etc._substring",{RO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function uH(){this.p=this.h=this.g=null;this.a=0}uH.prototype=new l;uH.prototype.constructor=uH;c=uH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_symbolstring"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.TO)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Rj()]),b=B().s,a=L(a,b),b=Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1001");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1001");return this.h};c.$classData=g({TO:0},!1,"org.nlogo.core.prim.etc._symbolstring",{TO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function GL(){this.p=this.h=this.g=null;this.a=0}GL.prototype=new l;GL.prototype.constructor=GL;c=GL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_thunkdidfinish"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.VO)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1013");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1013");return this.h};c.$classData=g({VO:0},!1,"org.nlogo.core.prim.etc._thunkdidfinish",{VO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function eO(){this.p=this.h=this.g=null;this.a=0}eO.prototype=new l;eO.prototype.constructor=eO;c=eO.prototype;c.b=function(){M(this);return this};c.u=function(){return"_tick"};c.v=function(){return 0};
+c.o=function(a){return Txa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1017");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1017");return this.h};function Txa(a){return!!(a&&a.$classData&&a.$classData.n.WO)}c.$classData=g({WO:0},!1,"org.nlogo.core.prim.etc._tick",{WO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function fO(){this.p=this.h=this.g=null;this.a=0}fO.prototype=new l;fO.prototype.constructor=fO;c=fO.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_tickadvance"};c.v=function(){return 0};c.o=function(a){return Uxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1022");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1022");return this.h};function Uxa(a){return!!(a&&a.$classData&&a.$classData.n.XO)}c.$classData=g({XO:0},!1,"org.nlogo.core.prim.etc._tickadvance",{XO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function OK(){this.p=this.h=this.g=null;this.a=0}OK.prototype=new l;OK.prototype.constructor=OK;c=OK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_ticks"};c.v=function(){return 0};c.o=function(a){return kAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 501");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 501");return this.h};function kAa(a){return!!(a&&a.$classData&&a.$classData.n.YO)}c.$classData=g({YO:0},!1,"org.nlogo.core.prim.etc._ticks",{YO:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function gO(){this.p=this.h=this.g=null;this.a=0}gO.prototype=new l;gO.prototype.constructor=gO;c=gO.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_tie"};c.v=function(){return 0};c.o=function(a){return kxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"---L",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1028");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1028");return this.h};function kxa(a){return!!(a&&a.$classData&&a.$classData.n.ZO)}c.$classData=g({ZO:0},!1,"org.nlogo.core.prim.etc._tie",{ZO:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function PK(){this.p=this.h=this.g=null;this.a=0}PK.prototype=new l;PK.prototype.constructor=PK;c=PK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_timer"};c.v=function(){return 0};c.o=function(a){return lAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1033");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1033");return this.h};function lAa(a){return!!(a&&a.$classData&&a.$classData.n.$O)}c.$classData=g({$O:0},!1,"org.nlogo.core.prim.etc._timer",{$O:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function QK(){this.p=this.h=this.g=null;this.a=0}QK.prototype=new l;QK.prototype.constructor=QK;c=QK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_towards"};c.v=function(){return 0};c.o=function(a){return Gya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Gj(D())|Hj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 506");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 506");return this.h};function Gya(a){return!!(a&&a.$classData&&a.$classData.n.bP)}c.$classData=g({bP:0},!1,"org.nlogo.core.prim.etc._towards",{bP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function RK(){this.p=this.h=this.g=null;this.a=0}RK.prototype=new l;RK.prototype.constructor=RK;c=RK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_towardsxy"};c.v=function(){return 0};c.o=function(a){return Hya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 513");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 513");return this.h};function Hya(a){return!!(a&&a.$classData&&a.$classData.n.cP)}c.$classData=g({cP:0},!1,"org.nlogo.core.prim.etc._towardsxy",{cP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function HL(){this.p=this.h=this.g=null;this.a=0}HL.prototype=new l;HL.prototype.constructor=HL;c=HL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_turtlecode"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.dP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();return nc(D(),a,b,d,"-T--",e,!1,!1)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1044");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1044");return this.h};c.$classData=g({dP:0},!1,"org.nlogo.core.prim.etc._turtlecode",{dP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function VK(){this.p=this.h=this.g=null;this.a=0}VK.prototype=new l;VK.prototype.constructor=VK;c=VK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_turtlesat"};c.v=function(){return 0};
+c.o=function(a){return Iya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=Dj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 520");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 520");return this.h};function Iya(a){return!!(a&&a.$classData&&a.$classData.n.eP)}c.$classData=g({eP:0},!1,"org.nlogo.core.prim.etc._turtlesat",{eP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function TK(){this.p=this.h=this.g=null;this.a=0}TK.prototype=new l;TK.prototype.constructor=TK;c=TK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_turtleset"};c.v=function(){return 0};c.o=function(a){return xAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([uj()|Gj(D())|Dj(D())|yj(D())|Bj(D())]),b=B().s,a=L(a,b),b=Dj(D()),d=(new J).j(1),e=(new J).j(0),f=C();D();var h=mc();D();D();D();var k=F();D();return G(new H,f,h,a,b,d,e,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 527");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 527");return this.h};function xAa(a){return!!(a&&a.$classData&&a.$classData.n.fP)}c.$classData=g({fP:0},!1,"org.nlogo.core.prim.etc._turtleset",{fP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function WK(){this.p=this.h=this.g=null;this.a=0}WK.prototype=new l;WK.prototype.constructor=WK;c=WK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_turtleshere"};c.v=function(){return 0};c.o=function(a){return Jya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Dj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-TP-",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 535");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 535");return this.h};function Jya(a){return!!(a&&a.$classData&&a.$classData.n.gP)}c.$classData=g({gP:0},!1,"org.nlogo.core.prim.etc._turtleshere",{gP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function XK(){this.p=this.h=this.g=null;this.a=0}XK.prototype=new l;XK.prototype.constructor=XK;c=XK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_turtleson"};c.v=function(){return 0};c.o=function(a){return yAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([xj(D())|Cj(D())]),b=B().s,a=L(a,b),b=Dj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 541");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 541");return this.h};function yAa(a){return!!(a&&a.$classData&&a.$classData.n.hP)}c.$classData=g({hP:0},!1,"org.nlogo.core.prim.etc._turtleson",{hP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function iO(){this.p=this.h=this.g=null;this.a=0}iO.prototype=new l;iO.prototype.constructor=iO;c=iO.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_untie"};c.v=function(){return 0};c.o=function(a){return lxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"---L",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1050");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1050");return this.h};function lxa(a){return!!(a&&a.$classData&&a.$classData.n.jP)}c.$classData=g({jP:0},!1,"org.nlogo.core.prim.etc._untie",{jP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function kO(){this.p=this.h=this.g=null;this.a=0}kO.prototype=new l;kO.prototype.constructor=kO;c=kO.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_uphill"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.lB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([vj()]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1061");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1061");return this.h};c.$classData=g({lB:0},!1,"org.nlogo.core.prim.etc._uphill",{lB:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function lO(){this.p=this.h=this.g=null;this.a=0}lO.prototype=new l;lO.prototype.constructor=lO;c=lO.prototype;c.b=function(){M(this);return this};c.u=function(){return"_uphill4"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.mB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([vj()]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-T--",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1067");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1067");return this.h};c.$classData=g({mB:0},!1,"org.nlogo.core.prim.etc._uphill4",{mB:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function YK(){this.p=this.h=this.g=null;this.a=0}YK.prototype=new l;YK.prototype.constructor=YK;c=YK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_userdirectory"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.lP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D())|zj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1073");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1073");return this.h};c.$classData=g({lP:0},!1,"org.nlogo.core.prim.etc._userdirectory",{lP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function ZK(){this.p=this.h=this.g=null;this.a=0}ZK.prototype=new l;ZK.prototype.constructor=ZK;c=ZK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_userfile"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.mP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D())|zj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1078");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1078");return this.h};c.$classData=g({mP:0},!1,"org.nlogo.core.prim.etc._userfile",{mP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function $K(){this.p=this.h=this.g=null;this.a=0}$K.prototype=new l;$K.prototype.constructor=$K;c=$K.prototype;c.b=function(){M(this);return this};c.u=function(){return"_userinput"};c.v=function(){return 0};
+c.o=function(a){return KAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1083");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1083");return this.h};function KAa(a){return!!(a&&a.$classData&&a.$classData.n.nP)}c.$classData=g({nP:0},!1,"org.nlogo.core.prim.etc._userinput",{nP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function mO(){this.p=this.h=this.g=null;this.a=0}mO.prototype=new l;mO.prototype.constructor=mO;c=mO.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_usermessage"};c.v=function(){return 0};c.o=function(a){return hya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1089");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1089");return this.h};function hya(a){return!!(a&&a.$classData&&a.$classData.n.oP)}c.$classData=g({oP:0},!1,"org.nlogo.core.prim.etc._usermessage",{oP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function aL(){this.p=this.h=this.g=null;this.a=0}aL.prototype=new l;aL.prototype.constructor=aL;c=aL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_usernewfile"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.pP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D())|zj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1094");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1094");return this.h};c.$classData=g({pP:0},!1,"org.nlogo.core.prim.etc._usernewfile",{pP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function bL(){this.p=this.h=this.g=null;this.a=0}bL.prototype=new l;bL.prototype.constructor=bL;c=bL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_useroneof"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.qP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc(),Bj(D())]),b=B().s,a=L(a,b),b=kc(),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1099");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1099");return this.h};c.$classData=g({qP:0},!1,"org.nlogo.core.prim.etc._useroneof",{qP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function cL(){this.p=this.h=this.g=null;this.a=0}cL.prototype=new l;cL.prototype.constructor=cL;c=cL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_useryesorno"};c.v=function(){return 0};
+c.o=function(a){return JAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1105");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1105");return this.h};function JAa(a){return!!(a&&a.$classData&&a.$classData.n.rP)}c.$classData=g({rP:0},!1,"org.nlogo.core.prim.etc._useryesorno",{rP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function nO(){this.p=this.h=this.g=null;this.a=0}nO.prototype=new l;nO.prototype.constructor=nO;c=nO.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_wait"};c.v=function(){return 0};c.o=function(a){return nya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([N(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1111");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1111");return this.h};function nya(a){return!!(a&&a.$classData&&a.$classData.n.tP)}c.$classData=g({tP:0},!1,"org.nlogo.core.prim.etc._wait",{tP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function oO(){this.p=this.h=this.g=null;this.a=0}oO.prototype=new l;oO.prototype.constructor=oO;c=oO.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_watch"};c.v=function(){return 0};c.o=function(a){return Zxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([xj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 553");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 553");return this.h};function Zxa(a){return!!(a&&a.$classData&&a.$classData.n.uP)}c.$classData=g({uP:0},!1,"org.nlogo.core.prim.etc._watch",{uP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function pO(){this.p=this.h=this.g=null;this.a=0}pO.prototype=new l;pO.prototype.constructor=pO;c=pO.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_watchme"};c.v=function(){return 0};c.o=function(a){return mxa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"-TPL",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1116");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1116");return this.h};function mxa(a){return!!(a&&a.$classData&&a.$classData.n.vP)}c.$classData=g({vP:0},!1,"org.nlogo.core.prim.etc._watchme",{vP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function qO(){this.p=this.h=this.g=null;this.a=0}qO.prototype=new l;qO.prototype.constructor=qO;c=qO.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_while"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.nB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Oj(D()),Lj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 559");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 559");return this.h};c.$classData=g({nB:0},!1,"org.nlogo.core.prim.etc._while",{nB:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function rO(){this.p=this.h=this.g=null;this.a=0}rO.prototype=new l;rO.prototype.constructor=rO;c=rO.prototype;c.b=function(){M(this);return this};c.u=function(){return"_withlocalrandomness"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.oB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Lj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();D();var e=F();D();return nc(D(),a,b,d,"OTPL",e,!0,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 564");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 564");return this.h};c.$classData=g({oB:0},!1,"org.nlogo.core.prim.etc._withlocalrandomness",{oB:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function fL(){this.p=this.h=this.g=null;this.a=0}fL.prototype=new l;fL.prototype.constructor=fL;c=fL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_withmax"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.pB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Cj(D());B();var b=(new w).f([Pj(D())]),d=B().s,b=L(b,d),d=Cj(D()),e=2+C()|0,f=jd().Wc("?");D();var h=F();D();var k=F();D();D();return G(new H,e,a,b,d,h,k,!1,"OTPL",f,f.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 570");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 570");return this.h};c.$classData=g({pB:0},!1,"org.nlogo.core.prim.etc._withmax",{pB:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function gL(){this.p=this.h=this.g=null;this.a=0}gL.prototype=new l;gL.prototype.constructor=gL;c=gL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_withmin"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.qB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Cj(D());B();var b=(new w).f([Pj(D())]),d=B().s,b=L(b,d),d=Cj(D()),e=2+C()|0,f=jd().Wc("?");D();var h=F();D();var k=F();D();D();return G(new H,e,a,b,d,h,k,!1,"OTPL",f,f.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 580");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 580");return this.h};c.$classData=g({qB:0},!1,"org.nlogo.core.prim.etc._withmin",{qB:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function sO(){this.p=this.h=this.g=null;this.a=0}sO.prototype=new l;sO.prototype.constructor=sO;c=sO.prototype;c.b=function(){M(this);return this};c.u=function(){return"_withoutinterruption"};c.v=function(){return 0};
+c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.wP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Lj(D())]),b=B().s,a=L(a,b);D();b=F();D();var d=F();D();D();var e=F();D();return nc(D(),a,b,d,"OTPL",e,!0,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 590");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 590");return this.h};c.$classData=g({wP:0},!1,"org.nlogo.core.prim.etc._withoutinterruption",{wP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function iL(){this.p=this.h=this.g=null;this.a=0}iL.prototype=new l;iL.prototype.constructor=iL;c=iL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_worldheight"};
+c.v=function(){return 0};c.o=function(a){return jBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1121");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1121");return this.h};function jBa(a){return!!(a&&a.$classData&&a.$classData.n.xP)}c.$classData=g({xP:0},!1,"org.nlogo.core.prim.etc._worldheight",{xP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function jL(){this.p=this.h=this.g=null;this.a=0}jL.prototype=new l;jL.prototype.constructor=jL;c=jL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_worldwidth"};c.v=function(){return 0};c.o=function(a){return kBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1126");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1126");return this.h};function kBa(a){return!!(a&&a.$classData&&a.$classData.n.yP)}c.$classData=g({yP:0},!1,"org.nlogo.core.prim.etc._worldwidth",{yP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function lL(){this.p=this.h=this.g=null;this.a=0}lL.prototype=new l;lL.prototype.constructor=lL;c=lL.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_xor"};c.v=function(){return 0};c.o=function(a){return Mwa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=zj(D());B();var b=(new w).f([zj(D())]),d=B().s,b=L(b,d),d=zj(D()),e=-6+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 596");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 596");return this.h};function Mwa(a){return!!(a&&a.$classData&&a.$classData.n.BP)}c.$classData=g({BP:0},!1,"org.nlogo.core.prim.etc._xor",{BP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function GM(){this.p=this.h=this.g=null;this.a=0}GM.prototype=new l;GM.prototype.constructor=GM;c=GM.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_hubnetbroadcast"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.EP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D()),kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 6");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 6");return this.h};c.$classData=g({EP:0},!1,"org.nlogo.core.prim.hubnet._hubnetbroadcast",{EP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function HM(){this.p=this.h=this.g=null;this.a=0}HM.prototype=new l;HM.prototype.constructor=HM;c=HM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetbroadcastclearoutput"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.FP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 10");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 10");return this.h};c.$classData=g({FP:0},!1,"org.nlogo.core.prim.hubnet._hubnetbroadcastclearoutput",{FP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function IM(){this.p=this.h=this.g=null;this.a=0}IM.prototype=new l;IM.prototype.constructor=IM;c=IM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetbroadcastmessage"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.GP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 14");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 14");return this.h};c.$classData=g({GP:0},!1,"org.nlogo.core.prim.hubnet._hubnetbroadcastmessage",{GP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function JM(){this.p=this.h=this.g=null;this.a=0}JM.prototype=new l;JM.prototype.constructor=JM;c=JM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetclearoverride"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.HP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=(new J).j("?");B();var b=(new w).f([Aj(D()),xj(D())|Cj(D()),Aj(D())]),d=B().s,b=L(b,d);D();d=F();D();var e=F();D();D();D();return nc(D(),b,d,e,"OTPL",a,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 18");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 18");return this.h};c.$classData=g({HP:0},!1,"org.nlogo.core.prim.hubnet._hubnetclearoverride",{HP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function KM(){this.p=this.h=this.g=null;this.a=0}KM.prototype=new l;KM.prototype.constructor=KM;c=KM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetclearoverrides"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.IP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 27");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 27");return this.h};c.$classData=g({IP:0},!1,"org.nlogo.core.prim.hubnet._hubnetclearoverrides",{IP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function jI(){this.p=this.h=this.g=null;this.a=0}jI.prototype=new l;jI.prototype.constructor=jI;c=jI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetclientslist"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.JP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Bj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 31");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 31");return this.h};c.$classData=g({JP:0},!1,"org.nlogo.core.prim.hubnet._hubnetclientslist",{JP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function kI(){this.p=this.h=this.g=null;this.a=0}kI.prototype=new l;kI.prototype.constructor=kI;c=kI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetentermessage"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.KP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=zj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 35");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 35");return this.h};c.$classData=g({KP:0},!1,"org.nlogo.core.prim.hubnet._hubnetentermessage",{KP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function lI(){this.p=this.h=this.g=null;this.a=0}lI.prototype=new l;lI.prototype.constructor=lI;c=lI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetexitmessage"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.LP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=zj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 39");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 39");return this.h};c.$classData=g({LP:0},!1,"org.nlogo.core.prim.hubnet._hubnetexitmessage",{LP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function LM(){this.p=this.h=this.g=null;this.a=0}LM.prototype=new l;LM.prototype.constructor=LM;c=LM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetfetchmessage"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.MP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 43");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 43");return this.h};c.$classData=g({MP:0},!1,"org.nlogo.core.prim.hubnet._hubnetfetchmessage",{MP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function MM(){this.p=this.h=this.g=null;this.a=0}MM.prototype=new l;MM.prototype.constructor=MM;c=MM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetkickallclients"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.NP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){return nc(D(),(D(),y()),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 47");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 47");return this.h};c.$classData=g({NP:0},!1,"org.nlogo.core.prim.hubnet._hubnetkickallclients",{NP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function NM(){this.p=this.h=this.g=null;this.a=0}NM.prototype=new l;NM.prototype.constructor=NM;c=NM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetkickclient"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.OP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 51");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 51");return this.h};c.$classData=g({OP:0},!1,"org.nlogo.core.prim.hubnet._hubnetkickclient",{OP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function mI(){this.p=this.h=this.g=null;this.a=0}mI.prototype=new l;mI.prototype.constructor=mI;c=mI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetmessage"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.PP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=kc(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 55");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 55");return this.h};c.$classData=g({PP:0},!1,"org.nlogo.core.prim.hubnet._hubnetmessage",{PP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function nI(){this.p=this.h=this.g=null;this.a=0}nI.prototype=new l;nI.prototype.constructor=nI;c=nI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetmessagesource"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.QP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 59");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 59");return this.h};c.$classData=g({QP:0},!1,"org.nlogo.core.prim.hubnet._hubnetmessagesource",{QP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function oI(){this.p=this.h=this.g=null;this.a=0}oI.prototype=new l;oI.prototype.constructor=oI;c=oI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetmessagetag"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.RP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Aj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 63");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 63");return this.h};c.$classData=g({RP:0},!1,"org.nlogo.core.prim.hubnet._hubnetmessagetag",{RP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function pI(){this.p=this.h=this.g=null;this.a=0}pI.prototype=new l;pI.prototype.constructor=pI;c=pI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetmessagewaiting"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.SP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=zj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 67");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 67");return this.h};c.$classData=g({SP:0},!1,"org.nlogo.core.prim.hubnet._hubnetmessagewaiting",{SP:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function OM(){this.p=this.h=this.g=null;this.a=0}OM.prototype=new l;OM.prototype.constructor=OM;c=OM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetreset"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.TP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){D();var a=y();D();var b=F();D();var d=F();D();var e=F();D();D();return nc(D(),a,b,d,"O---",e,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 71");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 71");return this.h};c.$classData=g({TP:0},!1,"org.nlogo.core.prim.hubnet._hubnetreset",{TP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function PM(){this.p=this.h=this.g=null;this.a=0}PM.prototype=new l;PM.prototype.constructor=PM;c=PM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetresetperspective"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.UP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 75");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 75");return this.h};c.$classData=g({UP:0},!1,"org.nlogo.core.prim.hubnet._hubnetresetperspective",{UP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function QM(){this.p=this.h=this.g=null;this.a=0}QM.prototype=new l;QM.prototype.constructor=QM;c=QM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetsend"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.VP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Bj(D())|Aj(D()),Aj(D()),kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 79");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 79");return this.h};c.$classData=g({VP:0},!1,"org.nlogo.core.prim.hubnet._hubnetsend",{VP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function RM(){this.p=this.h=this.g=null;this.a=0}RM.prototype=new l;RM.prototype.constructor=RM;c=RM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetsendclearoutput"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.WP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Bj(D())|Aj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 87");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 87");return this.h};c.$classData=g({WP:0},!1,"org.nlogo.core.prim.hubnet._hubnetsendclearoutput",{WP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function SM(){this.p=this.h=this.g=null;this.a=0}SM.prototype=new l;SM.prototype.constructor=SM;c=SM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetsendfollow"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.XP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D()),xj(D()),N(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 91");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 91");return this.h};c.$classData=g({XP:0},!1,"org.nlogo.core.prim.hubnet._hubnetsendfollow",{XP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function TM(){this.p=this.h=this.g=null;this.a=0}TM.prototype=new l;TM.prototype.constructor=TM;c=TM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetsendmessage"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.YP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Bj(D())|Aj(D()),kc()]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 95");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 95");return this.h};c.$classData=g({YP:0},!1,"org.nlogo.core.prim.hubnet._hubnetsendmessage",{YP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function UM(){this.p=this.h=this.g=null;this.a=0}UM.prototype=new l;UM.prototype.constructor=UM;c=UM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetsendoverride"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.ZP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=(new J).j("?");B();var b=(new w).f([Aj(D()),xj(D())|Cj(D()),Aj(D()),Mj(D())]),d=B().s,b=L(b,d);D();d=F();D();var e=F();D();D();D();return nc(D(),b,d,e,"OTPL",a,!1,!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 100");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 100");return this.h};c.$classData=g({ZP:0},!1,"org.nlogo.core.prim.hubnet._hubnetsendoverride",{ZP:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function VM(){this.p=this.h=this.g=null;this.a=0}VM.prototype=new l;VM.prototype.constructor=VM;c=VM.prototype;c.b=function(){M(this);return this};c.u=function(){return"_hubnetsendwatch"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.$P)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=D();B();var b=(new w).f([Aj(D()),xj(D())]),d=B().s;return nc(a,L(b,d),(D(),F()),(D(),F()),(D(),"OTPL"),(D(),F()),(D(),!1),(D(),!0))};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 110");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/hubnet.scala: 110");return this.h};c.$classData=g({$P:0},!1,"org.nlogo.core.prim.hubnet._hubnetsendwatch",{$P:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function hda(a){return!!(a&&a.$classData&&a.$classData.n.Mja)}function H6(){Y5.call(this)}H6.prototype=new nCa;H6.prototype.constructor=H6;
+H6.prototype.b=function(){Y5.prototype.od.call(this,!1);return this};H6.prototype.u=function(){return"JsFalse"};H6.prototype.x=function(){return Y(new Z,this)};H6.prototype.$classData=g({v7:0},!1,"play.api.libs.json.JsFalse$",{v7:1,PB:1,d:1,oo:1,Um:1,t:1,q:1,l:1,i:1});var GCa=void 0;function Nha(){GCa||(GCa=(new H6).b());return GCa}function td(){DT.call(this);this.Ix=null}td.prototype=new m1;td.prototype.constructor=td;c=td.prototype;c.u=function(){return"JsResultException"};c.v=function(){return 1};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.nR){var b=this.Ix;a=a.Ix;return null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.Ix;default:throw(new P).c(""+a);}};c.G=function(a){this.Ix=a;a=u((new v).G((new w).f(["JsResultException(errors:",")"])),(new w).f([a]));DT.prototype.gc.call(this,a,null);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({nR:0},!1,"play.api.libs.json.JsResultException",{nR:1,ef:1,xd:1,Lc:1,d:1,i:1,t:1,q:1,l:1});function I6(){Y5.call(this)}I6.prototype=new nCa;I6.prototype.constructor=I6;I6.prototype.b=function(){Y5.prototype.od.call(this,!0);return this};I6.prototype.u=function(){return"JsTrue"};I6.prototype.x=function(){return Y(new Z,this)};I6.prototype.$classData=g({C7:0},!1,"play.api.libs.json.JsTrue$",{C7:1,PB:1,d:1,oo:1,Um:1,t:1,q:1,l:1,i:1});var HCa=void 0;
+function Mha(){HCa||(HCa=(new I6).b());return HCa}function xS(a){a.Fv(ICa(a))}function J6(){this.ga=null}J6.prototype=new l;J6.prototype.constructor=J6;function ICa(a){var b=new J6;if(null===a)throw ug(vg(),null);b.ga=a;return b}J6.prototype.$classData=g({W7:0},!1,"scalaz.ApplicativePlus$$anon$3",{W7:1,d:1,Raa:1,lC:1,Kr:1,uk:1,$i:1,oC:1,Yw:1});function JCa(a,b){return a.ga.Qd(K(function(a,b){return function(){return a.Gw.Qd(b)}}(a,b)))}function K6(){}K6.prototype=new Rta;
+K6.prototype.constructor=K6;function KCa(){}KCa.prototype=K6.prototype;function L6(){}L6.prototype=new uCa;L6.prototype.constructor=L6;function LCa(){}LCa.prototype=L6.prototype;function MCa(a,b,d){return a.ih(b,m(new n,function(a,b){return function(d){return a.Qd(K(function(a,b,d){return function(){return b.y(d)}}(a,b,d)))}}(a,d)))}function wS(a){a.sj(vCa(a))}function M6(){}M6.prototype=new xCa;M6.prototype.constructor=M6;function NCa(){}NCa.prototype=M6.prototype;function N6(){}N6.prototype=new Wua;
+N6.prototype.constructor=N6;N6.prototype.b=function(){Sz.prototype.b.call(this);return this};function Bq(a,b){eq();a=[];var d=fq().$d,e=a.length|0;a:for(;;){if(0!==e){d=(new jq).Sb(a[-1+e|0],d);e=-1+e|0;continue a}break}return(new bq).j((new kq).Sb(b,d))}function Rea(){var a=pq();return m(new n,function(){return function(a){return(new bq).j(a)}}(a))}function Jq(){var a=pq();return m(new n,function(){return function(a){return(new dq).j(a)}}(a))}
+N6.prototype.$classData=g({m$:0},!1,"scalaz.Validation$",{m$:1,Tla:1,Ula:1,Vla:1,Wla:1,Xla:1,d:1,l:1,i:1});var OCa=void 0;function pq(){OCa||(OCa=(new N6).b());return OCa}function GA(){this.Nt=!1;this.Qt=this.RU=null}GA.prototype=new eCa;GA.prototype.constructor=GA;GA.prototype.Hu=function(a){this.RU=a;(new R2).b();M5.prototype.Mba.call(this);this.Qt="";return this};function pT(a,b){qT(a,null===b?"null":b)}
+function qT(a,b){for(;""!==b;){var d=b.indexOf("\n")|0;if(0>d)a.Qt=""+a.Qt+b,b="";else{var e=""+a.Qt+b.substring(0,d);ba.console&&(a.RU&&ba.console.error?ba.console.error(e):ba.console.log(e));a.Qt="";b=b.substring(1+d|0)}}}GA.prototype.zo=function(){};GA.prototype.$classData=g({jca:0},!1,"java.lang.JSConsoleBasedPrintStream",{jca:1,oja:1,nja:1,uZ:1,d:1,Dr:1,Yu:1,tH:1,cV:1});function yi(){A.call(this);this.vz=this.uz=0}yi.prototype=new VBa;yi.prototype.constructor=yi;c=yi.prototype;c.Zi=function(){return this.uz};
+c.ia=function(a,b){this.uz=a;this.vz=b;A.prototype.e.call(this,null,null);return this};c.na=function(){return this.vz};c.Ec=function(){return this.vz};c.ja=function(){return this.uz};c.$classData=g({Kda:0},!1,"scala.Tuple2$mcII$sp",{Kda:1,tC:1,d:1,Gda:1,t:1,q:1,l:1,i:1,opa:1});function z(){DT.call(this);this.ly=null}z.prototype=new m1;z.prototype.constructor=z;c=z.prototype;c.u=function(){return"UninitializedFieldError"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.OW?this.ly===a.ly:!1};c.w=function(a){switch(a){case 0:return this.ly;default:throw(new P).c(""+a);}};c.c=function(a){this.ly=a;DT.prototype.gc.call(this,a,null);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({OW:0},!1,"scala.UninitializedFieldError",{OW:1,ef:1,xd:1,Lc:1,d:1,i:1,t:1,q:1,l:1});function uR(){this.Y=null}uR.prototype=new Osa;uR.prototype.constructor=uR;
+function g_(a,b){for(;;){var d;b:for(d=b;;){var e=d.Y;if(f_(e))d=e;else break b}if(b===d||eZ(a,b,d))return d;b=a.Y;if(!f_(b))return a}}c=uR.prototype;c.b=function(){cZ.prototype.j.call(this,y());return this};function $sa(a,b){a:for(;;){var d=a.Y;if(Zsa(d))e_(b,d);else{if(f_(d)){a=g_(a,d);continue a}if(!Mg(d))throw(new q).j(d);if(!eZ(a,d,Ng(new Og,b,d)))continue a}break}}
+c.hw=function(a){DC||(DC=(new zC).b());a=iw(a)?Sja(a.Bk):a;var b;a:for(b=this;;){var d=b.Y;if(Mg(d)){if(eZ(b,d,a)){b=d;break a}}else if(f_(d))b=g_(b,d);else{b=null;break a}}if(null!==b){if(!b.z())for(;!b.z();)e_(b.$(),a),b=b.aa();return!0}return!1};c.k=function(){return ata(this)};c.nl=function(a,b){return Kja(this,a,b)};c.jp=function(a,b){$sa(this,Ysa(b,a))};c.uG=function(a,b,d){return Oja(this,a,b,d)};c.Oh=function(a,b){return Mja(this,a,b)};
+c.rG=function(){var a;a:for(a=this;;){var b=a.Y;if(Zsa(b)){a=(new J).j(b);break a}if(f_(b))a=g_(a,b);else{a=F();break a}}return a};c.rD=function(a,b){return Pja(this,a,b)};c.Us=function(a,b){return Qja(this,a,b)};function f_(a){return!!(a&&a.$classData&&a.$classData.n.XW)}c.$classData=g({XW:0},!1,"scala.concurrent.impl.Promise$DefaultPromise",{XW:1,kV:1,d:1,l:1,i:1,WW:1,SW:1,cF:1,PW:1});function O6(){}O6.prototype=new l;O6.prototype.constructor=O6;O6.prototype.b=function(){return this};
+O6.prototype.zk=function(a,b){return a===b?0:a<b?-1:1};O6.prototype.$classData=g({tea:0},!1,"scala.math.Ordering$String$",{tea:1,d:1,Fpa:1,Cv:1,av:1,Dv:1,Bv:1,l:1,i:1});var oZa=void 0;function Hra(){oZa||(oZa=(new O6).b());return oZa}function P6(){this.bh=null}P6.prototype=new l;P6.prototype.constructor=P6;function Q6(){}Q6.prototype=P6.prototype;P6.prototype.o=function(a){return this===a};P6.prototype.k=function(){return this.bh};P6.prototype.r=function(){return Ka(this)};function R6(){}
+R6.prototype=new l;R6.prototype.constructor=R6;function pZa(){}pZa.prototype=R6.prototype;function S6(){this.nc=this.s=null}S6.prototype=new t6;S6.prototype.constructor=S6;S6.prototype.b=function(){dU.prototype.b.call(this);T6=this;this.nc=(new z_).b();return this};S6.prototype.db=function(){$F();dk();return(new aG).b()};S6.prototype.$classData=g({xfa:0},!1,"scala.collection.IndexedSeq$",{xfa:1,PX:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1});var T6=void 0;function ek(){T6||(T6=(new S6).b());return T6}
+function We(){this.Se=this.Pe=0;this.Va=null}We.prototype=new H1;We.prototype.constructor=We;c=We.prototype;c.ma=function(){this.Se>=this.Pe&&SC().Xd.ma();var a=this.Va.W(this.Se);this.Se=1+this.Se|0;return a};c.$m=function(){return this};c.$=function(){this.Se>=this.Pe&&SC().Xd.ma();return this.Va.W(this.Se)};function Ve(a,b,d,e){a.Pe=e;if(null===b)throw ug(vg(),null);a.Va=b;a.Se=d;return a}c.ta=function(){return this.Se<this.Pe};
+c.Ko=function(a){return 0>=a?Ve(new We,this.Va,this.Se,this.Pe):(this.Se+a|0)>=this.Pe?Ve(new We,this.Va,this.Pe,this.Pe):Ve(new We,this.Va,this.Se+a|0,this.Pe)};c.$classData=g({zfa:0},!1,"scala.collection.IndexedSeqLike$Elements",{zfa:1,Hd:1,d:1,ad:1,La:1,Ka:1,vfa:1,l:1,i:1});function U6(){}U6.prototype=new m3;U6.prototype.constructor=U6;U6.prototype.b=function(){return this};
+function qZa(a,b,d,e,f,h){var k=31&(b>>>h|0),p=31&(e>>>h|0);if(k!==p)return a=1<<k|1<<p,b=la(Wa(V6),[2]),k<p?(b.m[0]=d,b.m[1]=f):(b.m[0]=f,b.m[1]=d),W6(new X6,a,b,d.Ha()+f.Ha()|0);p=la(Wa(V6),[1]);k=1<<k;d=qZa(a,b,d,e,f,5+h|0);p.m[0]=d;return W6(new X6,k,p,d.Hm)}U6.prototype.Fx=function(){return Y6()};U6.prototype.$classData=g({cga:0},!1,"scala.collection.immutable.HashSet$",{cga:1,OX:1,zF:1,xF:1,Xe:1,d:1,Ye:1,l:1,i:1});var rZa=void 0;function ml(){rZa||(rZa=(new U6).b());return rZa}
+function Z6(){this.s=null}Z6.prototype=new t6;Z6.prototype.constructor=Z6;Z6.prototype.b=function(){dU.prototype.b.call(this);return this};Z6.prototype.db=function(){dk();return(new aG).b()};Z6.prototype.$classData=g({hga:0},!1,"scala.collection.immutable.IndexedSeq$",{hga:1,PX:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1});var sZa=void 0;function $F(){sZa||(sZa=(new Z6).b());return sZa}function $6(){}$6.prototype=new m3;$6.prototype.constructor=$6;$6.prototype.b=function(){return this};$6.prototype.Fx=function(){return tZa()};
+$6.prototype.$classData=g({qga:0},!1,"scala.collection.immutable.ListSet$",{qga:1,OX:1,zF:1,xF:1,Xe:1,d:1,Ye:1,l:1,i:1});var uZa=void 0;function an(){this.is=null;this.PU=!1;this.bb=null}an.prototype=new D6;an.prototype.constructor=an;c=an.prototype;c.md=function(a){return vZa(this,a)};c.k=function(){return"ArrayBuilder.generic"};function vZa(a,b){a.bb.push(a.PU?null===b?0:b.Y:null===b?a.is.wi.qz:b);return a}
+c.Da=function(){var a=this.is===pa(Xa)?pa(Ba):this.is===pa(JF)||this.is===pa(q_)?pa(Ua):this.is;return ka(Wa(a.wi),this.bb)};c.Dg=function(a){this.is=a;this.PU=a===pa(Za);this.bb=[];return this};c.Qa=function(a){return vZa(this,a)};c.$classData=g({gha:0},!1,"scala.collection.mutable.ArrayBuilder$generic",{gha:1,Fm:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1,l:1,i:1});function a7(){this.bb=null;this.va=this.Za=0}a7.prototype=new D6;a7.prototype.constructor=a7;c=a7.prototype;c.b=function(){this.va=this.Za=0;return this};
+function wZa(a,b){b=la(Wa(Ya),[b]);0<a.va&&Kv(Bf(),a.bb,0,b,0,a.va);return b}c.o=function(a){return a&&a.$classData&&a.$classData.n.cY?this.va===a.va&&this.bb===a.bb:!1};c.md=function(a){return xZa(this,!!a)};c.k=function(){return"ArrayBuilder.ofBoolean"};c.Da=function(){var a;0!==this.Za&&this.Za===this.va?(this.Za=0,a=this.bb):a=wZa(this,this.va);return a};c.We=function(a){this.bb=wZa(this,a);this.Za=a};c.Qa=function(a){return xZa(this,!!a)};c.qc=function(a){this.Za<a&&this.We(a)};
+c.Re=function(a){if(this.Za<a||0===this.Za){for(var b=0===this.Za?16:this.Za<<1;b<a;)b<<=1;this.We(b)}};function xZa(a,b){a.Re(1+a.va|0);a.bb.m[a.va]=b;a.va=1+a.va|0;return a}c.Zb=function(a){a&&a.$classData&&a.$classData.n.IF?(this.Re(this.va+a.ra()|0),Kv(Bf(),a.pa,0,this.bb,this.va,a.ra()),this.va=this.va+a.ra()|0,a=this):a=oE(this,a);return a};c.$classData=g({cY:0},!1,"scala.collection.mutable.ArrayBuilder$ofBoolean",{cY:1,Fm:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1,l:1,i:1});
+function b7(){this.bb=null;this.va=this.Za=0}b7.prototype=new D6;b7.prototype.constructor=b7;c=b7.prototype;c.b=function(){this.va=this.Za=0;return this};c.o=function(a){return a&&a.$classData&&a.$classData.n.dY?this.va===a.va&&this.bb===a.bb:!1};c.md=function(a){return yZa(this,a|0)};function zZa(a,b){b=la(Wa(bb),[b]);0<a.va&&Kv(Bf(),a.bb,0,b,0,a.va);return b}c.k=function(){return"ArrayBuilder.ofByte"};
+c.Da=function(){var a;0!==this.Za&&this.Za===this.va?(this.Za=0,a=this.bb):a=zZa(this,this.va);return a};c.We=function(a){this.bb=zZa(this,a);this.Za=a};c.Qa=function(a){return yZa(this,a|0)};function yZa(a,b){a.Re(1+a.va|0);a.bb.m[a.va]=b;a.va=1+a.va|0;return a}c.qc=function(a){this.Za<a&&this.We(a)};c.Re=function(a){if(this.Za<a||0===this.Za){for(var b=0===this.Za?16:this.Za<<1;b<a;)b<<=1;this.We(b)}};
+c.Zb=function(a){a&&a.$classData&&a.$classData.n.JF?(this.Re(this.va+a.ra()|0),Kv(Bf(),a.pa,0,this.bb,this.va,a.ra()),this.va=this.va+a.ra()|0,a=this):a=oE(this,a);return a};c.$classData=g({dY:0},!1,"scala.collection.mutable.ArrayBuilder$ofByte",{dY:1,Fm:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1,l:1,i:1});function c7(){this.bb=null;this.va=this.Za=0}c7.prototype=new D6;c7.prototype.constructor=c7;c=c7.prototype;c.b=function(){this.va=this.Za=0;return this};
+c.o=function(a){return a&&a.$classData&&a.$classData.n.eY?this.va===a.va&&this.bb===a.bb:!1};c.md=function(a){return AZa(this,null===a?0:a.Y)};c.k=function(){return"ArrayBuilder.ofChar"};c.Da=function(){var a;0!==this.Za&&this.Za===this.va?(this.Za=0,a=this.bb):a=BZa(this,this.va);return a};c.We=function(a){this.bb=BZa(this,a);this.Za=a};c.Qa=function(a){return AZa(this,null===a?0:a.Y)};c.qc=function(a){this.Za<a&&this.We(a)};
+function BZa(a,b){b=la(Wa(Za),[b]);0<a.va&&Kv(Bf(),a.bb,0,b,0,a.va);return b}c.Re=function(a){if(this.Za<a||0===this.Za){for(var b=0===this.Za?16:this.Za<<1;b<a;)b<<=1;this.We(b)}};function AZa(a,b){a.Re(1+a.va|0);a.bb.m[a.va]=b;a.va=1+a.va|0;return a}c.Zb=function(a){a&&a.$classData&&a.$classData.n.KF?(this.Re(this.va+a.ra()|0),Kv(Bf(),a.pa,0,this.bb,this.va,a.ra()),this.va=this.va+a.ra()|0,a=this):a=oE(this,a);return a};
+c.$classData=g({eY:0},!1,"scala.collection.mutable.ArrayBuilder$ofChar",{eY:1,Fm:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1,l:1,i:1});function d7(){this.bb=null;this.va=this.Za=0}d7.prototype=new D6;d7.prototype.constructor=d7;c=d7.prototype;c.b=function(){this.va=this.Za=0;return this};c.o=function(a){return a&&a.$classData&&a.$classData.n.fY?this.va===a.va&&this.bb===a.bb:!1};c.md=function(a){return CZa(this,+a)};c.k=function(){return"ArrayBuilder.ofDouble"};
+c.Da=function(){var a;0!==this.Za&&this.Za===this.va?(this.Za=0,a=this.bb):a=DZa(this,this.va);return a};function DZa(a,b){b=la(Wa(gb),[b]);0<a.va&&Kv(Bf(),a.bb,0,b,0,a.va);return b}c.We=function(a){this.bb=DZa(this,a);this.Za=a};c.Qa=function(a){return CZa(this,+a)};c.qc=function(a){this.Za<a&&this.We(a)};function CZa(a,b){a.Re(1+a.va|0);a.bb.m[a.va]=b;a.va=1+a.va|0;return a}c.Re=function(a){if(this.Za<a||0===this.Za){for(var b=0===this.Za?16:this.Za<<1;b<a;)b<<=1;this.We(b)}};
+c.Zb=function(a){a&&a.$classData&&a.$classData.n.LF?(this.Re(this.va+a.ra()|0),Kv(Bf(),a.pa,0,this.bb,this.va,a.ra()),this.va=this.va+a.ra()|0,a=this):a=oE(this,a);return a};c.$classData=g({fY:0},!1,"scala.collection.mutable.ArrayBuilder$ofDouble",{fY:1,Fm:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1,l:1,i:1});function e7(){this.bb=null;this.va=this.Za=0}e7.prototype=new D6;e7.prototype.constructor=e7;c=e7.prototype;c.b=function(){this.va=this.Za=0;return this};
+c.o=function(a){return a&&a.$classData&&a.$classData.n.gY?this.va===a.va&&this.bb===a.bb:!1};c.md=function(a){return EZa(this,+a)};c.k=function(){return"ArrayBuilder.ofFloat"};c.Da=function(){var a;0!==this.Za&&this.Za===this.va?(this.Za=0,a=this.bb):a=FZa(this,this.va);return a};c.We=function(a){this.bb=FZa(this,a);this.Za=a};function EZa(a,b){a.Re(1+a.va|0);a.bb.m[a.va]=b;a.va=1+a.va|0;return a}c.Qa=function(a){return EZa(this,+a)};c.qc=function(a){this.Za<a&&this.We(a)};
+function FZa(a,b){b=la(Wa(fb),[b]);0<a.va&&Kv(Bf(),a.bb,0,b,0,a.va);return b}c.Re=function(a){if(this.Za<a||0===this.Za){for(var b=0===this.Za?16:this.Za<<1;b<a;)b<<=1;this.We(b)}};c.Zb=function(a){a&&a.$classData&&a.$classData.n.MF?(this.Re(this.va+a.ra()|0),Kv(Bf(),a.pa,0,this.bb,this.va,a.ra()),this.va=this.va+a.ra()|0,a=this):a=oE(this,a);return a};c.$classData=g({gY:0},!1,"scala.collection.mutable.ArrayBuilder$ofFloat",{gY:1,Fm:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1,l:1,i:1});
+function f7(){this.bb=null;this.va=this.Za=0}f7.prototype=new D6;f7.prototype.constructor=f7;c=f7.prototype;c.b=function(){this.va=this.Za=0;return this};c.o=function(a){return a&&a.$classData&&a.$classData.n.hY?this.va===a.va&&this.bb===a.bb:!1};c.md=function(a){return GZa(this,a|0)};c.k=function(){return"ArrayBuilder.ofInt"};c.Da=function(){var a;0!==this.Za&&this.Za===this.va?(this.Za=0,a=this.bb):a=HZa(this,this.va);return a};c.We=function(a){this.bb=HZa(this,a);this.Za=a};
+function GZa(a,b){a.Re(1+a.va|0);a.bb.m[a.va]=b;a.va=1+a.va|0;return a}c.Qa=function(a){return GZa(this,a|0)};function HZa(a,b){b=la(Wa(db),[b]);0<a.va&&Kv(Bf(),a.bb,0,b,0,a.va);return b}c.qc=function(a){this.Za<a&&this.We(a)};c.Re=function(a){if(this.Za<a||0===this.Za){for(var b=0===this.Za?16:this.Za<<1;b<a;)b<<=1;this.We(b)}};c.Zb=function(a){a&&a.$classData&&a.$classData.n.NF?(this.Re(this.va+a.ra()|0),Kv(Bf(),a.pa,0,this.bb,this.va,a.ra()),this.va=this.va+a.ra()|0,a=this):a=oE(this,a);return a};
+c.$classData=g({hY:0},!1,"scala.collection.mutable.ArrayBuilder$ofInt",{hY:1,Fm:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1,l:1,i:1});function g7(){this.bb=null;this.va=this.Za=0}g7.prototype=new D6;g7.prototype.constructor=g7;c=g7.prototype;c.b=function(){this.va=this.Za=0;return this};function IZa(a,b){a.Re(1+a.va|0);a.bb.m[a.va]=b;a.va=1+a.va|0;return a}c.o=function(a){return a&&a.$classData&&a.$classData.n.iY?this.va===a.va&&this.bb===a.bb:!1};c.md=function(a){return IZa(this,Qa(a))};c.k=function(){return"ArrayBuilder.ofLong"};
+c.Da=function(){var a;0!==this.Za&&this.Za===this.va?(this.Za=0,a=this.bb):a=JZa(this,this.va);return a};c.We=function(a){this.bb=JZa(this,a);this.Za=a};function JZa(a,b){b=la(Wa(eb),[b]);0<a.va&&Kv(Bf(),a.bb,0,b,0,a.va);return b}c.Qa=function(a){return IZa(this,Qa(a))};c.qc=function(a){this.Za<a&&this.We(a)};c.Re=function(a){if(this.Za<a||0===this.Za){for(var b=0===this.Za?16:this.Za<<1;b<a;)b<<=1;this.We(b)}};
+c.Zb=function(a){a&&a.$classData&&a.$classData.n.OF?(this.Re(this.va+a.ra()|0),Kv(Bf(),a.pa,0,this.bb,this.va,a.ra()),this.va=this.va+a.ra()|0,a=this):a=oE(this,a);return a};c.$classData=g({iY:0},!1,"scala.collection.mutable.ArrayBuilder$ofLong",{iY:1,Fm:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1,l:1,i:1});function zT(){this.bb=this.$T=null;this.va=this.Za=0}zT.prototype=new D6;zT.prototype.constructor=zT;c=zT.prototype;c.ap=function(a){this.$T=a;this.va=this.Za=0;return this};
+c.o=function(a){return a&&a.$classData&&a.$classData.n.jY?this.va===a.va&&this.bb===a.bb:!1};c.md=function(a){return bpa(this,a)};c.k=function(){return"ArrayBuilder.ofRef"};c.Da=function(){return cpa(this)};c.We=function(a){this.bb=KZa(this,a);this.Za=a};function bpa(a,b){a.Re(1+a.va|0);a.bb.m[a.va]=b;a.va=1+a.va|0;return a}function cpa(a){return 0!==a.Za&&a.Za===a.va?(a.Za=0,a.bb):KZa(a,a.va)}c.Qa=function(a){return bpa(this,a)};c.qc=function(a){this.Za<a&&this.We(a)};
+c.Re=function(a){if(this.Za<a||0===this.Za){for(var b=0===this.Za?16:this.Za<<1;b<a;)b<<=1;this.We(b)}};function KZa(a,b){b=a.$T.Qg(b);0<a.va&&Kv(Bf(),a.bb,0,b,0,a.va);return b}c.Zb=function(a){a&&a.$classData&&a.$classData.n.PF?(this.Re(this.va+a.ra()|0),Kv(Bf(),a.pa,0,this.bb,this.va,a.ra()),this.va=this.va+a.ra()|0,a=this):a=oE(this,a);return a};c.$classData=g({jY:0},!1,"scala.collection.mutable.ArrayBuilder$ofRef",{jY:1,Fm:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1,l:1,i:1});
+function h7(){this.bb=null;this.va=this.Za=0}h7.prototype=new D6;h7.prototype.constructor=h7;c=h7.prototype;c.b=function(){this.va=this.Za=0;return this};c.o=function(a){return a&&a.$classData&&a.$classData.n.kY?this.va===a.va&&this.bb===a.bb:!1};function LZa(a,b){a.Re(1+a.va|0);a.bb.m[a.va]=b;a.va=1+a.va|0;return a}c.md=function(a){return LZa(this,a|0)};c.k=function(){return"ArrayBuilder.ofShort"};c.Da=function(){var a;0!==this.Za&&this.Za===this.va?(this.Za=0,a=this.bb):a=MZa(this,this.va);return a};
+c.We=function(a){this.bb=MZa(this,a);this.Za=a};function MZa(a,b){b=la(Wa(cb),[b]);0<a.va&&Kv(Bf(),a.bb,0,b,0,a.va);return b}c.Qa=function(a){return LZa(this,a|0)};c.qc=function(a){this.Za<a&&this.We(a)};c.Re=function(a){if(this.Za<a||0===this.Za){for(var b=0===this.Za?16:this.Za<<1;b<a;)b<<=1;this.We(b)}};c.Zb=function(a){a&&a.$classData&&a.$classData.n.QF?(this.Re(this.va+a.ra()|0),Kv(Bf(),a.pa,0,this.bb,this.va,a.ra()),this.va=this.va+a.ra()|0,a=this):a=oE(this,a);return a};
+c.$classData=g({kY:0},!1,"scala.collection.mutable.ArrayBuilder$ofShort",{kY:1,Fm:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1,l:1,i:1});function i7(){this.va=0}i7.prototype=new D6;i7.prototype.constructor=i7;c=i7.prototype;c.b=function(){this.va=0;return this};c.o=function(a){return a&&a.$classData&&a.$classData.n.lY?this.va===a.va:!1};c.md=function(){return NZa(this)};c.k=function(){return"ArrayBuilder.ofUnit"};function NZa(a){a.va=1+a.va|0;return a}
+c.Da=function(){for(var a=la(Wa(Ba),[this.va]),b=0;b<this.va;)a.m[b]=void 0,b=1+b|0;return a};c.Qa=function(){return NZa(this)};c.Zb=function(a){this.va=this.va+a.Ha()|0;return this};c.$classData=g({lY:0},!1,"scala.collection.mutable.ArrayBuilder$ofUnit",{lY:1,Fm:1,d:1,Uh:1,Ld:1,Kd:1,Jd:1,l:1,i:1});function j7(){}j7.prototype=new qva;j7.prototype.constructor=j7;j7.prototype.b=function(){return this};j7.prototype.Mo=function(){return(new k7).b()};
+j7.prototype.$classData=g({Iha:0},!1,"scala.collection.mutable.HashSet$",{Iha:1,Wpa:1,zF:1,xF:1,Xe:1,d:1,Ye:1,l:1,i:1});var OZa=void 0;function PZa(){OZa||(OZa=(new j7).b());return OZa}function EF(){DT.call(this);this.Po=null}EF.prototype=new m1;EF.prototype.constructor=EF;c=EF.prototype;c.u=function(){return"JavaScriptException"};c.v=function(){return 1};c.ru=function(){this.stackdata=this.Po;return this};c.o=function(a){return this===a?!0:DF(a)?bn(cn(),this.Po,a.Po):!1};
+c.w=function(a){switch(a){case 0:return this.Po;default:throw(new P).c(""+a);}};c.Lh=function(){return na(this.Po)};c.j=function(a){this.Po=a;DT.prototype.gc.call(this,null,null);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function DF(a){return!!(a&&a.$classData&&a.$classData.n.GY)}c.$classData=g({GY:0},!1,"scala.scalajs.js.JavaScriptException",{GY:1,ef:1,xd:1,Lc:1,d:1,i:1,t:1,q:1,l:1});function zH(){this.p=this.h=this.g=null;this.a=0}zH.prototype=new l;
+zH.prototype.constructor=zH;c=zH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_and"};c.v=function(){return 0};c.o=function(a){return Kwa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=zj(D());B();var b=(new w).f([zj(D())]),d=B().s,b=L(b,d),d=zj(D()),e=-6+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 7");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 7");return this.h};function Kwa(a){return!!(a&&a.$classData&&a.$classData.n.MI)}c.$classData=g({MI:0},!1,"org.nlogo.core.prim._and",{MI:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function Sn(){this.p=this.h=this.g=this.xc=this.yk=this.ze=null;this.a=0}Sn.prototype=new l;
+Sn.prototype.constructor=Sn;c=Sn.prototype;c.u=function(){return"_commandlambda"};c.v=function(){return 3};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.o=function(a){if(this===a)return!0;if(po(a)){var b=this.ze,d=a.ze;(null===b?null===d:b.o(d))?(b=this.yk,d=a.yk,b=null===b?null===d:t5(b,d)):b=!1;if(b)return b=this.xc,a=a.xc,null===b?null===a:b.o(a)}return!1};c.w=function(a){switch(a){case 0:return this.ze;case 1:return this.yk;case 2:return this.xc;default:throw(new P).c(""+a);}};
+c.k=function(){return"_commandlambda"+this.ze.vk().Mc("(",", ",")")};c.Cu=function(a,b,d){this.ze=a;this.yk=b;this.xc=d;M(this);return this};c.H=function(){var a=Kj(D()),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.Bu=function(a){Sn.prototype.Cu.call(this,a,I(Je().Gt,y()),F());return this};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 76");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};function cma(a,b,d,e){b=(new Sn).Cu(b,d,e);return hh(a,b)}c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 76");return this.h};function po(a){return!!(a&&a.$classData&&a.$classData.n.TI)}c.$classData=g({TI:0},!1,"org.nlogo.core.prim._commandlambda",{TI:1,d:1,SJ:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function sn(){this.p=this.h=this.g=this.Y=null;this.a=0}sn.prototype=new l;sn.prototype.constructor=sn;c=sn.prototype;c.u=function(){return"_const"};
+c.v=function(){return 1};c.o=function(a){return this===a?!0:no(a)?bn(cn(),this.Y,a.Y):!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.Y;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=this.Y,a="boolean"===typeof a?zj(D()):"number"===typeof a?N(D()):Eg(a)?Bj(D()):Ag(a)?Aj(D()):kc(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.j=function(a){this.Y=a;M(this);return this};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 96");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 96");return this.h};function no(a){return!!(a&&a.$classData&&a.$classData.n.UI)}c.$classData=g({UI:0},!1,"org.nlogo.core.prim._const",{UI:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});
+function on(){this.p=this.h=this.g=this.Y=null;this.a=0}on.prototype=new l;on.prototype.constructor=on;c=on.prototype;c.u=function(){return"_constcodeblock"};c.v=function(){return 1};c.o=function(a){if(this===a)return!0;if(hma(a)){var b=this.Y;a=a.Y;return null===b?null===a:b.o(a)}return!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.Y;default:throw(new P).c(""+a);}};
+c.k=function(){var a=this.Y,b=m(new n,function(){return function(a){return a.Yb}}(this)),d=r();return a.xa(b,d.s).Mc("`[ "," "," ]`")};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Qj(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 107");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.G=function(a){this.Y=a;M(this);return this};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 107");return this.h};function hma(a){return!!(a&&a.$classData&&a.$classData.n.VI)}c.$classData=g({VI:0},!1,"org.nlogo.core.prim._constcodeblock",{VI:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function cH(){this.p=this.h=this.g=null;this.a=0}cH.prototype=new l;cH.prototype.constructor=cH;c=cH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_equal"};c.v=function(){return 0};c.o=function(a){return Qs(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=kc();B();var b=(new w).f([kc()]),d=B().s,b=L(b,d),d=zj(D()),e=-5+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 137");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 137");return this.h};function Qs(a){return!!(a&&a.$classData&&a.$classData.n.$I)}c.$classData=g({$I:0},!1,"org.nlogo.core.prim._equal",{$I:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function dH(){this.p=this.h=this.g=null;this.a=0}dH.prototype=new l;dH.prototype.constructor=dH;c=dH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_greaterthan"};c.v=function(){return 0};c.o=function(a){return zAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=N(D())|Aj(D())|xj(D());B();var b=(new w).f([N(D())|Aj(D())|xj(D())]),d=B().s,b=L(b,d),d=zj(D()),e=-4+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 174");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 174");return this.h};function zAa(a){return!!(a&&a.$classData&&a.$classData.n.eJ)}c.$classData=g({eJ:0},!1,"org.nlogo.core.prim._greaterthan",{eJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function ZG(){this.p=this.h=this.g=null;this.a=0}ZG.prototype=new l;
+ZG.prototype.constructor=ZG;c=ZG.prototype;c.b=function(){M(this);return this};c.u=function(){return"_lessthan"};c.v=function(){return 0};c.o=function(a){return AAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=N(D())|Aj(D())|xj(D());B();var b=(new w).f([N(D())|Aj(D())|xj(D())]),d=B().s,b=L(b,d),d=zj(D()),e=-4+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 221");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 221");return this.h};function AAa(a){return!!(a&&a.$classData&&a.$classData.n.jJ)}c.$classData=g({jJ:0},!1,"org.nlogo.core.prim._lessthan",{jJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function UI(){this.p=this.h=this.g=null;this.a=0}UI.prototype=new l;
+UI.prototype.constructor=UI;c=UI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_list"};c.v=function(){return 0};c.o=function(a){return qza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([uj()|kc()]),b=B().s,a=L(a,b),b=Bj(D()),d=(new J).j(2),e=(new J).j(0),f=C();D();var h=mc();D();D();D();var k=F();D();return G(new H,f,h,a,b,d,e,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 261");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 261");return this.h};function qza(a){return!!(a&&a.$classData&&a.$classData.n.pJ)}c.$classData=g({pJ:0},!1,"org.nlogo.core.prim._list",{pJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function XG(){this.p=this.h=this.g=null;this.a=0}XG.prototype=new l;XG.prototype.constructor=XG;c=XG.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_minus"};c.v=function(){return 0};c.o=function(a){return Mn(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D());B();var b=(new w).f([N(D())]),d=B().s,b=L(b,d),d=N(D()),e=-3+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 269");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 269");return this.h};function Mn(a){return!!(a&&a.$classData&&a.$classData.n.qJ)}c.$classData=g({qJ:0},!1,"org.nlogo.core.prim._minus",{qJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function DJ(){this.p=this.h=this.g=null;this.a=0}DJ.prototype=new l;DJ.prototype.constructor=DJ;c=DJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_not"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.dA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([zj(D())]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 294");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 294");return this.h};c.$classData=g({dA:0},!1,"org.nlogo.core.prim._not",{dA:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function UG(){this.p=this.h=this.g=null;this.a=0}UG.prototype=new l;UG.prototype.constructor=UG;c=UG.prototype;c.b=function(){M(this);return this};c.u=function(){return"_notequal"};c.v=function(){return 0};
+c.o=function(a){return hAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=kc();B();var b=(new w).f([kc()]),d=B().s,b=L(b,d),d=zj(D()),e=-5+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 300");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 300");return this.h};function hAa(a){return!!(a&&a.$classData&&a.$classData.n.tJ)}c.$classData=g({tJ:0},!1,"org.nlogo.core.prim._notequal",{tJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function FV(){this.dd=this.Vd=0;this.p=this.h=this.g=null;this.a=0}FV.prototype=new l;FV.prototype.constructor=FV;c=FV.prototype;c.u=function(){return"_observervariable"};
+c.v=function(){return 2};c.o=function(a){return this===a?!0:nQ(a)?this.Vd===a.Vd&&this.dd===a.dd:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.Vd;case 1:return this.dd;default:throw(new P).c(""+a);}};c.k=function(){return u((new v).G((new w).f(["_observervariable(",")"])),(new w).f([this.Vd]))};c.ia=function(a,b){this.Vd=a;this.dd=b;M(this);return this};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=this.dd|vj(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 308");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){var a=-889275714,a=V().da(a,this.Vd),a=V().da(a,this.dd);return V().pb(a,2)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 308");return this.h};function nQ(a){return!!(a&&a.$classData&&a.$classData.n.uJ)}c.$classData=g({uJ:0},!1,"org.nlogo.core.prim._observervariable",{uJ:1,d:1,ca:1,A:1,E:1,UH:1,t:1,q:1,l:1,i:1});
+function GJ(){this.p=this.h=this.g=null;this.a=0}GJ.prototype=new l;GJ.prototype.constructor=GJ;c=GJ.prototype;c.b=function(){M(this);return this};c.u=function(){return"_or"};c.v=function(){return 0};c.o=function(a){return Lwa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=zj(D());B();var b=(new w).f([zj(D())]),d=B().s,b=L(b,d),d=zj(D()),e=-6+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 332");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 332");return this.h};function Lwa(a){return!!(a&&a.$classData&&a.$classData.n.xJ)}c.$classData=g({xJ:0},!1,"org.nlogo.core.prim._or",{xJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function DV(){this.dd=this.Vd=0;this.p=this.h=this.g=null;this.a=0}DV.prototype=new l;
+DV.prototype.constructor=DV;c=DV.prototype;c.u=function(){return"_patchvariable"};c.v=function(){return 2};c.o=function(a){return this===a?!0:tr(a)?this.Vd===a.Vd&&this.dd===a.dd:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.Vd;case 1:return this.dd;default:throw(new P).c(""+a);}};c.k=function(){return u((new v).G((new w).f(["_patchvariable(",")"])),(new w).f([this.Vd]))};c.ia=function(a,b){this.Vd=a;this.dd=b;M(this);return this};
+c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=this.dd|vj(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-TP-",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 358");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){var a=-889275714,a=V().da(a,this.Vd),a=V().da(a,this.dd);return V().pb(a,2)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 358");return this.h};function tr(a){return!!(a&&a.$classData&&a.$classData.n.BJ)}c.$classData=g({BJ:0},!1,"org.nlogo.core.prim._patchvariable",{BJ:1,d:1,ca:1,A:1,E:1,UH:1,t:1,q:1,l:1,i:1});
+function Pn(){this.p=this.h=this.g=this.xc=this.yk=this.ze=null;this.a=0}Pn.prototype=new l;Pn.prototype.constructor=Pn;c=Pn.prototype;c.u=function(){return"_reporterlambda"};c.v=function(){return 3};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.o=function(a){if(this===a)return!0;if(xt(a)){var b=this.ze,d=a.ze;(null===b?null===d:b.o(d))?(b=this.yk,d=a.yk,b=null===b?null===d:t5(b,d)):b=!1;if(b)return b=this.xc,a=a.xc,null===b?null===a:b.o(a)}return!1};
+c.w=function(a){switch(a){case 0:return this.ze;case 1:return this.yk;case 2:return this.xc;default:throw(new P).c(""+a);}};c.k=function(){return"_reporterlambda"+this.ze.vk().Mc("(",", ",")")};c.Cu=function(a,b,d){this.ze=a;this.yk=b;this.xc=d;M(this);return this};c.H=function(){B();var a=(new w).f([Qj(),Jj(D())]),b=B().s,a=L(a,b),b=Jj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.Bu=function(a){Pn.prototype.Cu.call(this,a,I(Je().Gt,y()),F());return this};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 388");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};function bma(a,b,d,e){b=(new Pn).Cu(b,d,e);return hh(a,b)}c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 388");return this.h};function xt(a){return!!(a&&a.$classData&&a.$classData.n.FJ)}c.$classData=g({FJ:0},!1,"org.nlogo.core.prim._reporterlambda",{FJ:1,d:1,SJ:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function xK(){this.p=this.h=this.g=null;this.a=0}xK.prototype=new l;xK.prototype.constructor=xK;c=xK.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_sentence"};c.v=function(){return 0};c.o=function(a){return rza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([uj()|kc()]),b=B().s,a=L(a,b),b=Bj(D()),d=(new J).j(2),e=(new J).j(0),f=C();D();var h=mc();D();D();D();var k=F();D();return G(new H,f,h,a,b,d,e,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 426");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 426");return this.h};function rza(a){return!!(a&&a.$classData&&a.$classData.n.HJ)}c.$classData=g({HJ:0},!1,"org.nlogo.core.prim._sentence",{HJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function MK(){this.p=this.h=this.g=null;this.a=0}MK.prototype=new l;MK.prototype.constructor=MK;c=MK.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_sum"};c.v=function(){return 0};c.o=function(a){return rW(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 451");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 451");return this.h};function rW(a){return!!(a&&a.$classData&&a.$classData.n.KJ)}c.$classData=g({KJ:0},!1,"org.nlogo.core.prim._sum",{KJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function Tn(){this.p=this.h=this.g=null;this.a=0}Tn.prototype=new l;Tn.prototype.constructor=Tn;c=Tn.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_symbol"};c.v=function(){return 0};c.o=function(a){return Dn(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=Rj(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 457");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 457");return this.h};function Dn(a){return!!(a&&a.$classData&&a.$classData.n.LJ)}c.$classData=g({LJ:0},!1,"org.nlogo.core.prim._symbol",{LJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function CV(){this.dd=this.Vd=0;this.p=this.h=this.g=null;this.a=0}CV.prototype=new l;CV.prototype.constructor=CV;c=CV.prototype;c.u=function(){return"_turtlevariable"};
+c.v=function(){return 2};c.o=function(a){return this===a?!0:Ewa(a)?this.Vd===a.Vd&&this.dd===a.dd:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.Vd;case 1:return this.dd;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.ia=function(a,b){this.Vd=a;this.dd=b;M(this);return this};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=this.dd|vj(),b=C();D();var d=mc();D();var e=y();D();var f=F();D();var h=F();D();D();var k=F();D();return G(new H,b,d,e,a,f,h,!1,"-T--",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 475");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){var a=-889275714,a=V().da(a,this.Vd),a=V().da(a,this.dd);return V().pb(a,2)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 475");return this.h};function Ewa(a){return!!(a&&a.$classData&&a.$classData.n.PJ)}c.$classData=g({PJ:0},!1,"org.nlogo.core.prim._turtlevariable",{PJ:1,d:1,ca:1,A:1,E:1,UH:1,t:1,q:1,l:1,i:1});
+function On(){this.p=this.h=this.g=null;this.a=0}On.prototype=new l;On.prototype.constructor=On;c=On.prototype;c.b=function(){M(this);return this};c.u=function(){return"_unaryminus"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.gA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 481");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 481");return this.h};c.$classData=g({gA:0},!1,"org.nlogo.core.prim._unaryminus",{gA:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function hL(){this.p=this.h=this.g=null;this.a=0}hL.prototype=new l;hL.prototype.constructor=hL;c=hL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_word"};
+c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.hA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([uj()|kc()]),b=B().s,a=L(a,b),b=Aj(D()),d=(new J).j(2),e=(new J).j(0),f=C();D();var h=mc();D();D();D();var k=F();D();return G(new H,f,h,a,b,d,e,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 503");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/misc.scala: 503");return this.h};c.$classData=g({hA:0},!1,"org.nlogo.core.prim._word",{hA:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function wH(){this.p=this.h=this.g=null;this.a=0}wH.prototype=new l;wH.prototype.constructor=wH;c=wH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_abs"};c.v=function(){return 0};
+c.o=function(a){return Dza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 10");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 10");return this.h};function Dza(a){return!!(a&&a.$classData&&a.$classData.n.UJ)}c.$classData=g({UJ:0},!1,"org.nlogo.core.prim.etc._abs",{UJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function xH(){this.p=this.h=this.g=null;this.a=0}xH.prototype=new l;xH.prototype.constructor=xH;c=xH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_acos"};c.v=function(){return 0};c.o=function(a){return Eza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 16");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 16");return this.h};function Eza(a){return!!(a&&a.$classData&&a.$classData.n.VJ)}c.$classData=g({VJ:0},!1,"org.nlogo.core.prim.etc._acos",{VJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function BH(){this.p=this.h=this.g=null;this.a=0}BH.prototype=new l;BH.prototype.constructor=BH;c=BH.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_approximatehsb"};c.v=function(){return 0};c.o=function(a){return Wza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D()),N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 17");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 17");return this.h};function Wza(a){return!!(a&&a.$classData&&a.$classData.n.YJ)}c.$classData=g({YJ:0},!1,"org.nlogo.core.prim.etc._approximatehsb",{YJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function CH(){this.p=this.h=this.g=null;this.a=0}CH.prototype=new l;CH.prototype.constructor=CH;c=CH.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_approximatergb"};c.v=function(){return 0};c.o=function(a){return Xza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),N(D()),N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 23");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 23");return this.h};function Xza(a){return!!(a&&a.$classData&&a.$classData.n.ZJ)}c.$classData=g({ZJ:0},!1,"org.nlogo.core.prim.etc._approximatergb",{ZJ:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function DH(){this.p=this.h=this.g=null;this.a=0}DH.prototype=new l;
+DH.prototype.constructor=DH;c=DH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_asin"};c.v=function(){return 0};c.o=function(a){return Fza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 33");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 33");return this.h};function Fza(a){return!!(a&&a.$classData&&a.$classData.n.$J)}c.$classData=g({$J:0},!1,"org.nlogo.core.prim.etc._asin",{$J:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function FH(){this.p=this.h=this.g=null;this.a=0}FH.prototype=new l;FH.prototype.constructor=FH;c=FH.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_atan"};c.v=function(){return 0};c.o=function(a){return Gza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 39");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 39");return this.h};function Gza(a){return!!(a&&a.$classData&&a.$classData.n.aK)}c.$classData=g({aK:0},!1,"org.nlogo.core.prim.etc._atan",{aK:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function GH(){f0.call(this)}GH.prototype=new g0;GH.prototype.constructor=GH;c=GH.prototype;
+c.b=function(){f0.prototype.nq.call(this,zj(D()),(new w).f([]));return this};c.u=function(){return"_autoplot"};c.v=function(){return 0};c.o=function(a){return sza(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function sza(a){return!!(a&&a.$classData&&a.$classData.n.bK)}c.$classData=g({bK:0},!1,"org.nlogo.core.prim.etc._autoplot",{bK:1,Er:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function KL(){d0.call(this)}KL.prototype=new e0;KL.prototype.constructor=KL;c=KL.prototype;c.b=function(){d0.prototype.G.call(this,y());return this};c.u=function(){return"_autoplotoff"};c.v=function(){return 0};c.o=function(a){return nxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function nxa(a){return!!(a&&a.$classData&&a.$classData.n.cK)}
+c.$classData=g({cK:0},!1,"org.nlogo.core.prim.etc._autoplotoff",{cK:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function LL(){d0.call(this)}LL.prototype=new e0;LL.prototype.constructor=LL;c=LL.prototype;c.b=function(){d0.prototype.G.call(this,y());return this};c.u=function(){return"_autoploton"};c.v=function(){return 0};c.o=function(a){return oxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+function oxa(a){return!!(a&&a.$classData&&a.$classData.n.dK)}c.$classData=g({dK:0},!1,"org.nlogo.core.prim.etc._autoploton",{dK:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function NH(){this.p=this.h=this.g=null;this.a=0}NH.prototype=new l;NH.prototype.constructor=NH;c=NH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_ceil"};c.v=function(){return 0};c.o=function(a){return Hza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};
+c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 82");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 82");return this.h};function Hza(a){return!!(a&&a.$classData&&a.$classData.n.oK)}c.$classData=g({oK:0},!1,"org.nlogo.core.prim.etc._ceil",{oK:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});
+function RL(){d0.call(this)}RL.prototype=new e0;RL.prototype.constructor=RL;c=RL.prototype;c.b=function(){d0.prototype.G.call(this,y());return this};c.u=function(){return"_clearallplots"};c.v=function(){return 0};c.o=function(a){return pxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function pxa(a){return!!(a&&a.$classData&&a.$classData.n.tK)}
+c.$classData=g({tK:0},!1,"org.nlogo.core.prim.etc._clearallplots",{tK:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function WL(){d0.call(this)}WL.prototype=new e0;WL.prototype.constructor=WL;c=WL.prototype;c.b=function(){d0.prototype.G.call(this,y());return this};c.u=function(){return"_clearplot"};c.v=function(){return 0};c.o=function(a){return qxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+function qxa(a){return!!(a&&a.$classData&&a.$classData.n.zK)}c.$classData=g({zK:0},!1,"org.nlogo.core.prim.etc._clearplot",{zK:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function OH(){this.p=this.h=this.g=null;this.a=0}OH.prototype=new l;OH.prototype.constructor=OH;c=OH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_cos"};c.v=function(){return 0};c.o=function(a){return Iza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};
+c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 143");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 143");return this.h};function Iza(a){return!!(a&&a.$classData&&a.$classData.n.CK)}c.$classData=g({CK:0},!1,"org.nlogo.core.prim.etc._cos",{CK:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});
+function ZL(){d0.call(this)}ZL.prototype=new e0;ZL.prototype.constructor=ZL;c=ZL.prototype;c.b=function(){d0.prototype.G.call(this,(new w).f([Aj(D())]));return this};c.u=function(){return"_createtemporaryplotpen"};c.v=function(){return 0};c.o=function(a){return rxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function rxa(a){return!!(a&&a.$classData&&a.$classData.n.DK)}
+c.$classData=g({DK:0},!1,"org.nlogo.core.prim.etc._createtemporaryplotpen",{DK:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function YG(){this.p=this.h=this.g=null;this.a=0}YG.prototype=new l;YG.prototype.constructor=YG;c=YG.prototype;c.b=function(){M(this);return this};c.u=function(){return"_div"};c.v=function(){return 0};c.o=function(a){return eAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};
+c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D());B();var b=(new w).f([N(D())]),d=B().s,b=L(b,d),d=N(D()),e=-2+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 74");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 74");return this.h};function eAa(a){return!!(a&&a.$classData&&a.$classData.n.JK)}c.$classData=g({JK:0},!1,"org.nlogo.core.prim.etc._div",{JK:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function XH(){this.p=this.h=this.g=null;this.a=0}XH.prototype=new l;
+XH.prototype.constructor=XH;c=XH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_exp"};c.v=function(){return 0};c.o=function(a){return Jza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 232");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 232");return this.h};function Jza(a){return!!(a&&a.$classData&&a.$classData.n.RK)}c.$classData=g({RK:0},!1,"org.nlogo.core.prim.etc._exp",{RK:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function kM(){d0.call(this)}kM.prototype=new e0;kM.prototype.constructor=kM;c=kM.prototype;
+c.b=function(){d0.prototype.G.call(this,(new w).f([Aj(D()),Aj(D())]));return this};c.u=function(){return"_exportplot"};c.v=function(){return 0};c.o=function(a){return jya(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function jya(a){return!!(a&&a.$classData&&a.$classData.n.WK)}c.$classData=g({WK:0},!1,"org.nlogo.core.prim.etc._exportplot",{WK:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function hM(){d0.call(this)}hM.prototype=new e0;hM.prototype.constructor=hM;c=hM.prototype;c.b=function(){d0.prototype.G.call(this,(new w).f([Aj(D())]));return this};c.u=function(){return"_exportplots"};c.v=function(){return 0};c.o=function(a){return kya(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function kya(a){return!!(a&&a.$classData&&a.$classData.n.XK)}
+c.$classData=g({XK:0},!1,"org.nlogo.core.prim.etc._exportplots",{XK:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function gI(){this.p=this.h=this.g=null;this.a=0}gI.prototype=new l;gI.prototype.constructor=gI;c=gI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_floor"};c.v=function(){return 0};c.o=function(a){return Kza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};
+c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 335");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 335");return this.h};function Kza(a){return!!(a&&a.$classData&&a.$classData.n.sL)}c.$classData=g({sL:0},!1,"org.nlogo.core.prim.etc._floor",{sL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function hI(){this.p=this.h=this.g=null;this.a=0}hI.prototype=new l;
+hI.prototype.constructor=hI;c=hI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_fput"};c.v=function(){return 0};c.o=function(a){return Rya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([kc(),Bj(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 358");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 358");return this.h};function Rya(a){return!!(a&&a.$classData&&a.$classData.n.wL)}c.$classData=g({wL:0},!1,"org.nlogo.core.prim.etc._fput",{wL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function eH(){this.p=this.h=this.g=null;this.a=0}eH.prototype=new l;eH.prototype.constructor=eH;c=eH.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_greaterorequal"};c.v=function(){return 0};c.o=function(a){return BAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=N(D())|Aj(D())|xj(D());B();var b=(new w).f([N(D())|Aj(D())|xj(D())]),d=B().s,b=L(b,d),d=zj(D()),e=-4+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 138");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 138");return this.h};function BAa(a){return!!(a&&a.$classData&&a.$classData.n.xL)}c.$classData=g({xL:0},!1,"org.nlogo.core.prim.etc._greaterorequal",{xL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function EM(){d0.call(this)}EM.prototype=new e0;
+EM.prototype.constructor=EM;c=EM.prototype;c.b=function(){d0.prototype.G.call(this,(new w).f([Bj(D())]));return this};c.u=function(){return"_histogram"};c.v=function(){return 0};c.o=function(a){return sxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function sxa(a){return!!(a&&a.$classData&&a.$classData.n.zL)}
+c.$classData=g({zL:0},!1,"org.nlogo.core.prim.etc._histogram",{zL:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function qI(){this.p=this.h=this.g=null;this.a=0}qI.prototype=new l;qI.prototype.constructor=qI;c=qI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_ifelsevalue"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.JA)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};
+c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([zj(D()),Mj(D()),Mj(D())]),b=B().s,a=L(a,b),b=kc(),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 392");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 392");return this.h};c.$classData=g({JA:0},!1,"org.nlogo.core.prim.etc._ifelsevalue",{JA:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function tI(){this.p=this.h=this.g=null;this.a=0}tI.prototype=new l;
+tI.prototype.constructor=tI;c=tI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_insertitem"};c.v=function(){return 0};c.o=function(a){return Sya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),Bj(D())|Aj(D()),kc()]),b=B().s,a=L(a,b),b=Bj(D())|Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 412");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 412");return this.h};function Sya(a){return!!(a&&a.$classData&&a.$classData.n.HL)}c.$classData=g({HL:0},!1,"org.nlogo.core.prim.etc._insertitem",{HL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function uI(){this.p=this.h=this.g=null;this.a=0}
+uI.prototype=new l;uI.prototype.constructor=uI;c=uI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_int"};c.v=function(){return 0};c.o=function(a){return Lza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 423");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 423");return this.h};function Lza(a){return!!(a&&a.$classData&&a.$classData.n.JL)}c.$classData=g({JL:0},!1,"org.nlogo.core.prim.etc._int",{JL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function vI(){this.p=this.h=this.g=null;this.a=0}vI.prototype=new l;vI.prototype.constructor=vI;c=vI.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_isagent"};c.v=function(){return 0};c.o=function(a){return lBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 429");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 429");return this.h};function lBa(a){return!!(a&&a.$classData&&a.$classData.n.KL)}c.$classData=g({KL:0},!1,"org.nlogo.core.prim.etc._isagent",{KL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function wI(){this.p=this.h=this.g=null;this.a=0}wI.prototype=new l;wI.prototype.constructor=wI;c=wI.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_isagentset"};c.v=function(){return 0};c.o=function(a){return mBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 435");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 435");return this.h};function mBa(a){return!!(a&&a.$classData&&a.$classData.n.LL)}c.$classData=g({LL:0},!1,"org.nlogo.core.prim.etc._isagentset",{LL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function xI(){this.p=this.h=this.g=null;this.a=0}xI.prototype=new l;xI.prototype.constructor=xI;c=xI.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_isanonymouscommand"};c.v=function(){return 0};c.o=function(a){return nBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 447");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 447");return this.h};function nBa(a){return!!(a&&a.$classData&&a.$classData.n.ML)}c.$classData=g({ML:0},!1,"org.nlogo.core.prim.etc._isanonymouscommand",{ML:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function yI(){this.p=this.h=this.g=null;this.a=0}yI.prototype=new l;
+yI.prototype.constructor=yI;c=yI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_isanonymousreporter"};c.v=function(){return 0};c.o=function(a){return oBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 495");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 495");return this.h};function oBa(a){return!!(a&&a.$classData&&a.$classData.n.NL)}c.$classData=g({NL:0},!1,"org.nlogo.core.prim.etc._isanonymousreporter",{NL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function zI(){this.p=this.h=this.g=null;this.a=0}zI.prototype=new l;
+zI.prototype.constructor=zI;c=zI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_isboolean"};c.v=function(){return 0};c.o=function(a){return pBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 441");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 441");return this.h};function pBa(a){return!!(a&&a.$classData&&a.$classData.n.OL)}c.$classData=g({OL:0},!1,"org.nlogo.core.prim.etc._isboolean",{OL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function AI(){this.p=this.h=this.g=null;this.a=0}AI.prototype=new l;AI.prototype.constructor=AI;
+c=AI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_isdirectedlink"};c.v=function(){return 0};c.o=function(a){return rBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 453");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 453");return this.h};function rBa(a){return!!(a&&a.$classData&&a.$classData.n.QL)}c.$classData=g({QL:0},!1,"org.nlogo.core.prim.etc._isdirectedlink",{QL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function CI(){this.p=this.h=this.g=null;this.a=0}CI.prototype=new l;
+CI.prototype.constructor=CI;c=CI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_islink"};c.v=function(){return 0};c.o=function(a){return sBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 459");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 459");return this.h};function sBa(a){return!!(a&&a.$classData&&a.$classData.n.RL)}c.$classData=g({RL:0},!1,"org.nlogo.core.prim.etc._islink",{RL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function BI(){this.p=this.h=this.g=null;this.a=0}BI.prototype=new l;BI.prototype.constructor=BI;c=BI.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_islinkset"};c.v=function(){return 0};c.o=function(a){return tBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 465");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 465");return this.h};function tBa(a){return!!(a&&a.$classData&&a.$classData.n.SL)}c.$classData=g({SL:0},!1,"org.nlogo.core.prim.etc._islinkset",{SL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function DI(){this.p=this.h=this.g=null;this.a=0}DI.prototype=new l;DI.prototype.constructor=DI;c=DI.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_islist"};c.v=function(){return 0};c.o=function(a){return uBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 471");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 471");return this.h};function uBa(a){return!!(a&&a.$classData&&a.$classData.n.TL)}c.$classData=g({TL:0},!1,"org.nlogo.core.prim.etc._islist",{TL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function EI(){this.p=this.h=this.g=null;this.a=0}EI.prototype=new l;EI.prototype.constructor=EI;c=EI.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_isnumber"};c.v=function(){return 0};c.o=function(a){return vBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 477");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 477");return this.h};function vBa(a){return!!(a&&a.$classData&&a.$classData.n.UL)}c.$classData=g({UL:0},!1,"org.nlogo.core.prim.etc._isnumber",{UL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function GI(){this.p=this.h=this.g=null;this.a=0}GI.prototype=new l;GI.prototype.constructor=GI;c=GI.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_ispatch"};c.v=function(){return 0};c.o=function(a){return wBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 483");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 483");return this.h};function wBa(a){return!!(a&&a.$classData&&a.$classData.n.VL)}c.$classData=g({VL:0},!1,"org.nlogo.core.prim.etc._ispatch",{VL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function FI(){this.p=this.h=this.g=null;this.a=0}FI.prototype=new l;FI.prototype.constructor=FI;c=FI.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_ispatchset"};c.v=function(){return 0};c.o=function(a){return xBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 489");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 489");return this.h};function xBa(a){return!!(a&&a.$classData&&a.$classData.n.WL)}c.$classData=g({WL:0},!1,"org.nlogo.core.prim.etc._ispatchset",{WL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function HI(){this.p=this.h=this.g=null;this.a=0}HI.prototype=new l;HI.prototype.constructor=HI;c=HI.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_isstring"};c.v=function(){return 0};c.o=function(a){return yBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 501");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 501");return this.h};function yBa(a){return!!(a&&a.$classData&&a.$classData.n.XL)}c.$classData=g({XL:0},!1,"org.nlogo.core.prim.etc._isstring",{XL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function JI(){this.p=this.h=this.g=null;this.a=0}JI.prototype=new l;JI.prototype.constructor=JI;c=JI.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_isturtle"};c.v=function(){return 0};c.o=function(a){return zBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 507");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 507");return this.h};function zBa(a){return!!(a&&a.$classData&&a.$classData.n.YL)}c.$classData=g({YL:0},!1,"org.nlogo.core.prim.etc._isturtle",{YL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function II(){this.p=this.h=this.g=null;this.a=0}II.prototype=new l;II.prototype.constructor=II;c=II.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_isturtleset"};c.v=function(){return 0};c.o=function(a){return ABa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 513");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 513");return this.h};function ABa(a){return!!(a&&a.$classData&&a.$classData.n.ZL)}c.$classData=g({ZL:0},!1,"org.nlogo.core.prim.etc._isturtleset",{ZL:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function KI(){this.p=this.h=this.g=null;this.a=0}KI.prototype=new l;KI.prototype.constructor=KI;
+c=KI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_isundirectedlink"};c.v=function(){return 0};c.o=function(a){return BBa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=zj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 519");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 519");return this.h};function BBa(a){return!!(a&&a.$classData&&a.$classData.n.$L)}c.$classData=g({$L:0},!1,"org.nlogo.core.prim.etc._isundirectedlink",{$L:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function NI(){this.p=this.h=this.g=null;this.a=0}NI.prototype=new l;
+NI.prototype.constructor=NI;c=NI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_length"};c.v=function(){return 0};c.o=function(a){return Vya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Bj(D())|Aj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 212");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 212");return this.h};function Vya(a){return!!(a&&a.$classData&&a.$classData.n.gM)}c.$classData=g({gM:0},!1,"org.nlogo.core.prim.etc._length",{gM:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function $G(){this.p=this.h=this.g=null;this.a=0}$G.prototype=new l;$G.prototype.constructor=$G;
+c=$G.prototype;c.b=function(){M(this);return this};c.u=function(){return"_lessorequal"};c.v=function(){return 0};c.o=function(a){return CAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=N(D())|Aj(D())|xj(D());B();var b=(new w).f([N(D())|Aj(D())|xj(D())]),d=B().s,b=L(b,d),d=zj(D()),e=-4+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 218");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 218");return this.h};function CAa(a){return!!(a&&a.$classData&&a.$classData.n.hM)}c.$classData=g({hM:0},!1,"org.nlogo.core.prim.etc._lessorequal",{hM:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function VI(){this.p=this.h=this.g=null;this.a=0}
+VI.prototype=new l;VI.prototype.constructor=VI;c=VI.prototype;c.b=function(){M(this);return this};c.u=function(){return"_ln"};c.v=function(){return 0};c.o=function(a){return Mza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 241");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 241");return this.h};function Mza(a){return!!(a&&a.$classData&&a.$classData.n.pM)}c.$classData=g({pM:0},!1,"org.nlogo.core.prim.etc._ln",{pM:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function WI(){this.p=this.h=this.g=null;this.a=0}WI.prototype=new l;WI.prototype.constructor=WI;c=WI.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_log"};c.v=function(){return 0};c.o=function(a){return Nza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 247");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 247");return this.h};function Nza(a){return!!(a&&a.$classData&&a.$classData.n.qM)}c.$classData=g({qM:0},!1,"org.nlogo.core.prim.etc._log",{qM:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function XI(){this.p=this.h=this.g=null;this.a=0}XI.prototype=new l;XI.prototype.constructor=XI;c=XI.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_lput"};c.v=function(){return 0};c.o=function(a){return Wya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([kc(),Bj(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 564");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 564");return this.h};function Wya(a){return!!(a&&a.$classData&&a.$classData.n.rM)}c.$classData=g({rM:0},!1,"org.nlogo.core.prim.etc._lput",{rM:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function ZI(){this.p=this.h=this.g=null;this.a=0}ZI.prototype=new l;ZI.prototype.constructor=ZI;c=ZI.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_max"};c.v=function(){return 0};c.o=function(a){return Xya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 253");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 253");return this.h};function Xya(a){return!!(a&&a.$classData&&a.$classData.n.tM)}c.$classData=g({tM:0},!1,"org.nlogo.core.prim.etc._max",{tM:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function dJ(){this.p=this.h=this.g=null;this.a=0}dJ.prototype=new l;dJ.prototype.constructor=dJ;c=dJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_mean"};c.v=function(){return 0};c.o=function(a){return Yya(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 275");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 275");return this.h};function Yya(a){return!!(a&&a.$classData&&a.$classData.n.wM)}c.$classData=g({wM:0},!1,"org.nlogo.core.prim.etc._mean",{wM:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function gJ(){this.p=this.h=this.g=null;this.a=0}gJ.prototype=new l;gJ.prototype.constructor=gJ;c=gJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_min"};c.v=function(){return 0};c.o=function(a){return aza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 293");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 293");return this.h};function aza(a){return!!(a&&a.$classData&&a.$classData.n.zM)}c.$classData=g({zM:0},!1,"org.nlogo.core.prim.etc._min",{zM:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function lJ(){this.p=this.h=this.g=null;this.a=0}lJ.prototype=new l;lJ.prototype.constructor=lJ;c=lJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_mod"};c.v=function(){return 0};c.o=function(a){return Oza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D());B();var b=(new w).f([N(D())]),d=B().s,b=L(b,d),d=N(D()),e=-2+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 315");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 315");return this.h};function Oza(a){return!!(a&&a.$classData&&a.$classData.n.DM)}c.$classData=g({DM:0},!1,"org.nlogo.core.prim.etc._mod",{DM:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function mJ(){this.p=this.h=this.g=null;this.a=0}mJ.prototype=new l;mJ.prototype.constructor=mJ;c=mJ.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_modes"};c.v=function(){return 0};c.o=function(a){return bza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 323");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 323");return this.h};function bza(a){return!!(a&&a.$classData&&a.$classData.n.EM)}c.$classData=g({EM:0},!1,"org.nlogo.core.prim.etc._modes",{EM:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function VG(){this.p=this.h=this.g=null;this.a=0}VG.prototype=new l;VG.prototype.constructor=VG;c=VG.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_mult"};c.v=function(){return 0};c.o=function(a){return Iwa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D());B();var b=(new w).f([N(D())]),d=B().s,b=L(b,d),d=N(D()),e=-2+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 622");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 622");return this.h};function Iwa(a){return!!(a&&a.$classData&&a.$classData.n.KM)}c.$classData=g({KM:0},!1,"org.nlogo.core.prim.etc._mult",{KM:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function lN(){b0.call(this)}lN.prototype=new c0;lN.prototype.constructor=lN;c=lN.prototype;c.b=function(){M(this);return this};c.u=function(){return"_outputprint"};
+c.v=function(){return 0};c.o=function(a){return Swa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Swa(a){return!!(a&&a.$classData&&a.$classData.n.YM)}c.$classData=g({YM:0},!1,"org.nlogo.core.prim.etc._outputprint",{YM:1,ut:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function mN(){b0.call(this)}mN.prototype=new c0;mN.prototype.constructor=mN;c=mN.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_outputshow"};c.v=function(){return 0};c.o=function(a){return Twa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Twa(a){return!!(a&&a.$classData&&a.$classData.n.ZM)}c.$classData=g({ZM:0},!1,"org.nlogo.core.prim.etc._outputshow",{ZM:1,ut:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function nN(){b0.call(this)}nN.prototype=new c0;nN.prototype.constructor=nN;c=nN.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_outputtype"};c.v=function(){return 0};c.o=function(a){return Uwa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Uwa(a){return!!(a&&a.$classData&&a.$classData.n.$M)}c.$classData=g({$M:0},!1,"org.nlogo.core.prim.etc._outputtype",{$M:1,ut:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function oN(){h0.call(this)}oN.prototype=new Ata;
+oN.prototype.constructor=oN;c=oN.prototype;c.b=function(){M(this);return this};c.u=function(){return"_outputwrite"};c.v=function(){return 0};c.o=function(a){return Vwa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Vwa(a){return!!(a&&a.$classData&&a.$classData.n.aN)}c.$classData=g({aN:0},!1,"org.nlogo.core.prim.etc._outputwrite",{aN:1,J0:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function sN(){d0.call(this)}sN.prototype=new e0;sN.prototype.constructor=sN;c=sN.prototype;c.b=function(){d0.prototype.G.call(this,(new w).f([N(D())]));return this};c.u=function(){return"_plot"};c.v=function(){return 0};c.o=function(a){return wxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function wxa(a){return!!(a&&a.$classData&&a.$classData.n.nN)}
+c.$classData=g({nN:0},!1,"org.nlogo.core.prim.etc._plot",{nN:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function TJ(){f0.call(this)}TJ.prototype=new g0;TJ.prototype.constructor=TJ;c=TJ.prototype;c.b=function(){f0.prototype.nq.call(this,Aj(D()),(new w).f([]));return this};c.u=function(){return"_plotname"};c.v=function(){return 0};c.o=function(a){return tza(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};function tza(a){return!!(a&&a.$classData&&a.$classData.n.oN)}c.$classData=g({oN:0},!1,"org.nlogo.core.prim.etc._plotname",{oN:1,Er:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function tN(){d0.call(this)}tN.prototype=new e0;tN.prototype.constructor=tN;c=tN.prototype;c.b=function(){d0.prototype.G.call(this,y());return this};c.u=function(){return"_plotpendown"};c.v=function(){return 0};c.o=function(a){return txa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};
+c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function txa(a){return!!(a&&a.$classData&&a.$classData.n.pN)}c.$classData=g({pN:0},!1,"org.nlogo.core.prim.etc._plotpendown",{pN:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function UJ(){f0.call(this)}UJ.prototype=new g0;UJ.prototype.constructor=UJ;c=UJ.prototype;c.b=function(){f0.prototype.nq.call(this,zj(D()),(new w).f([Aj(D())]));return this};c.u=function(){return"_plotpenexists"};c.v=function(){return 0};
+c.o=function(a){return uza(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function uza(a){return!!(a&&a.$classData&&a.$classData.n.qN)}c.$classData=g({qN:0},!1,"org.nlogo.core.prim.etc._plotpenexists",{qN:1,Er:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function zL(){d0.call(this)}zL.prototype=new e0;zL.prototype.constructor=zL;c=zL.prototype;c.b=function(){d0.prototype.G.call(this,y());return this};
+c.u=function(){return"_plotpenhide"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.rN)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.$classData=g({rN:0},!1,"org.nlogo.core.prim.etc._plotpenhide",{rN:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function uN(){d0.call(this)}uN.prototype=new e0;uN.prototype.constructor=uN;c=uN.prototype;
+c.b=function(){d0.prototype.G.call(this,y());return this};c.u=function(){return"_plotpenreset"};c.v=function(){return 0};c.o=function(a){return uxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function uxa(a){return!!(a&&a.$classData&&a.$classData.n.sN)}c.$classData=g({sN:0},!1,"org.nlogo.core.prim.etc._plotpenreset",{sN:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function AL(){d0.call(this)}AL.prototype=new e0;AL.prototype.constructor=AL;c=AL.prototype;c.b=function(){d0.prototype.G.call(this,y());return this};c.u=function(){return"_plotpenshow"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.tN)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.$classData=g({tN:0},!1,"org.nlogo.core.prim.etc._plotpenshow",{tN:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function vN(){d0.call(this)}vN.prototype=new e0;vN.prototype.constructor=vN;c=vN.prototype;c.b=function(){d0.prototype.G.call(this,y());return this};c.u=function(){return"_plotpenup"};c.v=function(){return 0};c.o=function(a){return vxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+function vxa(a){return!!(a&&a.$classData&&a.$classData.n.uN)}c.$classData=g({uN:0},!1,"org.nlogo.core.prim.etc._plotpenup",{uN:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function VJ(){f0.call(this)}VJ.prototype=new g0;VJ.prototype.constructor=VJ;c=VJ.prototype;c.b=function(){f0.prototype.nq.call(this,N(D()),(new w).f([]));return this};c.u=function(){return"_plotxmax"};c.v=function(){return 0};c.o=function(a){return vza(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function vza(a){return!!(a&&a.$classData&&a.$classData.n.vN)}c.$classData=g({vN:0},!1,"org.nlogo.core.prim.etc._plotxmax",{vN:1,Er:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function WJ(){f0.call(this)}WJ.prototype=new g0;WJ.prototype.constructor=WJ;c=WJ.prototype;c.b=function(){f0.prototype.nq.call(this,N(D()),(new w).f([]));return this};c.u=function(){return"_plotxmin"};c.v=function(){return 0};c.o=function(a){return wza(a)&&!0};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function wza(a){return!!(a&&a.$classData&&a.$classData.n.wN)}c.$classData=g({wN:0},!1,"org.nlogo.core.prim.etc._plotxmin",{wN:1,Er:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function wN(){d0.call(this)}wN.prototype=new e0;wN.prototype.constructor=wN;c=wN.prototype;c.b=function(){d0.prototype.G.call(this,(new w).f([N(D()),N(D())]));return this};c.u=function(){return"_plotxy"};
+c.v=function(){return 0};c.o=function(a){return xxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function xxa(a){return!!(a&&a.$classData&&a.$classData.n.xN)}c.$classData=g({xN:0},!1,"org.nlogo.core.prim.etc._plotxy",{xN:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function XJ(){f0.call(this)}XJ.prototype=new g0;XJ.prototype.constructor=XJ;c=XJ.prototype;
+c.b=function(){f0.prototype.nq.call(this,N(D()),(new w).f([]));return this};c.u=function(){return"_plotymax"};c.v=function(){return 0};c.o=function(a){return xza(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function xza(a){return!!(a&&a.$classData&&a.$classData.n.yN)}c.$classData=g({yN:0},!1,"org.nlogo.core.prim.etc._plotymax",{yN:1,Er:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function YJ(){f0.call(this)}YJ.prototype=new g0;YJ.prototype.constructor=YJ;c=YJ.prototype;c.b=function(){f0.prototype.nq.call(this,N(D()),(new w).f([]));return this};c.u=function(){return"_plotymin"};c.v=function(){return 0};c.o=function(a){return yza(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function yza(a){return!!(a&&a.$classData&&a.$classData.n.zN)}
+c.$classData=g({zN:0},!1,"org.nlogo.core.prim.etc._plotymin",{zN:1,Er:1,d:1,ca:1,A:1,E:1,t:1,q:1,l:1,i:1});function WG(){this.p=this.h=this.g=null;this.a=0}WG.prototype=new l;WG.prototype.constructor=WG;c=WG.prototype;c.b=function(){M(this);return this};c.u=function(){return"_plus"};c.v=function(){return 0};c.o=function(a){return Hwa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};
+c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){var a=N(D());B();var b=(new w).f([N(D())]),d=B().s,b=L(b,d),d=N(D()),e=-3+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 738");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};
+c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 738");return this.h};function Hwa(a){return!!(a&&a.$classData&&a.$classData.n.AN)}c.$classData=g({AN:0},!1,"org.nlogo.core.prim.etc._plus",{AN:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function fH(){this.p=this.h=this.g=null;this.a=0}fH.prototype=new l;
+fH.prototype.constructor=fH;c=fH.prototype;c.b=function(){M(this);return this};c.u=function(){return"_pow"};c.v=function(){return 0};c.o=function(a){return Pza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){var a=N(D());B();var b=(new w).f([N(D())]),d=B().s,b=L(b,d),d=N(D()),e=-1+C()|0;D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,e,a,b,d,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 746");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 746");return this.h};function Pza(a){return!!(a&&a.$classData&&a.$classData.n.CN)}c.$classData=g({CN:0},!1,"org.nlogo.core.prim.etc._pow",{CN:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function $J(){this.p=this.h=this.g=null;this.a=0}$J.prototype=new l;$J.prototype.constructor=$J;c=$J.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_precision"};c.v=function(){return 0};c.o=function(a){return Qza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 754");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 754");return this.h};function Qza(a){return!!(a&&a.$classData&&a.$classData.n.DN)}c.$classData=g({DN:0},!1,"org.nlogo.core.prim.etc._precision",{DN:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function xN(){b0.call(this)}xN.prototype=new c0;xN.prototype.constructor=xN;c=xN.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_print"};c.v=function(){return 0};c.o=function(a){return Nwa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Nwa(a){return!!(a&&a.$classData&&a.$classData.n.EN)}c.$classData=g({EN:0},!1,"org.nlogo.core.prim.etc._print",{EN:1,ut:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function kK(){this.p=this.h=this.g=null;this.a=0}kK.prototype=new l;
+kK.prototype.constructor=kK;c=kK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_range"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.fB)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D())|uj()]),b=B().s,a=L(a,b),b=jd().Wc(1),d=jd().Wc(1),e=Bj(D()),f=C();D();var h=mc();D();D();D();var k=F();D();return G(new H,f,h,a,e,b,d,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 824");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 824");return this.h};c.$classData=g({fB:0},!1,"org.nlogo.core.prim.etc._range",{fB:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function nK(){this.p=this.h=this.g=null;this.a=0}nK.prototype=new l;nK.prototype.constructor=nK;c=nK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_remainder"};
+c.v=function(){return 0};c.o=function(a){return Jwa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 387");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 387");return this.h};function Jwa(a){return!!(a&&a.$classData&&a.$classData.n.VN)}c.$classData=g({VN:0},!1,"org.nlogo.core.prim.etc._remainder",{VN:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function uK(){this.p=this.h=this.g=null;this.a=0}uK.prototype=new l;uK.prototype.constructor=uK;c=uK.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_round"};c.v=function(){return 0};c.o=function(a){return Rza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 880");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 880");return this.h};function Rza(a){return!!(a&&a.$classData&&a.$classData.n.iO)}c.$classData=g({iO:0},!1,"org.nlogo.core.prim.etc._round",{iO:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function wK(){this.p=this.h=this.g=null;this.a=0}wK.prototype=new l;wK.prototype.constructor=wK;c=wK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_scalecolor"};c.v=function(){return 0};c.o=function(a){return bAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D()),N(D()),N(D()),N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 441");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 441");return this.h};function bAa(a){return!!(a&&a.$classData&&a.$classData.n.jO)}c.$classData=g({jO:0},!1,"org.nlogo.core.prim.etc._scalecolor",{jO:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function LN(){d0.call(this)}LN.prototype=new e0;LN.prototype.constructor=LN;c=LN.prototype;
+c.b=function(){d0.prototype.G.call(this,(new w).f([Aj(D())]));return this};c.u=function(){return"_setcurrentplot"};c.v=function(){return 0};c.o=function(a){return zxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function zxa(a){return!!(a&&a.$classData&&a.$classData.n.mO)}c.$classData=g({mO:0},!1,"org.nlogo.core.prim.etc._setcurrentplot",{mO:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function MN(){d0.call(this)}MN.prototype=new e0;MN.prototype.constructor=MN;c=MN.prototype;c.b=function(){d0.prototype.G.call(this,(new w).f([Aj(D())]));return this};c.u=function(){return"_setcurrentplotpen"};c.v=function(){return 0};c.o=function(a){return yxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function yxa(a){return!!(a&&a.$classData&&a.$classData.n.nO)}
+c.$classData=g({nO:0},!1,"org.nlogo.core.prim.etc._setcurrentplotpen",{nO:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function ON(){d0.call(this)}ON.prototype=new e0;ON.prototype.constructor=ON;c=ON.prototype;c.b=function(){d0.prototype.G.call(this,(new w).f([N(D())]));return this};c.u=function(){return"_sethistogramnumbars"};c.v=function(){return 0};c.o=function(a){return Axa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};function Axa(a){return!!(a&&a.$classData&&a.$classData.n.oO)}c.$classData=g({oO:0},!1,"org.nlogo.core.prim.etc._sethistogramnumbars",{oO:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function QN(){d0.call(this)}QN.prototype=new e0;QN.prototype.constructor=QN;c=QN.prototype;c.b=function(){d0.prototype.G.call(this,(new w).f([N(D())|Bj(D())]));return this};c.u=function(){return"_setplotpencolor"};c.v=function(){return 0};c.o=function(a){return Bxa(a)&&!0};
+c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Bxa(a){return!!(a&&a.$classData&&a.$classData.n.rO)}c.$classData=g({rO:0},!1,"org.nlogo.core.prim.etc._setplotpencolor",{rO:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function RN(){d0.call(this)}RN.prototype=new e0;RN.prototype.constructor=RN;c=RN.prototype;c.b=function(){d0.prototype.G.call(this,(new w).f([N(D())]));return this};c.u=function(){return"_setplotpeninterval"};
+c.v=function(){return 0};c.o=function(a){return Cxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Cxa(a){return!!(a&&a.$classData&&a.$classData.n.sO)}c.$classData=g({sO:0},!1,"org.nlogo.core.prim.etc._setplotpeninterval",{sO:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function SN(){d0.call(this)}SN.prototype=new e0;SN.prototype.constructor=SN;c=SN.prototype;
+c.b=function(){d0.prototype.G.call(this,(new w).f([N(D())]));return this};c.u=function(){return"_setplotpenmode"};c.v=function(){return 0};c.o=function(a){return Dxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Dxa(a){return!!(a&&a.$classData&&a.$classData.n.tO)}c.$classData=g({tO:0},!1,"org.nlogo.core.prim.etc._setplotpenmode",{tO:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function VN(){d0.call(this)}VN.prototype=new e0;VN.prototype.constructor=VN;c=VN.prototype;c.b=function(){d0.prototype.G.call(this,y());return this};c.u=function(){return"_setupplots"};c.v=function(){return 0};c.o=function(a){return Gxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Gxa(a){return!!(a&&a.$classData&&a.$classData.n.wO)}
+c.$classData=g({wO:0},!1,"org.nlogo.core.prim.etc._setupplots",{wO:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function XN(){b0.call(this)}XN.prototype=new c0;XN.prototype.constructor=XN;c=XN.prototype;c.b=function(){M(this);return this};c.u=function(){return"_show"};c.v=function(){return 0};c.o=function(a){return Owa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+function Owa(a){return!!(a&&a.$classData&&a.$classData.n.AO)}c.$classData=g({AO:0},!1,"org.nlogo.core.prim.etc._show",{AO:1,ut:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function CK(){this.p=this.h=this.g=null;this.a=0}CK.prototype=new l;CK.prototype.constructor=CK;c=CK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_sin"};c.v=function(){return 0};c.o=function(a){return Sza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};
+c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 936");return this.g};
+c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 936");return this.h};function Sza(a){return!!(a&&a.$classData&&a.$classData.n.DO)}c.$classData=g({DO:0},!1,"org.nlogo.core.prim.etc._sin",{DO:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});
+function DK(){this.p=this.h=this.g=null;this.a=0}DK.prototype=new l;DK.prototype.constructor=DK;c=DK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_sort"};c.v=function(){return 0};c.o=function(a){return kza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Bj(D())|Cj(D())]),b=B().s,a=L(a,b),b=Bj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 471");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 471");return this.h};function kza(a){return!!(a&&a.$classData&&a.$classData.n.EO)}c.$classData=g({EO:0},!1,"org.nlogo.core.prim.etc._sort",{EO:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function GK(){this.p=this.h=this.g=null;this.a=0}GK.prototype=new l;GK.prototype.constructor=GK;c=GK.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_sqrt"};c.v=function(){return 0};c.o=function(a){return Tza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 477");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 477");return this.h};function Tza(a){return!!(a&&a.$classData&&a.$classData.n.GO)}c.$classData=g({GO:0},!1,"org.nlogo.core.prim.etc._sqrt",{GO:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function HK(){this.p=this.h=this.g=null;this.a=0}HK.prototype=new l;HK.prototype.constructor=HK;c=HK.prototype;c.b=function(){M(this);return this};
+c.u=function(){return"_standarddeviation"};c.v=function(){return 0};c.o=function(a){return mza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};c.H=function(){B();var a=(new w).f([Bj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 483");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 483");return this.h};function mza(a){return!!(a&&a.$classData&&a.$classData.n.KO)}c.$classData=g({KO:0},!1,"org.nlogo.core.prim.etc._standarddeviation",{KO:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function LK(){this.p=this.h=this.g=null;this.a=0}LK.prototype=new l;LK.prototype.constructor=LK;c=LK.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_subtractheadings"};c.v=function(){return 0};c.o=function(a){return Uza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D()),N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 995");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 995");return this.h};function Uza(a){return!!(a&&a.$classData&&a.$classData.n.SO)}c.$classData=g({SO:0},!1,"org.nlogo.core.prim.etc._subtractheadings",{SO:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function NK(){this.p=this.h=this.g=null;this.a=0}NK.prototype=new l;
+NK.prototype.constructor=NK;c=NK.prototype;c.b=function(){M(this);return this};c.u=function(){return"_tan"};c.v=function(){return 0};c.o=function(a){return Vza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1007");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1007");return this.h};function Vza(a){return!!(a&&a.$classData&&a.$classData.n.UO)}c.$classData=g({UO:0},!1,"org.nlogo.core.prim.etc._tan",{UO:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function vH(){this.p=this.h=this.g=null;this.a=0}vH.prototype=new l;vH.prototype.constructor=vH;c=vH.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_tostring"};c.v=function(){return 0};c.o=function(a){return!!(a&&a.$classData&&a.$classData.n.aP)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([kc()]),b=B().s,a=L(a,b),b=Aj(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1038");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1038");return this.h};c.$classData=g({aP:0},!1,"org.nlogo.core.prim.etc._tostring",{aP:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function hO(){b0.call(this)}hO.prototype=new c0;hO.prototype.constructor=hO;c=hO.prototype;c.b=function(){M(this);return this};c.u=function(){return"_type"};
+c.v=function(){return 0};c.o=function(a){return Pwa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Pwa(a){return!!(a&&a.$classData&&a.$classData.n.iP)}c.$classData=g({iP:0},!1,"org.nlogo.core.prim.etc._type",{iP:1,ut:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function jO(){d0.call(this)}jO.prototype=new e0;jO.prototype.constructor=jO;c=jO.prototype;
+c.b=function(){d0.prototype.G.call(this,y());return this};c.u=function(){return"_updateplots"};c.v=function(){return 0};c.o=function(a){return Hxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Hxa(a){return!!(a&&a.$classData&&a.$classData.n.kP)}c.$classData=g({kP:0},!1,"org.nlogo.core.prim.etc._updateplots",{kP:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});
+function dL(){this.p=this.h=this.g=null;this.a=0}dL.prototype=new l;dL.prototype.constructor=dL;c=dL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_variance"};c.v=function(){return 0};c.o=function(a){return pza(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([Bj(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 547");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/java.scala: 547");return this.h};function pza(a){return!!(a&&a.$classData&&a.$classData.n.sP)}c.$classData=g({sP:0},!1,"org.nlogo.core.prim.etc._variance",{sP:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function kL(){this.p=this.h=this.g=null;this.a=0}kL.prototype=new l;kL.prototype.constructor=kL;
+c=kL.prototype;c.b=function(){M(this);return this};c.u=function(){return"_wrapcolor"};c.v=function(){return 0};c.o=function(a){return dAa(a)&&!0};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.H=function(){B();var a=(new w).f([N(D())]),b=B().s,a=L(a,b),b=N(D()),d=C();D();var e=mc();D();var f=F();D();var h=F();D();D();D();var k=F();D();return G(new H,d,e,a,b,f,h,!1,"OTPL",k,k.ba(),!0)};c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1131");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/etc.scala: 1131");return this.h};function dAa(a){return!!(a&&a.$classData&&a.$classData.n.zP)}c.$classData=g({zP:0},!1,"org.nlogo.core.prim.etc._wrapcolor",{zP:1,d:1,ca:1,A:1,E:1,xb:1,t:1,q:1,l:1,i:1});function tO(){h0.call(this)}tO.prototype=new Ata;tO.prototype.constructor=tO;c=tO.prototype;
+c.b=function(){M(this);return this};c.u=function(){return"_write"};c.v=function(){return 0};c.o=function(a){return Qwa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Qwa(a){return!!(a&&a.$classData&&a.$classData.n.AP)}c.$classData=g({AP:0},!1,"org.nlogo.core.prim.etc._write",{AP:1,J0:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function gA(){}gA.prototype=new MBa;gA.prototype.constructor=gA;
+gA.prototype.b=function(){return this};gA.prototype.$classData=g({A8:0},!1,"scalaz.EitherT$",{A8:1,ska:1,tka:1,uka:1,vka:1,wka:1,xka:1,d:1,l:1,i:1});var Zia=void 0;function l7(){}l7.prototype=new KCa;l7.prototype.constructor=l7;l7.prototype.b=function(){var a=new m7;Ad(a);Ky(a);tS(a);uS(a);vS(a);wS(a);YR(a);oY(a);zS(a);return this};l7.prototype.$classData=g({Q8:0},!1,"scalaz.Free$",{Q8:1,Bka:1,Cka:1,Dka:1,Eka:1,Fka:1,d:1,Kla:1,Ala:1,Bla:1});var QZa=void 0;function X0(){QZa||(QZa=(new l7).b())}
+function n7(){}n7.prototype=new LCa;n7.prototype.constructor=n7;function RZa(){}RZa.prototype=n7.prototype;function SZa(a,b,d,e){return kz(e,K(function(a,b,d){return function(){return d.y(b.Gc)}}(a,b,d)),K(function(a,b,d,e){return function(){return a.gn.Wk(b.Pc,d,e)}}(a,b,d,e)),sb(new tb,function(){return function(a,b){return(new rz).e(a,b)}}(a)))}
+function Dia(a,b,d,e){var f=(new c6).TD(e),h=b.Pc,k=d.Ca(qCa()),f=Y0(a.gn,h,k,f);if(Z0(f))return kz(e,K(function(a,b,d){return function(){return d.y(b.Gc)}}(a,b,d)),K(function(a,b){return function(){return b}}(a,f.ha)),sb(new tb,function(){return function(a,b){return(new rz).e(a,b)}}(a)));if($0(f))return f=f.$l,e.cd(d.y(b.Gc),m(new n,function(a,b){return function(a){return(new rz).e(a,b)}}(a,f)));throw(new q).j(f);}
+function TZa(a,b,d){a=m(new n,function(a,b,d){return function(k){var p=Qy(d.y(b.Gc),k,Jz().kg);if(null===p)throw(new q).j(p);k=p.ja();p=p.na();k=Qy(a.gn.Xk(b.Pc,d),k,Jz().kg);if(null===k)throw(new q).j(k);return(new A).e(k.ja(),(new rz).e(p,k.na()))}}(a,b,d));b=Jz().kg;return Kz(new Lz,a,b)}function o7(){}o7.prototype=new NCa;o7.prototype.constructor=o7;function UZa(){}UZa.prototype=o7.prototype;function Md(){}Md.prototype=new l;Md.prototype.constructor=Md;c=Md.prototype;c.sc=function(){};
+c.Sd=function(a){return Dd(this,a)};c.Rh=function(){};c.ag=function(){};c.ah=function(){return"undefined"};c.xe=function(){};c.Xg=function(){};c.hf=function(){};c.Gv=function(){};c.qg=function(){};c.Yd=function(){Cd(this);dz(this);zd(this);wz(this);gS(this);Jd(this);this.Gv(lsa(this));var a=new U0;if(null===this)throw ug(vg(),null);a.ga=this;return this};c.Df=function(){};c.$classData=g({x$:0},!1,"scalaz.std.AnyValInstances$$anon$1",{x$:1,d:1,Hf:1,vf:1,Zh:1,vg:1,hg:1,gh:1,zla:1,vR:1});
+function p7(){this.JX=null}p7.prototype=new l;p7.prototype.constructor=p7;c=p7.prototype;c.tF=function(){};c.Jv=function(){};c.uF=function(){};c.Iv=function(){};c.sF=function(){};c.nF=function(){};c.lF=function(){};c.$classData=g({naa:0},!1,"scalaz.std.PartialFunctionInstances$$anon$1",{naa:1,d:1,Z7:1,W9:1,Uw:1,$9:1,K9:1,Tw:1,a8:1,l8:1});function mT(){}mT.prototype=new l;mT.prototype.constructor=mT;mT.prototype.Gu=function(){return this};
+mT.prototype.$classData=g({fba:0},!1,"scalaz.syntax.Syntaxes$traverse$",{fba:1,d:1,lba:1,mba:1,gba:1,hba:1,iba:1,jba:1,UR:1,VR:1});function KR(){this.jy=this.Fc=null;this.zx=0}KR.prototype=new fta;KR.prototype.constructor=KR;c=KR.prototype;c.Xu=function(){try{return U_(this.Fc,32),!0}catch(a){if(P2(a))return!1;throw a;}};c.lj=function(){return this.Fc.lj()};
+function JR(a,b,d){a.Fc=b;a.jy=d;if(null===b)throw(new Ne).c("null value for BigDecimal");if(null===d)throw(new Ne).c("null MathContext for BigDecimal");a.zx=1565550863;return a}c.sE=function(){try{return U_(this.Fc,16),!0}catch(a){if(P2(a))return!1;throw a;}};c.wx=function(){return this.Fc.Bi()<<24>>24};
+c.o=function(a){if(a&&a.$classData&&a.$classData.n.fF)return q7(this,a);if(a&&a.$classData&&a.$classData.n.gF){var b=a.le,b=df(gf(),b),d=X_(this.Fc);if(b>3.3219280948873626*(-2+(d-this.Fc.Jb|0)|0)){var e;if(0>=this.Fc.Jb||0>=sta(this.Fc).Jb)try{e=(new J).j((new m_).nn(rta(this.Fc)))}catch(f){if(P2(f))e=F();else throw f;}else e=F();if(e.z())return!1;e=e.X();return 0===Y_(a.le,e.le)}return!1}return"number"===typeof a?(e=+a,Infinity!==e&&-Infinity!==e&&(a=this.Fc.Rj(),Infinity!==a&&-Infinity!==a&&a===
+e)?(e=bx(),q7(this,ex(a,e.Nj))):!1):xa(a)?(e=+a,Infinity!==e&&-Infinity!==e&&(a=this.Fc.bq(),Infinity!==a&&-Infinity!==a&&a===e)?(e=bx(),q7(this,ex(a,e.Nj))):!1):this.ay()&&dba(this,a)};c.rE=function(){return this.Xu()&&0<=U_(this.Fc,32).la&&65535>=U_(this.Fc,32).la};c.k=function(){return this.Fc.k()};c.qE=function(){try{return U_(this.Fc,8),!0}catch(a){if(P2(a))return!1;throw a;}};c.xg=function(a){return zta(this.Fc,a.Fc)};c.cZ=function(){return this.Fc};
+c.Ry=function(){return this.Fc.Bi()<<16>>16};c.Rj=function(){return this.Fc.Rj()};c.r=function(){if(1565550863===this.zx){if((0>=this.Fc.Jb||0>=sta(this.Fc).Jb)&&4934>(X_(this.Fc)-this.Fc.Jb|0))var a=(new m_).nn(T_(this.Fc)).r();else{a=this.Fc.Rj();if(Infinity!==a&&-Infinity!==a)var b=bx(),a=q7(this,ex(a,b.Nj));else a=!1;a?a=RF(V(),this.Fc.Rj()):(a=sta(this.Fc),a=Q().Ps(T_(xta(a,a.Jb)).r(),a.Jb))}this.zx=a}return this.zx};c.Bi=function(){return this.Fc.Bi()};
+c.ay=function(){try{return U_(this.Fc,64),!0}catch(a){if(P2(a))return!1;throw a;}};c.bq=function(){return this.Fc.bq()};function q7(a,b){return 0===zta(a.Fc,b.Fc)}var cta=g({fF:0},!1,"scala.math.BigDecimal",{fF:1,YW:1,Gk:1,d:1,i:1,uea:1,ZW:1,l:1,Cm:1,Ed:1});KR.prototype.$classData=cta;function m_(){this.le=null}m_.prototype=new fta;m_.prototype.constructor=m_;c=m_.prototype;c.Xu=function(){var a=l_(n_(),-2147483648);return 0<=this.xg(a)?(a=l_(n_(),2147483647),0>=this.xg(a)):!1};c.lj=function(){return this.le.lj()};
+c.sE=function(){var a=l_(n_(),-32768);return 0<=this.xg(a)?(a=l_(n_(),32767),0>=this.xg(a)):!1};c.wx=function(){return this.le.Bi()<<24>>24};
+c.o=function(a){if(a&&a.$classData&&a.$classData.n.gF)return 0===Y_(this.le,a.le);if(a&&a.$classData&&a.$classData.n.fF)return a.o(this);if("number"===typeof a){a=+a;var b=this.le,b=df(gf(),b);if(53>=b)b=!0;else var d=$_(this.le),b=1024>=b&&d>=(-53+b|0)&&1024>d;return b&&!VZa(this)?(b=this.le,Hh(Ih(),lf(nf(),b))===a):!1}return xa(a)?(a=+a,b=this.le,b=df(gf(),b),24>=b?b=!0:(d=$_(this.le),b=128>=b&&d>=(-24+b|0)&&128>d),b&&!VZa(this)?(b=this.le,b=lf(nf(),b),ea(Hh(Ih(),b))===a):!1):this.ay()&&dba(this,
+a)};function VZa(a){a=Qf(a.le,2147483647);return 0!==a.Vb&&!a.o(n_().oX)}c.rE=function(){var a=l_(n_(),0);return 0<=this.xg(a)?(a=l_(n_(),65535),0>=this.xg(a)):!1};c.k=function(){var a=this.le;return lf(nf(),a)};c.qE=function(){var a=l_(n_(),-128);return 0<=this.xg(a)?(a=l_(n_(),127),0>=this.xg(a)):!1};c.xg=function(a){return Y_(this.le,a.le)};c.cZ=function(){return this.le};c.Ry=function(){return this.le.Bi()<<16>>16};c.Rj=function(){var a=this.le;return Hh(Ih(),lf(nf(),a))};
+c.r=function(){var a;if(this.ay()){var b=this.lj();a=b.la;b=b.qa;a=(-1===b?0<=(-2147483648^a):-1<b)&&(0===b?-1>=(-2147483648^a):0>b)?a:TF(V(),(new Vb).ia(a,b))}else a=OD(V(),this.le);return a};c.Bi=function(){return this.le.Bi()};c.nn=function(a){this.le=a;return this};c.ay=function(){var a=eta(n_(),(new Vb).ia(0,-2147483648));return 0<=this.xg(a)?(a=eta(n_(),(new Vb).ia(-1,2147483647)),0>=this.xg(a)):!1};c.bq=function(){var a=this.le,a=lf(nf(),a);return ea(Hh(Ih(),a))};
+var dta=g({gF:0},!1,"scala.math.BigInt",{gF:1,YW:1,Gk:1,d:1,i:1,uea:1,ZW:1,l:1,Cm:1,Ed:1});m_.prototype.$classData=dta;function r7(){this.bh=null}r7.prototype=new Q6;r7.prototype.constructor=r7;r7.prototype.b=function(){this.bh="Boolean";return this};r7.prototype.Qg=function(a){return la(Wa(Ya),[a])};r7.prototype.Gd=function(){return pa(Ya)};r7.prototype.$classData=g({Dea:0},!1,"scala.reflect.ManifestFactory$BooleanManifest$",{Dea:1,pp:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var WZa=void 0;
+function oD(){WZa||(WZa=(new r7).b());return WZa}function s7(){this.bh=null}s7.prototype=new Q6;s7.prototype.constructor=s7;s7.prototype.b=function(){this.bh="Byte";return this};s7.prototype.Qg=function(a){return la(Wa(bb),[a])};s7.prototype.Gd=function(){return pa(bb)};s7.prototype.$classData=g({Eea:0},!1,"scala.reflect.ManifestFactory$ByteManifest$",{Eea:1,pp:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var XZa=void 0;function iD(){XZa||(XZa=(new s7).b());return XZa}function t7(){this.bh=null}
+t7.prototype=new Q6;t7.prototype.constructor=t7;t7.prototype.b=function(){this.bh="Char";return this};t7.prototype.Qg=function(a){return la(Wa(Za),[a])};t7.prototype.Gd=function(){return pa(Za)};t7.prototype.$classData=g({Fea:0},!1,"scala.reflect.ManifestFactory$CharManifest$",{Fea:1,pp:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var YZa=void 0;function kD(){YZa||(YZa=(new t7).b());return YZa}function u7(){this.bh=null}u7.prototype=new Q6;u7.prototype.constructor=u7;
+u7.prototype.b=function(){this.bh="Double";return this};u7.prototype.Qg=function(a){return la(Wa(gb),[a])};u7.prototype.Gd=function(){return pa(gb)};u7.prototype.$classData=g({Gea:0},!1,"scala.reflect.ManifestFactory$DoubleManifest$",{Gea:1,pp:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var ZZa=void 0;function nD(){ZZa||(ZZa=(new u7).b());return ZZa}function v7(){this.bh=null}v7.prototype=new Q6;v7.prototype.constructor=v7;v7.prototype.b=function(){this.bh="Float";return this};
+v7.prototype.Qg=function(a){return la(Wa(fb),[a])};v7.prototype.Gd=function(){return pa(fb)};v7.prototype.$classData=g({Hea:0},!1,"scala.reflect.ManifestFactory$FloatManifest$",{Hea:1,pp:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var $Za=void 0;function Gi(){$Za||($Za=(new v7).b());return $Za}function w7(){this.bh=null}w7.prototype=new Q6;w7.prototype.constructor=w7;w7.prototype.b=function(){this.bh="Int";return this};w7.prototype.Qg=function(a){return la(Wa(db),[a])};w7.prototype.Gd=function(){return pa(db)};
+w7.prototype.$classData=g({Iea:0},!1,"scala.reflect.ManifestFactory$IntManifest$",{Iea:1,pp:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var a_a=void 0;function lD(){a_a||(a_a=(new w7).b());return a_a}function x7(){this.bh=null}x7.prototype=new Q6;x7.prototype.constructor=x7;x7.prototype.b=function(){this.bh="Long";return this};x7.prototype.Qg=function(a){return la(Wa(eb),[a])};x7.prototype.Gd=function(){return pa(eb)};
+x7.prototype.$classData=g({Jea:0},!1,"scala.reflect.ManifestFactory$LongManifest$",{Jea:1,pp:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var b_a=void 0;function mD(){b_a||(b_a=(new x7).b());return b_a}function y7(){this.Kl=null}y7.prototype=new pZa;y7.prototype.constructor=y7;function z7(){}z7.prototype=y7.prototype;y7.prototype.o=function(a){return this===a};y7.prototype.k=function(){return this.Kl};y7.prototype.r=function(){return Ka(this)};function A7(){this.bh=null}A7.prototype=new Q6;
+A7.prototype.constructor=A7;A7.prototype.b=function(){this.bh="Short";return this};A7.prototype.Qg=function(a){return la(Wa(cb),[a])};A7.prototype.Gd=function(){return pa(cb)};A7.prototype.$classData=g({Nea:0},!1,"scala.reflect.ManifestFactory$ShortManifest$",{Nea:1,pp:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var c_a=void 0;function jD(){c_a||(c_a=(new A7).b());return c_a}function B7(){this.bh=null}B7.prototype=new Q6;B7.prototype.constructor=B7;B7.prototype.b=function(){this.bh="Unit";return this};
+B7.prototype.Qg=function(a){return la(Wa(Ba),[a])};B7.prototype.Gd=function(){return pa(Xa)};B7.prototype.$classData=g({Oea:0},!1,"scala.reflect.ManifestFactory$UnitManifest$",{Oea:1,pp:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var d_a=void 0;function pD(){d_a||(d_a=(new B7).b());return d_a}function C7(a,b){a=a.Ta();for(b=b.Ta();a.ta()&&b.ta();)if(!bn(cn(),a.ma(),b.ma()))return!1;return!a.ta()&&!b.ta()}
+function eca(a){var b=a.Ta(),b=ova(b,b);return(new bc).Kf(b,m(new n,function(a){return function(b){var f=a.db();f.Zb(b);return f.Da()}}(a)))}function yO(a,b){b=b.cf(a.Fd());var d=(new QD).qb(0);a.ua(m(new n,function(a,b,d){return function(a){b.Qa((new A).e(a,d.Ba));d.Ba=1+d.Ba|0}}(a,b,d)));return b.Da()}function e_a(a,b){var d=a.db();if(!(0>=b)){d.dg(b,a);var e=0;for(a=a.Ta();e<b&&a.ta();)d.Qa(a.ma()),e=1+e|0}return d.Da()}
+function f_a(a,b){var d=a.db();oU(d,a,-(0>b?0:b)|0);var e=0;for(a=a.Ta();e<b&&a.ta();)a.ma(),e=1+e|0;return d.Zb(a).Da()}function g_a(a,b,d,e){var f=d;d=d+e|0;e=aE(W(),b);d=d<e?d:e;for(a=a.Ta();f<d&&a.ta();)$E(W(),b,f,a.ma()),f=1+f|0}function h_a(a,b){var d=a.db();0<=b&&oU(d,a,-b|0);b=a.Ta().Ko(b);for(a=a.Ta();b.ta();)d.Qa(a.ma()),b.ma();return d.Da()}function i_a(a,b){var d=a.db();d.dg(b,a);b=a.Ta().Ko(b);for(a=a.Ta();b.ta();)b.ma(),a.ma();for(;a.ta();)d.Qa(a.ma());return d.Da()}
+function xO(a,b,d){d=d.cf(a.Fd());a=a.Ta();for(b=b.Ta();a.ta()&&b.ta();)d.Qa((new A).e(a.ma(),b.ma()));return d.Da()}function D7(){this.pv=this.s=null}D7.prototype=new B5;D7.prototype.constructor=D7;D7.prototype.b=function(){dU.prototype.b.call(this);E7=this;this.pv=(new lU).b();return this};D7.prototype.Mo=function(){return y()};D7.prototype.db=function(){return(new jc).b()};D7.prototype.$classData=g({jga:0},!1,"scala.collection.immutable.List$",{jga:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1,l:1,i:1});
+var E7=void 0;function B(){E7||(E7=(new D7).b());return E7}function F7(){this.s=null}F7.prototype=new B5;F7.prototype.constructor=F7;F7.prototype.b=function(){dU.prototype.b.call(this);return this};function yCa(a,b){var d=ne(b);return sE(new tE,d,K(function(a,b){return function(){return yCa(xg(),b)}}(a,b)))}function j_a(a,b,d){return sE(new tE,b,K(function(a,b,d){return function(){return j_a(xg(),b+d|0,d)}}(a,b,d)))}
+function k_a(a,b,d,e){var f=b.$();return sE(new tE,f,K(function(a,b,d,e){return function(){return nU(b.aa(),d,e)}}(a,b,d,e)))}F7.prototype.Mo=function(){return YT()};function l_a(a,b,d,e,f){return sE(new tE,b,K(function(a,b,d,e){return function(){return b.aa().jc(d,e)}}(a,d,e,f)))}F7.prototype.db=function(){return(new H5).b()};F7.prototype.$classData=g({Nga:0},!1,"scala.collection.immutable.Stream$",{Nga:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1,l:1,i:1});var m_a=void 0;
+function xg(){m_a||(m_a=(new F7).b());return m_a}function G7(){this.s=null}G7.prototype=new B5;G7.prototype.constructor=G7;G7.prototype.b=function(){dU.prototype.b.call(this);return this};G7.prototype.db=function(){return(new e3).b()};G7.prototype.$classData=g({fha:0},!1,"scala.collection.mutable.ArrayBuffer$",{fha:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1,l:1,i:1});var n_a=void 0;function i0(){n_a||(n_a=(new G7).b());return n_a}function H7(){this.s=null}H7.prototype=new B5;H7.prototype.constructor=H7;
+H7.prototype.b=function(){dU.prototype.b.call(this);return this};H7.prototype.db=function(){var a=(new e3).b();return BE(new CE,a,m(new n,function(){return function(a){var d=(new I7).qb(a.Uc);$D(a,d.Pr,0);return d}}(this)))};H7.prototype.$classData=g({sha:0},!1,"scala.collection.mutable.ArraySeq$",{sha:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1,l:1,i:1});var o_a=void 0;function Zoa(){o_a||(o_a=(new H7).b());return o_a}function J7(){this.s=null}J7.prototype=new B5;J7.prototype.constructor=J7;
+J7.prototype.b=function(){dU.prototype.b.call(this);return this};J7.prototype.db=function(){return(new oS).b()};J7.prototype.$classData=g({uha:0},!1,"scala.collection.mutable.ArrayStack$",{uha:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1,l:1,i:1});var p_a=void 0;function q_a(){p_a||(p_a=(new J7).b());return p_a}function K7(){this.s=null}K7.prototype=new B5;K7.prototype.constructor=K7;K7.prototype.b=function(){dU.prototype.b.call(this);return this};K7.prototype.Mo=function(){return(new L7).b()};
+K7.prototype.db=function(){var a=(new M7).b();return BE(new CE,a,m(new n,function(){return function(a){return a.jg}}(this)))};K7.prototype.$classData=g({Uha:0},!1,"scala.collection.mutable.LinkedList$",{Uha:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1,l:1,i:1});var r_a=void 0;function P7(){this.s=null}P7.prototype=new B5;P7.prototype.constructor=P7;P7.prototype.b=function(){dU.prototype.b.call(this);return this};P7.prototype.db=function(){return rua(new L1,(new jc).b())};
+P7.prototype.$classData=g({Wha:0},!1,"scala.collection.mutable.ListBuffer$",{Wha:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1,l:1,i:1});var s_a=void 0;function W7(){this.s=null}W7.prototype=new B5;W7.prototype.constructor=W7;W7.prototype.b=function(){dU.prototype.b.call(this);return this};W7.prototype.db=function(){return(new M7).b()};W7.prototype.$classData=g({aia:0},!1,"scala.collection.mutable.MutableList$",{aia:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1,l:1,i:1});var t_a=void 0;function k8(){this.s=null}
+k8.prototype=new B5;k8.prototype.constructor=k8;k8.prototype.b=function(){dU.prototype.b.call(this);return this};k8.prototype.db=function(){var a=(new M7).b();return BE(new CE,a,m(new n,function(){return function(a){var d=a.jg,e=a.bk;a=a.ni;var f=new l8;M7.prototype.b.call(f);f.jg=d;f.bk=e;f.ni=a;return f}}(this)))};k8.prototype.$classData=g({dia:0},!1,"scala.collection.mutable.Queue$",{dia:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1,l:1,i:1});var u_a=void 0;
+function Gna(){u_a||(u_a=(new k8).b());return u_a}function mV(){this.ld=null;this.gb=this.Ma=this.hb=this.Sa=0;this.yo=this.ab=null;this.Eo=0}mV.prototype=new l;mV.prototype.constructor=mV;c=mV.prototype;c.u=function(){return"Chooser"};c.v=function(){return 8};c.Cw=function(){return Bi(this.yo,this.Eo).Pl()};
+c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.Oz){var b=this.ld,d=a.ld;(null===b?null===d:b.o(d))&&this.Sa===a.Sa&&this.hb===a.hb&&this.Ma===a.Ma&&this.gb===a.gb?(b=this.ab,d=a.ab,b=null===b?null===d:b.o(d)):b=!1;b?(b=this.yo,d=a.yo,b=null===b?null===d:b.o(d)):b=!1;return b?this.Eo===a.Eo:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.ld;case 1:return this.Sa;case 2:return this.hb;case 3:return this.Ma;case 4:return this.gb;case 5:return this.ab;case 6:return this.yo;case 7:return this.Eo;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.mt=function(){var a=this.ld;return a.z()?"":a.X()};function hqa(a,b,d,e,f,h,k,p,t){a.ld=b;a.Sa=d;a.hb=e;a.Ma=f;a.gb=h;a.ab=k;a.yo=p;a.Eo=t;return a}c.dm=function(){return this};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.ld)),a=V().da(a,this.Sa),a=V().da(a,this.hb),a=V().da(a,this.Ma),a=V().da(a,this.gb),a=V().da(a,OD(V(),this.ab)),a=V().da(a,OD(V(),this.yo)),a=V().da(a,this.Eo);return V().pb(a,8)};c.x=function(){return Y(new Z,this)};var iqa=g({Oz:0},!1,"org.nlogo.core.Chooser",{Oz:1,d:1,Qm:1,qt:1,Rz:1,rt:1,Pz:1,t:1,q:1,l:1,i:1});mV.prototype.$classData=iqa;function m8(){this.ld=null;this.gb=this.Ma=this.hb=this.Sa=0;this.am=null}m8.prototype=new l;
+m8.prototype.constructor=m8;function oqa(a,b,d,e,f,h){var k=new m8;k.ld=a;k.Sa=b;k.hb=d;k.Ma=e;k.gb=f;k.am=h;return k}c=m8.prototype;c.u=function(){return"InputBox"};c.v=function(){return 6};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.Qz){var b=this.ld,d=a.ld;if((null===b?null===d:b.o(d))&&this.Sa===a.Sa&&this.hb===a.hb&&this.Ma===a.Ma&&this.gb===a.gb)return b=this.am,a=a.am,null===b?null===a:b.o(a)}return!1};
+c.Cw=function(){var a=this.am;if(SX(a)||TX(a))return a.Y;throw(new q).j(a);};c.w=function(a){switch(a){case 0:return this.ld;case 1:return this.Sa;case 2:return this.hb;case 3:return this.Ma;case 4:return this.gb;case 5:return this.am;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.mt=function(){var a=this.ld;return a.z()?"":a.X()};function jqa(a){a=a.am;if(SX(a))return!1;if(TX(a))return a.Dq;throw(new q).j(a);}
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.ld)),a=V().da(a,this.Sa),a=V().da(a,this.hb),a=V().da(a,this.Ma),a=V().da(a,this.gb),a=V().da(a,OD(V(),this.am));return V().pb(a,6)};c.dm=function(){return this};c.x=function(){return Y(new Z,this)};var pqa=g({Qz:0},!1,"org.nlogo.core.InputBox",{Qz:1,d:1,Qm:1,qt:1,Rz:1,rt:1,Pz:1,t:1,q:1,l:1,i:1});m8.prototype.$classData=pqa;
+function n8(){this.ld=null;this.gb=this.Ma=this.hb=this.Sa=0;this.rm=this.Bn=this.ab=null;this.Fb=0;this.Ho=this.yp=this.Im=null;this.a=!1}n8.prototype=new l;n8.prototype.constructor=n8;c=n8.prototype;c.u=function(){return"Slider"};c.v=function(){return 12};c.Cw=function(){return this.Fb};
+c.o=function(a){if(this===a)return!0;if(Yt(a)){var b=this.ld,d=a.ld;(null===b?null===d:b.o(d))&&this.Sa===a.Sa&&this.hb===a.hb&&this.Ma===a.Ma&&this.gb===a.gb?(b=this.ab,d=a.ab,b=null===b?null===d:b.o(d)):b=!1;b&&this.Bn===a.Bn&&this.rm===a.rm&&this.Fb===a.Fb&&this.Im===a.Im?(b=this.yp,d=a.yp,b=null===b?null===d:b.o(d)):b=!1;return b?this.Ho===a.Ho:!1}return!1};
+c.w=function(a){switch(a){case 0:return this.ld;case 1:return this.Sa;case 2:return this.hb;case 3:return this.Ma;case 4:return this.gb;case 5:return this.ab;case 6:return this.Bn;case 7:return this.rm;case 8:return this.Fb;case 9:return this.Im;case 10:return this.yp;case 11:return this.Ho;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.mt=function(){var a=this.ld;return a.z()?"":a.X()};
+c.dm=function(a){var b=a.y(this.Bn),d=a.y(this.rm);a=a.y(this.Im);return Bqa(this.ld,this.Sa,this.hb,this.Ma,this.gb,this.ab,b,d,this.Fb,a,this.yp,this.Ho)};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.ld)),a=V().da(a,this.Sa),a=V().da(a,this.hb),a=V().da(a,this.Ma),a=V().da(a,this.gb),a=V().da(a,OD(V(),this.ab)),a=V().da(a,OD(V(),this.Bn)),a=V().da(a,OD(V(),this.rm)),a=V().da(a,RF(V(),this.Fb)),a=V().da(a,OD(V(),this.Im)),a=V().da(a,OD(V(),this.yp)),a=V().da(a,OD(V(),this.Ho));return V().pb(a,12)};c.x=function(){return Y(new Z,this)};
+function Bqa(a,b,d,e,f,h,k,p,t,x,E,S){var U=new n8;U.ld=a;U.Sa=b;U.hb=d;U.Ma=e;U.gb=f;U.ab=h;U.Bn=k;U.rm=p;U.Fb=t;U.Im=x;U.yp=E;U.Ho=S;a=uh(Ph(),k);a=MV(a).zf;Am(a)&&(a=a.U,b=uh(Ph(),U.rm),b=MV(b).zf,Am(b)&&(b=b.U,d=uh(Ph(),U.Im),d=MV(d).zf,Am(d)&&(new Lh).j(fCa(a,U.Fb,b,d.U))));U.a=!0;return U}function Yt(a){return!!(a&&a.$classData&&a.$classData.n.hI)}var Cqa=g({hI:0},!1,"org.nlogo.core.Slider",{hI:1,d:1,Qm:1,qt:1,Rz:1,rt:1,Pz:1,t:1,q:1,l:1,i:1});n8.prototype.$classData=Cqa;
+function o8(){this.ld=null;this.gb=this.Ma=this.hb=this.Sa=0;this.ab=null;this.ip=!1}o8.prototype=new l;o8.prototype.constructor=o8;c=o8.prototype;c.u=function(){return"Switch"};c.v=function(){return 7};c.o=function(a){if(this===a)return!0;if(a&&a.$classData&&a.$classData.n.Zz){var b=this.ld,d=a.ld;(null===b?null===d:b.o(d))&&this.Sa===a.Sa&&this.hb===a.hb&&this.Ma===a.Ma&&this.gb===a.gb?(b=this.ab,d=a.ab,b=null===b?null===d:b.o(d)):b=!1;return b?this.ip===a.ip:!1}return!1};c.Cw=function(){return this.ip};
+c.w=function(a){switch(a){case 0:return this.ld;case 1:return this.Sa;case 2:return this.hb;case 3:return this.Ma;case 4:return this.gb;case 5:return this.ab;case 6:return this.ip;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.mt=function(){var a=this.ld;return a.z()?"":a.X()};c.dm=function(){return this};
+c.r=function(){var a=-889275714,a=V().da(a,OD(V(),this.ld)),a=V().da(a,this.Sa),a=V().da(a,this.hb),a=V().da(a,this.Ma),a=V().da(a,this.gb),a=V().da(a,OD(V(),this.ab)),a=V().da(a,this.ip?1231:1237);return V().pb(a,7)};function Fqa(a,b,d,e,f,h,k){var p=new o8;p.ld=a;p.Sa=b;p.hb=d;p.Ma=e;p.gb=f;p.ab=h;p.ip=k;return p}c.x=function(){return Y(new Z,this)};var Gqa=g({Zz:0},!1,"org.nlogo.core.Switch",{Zz:1,d:1,Qm:1,qt:1,Rz:1,rt:1,Pz:1,t:1,q:1,l:1,i:1});o8.prototype.$classData=Gqa;
+function TN(){d0.call(this)}TN.prototype=new xua;TN.prototype.constructor=TN;c=TN.prototype;c.b=function(){Z1.prototype.b.call(this);return this};c.u=function(){return"_setplotxrange"};c.v=function(){return 0};c.o=function(a){return Exa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};c.x=function(){return Y(new Z,this)};function Exa(a){return!!(a&&a.$classData&&a.$classData.n.uO)}
+c.$classData=g({uO:0},!1,"org.nlogo.core.prim.etc._setplotxrange",{uO:1,K0:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function UN(){d0.call(this)}UN.prototype=new xua;UN.prototype.constructor=UN;c=UN.prototype;c.b=function(){Z1.prototype.b.call(this);return this};c.u=function(){return"_setplotyrange"};c.v=function(){return 0};c.o=function(a){return Fxa(a)&&!0};c.w=function(a){throw(new P).c(""+a);};c.k=function(){return X(W(),this)};c.r=function(){return R(Q(),this)};
+c.x=function(){return Y(new Z,this)};function Fxa(a){return!!(a&&a.$classData&&a.$classData.n.vO)}c.$classData=g({vO:0},!1,"org.nlogo.core.prim.etc._setplotyrange",{vO:1,K0:1,uf:1,d:1,oa:1,A:1,E:1,t:1,q:1,l:1,i:1});function p8(){this.Gw=this.ga=null}p8.prototype=new l;p8.prototype.constructor=p8;c=p8.prototype;c.cd=function(a,b){var d=this.ga;b=this.Gw.nh(b);return d.cd(a,b)};c.th=function(){};c.wh=function(a,b,d){return Y0(d,a,b,this)};c.nh=function(a){return Jy(this,a)};c.Wg=function(){};
+c.Qd=function(a){return JCa(this,a)};c.pg=function(){};c.wf=function(a,b){return Nua(this,a,b)};function Zta(a,b){var d=new p8;if(null===a)throw ug(vg(),null);d.ga=a;d.Gw=b;Ad(d);Ky(d);tS(d);uS(d);return d}c.sh=function(){};c.$classData=g({U7:0},!1,"scalaz.Applicative$$anon$1",{U7:1,d:1,gka:1,Bh:1,Dh:1,fh:1,ug:1,Eh:1,Ch:1,hka:1,ika:1});function q8(){}q8.prototype=new RZa;q8.prototype.constructor=q8;function v_a(){}v_a.prototype=q8.prototype;function mz(){}mz.prototype=new wCa;
+mz.prototype.constructor=mz;mz.prototype.b=function(){lz=this;(new GY).b();return this};mz.prototype.$classData=g({B9:0},!1,"scalaz.OneAnd$",{B9:1,pla:1,qla:1,rla:1,sla:1,tla:1,ula:1,vla:1,d:1,l:1,i:1});var lz=void 0;function aT(){}aT.prototype=new l;aT.prototype.constructor=aT;c=aT.prototype;c.tF=function(){};c.YD=function(){yd(this);this.tF(zsa(this));this.sF(xoa(this));this.uF(Asa(this));zx(this);this.lF(tCa(this));this.nF(Ota(this));var a=new KY;if(null===this)throw ug(vg(),null);a.ga=this;return this};
+c.Jv=function(){};c.uF=function(){};c.Iv=function(){};c.sF=function(){};c.nF=function(){};c.lF=function(){};c.$classData=g({aaa:0},!1,"scalaz.std.FunctionInstances$$anon$11",{aaa:1,d:1,Z7:1,W9:1,Uw:1,$9:1,K9:1,Tw:1,a8:1,l8:1,xla:1});function r8(){}r8.prototype=new l;r8.prototype.constructor=r8;c=r8.prototype;c.sj=function(){};c.cd=function(a,b){return(new eT).bE(this,a,b)};c.th=function(){};c.ih=function(a,b){return(new fT).bE(this,a,b)};c.wh=function(a,b,d){return Y0(d,a,b,this)};
+c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Qd=function(){return new gT};c.pg=function(){};c.wf=function(a,b){return o2(this,a,b)};c.sh=function(){};c.rj=function(){};c.jj=function(a){return p2(this,a)};c.$classData=g({Faa:0},!1,"scalaz.std.java.util.concurrent.CallableInstances$$anon$1",{Faa:1,d:1,Gj:1,Bh:1,Dh:1,fh:1,ug:1,Eh:1,Ch:1,Ej:1,Fj:1});function qD(){this.Kl=null}qD.prototype=new z7;qD.prototype.constructor=qD;qD.prototype.b=function(){this.Kl="Any";F();y();pa(Ua);return this};
+qD.prototype.Qg=function(a){return la(Wa(Ua),[a])};qD.prototype.Gd=function(){return pa(Ua)};qD.prototype.$classData=g({Bea:0},!1,"scala.reflect.ManifestFactory$AnyManifest$",{Bea:1,Hy:1,Gy:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var jka=void 0;function sD(){this.Kl=null}sD.prototype=new z7;sD.prototype.constructor=sD;sD.prototype.b=function(){this.Kl="AnyVal";F();y();pa(Ua);return this};sD.prototype.Qg=function(a){return la(Wa(Ua),[a])};sD.prototype.Gd=function(){return pa(Ua)};
+sD.prototype.$classData=g({Cea:0},!1,"scala.reflect.ManifestFactory$AnyValManifest$",{Cea:1,Hy:1,Gy:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var kka=void 0;function s8(){this.Kl=null}s8.prototype=new z7;s8.prototype.constructor=s8;s8.prototype.b=function(){this.Kl="Nothing";F();y();pa(q_);return this};s8.prototype.Qg=function(a){return la(Wa(Ua),[a])};s8.prototype.Gd=function(){return pa(q_)};
+s8.prototype.$classData=g({Kea:0},!1,"scala.reflect.ManifestFactory$NothingManifest$",{Kea:1,Hy:1,Gy:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var w_a=void 0;function lka(){w_a||(w_a=(new s8).b());return w_a}function t8(){this.Kl=null}t8.prototype=new z7;t8.prototype.constructor=t8;t8.prototype.b=function(){this.Kl="Null";F();y();pa(JF);return this};t8.prototype.Qg=function(a){return la(Wa(Ua),[a])};t8.prototype.Gd=function(){return pa(JF)};
+t8.prototype.$classData=g({Lea:0},!1,"scala.reflect.ManifestFactory$NullManifest$",{Lea:1,Hy:1,Gy:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var x_a=void 0;function mka(){x_a||(x_a=(new t8).b());return x_a}function u8(){this.Kl=null}u8.prototype=new z7;u8.prototype.constructor=u8;u8.prototype.b=function(){this.Kl="Object";F();y();pa(Ua);return this};u8.prototype.Qg=function(a){return la(Wa(Ua),[a])};u8.prototype.Gd=function(){return pa(Ua)};
+u8.prototype.$classData=g({Mea:0},!1,"scala.reflect.ManifestFactory$ObjectManifest$",{Mea:1,Hy:1,Gy:1,d:1,gk:1,Ii:1,oj:1,Ji:1,l:1,i:1,q:1});var y_a=void 0;function rD(){y_a||(y_a=(new u8).b());return y_a}function v8(){this.el=this.s=null}v8.prototype=new t6;v8.prototype.constructor=v8;v8.prototype.b=function(){dU.prototype.b.call(this);w8=this;this.el=(new J5).Q(0,0,0);return this};v8.prototype.Mo=function(){return this.el};v8.prototype.db=function(){return(new aG).b()};
+v8.prototype.$classData=g({Zga:0},!1,"scala.collection.immutable.Vector$",{Zga:1,PX:1,Th:1,Sh:1,bg:1,Xe:1,d:1,cg:1,Ye:1,l:1,i:1});var w8=void 0;function dk(){w8||(w8=(new v8).b());return w8}function RG(){this.p=this.h=this.g=this.ka=null;this.a=0}RG.prototype=new l;RG.prototype.constructor=RG;c=RG.prototype;c.b=function(){RG.prototype.c.call(this,"");return this};c.u=function(){return"_createlinkswith"};c.v=function(){return 1};
+c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.vA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.H=function(){return AV(this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/linkcreation.scala: 35");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};c.Fs=function(){return Dj(D())};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/linkcreation.scala: 35");return this.h};c.$classData=g({vA:0},!1,"org.nlogo.core.prim.etc._createlinkswith",{vA:1,d:1,CP:1,tt:1,oa:1,A:1,E:1,L0:1,t:1,q:1,l:1,i:1});function OG(){this.p=this.h=this.g=this.ka=null;this.a=0}OG.prototype=new l;OG.prototype.constructor=OG;c=OG.prototype;c.b=function(){OG.prototype.c.call(this,"");return this};
+c.u=function(){return"_createlinkwith"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.xA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.H=function(){return AV(this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/linkcreation.scala: 29");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};c.Fs=function(){return Gj(D())};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/linkcreation.scala: 29");return this.h};c.$classData=g({xA:0},!1,"org.nlogo.core.prim.etc._createlinkwith",{xA:1,d:1,DP:1,tt:1,oa:1,A:1,E:1,L0:1,t:1,q:1,l:1,i:1});function x8(){}x8.prototype=new l;x8.prototype.constructor=x8;c=x8.prototype;c.sj=function(){};c.cd=function(a,b){return mia(a,b)};c.th=function(){};
+function Ry(){var a=new x8;Ad(a);Ky(a);tS(a);uS(a);vS(a);wS(a);zS(a);return a}c.ih=function(a,b){return Gy(new Hy,a,b)};c.wh=function(a,b,d){return Y0(d,a,b,this)};c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Qd=function(a){X0();a=ne(a);return(new Ey).j(a)};c.pg=function(){};c.wf=function(a,b){return o2(this,a,b)};c.sh=function(){};c.rj=function(){};c.Fl=function(){};c.jj=function(a){return p2(this,a)};
+c.$classData=g({R8:0},!1,"scalaz.FreeInstances$$anon$3",{R8:1,d:1,Gj:1,Bh:1,Dh:1,fh:1,ug:1,Eh:1,Ch:1,Ej:1,Fj:1,Ul:1});function y8(){}y8.prototype=new v_a;y8.prototype.constructor=y8;function z_a(){}z_a.prototype=y8.prototype;function z8(){this.ga=null}z8.prototype=new l;z8.prototype.constructor=z8;function A_a(a){var b=new z8;if(null===a)throw ug(vg(),null);b.ga=a;return b}z8.prototype.$classData=g({r9:0},!1,"scalaz.MonadPlus$$anon$3",{r9:1,d:1,Tma:1,Yaa:1,lC:1,Kr:1,uk:1,$i:1,mC:1,Raa:1,oC:1,Yw:1});
+function nz(){this.gn=null}nz.prototype=new l;nz.prototype.constructor=nz;c=nz.prototype;c.Xk=function(a,b){return TZa(this,a,b)};c.cd=function(a,b){return(new rz).e(b.y(a.Gc),this.gn.cd(a.Pc,b))};c.kz=function(a,b,d){return Dia(this,a,b,d)};c.ok=function(a){var b=a.Gc;a=this.gn.ok(a.Pc);return Ng(new Og,b,a)};c.Gl=function(){};c.Ok=function(){};c.Xq=function(){};c.Wg=function(){};c.Px=function(a,b,d){return this.gn.zi(a.Pc,b.y(a.Gc),d)};c.Wk=function(a,b,d){return SZa(this,a,b,d)};c.pg=function(){};
+c.Wj=function(a,b,d){return xsa(this,a,b,d)};c.Zq=function(){};c.zi=function(a,b,d){return this.gn.zi(a.Pc,qb(d,b,a.Gc),d)};c.$classData=g({D9:0},!1,"scalaz.OneAndInstances0$$anon$3",{D9:1,d:1,wla:1,kC:1,Vl:1,fh:1,ug:1,cl:1,dl:1,dC:1,ola:1,nla:1});function B_a(a,b){Lx();return Kz(new Lz,m(new n,function(a,b){return function(f){return a.Pm.Qd(K(function(a,b,d){return function(){return(new A).e(d,T(b))}}(a,b,f)))}}(a,(new Mx).Ac(b))),a.Pm)}function A8(){}A8.prototype=new l;
+A8.prototype.constructor=A8;A8.prototype.b=function(){return this};A8.prototype.zk=function(a,b){a|=0;b|=0;return a===b?0:a<b?-1:1};A8.prototype.$classData=g({pea:0},!1,"scala.math.Numeric$IntIsIntegral$",{pea:1,d:1,Dpa:1,zpa:1,Cpa:1,Cv:1,av:1,Dv:1,Bv:1,l:1,i:1,Epa:1});var C_a=void 0;function Jv(){C_a||(C_a=(new A8).b());return C_a}function B8(){}B8.prototype=new l;B8.prototype.constructor=B8;function D_a(){}c=D_a.prototype=B8.prototype;c.yg=function(a,b){$D(this,a,b)};
+c.ss=function(a){return Cka(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.fj=function(a,b){return u5(this,a,b)};c.WC=function(a){return cE(this,a)};c.Sj=function(a){return ZBa(this,a)};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.zb=function(a){return this.Mc("",a,"")};c.fo=function(a){return Xb(new Yb,this,a)};c.Je=function(){return v5(this)};c.k=function(){return w5(this)};c.Gb=function(a,b){return nl(this,a,b)};c.Cg=function(){return Ek(this)};
+c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return this.ml(a,!1)};c.ml=function(a,b){return x5(this,a,b)};c.Ha=function(){return as(this)};c.Td=function(){var a=i0().s;return L(this,a)};c.wn=function(){return WO(this)};c.Vc=function(a,b){return Ht(this,a,b)};c.Mf=function(){return this.zb("")};c.Af=function(a){return this.ml(a,!0)};c.nf=function(){return-1};c.Gi=function(a){return Lt(this,a)};c.hd=function(){return $Ba(this)};c.aa=function(){return aCa(this)};
+c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return this.Jc()};c.Fd=function(){return this};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.sf=function(a,b){return this.Gb(a,b)};c.Eg=function(){return!0};c.we=function(a){var b=dc(new ec,gc());this.ua(m(new n,function(a,b,f){return function(a){return f.Qa(a)}}(this,a,b)));return b.Oa};c.xa=function(a,b){return Cr(this,a,b)};c.fg=function(a){return hE(this,a)};c.ve=function(a){return iE(this,a)};c.Ke=function(){return kd(this)};
+c.jc=function(a,b){return y5(this,a,b)};c.ek=function(a){return jE(this,a)};c.db=function(){return this.nd().db()};c.Ze=function(){return z5(this)};function E_a(a,b){if(0>b)return 1;var d=0;for(a=a.Ta();a.ta();){if(d===b)return a.ta()?1:0;a.ma();d=1+d|0}return d-b|0}function SA(a){a=a.ra();return(new a0).Q(0,a,1)}function Di(a,b,d){d=d.cf(a.Fd());d.Zb(a.be());d.Qa(b);return d.Da()}
+function xga(a,b){var d=a.ra(),e=a.db();if(1===d)e.Zb(a);else if(1<d){e.qc(d);var d=la(Wa(Ua),[d]),f=(new QD).qb(0);a.ua(m(new n,function(a,b,d){return function(a){b.m[d.Ba]=a;d.Ba=1+d.Ba|0}}(a,d,f)));pja(WA(),d,b);for(f.Ba=0;f.Ba<d.m.length;)e.Qa(d.m[f.Ba]),f.Ba=1+f.Ba|0}return e.Da()}function F_a(a,b,d){var e=0<d?d:0;for(a=a.Ta().Ko(d);a.ta();){if(b.y(a.ma()))return e;e=1+e|0}return-1}
+function G_a(a){var b=y(),d=(new Al).j(b);a.ua(m(new n,function(a,b){return function(a){b.Ba=Ng(new Og,a,b.Ba)}}(a,d)));b=a.db();Cpa(b,a);for(a=d.Ba;!a.z();)d=a.$(),b.Qa(d),a=a.aa();return b.Da()}function qx(a,b,d){d=d.cf(a.Fd());d.Qa(b);d.Zb(a.be());return d.Da()}function C8(a){var b=a.db(),d=I(PZa(),y());a.ua(m(new n,function(a,b,d){return function(a){return null!==Tka(d,a)?void 0:(b.Qa(a),D8(d,a))}}(a,b,d)));return b.Da()}
+function Ft(a,b){b=H_a(a,b.vh());var d=a.db();a.ua(m(new n,function(a,b,d){return function(a){var e=b.y(a)|0;return 0===e?d.Qa(a):(b.rr(a,-1+e|0),void 0)}}(a,b,d)));return d.Da()}function H_a(a,b){var d=I_a();b.ua(m(new n,function(a,b){return function(a){var d=1+(b.y(a)|0)|0;b.vv(a,d)}}(a,d)));return d}function Kh(a,b){return a.oe(m(new n,function(a,b){return function(a){return bn(cn(),a,b)}}(a,b)))}function ep(a,b,d){var e=new q6;if(null===d)throw ug(vg(),null);e.ga=d;e.ej=b;return xga(a,e)}
+function q5(){this.tc=DA()}q5.prototype=new l;q5.prototype.constructor=q5;c=q5.prototype;c.Xu=function(){NF();var a=this.tc,b=a.la;return b===a.la&&b>>31===a.qa};c.lj=function(){var a=this.tc;return(new Vb).ia(a.la,a.qa)};c.sE=function(){NF();var a=this.tc,b=a.la<<16>>16;return b===a.la&&b>>31===a.qa};c.JD=function(a){this.tc=a;return this};c.wx=function(){NF();return this.tc.la<<24>>24};
+c.o=function(a){var b;NF();b=this.tc;if(a&&a.$classData&&a.$classData.n.LY){a=a.tc;var d=a.qa;b=b.la===a.la&&b.qa===d}else b=!1;return b};c.rE=function(){NF();var a=this.tc,b=65535&a.la;return b===a.la&&b>>31===a.qa};c.k=function(){return""+this.tc};c.qE=function(){NF();var a=this.tc,b=a.la<<24>>24;return b===a.la&&b>>31===a.qa};c.xg=function(a){var b=this.tc,d=Qa((new Vb).ia(b.la,b.qa)),b=d.la,d=d.qa,e=Qa(a);a=e.la;e=e.qa;Ra();return d===e?b===a?0:(-2147483648^b)<(-2147483648^a)?-1:1:d<e?-1:1};
+c.Ry=function(){NF();return this.tc.la<<16>>16};c.Rj=function(){NF();var a=this.tc;return IF(Ra(),a.la,a.qa)};c.r=function(){var a=this.tc;return a.la^a.qa};c.Bi=function(){NF();return this.tc.la};c.bq=function(){NF();var a=this.tc;return ea(IF(Ra(),a.la,a.qa))};c.$classData=g({LY:0},!1,"scala.runtime.RichLong",{LY:1,d:1,mqa:1,qqa:1,pqa:1,ZW:1,rpa:1,Hda:1,nqa:1,Cm:1,Ed:1,oqa:1});function QG(){this.p=this.h=this.g=this.ka=null;this.a=0}QG.prototype=new l;QG.prototype.constructor=QG;c=QG.prototype;
+c.b=function(){QG.prototype.c.call(this,"");return this};c.u=function(){return"_createlinkfrom"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.sA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.H=function(){return AV(this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/linkcreation.scala: 33");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};c.Fs=function(){return Gj(D())};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/linkcreation.scala: 33");return this.h};c.$classData=g({sA:0},!1,"org.nlogo.core.prim.etc._createlinkfrom",{sA:1,d:1,DP:1,tt:1,oa:1,A:1,E:1,H0:1,rB:1,t:1,q:1,l:1,i:1});function TG(){this.p=this.h=this.g=this.ka=null;this.a=0}TG.prototype=new l;TG.prototype.constructor=TG;c=TG.prototype;c.b=function(){TG.prototype.c.call(this,"");return this};
+c.u=function(){return"_createlinksfrom"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.tA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.H=function(){return AV(this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/linkcreation.scala: 39");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};c.Fs=function(){return Dj(D())};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/linkcreation.scala: 39");return this.h};c.$classData=g({tA:0},!1,"org.nlogo.core.prim.etc._createlinksfrom",{tA:1,d:1,CP:1,tt:1,oa:1,A:1,E:1,H0:1,rB:1,t:1,q:1,l:1,i:1});function SG(){this.p=this.h=this.g=this.ka=null;this.a=0}SG.prototype=new l;SG.prototype.constructor=SG;c=SG.prototype;c.b=function(){SG.prototype.c.call(this,"");return this};
+c.u=function(){return"_createlinksto"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.uA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.H=function(){return AV(this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/linkcreation.scala: 37");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};c.Fs=function(){return Dj(D())};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/linkcreation.scala: 37");return this.h};c.$classData=g({uA:0},!1,"org.nlogo.core.prim.etc._createlinksto",{uA:1,d:1,CP:1,tt:1,oa:1,A:1,E:1,I0:1,rB:1,t:1,q:1,l:1,i:1});function PG(){this.p=this.h=this.g=this.ka=null;this.a=0}PG.prototype=new l;PG.prototype.constructor=PG;c=PG.prototype;c.b=function(){PG.prototype.c.call(this,"");return this};
+c.u=function(){return"_createlinkto"};c.v=function(){return 1};c.o=function(a){return this===a?!0:a&&a.$classData&&a.$classData.n.wA?this.ka===a.ka:!1};c.M=function(a){this.h=a;this.a=(2|this.a)<<24>>24};c.w=function(a){switch(a){case 0:return this.ka;default:throw(new P).c(""+a);}};c.k=function(){return X(W(),this)};c.H=function(){return AV(this)};c.P=function(a){this.p=a;this.a=(4|this.a)<<24>>24};
+c.K=function(){if(0===(1&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/linkcreation.scala: 31");return this.g};c.L=function(a){this.g=a;this.a=(1|this.a)<<24>>24};c.c=function(a){this.ka=a;M(this);return this};c.r=function(){return R(Q(),this)};c.Fs=function(){return Gj(D())};c.x=function(){return Y(new Z,this)};
+c.N=function(){if(0===(2&this.a))throw(new z).c("Uninitialized field: /home/jason/Desktop/Development/NetLogo/branches/NetLogo/hexy/parser-core/src/main/core/prim/etc/linkcreation.scala: 31");return this.h};c.$classData=g({wA:0},!1,"org.nlogo.core.prim.etc._createlinkto",{wA:1,d:1,DP:1,tt:1,oa:1,A:1,E:1,I0:1,rB:1,t:1,q:1,l:1,i:1});function E8(){}E8.prototype=new z_a;E8.prototype.constructor=E8;function J_a(){}J_a.prototype=E8.prototype;function W0(){}W0.prototype=new UZa;
+W0.prototype.constructor=W0;W0.prototype.b=function(){return this};W0.prototype.$classData=g({v$:0},!1,"scalaz.package$StateT$",{v$:1,Ela:1,Fla:1,Gla:1,Hla:1,Ila:1,Jka:1,Kka:1,Lka:1,Mka:1,d:1,Dla:1,Ika:1});var Xta=void 0;function F8(a){var b=(new e3).qb(a.Ha());a=a.nb();mva(b,a);return b}function G8(){}G8.prototype=new J_a;G8.prototype.constructor=G8;function K_a(){}K_a.prototype=G8.prototype;function yS(a){a.Kv(A_a(a))}function H8(){this.Pm=null}H8.prototype=new l;H8.prototype.constructor=H8;c=H8.prototype;
+c.sj=function(){};c.cd=function(a,b){return sia(a,b,this.Pm)};c.th=function(){};function Yta(a){var b=new H8;b.Pm=a;Ad(b);Ky(b);tS(b);uS(b);vS(b);wS(b);return b}c.ih=function(a,b){return uia(a,b,this.Pm)};c.wh=function(a,b,d){return Y0(d,a,b,this)};c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Qd=function(a){return B_a(this,a)};c.pg=function(){};c.wf=function(a,b){return o2(this,a,b)};c.sh=function(){};c.rj=function(){};c.jj=function(a){return p2(this,a)};
+c.$classData=g({Z9:0},!1,"scalaz.StateTInstances2$$anon$2",{Z9:1,d:1,Jla:1,hla:1,Gj:1,Bh:1,Dh:1,fh:1,ug:1,Eh:1,Ch:1,Ej:1,Fj:1,Cla:1});function m7(){}m7.prototype=new l;m7.prototype.constructor=m7;c=m7.prototype;c.sj=function(){};c.cd=function(a,b){return MCa(this,a,b)};c.th=function(){};c.ih=function(a,b){return Gy(new Hy,a,b)};c.wh=function(a,b,d){return Y0(d,a,b,this)};c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Qd=function(a){X0();a=$ta().tu.Qd(a);return(new a5).j(a)};c.pg=function(){};
+c.wf=function(a,b){return o2(this,a,b)};c.Em=function(){};c.$s=function(){};c.sh=function(){};c.Fl=function(){};c.rj=function(){};c.jj=function(a){return p2(this,a)};c.$classData=g({d$:0},!1,"scalaz.TrampolineInstances$$anon$1",{d$:1,d:1,Gj:1,Bh:1,Dh:1,fh:1,ug:1,Eh:1,Ch:1,Ej:1,Fj:1,yt:1,Vm:1,Ul:1});function Uj(a){return a.z()?a.Ta().ma():a.W(0)}function I8(a,b){return a.ra()-b|0}
+function J8(a,b){if(b&&b.$classData&&b.$classData.n.og){var d=a.ra();if(d===b.ra()){for(var e=0;e<d&&bn(cn(),a.W(e),b.W(e));)e=1+e|0;return e===d}return!1}return C7(a,b)}function K8(a,b){return L_a(a,b,!1)!==a.ra()}function g3(a){return 0===a.ra()}function L_a(a,b,d){for(var e=0;e<a.ra()&&!!b.y(a.W(e))===d;)e=1+e|0;return e}function L8(a,b){for(var d=a.ra(),e=0;e<d&&b.y(a.W(e));)e=1+e|0;return a.of(e-0|0,a.ra())}function M8(a,b){return L_a(a,b,!0)===a.ra()}
+function N8(a){return 0<a.ra()?a.of(0,-1+a.ra()|0):v5(a)}function O8(a,b){for(var d=0,e=a.ra();d<e;)b.y(a.W(d)),d=1+d|0}function P8(a,b,d){d=0<d?d:0;for(var e=a.ra(),f=d;;){if(f<e)var h=a.W(f),h=!b.y(h);else h=!1;if(h)f=1+f|0;else break}b=d+(f-d|0)|0;return b>=a.ra()?-1:b}function Q8(a,b,d){b=0<b?b:0;d=0<d?d:0;var e=a.ra();d=d<e?d:e;var e=d-b|0,f=0<e?e:0,e=a.db();for(e.qc(f);b<d;)e.Qa(a.W(b)),b=1+b|0;return e.Da()}
+function px(a){var b=a.db();b.qc(a.ra());for(var d=a.ra();0<d;)d=-1+d|0,b.Qa(a.W(d));return b.Da()}function R8(a,b){for(var d=a.ra(),e=0;;){if(e<d)var f=a.W(e),f=!b.y(f);else f=!1;if(f)e=1+e|0;else break}b=e;return b<a.ra()?(new J).j(a.W(b)):F()}function S8(a,b){b=b.cf(a.Fd());var d=a.ra();b.qc(d);for(var e=0;e<d;)b.Qa((new A).e(a.W(e),e)),e=1+e|0;return b.Da()}function T8(a,b,d,e){for(;;){if(0===b)return d;var f=-1+b|0;d=qb(e,a.W(-1+b|0),d);b=f}}
+function rj(a,b){return(new A).e(a.of(0,b),a.of(b,a.ra()))}function Dm(a){return 0<a.ra()?a.W(-1+a.ra()|0):$Ba(a)}function U8(a,b,d,e,f){for(;;){if(b===d)return e;var h=1+b|0;e=qb(f,e,a.W(b));b=h}}function Ck(a){return a.z()?aCa(a):a.of(1,a.ra())}function V8(a,b,d,e){var f=0,h=d,k=a.ra();e=k<e?k:e;d=aE(W(),b)-d|0;for(d=e<d?e:d;f<d;)$E(W(),b,h,a.W(f)),f=1+f|0,h=1+h|0}function W8(a,b){return a.of(a.ra()-(0<b?b:0)|0,a.ra())}function Cm(a,b){return a.of(0,a.ra()-(0<b?b:0)|0)}
+function X8(a,b){if(0<a.ra()){var d=a.ra(),e=a.W(0);return U8(a,1,d,e,b)}return jE(a,b)}function Y8(a,b,d){if(b&&b.$classData&&b.$classData.n.og){d=d.cf(a.Fd());var e=0,f=a.ra(),h=b.ra(),f=f<h?f:h;for(d.qc(f);e<f;)d.Qa((new A).e(a.W(e),b.W(e))),e=1+e|0;return d.Da()}return xO(a,b,d)}function og(a,b){if(0>b)b=1;else a:{var d=0;for(;;){if(d===b){b=a.z()?0:1;break a}if(a.z()){b=-1;break a}d=1+d|0;a=a.aa()}}return b}
+function ho(a,b){var d=a.db(),e=a;for(a=a.iu(b);!a.z();)d.Qa(e.$()),e=e.aa(),a=a.aa();return d.Da()}function Bi(a,b){a=a.iu(b);if(0>b||a.z())throw(new P).c(""+b);return a.$()}function kF(a,b){if(b&&b.$classData&&b.$classData.n.qp){if(a===b)return!0;for(;!a.z()&&!b.z()&&bn(cn(),a.$(),b.$());)a=a.aa(),b=b.aa();return a.z()&&b.z()}return C7(a,b)}function Z8(a,b){for(;!a.z();){if(b.y(a.$()))return!0;a=a.aa()}return!1}function M_a(a,b){for(;!a.z()&&0<b;)a=a.aa(),b=-1+b|0;return a}
+function $8(a,b){for(;!a.z();){if(!b.y(a.$()))return!1;a=a.aa()}return!0}function a9(a,b,d){for(;!a.z();)b=qb(d,b,a.$()),a=a.aa();return b}function N_a(a,b,d){return a.z()?b:qb(d,a.$(),a.aa().Ai(b,d))}function b9(a,b,d){var e=0<d?d:0;for(a=a.iu(d);;)if(kd(a)){if(b.y(a.$()))return e;e=1+e|0;a=a.aa()}else break;return-1}function c9(a,b){for(;!a.z();){if(b.y(a.$()))return(new J).j(a.$());a=a.aa()}return F()}function fn(a){for(var b=0;!a.z();)b=1+b|0,a=a.aa();return b}
+function jn(a){if(a.z())throw(new Du).b();for(var b=a.aa();!b.z();)a=b,b=b.aa();return a.$()}function d9(a,b){for(;!a.z();){if(bn(cn(),a.$(),b))return!0;a=a.aa()}return!1}function e9(a,b){return 0<=b&&0<og(a,b)}function O_a(a,b){for(var d=a.db(),e=0;!a.z()&&e<b;)e=1+e|0,d.Qa(a.$()),a=a.aa();return d.Da()}function P_a(a,b){if(a.z())throw(new il).c("empty.reduceLeft");return a.aa().Gb(a.$(),b)}
+function Q_a(a){var b=(new e3).qb(a.Ha());a.ua(m(new n,function(a,b){return function(a){return f3(b,a)}}(a,b)));return b}function kp(a){if(a.z())return oc().ai.el;oc();var b=(new aG).b();a.ua(m(new n,function(a,b){return function(a){return b.Qa(a)}}(a,b)));return cG(b)}function ql(a,b){return b.nb().sf(a,sb(new tb,function(){return function(a,b){return a.ui(b)}}(a)))}function f9(){}f9.prototype=new K_a;f9.prototype.constructor=f9;function R_a(){}R_a.prototype=f9.prototype;
+function S_a(a){var b=(new e3).qb(a.Ha());a.ua(m(new n,function(a,b){return function(a){return f3(b,a)}}(a,b)));return b}function T_a(a,b,d,e,f){var h=a.Ta();a=(new bc).Kf(h,m(new n,function(){return function(a){if(null!==a){var b=a.ja();a=a.na();return""+Hja(Ija(),b," -\x3e ")+a}throw(new q).j(a);}}(a)));return fE(a,b,d,e,f)}function Yr(a){if(a.z())return oc().ai.el;oc();var b=(new aG).b();a.ua(m(new n,function(a,b){return function(a){return b.Qa(a)}}(a,b)));return cG(b)}
+function g9(a,b){var d=(new Al).j(a);a.ua(m(new n,function(a,b,d){return function(a){b.y(a)&&(d.Ba=d.Ba.Wi(a.ja()))}}(a,b,d)));return d.Ba}function h9(){}h9.prototype=new R_a;h9.prototype.constructor=h9;function U_a(){}U_a.prototype=h9.prototype;function V_a(a,b){return b.nb().sf(a,sb(new tb,function(){return function(a,b){return a.Aj(b)}}(a)))}
+function wi(a){if(null!==a){var b=a.toLowerCase();if("true"===b)return!0;if("false"===b)return!1;throw(new Ne).c('For input string: "'+a+'"');}throw(new Ne).c('For input string: "null"');}function W_a(a,b,d){b=0<b?b:0;var e=a.ra(),e=d<e?d:e;if(b>=e)return a.db().Da();d=a.db();a=a.k().substring(b,e);return d.Zb((new Sb).c(a)).Da()}function qi(a,b){a=a.k();b=97<=b&&122>=b||65<=b&&90>=b||48<=b&&57>=b?ba.String.fromCharCode(b):"\\"+(new Ke).Xa(b);return vF(Ha(),a,b)}
+function Ooa(a,b){var d=(new pm).b(),e=-1+b|0;if(!(0>=b))for(b=0;;){Ur(d,a.k());if(b===e)break;b=1+b|0}return d.rc.Xb}function tfa(a){if(null===a.k())return null;if(0===(a.k().length|0))return"";var b=65535&(a.k().charCodeAt(0)|0),d=Gh(),e;(e=8544<=b&&8559>=b||9398<=b&&9423>=b)||(e=1===(0>b?0:256>b?Pqa(d).m[b]:Qqa(d,b)));if(e)return a.k();a=uF(Ha(),a.k());b=a.m[0];a.m[0]=tca(Gh(),b);return qla(Ha(),a,0,a.m.length)}
+function zfa(a){var b=tva(a);return(new bc).Kf(b,m(new n,function(){return function(a){var b=(new pj).c(a),f=b.k().length|0;if(0===f)a=b.k();else{var h=b.to(-1+f|0);10===h||12===h?(a=b.k(),b=10===h&&2<=f&&13===b.to(-2+f|0)?-2+f|0:-1+f|0,a=a.substring(0,b)):a=b.k()}return a}}(a)))}function una(a){var b=a.k();return 0<=(b.length|0)&&"?"===b.substring(0,1)?a.k().substring(1):a.k()}function dea(a){if(Gp(Ha(),a.k(),"-OWN")){var b=a.k();a=(a.k().length|0)-4|0;return b.substring(0,a)}return a.k()}
+function dd(a){var b=(new pm).b();for(a=tva(a);a.ta();){for(var d=a.xm(),e=d.length|0,f=0;;)if(f<e&&32>=(65535&(d.charCodeAt(f)|0)))f=1+f|0;else break;d=f<e&&124===(65535&(d.charCodeAt(f)|0))?d.substring(1+f|0):d;Ur(b,d)}return b.rc.Xb}function X_a(a){if(a.oi===a)throw(new Du).b();return a.dj}function i9(a,b){a=Y_a(a,b);if(a.Ke())return a.dj;throw(new P).c(""+b);}function Z_a(a,b,d){a=Y_a(a,b);if(a.Ke())a.dj=d;else throw(new P).c(""+b);}
+function $_a(a){if(!kd(a))throw(new Ne).c("requirement failed: tail of empty list");return a.oi}function Y_a(a,b){for(var d=0;;)if(d<b&&a.oi!==a)a=a.oi,d=1+d|0;else break;return a}function $S(){}$S.prototype=new l;$S.prototype.constructor=$S;c=$S.prototype;c.Xk=function(a,b){var d=Jz().kg;return V0(this,a,b,d)};c.sj=function(){};c.YD=function(){Ad(this);Ky(this);ry(this);oz(this);tS(this);uS(this);vS(this);wS(this);zS(this);YR(this);oY(this);return this};c.cd=function(a,b){return a0a(this,a,b)};
+c.th=function(){};c.ok=function(a){return py(this,a)};c.ih=function(a,b){return b0a(this,a,b)};c.Gl=function(){};function b0a(a,b,d){return K(function(a,b,d){return function(){return ne(d.y(ne(b)))}}(a,b,d))}c.Ok=function(){};function a0a(a,b,d){return K(function(a,b,d){return function(){return d.y(ne(b))}}(a,b,d))}c.wh=function(a,b,d){return Y0(d,a,b,this)};
+function c0a(a,b,d,e){return e.cd(d.y(ne(b)),m(new n,function(a){return function(b){return K(function(a,b){return function(){return b}}(a,b))}}(a)))}c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Wk=function(a,b,d){return c0a(this,a,b,d)};c.Qd=function(a){return a};c.pg=function(){};c.wf=function(a,b){return o2(this,a,b)};c.Wj=function(a,b,d){return a1(this,a,b,d)};c.Em=function(){};c.$s=function(){};c.sh=function(){};c.rj=function(){};c.Fl=function(){};
+c.zi=function(a,b,d){return b1(this,a,b,d).ja()};c.jj=function(a){return p2(this,a)};c.$classData=g({$$:0},!1,"scalaz.std.FunctionInstances$$anon$1",{$$:1,d:1,Vl:1,fh:1,ug:1,cl:1,dl:1,Gj:1,Bh:1,Dh:1,Eh:1,Ch:1,Ej:1,Fj:1,Ul:1,yt:1,Vm:1,xR:1});function j9(){}j9.prototype=new l;j9.prototype.constructor=j9;c=j9.prototype;c.Xk=function(a,b){var d=Jz().kg;return V0(this,a,b,d)};c.sj=function(){};c.cd=function(a,b){return(new K2).j(b.y(a.lb))};c.th=function(){};c.ok=function(a){return py(this,a)};
+c.ih=function(a,b){return b.y(a.lb)};c.Gl=function(){};c.Ok=function(){};c.wh=function(a,b,d){return Y0(d,a,b,this)};c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Wk=function(a,b,d){return Xua(this,a,b,d)};c.Qd=function(a){return(new K2).j(ne(a))};c.pg=function(){};c.wf=function(a,b){return o2(this,a,b)};c.Wj=function(a,b,d){return a1(this,a,b,d)};c.Em=function(){};c.$s=function(){};c.sh=function(){};c.rj=function(){};c.zi=function(a,b,d){return b1(this,a,b,d).ja()};
+c.Fu=function(){Ad(this);Ky(this);tS(this);uS(this);vS(this);wS(this);ry(this);oz(this);YR(this);oY(this);return this};c.jj=function(a){return p2(this,a)};c.$classData=g({saa:0},!1,"scalaz.std.TupleInstances1$$anon$1",{saa:1,d:1,tma:1,Gj:1,Bh:1,Dh:1,fh:1,ug:1,Eh:1,Ch:1,Ej:1,Fj:1,sma:1,Vl:1,cl:1,dl:1,yt:1,Vm:1});function k9(){}k9.prototype=new D_a;k9.prototype.constructor=k9;function l9(){}c=l9.prototype=k9.prototype;c.nb=function(){return this.te()};c.$=function(){return this.Ta().ma()};c.Wh=function(){return this};
+c.Hg=function(){return this.Ta()};c.Le=function(a){return C7(this,a)};c.oe=function(a){var b=this.Ta();return upa(b,a)};c.z=function(){return!this.Ta().ta()};c.te=function(){return this};c.lc=function(){return this.Wh()};c.lh=function(a){var b=this.Ta();return WT(b,a)};c.nd=function(){return Lc()};c.ua=function(a){var b=this.Ta();XT(b,a)};c.Ai=function(a,b){var d=this.Ta();return yka(d,a,b)};c.Vj=function(a){var b=this.Ta();return vpa(b,a)};c.xj=function(a){return yO(this,a)};
+c.Yv=function(a){return e_a(this,a)};c.Jc=function(){return this.Ta().Jc()};c.ee=function(a){return f_a(this,a)};c.Ae=function(a,b,d){g_a(this,a,b,d)};c.nk=function(a){return i_a(this,a)};c.Wd=function(a){return h_a(this,a)};c.Ge=function(a,b){return xO(this,a,b)};var wva=g({kd:0},!0,"scala.collection.immutable.Iterable",{kd:1,qd:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,pd:1,Ob:1,Kb:1,rb:1,tb:1,q:1});function Zz(){}Zz.prototype=new U_a;Zz.prototype.constructor=Zz;Zz.prototype.b=function(){return this};
+Zz.prototype.$classData=g({l9:0},!1,"scalaz.Kleisli$",{l9:1,Nka:1,Oka:1,Pka:1,Uka:1,Vka:1,Wka:1,Xka:1,Yka:1,Zka:1,$ka:1,ala:1,Qka:1,Rka:1,Ska:1,Tka:1,d:1,l:1,i:1});var Qia=void 0;function Sb(){this.R=null}Sb.prototype=new l;Sb.prototype.constructor=Sb;c=Sb.prototype;c.nb=function(){return(new pj).c(this.R)};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return Uj(this)};c.W=function(a){a=65535&(this.R.charCodeAt(a)|0);return(new Ke).Xa(a)};c.Mb=function(a){return I8(this,a)};
+c.Hg=function(){return Ve(new We,this,0,this.R.length|0)};c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return g3(this)};c.lc=function(){return(new pj).c(this.R)};c.o=function(a){Ie();return a&&a.$classData&&a.$classData.n.$X?this.R===(null===a?null:a.R):!1};c.to=function(a){return 65535&(this.R.charCodeAt(a)|0)};c.zb=function(a){return cc(this,"",a,"")};c.Mc=function(a,b,d){return cc(this,a,b,d)};
+c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return N8(this)};c.k=function(){return this.R};c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.R.length|0,a,b)};c.xg=function(a){var b=this.R;return b===a?0:b<a?-1:1};c.Te=function(a,b){return P8(this,a,b)};c.Cg=function(){return Ek(this)};c.of=function(a,b){return He(Ie(),this.R,a,b)};c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return px(this)};
+c.Ha=function(){return this.R.length|0};c.Td=function(){return F8(this)};c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};c.Ta=function(){return Ve(new We,this,0,this.R.length|0)};c.Mf=function(){return this.R};c.Vc=function(a,b){return Ht(this,a,b)};c.ra=function(){return this.R.length|0};c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.R.length|0};c.Gi=function(a){return Lt(this,a)};c.Jc=function(){var a=Ve(new We,this,0,this.R.length|0);return Vv(a)};
+c.hd=function(){return Dm(this)};c.ee=function(a){var b=this.R.length|0;return He(Ie(),this.R,a,b)};c.be=function(){return(new pj).c(this.R)};c.aa=function(){return Ck(this)};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return(new pj).c(this.R)};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this.R};c.sf=function(a,b){return U8(this,0,this.R.length|0,a,b)};c.Ae=function(a,b,d){V8(this,a,b,d)};c.Eg=function(){return!0};
+c.r=function(){var a=this.R;return Ga(Ha(),a)};c.c=function(a){this.R=a;return this};c.we=function(){for(var a=dc(new ec,gc()),b=0,d=this.R.length|0;b<d;){var e=this.W(b);hc(a,e);b=1+b|0}return a.Oa};c.fg=function(a){return hE(this,a)};c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return Cm(this,a)};c.ve=function(){return uF(Ha(),this.R)};c.Ke=function(){return kd(this)};c.jc=function(a,b){return y5(this,a,b)};c.db=function(){return(new pm).b()};c.Ze=function(){return z5(this)};
+c.Ge=function(a,b){return Y8(this,a,b)};c.$classData=g({$X:0},!1,"scala.collection.immutable.StringOps",{$X:1,d:1,ZX:1,Ne:1,Id:1,Tc:1,tb:1,q:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,rb:1,Sc:1,Cm:1,Ed:1});function aF(a,b,d){b=0<b?b:0;d=0<d?d:0;var e=aE(W(),a.Fd());d=(d<e?d:e)-b|0;d=0<d?d:0;e=OA(QA(),AA(oa(a.Fd())),d);0<d&&Kv(Bf(),a.Fd(),b,e,0,d);return e}function m9(a,b,d,e){var f=aE(W(),a.Fd());e=e<f?e:f;f=aE(W(),b)-d|0;e=e<f?e:f;0<e&&Kv(Bf(),a.Fd(),0,b,d,e)}
+function n9(a,b){var d=b.Gd();return AA(oa(a.Fd()))===d?a.Fd():iE(a,b)}function Kc(){this.ti=null}Kc.prototype=new l9;Kc.prototype.constructor=Kc;function d0a(){}c=d0a.prototype=Kc.prototype;c.ua=function(a){var b=this.ti.wj();XT(b,a)};c.Ha=function(){return this.ti.Ha()};c.Ta=function(){return this.ti.wj()};c.mg=function(a){if(null===a)throw ug(vg(),null);this.ti=a;return this};
+c.$classData=g({mX:0},!1,"scala.collection.MapLike$DefaultValuesIterable",{mX:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,l:1,i:1});function MZ(){this.R=null}MZ.prototype=new l;MZ.prototype.constructor=MZ;c=MZ.prototype;c.nb=function(){return(new R3).lq(this.R)};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return Uj(this)};c.W=function(a){return this.R.m[a]};c.Mb=function(a){return I8(this,a)};c.Hg=function(){return Ve(new We,this,0,this.R.m.length)};
+c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return g3(this)};c.lc=function(){return(new R3).lq(this.R)};c.o=function(a){Gka||(Gka=(new EE).b());return a&&a.$classData&&a.$classData.n.mY?this.R===(null===a?null:a.R):!1};c.zb=function(a){return cc(this,"",a,"")};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return N8(this)};c.k=function(){return w5(this)};
+c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.Cg=function(){return Ek(this)};c.of=function(a,b){return aF(this,a,b)};c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return px(this)};c.Ha=function(){return this.R.m.length};c.Td=function(){return F8(this)};c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};
+c.Ta=function(){return Ve(new We,this,0,this.R.m.length)};c.Mf=function(){return cc(this,"","","")};c.Vc=function(a,b){return Ht(this,a,b)};c.ra=function(){return this.R.m.length};c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.R.m.length};c.Gi=function(a){return Lt(this,a)};c.Jc=function(){var a=Ve(new We,this,0,this.R.m.length);return Vv(a)};c.hd=function(){return Dm(this)};c.ee=function(a){return aF(this,a,this.R.m.length)};c.aa=function(){return Ck(this)};c.be=function(){return(new R3).lq(this.R)};
+c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return(new R3).lq(this.R)};c.lq=function(a){this.R=a;return this};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this.R};c.sf=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Ae=function(a,b,d){m9(this,a,b,d)};c.Eg=function(){return!0};c.r=function(){return this.R.r()};c.we=function(){for(var a=dc(new ec,gc()),b=0,d=this.R.m.length;b<d;)hc(a,this.R.m[b]),b=1+b|0;return a.Oa};
+c.fg=function(a){return hE(this,a)};c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return Cm(this,a)};c.ve=function(a){return n9(this,a)};c.Ke=function(){return kd(this)};c.jc=function(a,b){return y5(this,a,b)};c.db=function(){return(new a7).b()};c.Ze=function(){return z5(this)};c.Ge=function(a,b){return Y8(this,a,b)};c.$classData=g({mY:0},!1,"scala.collection.mutable.ArrayOps$ofBoolean",{mY:1,d:1,Tn:1,rg:1,Ef:1,kf:1,Id:1,Tc:1,tb:1,q:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,rb:1,Sc:1,Ne:1,ed:1});
+function NZ(){this.R=null}NZ.prototype=new l;NZ.prototype.constructor=NZ;c=NZ.prototype;c.nb=function(){return(new L3).gq(this.R)};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return Uj(this)};c.W=function(a){return this.R.m[a]};c.Mb=function(a){return I8(this,a)};c.Hg=function(){return Ve(new We,this,0,this.R.m.length)};c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return g3(this)};c.lc=function(){return(new L3).gq(this.R)};
+c.o=function(a){Hka||(Hka=(new FE).b());return a&&a.$classData&&a.$classData.n.nY?this.R===(null===a?null:a.R):!1};c.zb=function(a){return cc(this,"",a,"")};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return N8(this)};c.k=function(){return w5(this)};c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.Cg=function(){return Ek(this)};
+c.of=function(a,b){return aF(this,a,b)};c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return px(this)};c.Ha=function(){return this.R.m.length};c.Td=function(){return F8(this)};c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};c.Ta=function(){return Ve(new We,this,0,this.R.m.length)};c.Mf=function(){return cc(this,"","","")};c.Vc=function(a,b){return Ht(this,a,b)};c.ra=function(){return this.R.m.length};
+c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.R.m.length};c.Gi=function(a){return Lt(this,a)};c.Jc=function(){var a=Ve(new We,this,0,this.R.m.length);return Vv(a)};c.hd=function(){return Dm(this)};c.ee=function(a){return aF(this,a,this.R.m.length)};c.aa=function(){return Ck(this)};c.be=function(){return(new L3).gq(this.R)};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return(new L3).gq(this.R)};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this.R};
+c.sf=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Ae=function(a,b,d){m9(this,a,b,d)};c.Eg=function(){return!0};c.r=function(){return this.R.r()};c.we=function(){for(var a=dc(new ec,gc()),b=0,d=this.R.m.length;b<d;)hc(a,this.R.m[b]),b=1+b|0;return a.Oa};c.gq=function(a){this.R=a;return this};c.fg=function(a){return hE(this,a)};c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return Cm(this,a)};c.ve=function(a){return n9(this,a)};c.Ke=function(){return kd(this)};
+c.jc=function(a,b){return y5(this,a,b)};c.db=function(){return(new b7).b()};c.Ze=function(){return z5(this)};c.Ge=function(a,b){return Y8(this,a,b)};c.$classData=g({nY:0},!1,"scala.collection.mutable.ArrayOps$ofByte",{nY:1,d:1,Tn:1,rg:1,Ef:1,kf:1,Id:1,Tc:1,tb:1,q:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,rb:1,Sc:1,Ne:1,ed:1});function OZ(){this.R=null}OZ.prototype=new l;OZ.prototype.constructor=OZ;c=OZ.prototype;c.nb=function(){return(new N3).lm(this.R)};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return Uj(this)};
+c.W=function(a){return(new Ke).Xa(this.R.m[a])};c.Mb=function(a){return I8(this,a)};c.Hg=function(){return Ve(new We,this,0,this.R.m.length)};c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return g3(this)};c.lc=function(){return(new N3).lm(this.R)};c.o=function(a){Ika||(Ika=(new GE).b());return a&&a.$classData&&a.$classData.n.oY?this.R===(null===a?null:a.R):!1};c.zb=function(a){return cc(this,"",a,"")};
+c.Mc=function(a,b,d){return cc(this,a,b,d)};c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return N8(this)};c.k=function(){return w5(this)};c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.Cg=function(){return Ek(this)};c.of=function(a,b){return aF(this,a,b)};c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return px(this)};c.Ha=function(){return this.R.m.length};
+c.Td=function(){return F8(this)};c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};c.Ta=function(){return Ve(new We,this,0,this.R.m.length)};c.Mf=function(){return cc(this,"","","")};c.Vc=function(a,b){return Ht(this,a,b)};c.ra=function(){return this.R.m.length};c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.R.m.length};c.Gi=function(a){return Lt(this,a)};c.lm=function(a){this.R=a;return this};c.Jc=function(){var a=Ve(new We,this,0,this.R.m.length);return Vv(a)};
+c.hd=function(){return Dm(this)};c.ee=function(a){return aF(this,a,this.R.m.length)};c.aa=function(){return Ck(this)};c.be=function(){return(new N3).lm(this.R)};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return(new N3).lm(this.R)};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this.R};c.sf=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Ae=function(a,b,d){m9(this,a,b,d)};c.Eg=function(){return!0};c.r=function(){return this.R.r()};
+c.we=function(){for(var a=dc(new ec,gc()),b=0,d=this.R.m.length;b<d;){var e=this.W(b);hc(a,e);b=1+b|0}return a.Oa};c.fg=function(a){return hE(this,a)};c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return Cm(this,a)};c.ve=function(a){return n9(this,a)};c.Ke=function(){return kd(this)};c.jc=function(a,b){return y5(this,a,b)};c.db=function(){return(new c7).b()};c.Ze=function(){return z5(this)};c.Ge=function(a,b){return Y8(this,a,b)};
+c.$classData=g({oY:0},!1,"scala.collection.mutable.ArrayOps$ofChar",{oY:1,d:1,Tn:1,rg:1,Ef:1,kf:1,Id:1,Tc:1,tb:1,q:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,rb:1,Sc:1,Ne:1,ed:1});function PZ(){this.R=null}PZ.prototype=new l;PZ.prototype.constructor=PZ;c=PZ.prototype;c.nb=function(){return(new Q3).hq(this.R)};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return Uj(this)};c.W=function(a){return this.R.m[a]};c.Mb=function(a){return I8(this,a)};c.Hg=function(){return Ve(new We,this,0,this.R.m.length)};
+c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return g3(this)};c.lc=function(){return(new Q3).hq(this.R)};c.o=function(a){Jka||(Jka=(new HE).b());return a&&a.$classData&&a.$classData.n.pY?this.R===(null===a?null:a.R):!1};c.zb=function(a){return cc(this,"",a,"")};c.hq=function(a){this.R=a;return this};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return N8(this)};
+c.k=function(){return w5(this)};c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.Cg=function(){return Ek(this)};c.of=function(a,b){return aF(this,a,b)};c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return px(this)};c.Ha=function(){return this.R.m.length};c.Td=function(){return F8(this)};c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};
+c.Ta=function(){return Ve(new We,this,0,this.R.m.length)};c.Mf=function(){return cc(this,"","","")};c.Vc=function(a,b){return Ht(this,a,b)};c.ra=function(){return this.R.m.length};c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.R.m.length};c.Gi=function(a){return Lt(this,a)};c.Jc=function(){var a=Ve(new We,this,0,this.R.m.length);return Vv(a)};c.hd=function(){return Dm(this)};c.ee=function(a){return aF(this,a,this.R.m.length)};c.aa=function(){return Ck(this)};c.be=function(){return(new Q3).hq(this.R)};
+c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return(new Q3).hq(this.R)};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this.R};c.sf=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Ae=function(a,b,d){m9(this,a,b,d)};c.Eg=function(){return!0};c.r=function(){return this.R.r()};c.we=function(){for(var a=dc(new ec,gc()),b=0,d=this.R.m.length;b<d;)hc(a,this.R.m[b]),b=1+b|0;return a.Oa};c.fg=function(a){return hE(this,a)};
+c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return Cm(this,a)};c.ve=function(a){return n9(this,a)};c.Ke=function(){return kd(this)};c.jc=function(a,b){return y5(this,a,b)};c.db=function(){return(new d7).b()};c.Ze=function(){return z5(this)};c.Ge=function(a,b){return Y8(this,a,b)};c.$classData=g({pY:0},!1,"scala.collection.mutable.ArrayOps$ofDouble",{pY:1,d:1,Tn:1,rg:1,Ef:1,kf:1,Id:1,Tc:1,tb:1,q:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,rb:1,Sc:1,Ne:1,ed:1});function QZ(){this.R=null}
+QZ.prototype=new l;QZ.prototype.constructor=QZ;c=QZ.prototype;c.nb=function(){return(new $B).Xo(this.R)};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return Uj(this)};c.W=function(a){return this.R.m[a]};c.Mb=function(a){return I8(this,a)};c.Hg=function(){return Ve(new We,this,0,this.R.m.length)};c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return g3(this)};c.lc=function(){return(new $B).Xo(this.R)};
+c.o=function(a){Kka||(Kka=(new IE).b());return a&&a.$classData&&a.$classData.n.qY?this.R===(null===a?null:a.R):!1};c.zb=function(a){return cc(this,"",a,"")};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return N8(this)};c.k=function(){return w5(this)};c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.Cg=function(){return Ek(this)};
+c.of=function(a,b){return aF(this,a,b)};c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return px(this)};c.Ha=function(){return this.R.m.length};c.Td=function(){return F8(this)};c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};c.Ta=function(){return Ve(new We,this,0,this.R.m.length)};c.Xo=function(a){this.R=a;return this};c.Mf=function(){return cc(this,"","","")};c.Vc=function(a,b){return Ht(this,a,b)};c.ra=function(){return this.R.m.length};
+c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.R.m.length};c.Gi=function(a){return Lt(this,a)};c.Jc=function(){var a=Ve(new We,this,0,this.R.m.length);return Vv(a)};c.hd=function(){return Dm(this)};c.ee=function(a){return aF(this,a,this.R.m.length)};c.aa=function(){return Ck(this)};c.be=function(){return(new $B).Xo(this.R)};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return(new $B).Xo(this.R)};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this.R};
+c.sf=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Ae=function(a,b,d){m9(this,a,b,d)};c.Eg=function(){return!0};c.r=function(){return this.R.r()};c.we=function(){for(var a=dc(new ec,gc()),b=0,d=this.R.m.length;b<d;)hc(a,this.R.m[b]),b=1+b|0;return a.Oa};c.fg=function(a){return hE(this,a)};c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return Cm(this,a)};c.ve=function(a){return n9(this,a)};c.Ke=function(){return kd(this)};c.jc=function(a,b){return y5(this,a,b)};c.db=function(){return(new e7).b()};
+c.Ze=function(){return z5(this)};c.Ge=function(a,b){return Y8(this,a,b)};c.$classData=g({qY:0},!1,"scala.collection.mutable.ArrayOps$ofFloat",{qY:1,d:1,Tn:1,rg:1,Ef:1,kf:1,Id:1,Tc:1,tb:1,q:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,rb:1,Sc:1,Ne:1,ed:1});function RZ(){this.R=null}RZ.prototype=new l;RZ.prototype.constructor=RZ;c=RZ.prototype;c.nb=function(){return(new O3).iq(this.R)};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return Uj(this)};c.W=function(a){return this.R.m[a]};
+c.Mb=function(a){return I8(this,a)};c.Hg=function(){return Ve(new We,this,0,this.R.m.length)};c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return g3(this)};c.lc=function(){return(new O3).iq(this.R)};c.o=function(a){Lka||(Lka=(new JE).b());return a&&a.$classData&&a.$classData.n.rY?this.R===(null===a?null:a.R):!1};c.zb=function(a){return cc(this,"",a,"")};c.Mc=function(a,b,d){return cc(this,a,b,d)};
+c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return N8(this)};c.k=function(){return w5(this)};c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.Cg=function(){return Ek(this)};c.of=function(a,b){return aF(this,a,b)};c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return px(this)};c.Ha=function(){return this.R.m.length};c.Td=function(){return F8(this)};
+c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};c.Ta=function(){return Ve(new We,this,0,this.R.m.length)};c.iq=function(a){this.R=a;return this};c.Mf=function(){return cc(this,"","","")};c.Vc=function(a,b){return Ht(this,a,b)};c.ra=function(){return this.R.m.length};c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.R.m.length};c.Gi=function(a){return Lt(this,a)};c.Jc=function(){var a=Ve(new We,this,0,this.R.m.length);return Vv(a)};c.hd=function(){return Dm(this)};
+c.ee=function(a){return aF(this,a,this.R.m.length)};c.aa=function(){return Ck(this)};c.be=function(){return(new O3).iq(this.R)};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return(new O3).iq(this.R)};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this.R};c.sf=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Ae=function(a,b,d){m9(this,a,b,d)};c.Eg=function(){return!0};c.r=function(){return this.R.r()};
+c.we=function(){for(var a=dc(new ec,gc()),b=0,d=this.R.m.length;b<d;)hc(a,this.R.m[b]),b=1+b|0;return a.Oa};c.fg=function(a){return hE(this,a)};c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return Cm(this,a)};c.ve=function(a){return n9(this,a)};c.Ke=function(){return kd(this)};c.jc=function(a,b){return y5(this,a,b)};c.db=function(){return(new f7).b()};c.Ze=function(){return z5(this)};c.Ge=function(a,b){return Y8(this,a,b)};
+c.$classData=g({rY:0},!1,"scala.collection.mutable.ArrayOps$ofInt",{rY:1,d:1,Tn:1,rg:1,Ef:1,kf:1,Id:1,Tc:1,tb:1,q:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,rb:1,Sc:1,Ne:1,ed:1});function SZ(){this.R=null}SZ.prototype=new l;SZ.prototype.constructor=SZ;c=SZ.prototype;c.nb=function(){return(new P3).jq(this.R)};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return Uj(this)};c.W=function(a){return this.R.m[a]};c.Mb=function(a){return I8(this,a)};c.Hg=function(){return Ve(new We,this,0,this.R.m.length)};
+c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return g3(this)};c.jq=function(a){this.R=a;return this};c.lc=function(){return(new P3).jq(this.R)};c.o=function(a){Mka||(Mka=(new KE).b());return a&&a.$classData&&a.$classData.n.sY?this.R===(null===a?null:a.R):!1};c.zb=function(a){return cc(this,"",a,"")};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return N8(this)};
+c.k=function(){return w5(this)};c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.Cg=function(){return Ek(this)};c.of=function(a,b){return aF(this,a,b)};c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return px(this)};c.Ha=function(){return this.R.m.length};c.Td=function(){return F8(this)};c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};
+c.Ta=function(){return Ve(new We,this,0,this.R.m.length)};c.Mf=function(){return cc(this,"","","")};c.Vc=function(a,b){return Ht(this,a,b)};c.ra=function(){return this.R.m.length};c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.R.m.length};c.Gi=function(a){return Lt(this,a)};c.Jc=function(){var a=Ve(new We,this,0,this.R.m.length);return Vv(a)};c.hd=function(){return Dm(this)};c.ee=function(a){return aF(this,a,this.R.m.length)};c.aa=function(){return Ck(this)};c.be=function(){return(new P3).jq(this.R)};
+c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return(new P3).jq(this.R)};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this.R};c.sf=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Ae=function(a,b,d){m9(this,a,b,d)};c.Eg=function(){return!0};c.r=function(){return this.R.r()};c.we=function(){for(var a=dc(new ec,gc()),b=0,d=this.R.m.length;b<d;){var e=this.R.m[b];hc(a,(new Vb).ia(e.la,e.qa));b=1+b|0}return a.Oa};c.fg=function(a){return hE(this,a)};
+c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return Cm(this,a)};c.ve=function(a){return n9(this,a)};c.Ke=function(){return kd(this)};c.jc=function(a,b){return y5(this,a,b)};c.db=function(){return(new g7).b()};c.Ze=function(){return z5(this)};c.Ge=function(a,b){return Y8(this,a,b)};c.$classData=g({sY:0},!1,"scala.collection.mutable.ArrayOps$ofLong",{sY:1,d:1,Tn:1,rg:1,Ef:1,kf:1,Id:1,Tc:1,tb:1,q:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,rb:1,Sc:1,Ne:1,ed:1});function $m(){this.R=null}
+$m.prototype=new l;$m.prototype.constructor=$m;c=$m.prototype;c.nb=function(){return(new ri).Mh(this.R)};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return Uj(this)};c.W=function(a){return this.R.m[a]};c.Mb=function(a){return I8(this,a)};c.Hg=function(){return Ve(new We,this,0,this.R.m.length)};c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return g3(this)};c.lc=function(){return(new ri).Mh(this.R)};
+c.o=function(a){Nka||(Nka=(new LE).b());return a&&a.$classData&&a.$classData.n.tY?this.R===(null===a?null:a.R):!1};c.zb=function(a){return cc(this,"",a,"")};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return N8(this)};c.k=function(){return w5(this)};c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.Cg=function(){return Ek(this)};
+c.of=function(a,b){return aF(this,a,b)};c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return px(this)};c.Ha=function(){return this.R.m.length};c.Td=function(){return F8(this)};c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};c.Mh=function(a){this.R=a;return this};c.Ta=function(){return Ve(new We,this,0,this.R.m.length)};c.Mf=function(){return cc(this,"","","")};c.Vc=function(a,b){return Ht(this,a,b)};c.ra=function(){return this.R.m.length};
+c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.R.m.length};c.Gi=function(a){return Lt(this,a)};c.Jc=function(){var a=Ve(new We,this,0,this.R.m.length);return Vv(a)};c.hd=function(){return Dm(this)};c.ee=function(a){return aF(this,a,this.R.m.length)};c.aa=function(){return Ck(this)};c.be=function(){return(new ri).Mh(this.R)};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return(new ri).Mh(this.R)};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this.R};
+c.sf=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Ae=function(a,b,d){m9(this,a,b,d)};c.Eg=function(){return!0};c.r=function(){return this.R.r()};c.we=function(){for(var a=dc(new ec,gc()),b=0,d=this.R.m.length;b<d;)hc(a,this.R.m[b]),b=1+b|0;return a.Oa};c.fg=function(a){return hE(this,a)};c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return Cm(this,a)};c.ve=function(a){return n9(this,a)};c.Ke=function(){return kd(this)};c.jc=function(a,b){return y5(this,a,b)};
+c.db=function(){var a=this.R;return(new zT).ap($oa(apa(),AA(oa(a))))};c.Ze=function(){return z5(this)};c.Ge=function(a,b){return Y8(this,a,b)};c.$classData=g({tY:0},!1,"scala.collection.mutable.ArrayOps$ofRef",{tY:1,d:1,Tn:1,rg:1,Ef:1,kf:1,Id:1,Tc:1,tb:1,q:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,rb:1,Sc:1,Ne:1,ed:1});function TZ(){this.R=null}TZ.prototype=new l;TZ.prototype.constructor=TZ;c=TZ.prototype;c.nb=function(){return(new M3).kq(this.R)};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return Uj(this)};
+c.W=function(a){return this.R.m[a]};c.Mb=function(a){return I8(this,a)};c.Hg=function(){return Ve(new We,this,0,this.R.m.length)};c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return g3(this)};c.kq=function(a){this.R=a;return this};c.lc=function(){return(new M3).kq(this.R)};c.o=function(a){Oka||(Oka=(new ME).b());return a&&a.$classData&&a.$classData.n.uY?this.R===(null===a?null:a.R):!1};
+c.zb=function(a){return cc(this,"",a,"")};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return N8(this)};c.k=function(){return w5(this)};c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.Cg=function(){return Ek(this)};c.of=function(a,b){return aF(this,a,b)};c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return px(this)};
+c.Ha=function(){return this.R.m.length};c.Td=function(){return F8(this)};c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};c.Ta=function(){return Ve(new We,this,0,this.R.m.length)};c.Mf=function(){return cc(this,"","","")};c.Vc=function(a,b){return Ht(this,a,b)};c.ra=function(){return this.R.m.length};c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.R.m.length};c.Gi=function(a){return Lt(this,a)};c.Jc=function(){var a=Ve(new We,this,0,this.R.m.length);return Vv(a)};
+c.hd=function(){return Dm(this)};c.ee=function(a){return aF(this,a,this.R.m.length)};c.aa=function(){return Ck(this)};c.be=function(){return(new M3).kq(this.R)};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return(new M3).kq(this.R)};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this.R};c.sf=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Ae=function(a,b,d){m9(this,a,b,d)};c.Eg=function(){return!0};c.r=function(){return this.R.r()};
+c.we=function(){for(var a=dc(new ec,gc()),b=0,d=this.R.m.length;b<d;)hc(a,this.R.m[b]),b=1+b|0;return a.Oa};c.fg=function(a){return hE(this,a)};c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return Cm(this,a)};c.ve=function(a){return n9(this,a)};c.Ke=function(){return kd(this)};c.jc=function(a,b){return y5(this,a,b)};c.db=function(){return(new h7).b()};c.Ze=function(){return z5(this)};c.Ge=function(a,b){return Y8(this,a,b)};
+c.$classData=g({uY:0},!1,"scala.collection.mutable.ArrayOps$ofShort",{uY:1,d:1,Tn:1,rg:1,Ef:1,kf:1,Id:1,Tc:1,tb:1,q:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,rb:1,Sc:1,Ne:1,ed:1});function UZ(){this.R=null}UZ.prototype=new l;UZ.prototype.constructor=UZ;c=UZ.prototype;c.nb=function(){return(new S3).mq(this.R)};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return Uj(this)};c.W=function(){};c.Mb=function(a){return I8(this,a)};c.Hg=function(){return Ve(new We,this,0,this.R.m.length)};
+c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return g3(this)};c.lc=function(){return(new S3).mq(this.R)};c.o=function(a){Pka||(Pka=(new NE).b());return a&&a.$classData&&a.$classData.n.vY?this.R===(null===a?null:a.R):!1};c.zb=function(a){return cc(this,"",a,"")};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return N8(this)};c.k=function(){return w5(this)};
+c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.Cg=function(){return Ek(this)};c.of=function(a,b){return aF(this,a,b)};c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return px(this)};c.Ha=function(){return this.R.m.length};c.Td=function(){return F8(this)};c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};
+c.Ta=function(){return Ve(new We,this,0,this.R.m.length)};c.Mf=function(){return cc(this,"","","")};c.Vc=function(a,b){return Ht(this,a,b)};c.ra=function(){return this.R.m.length};c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.R.m.length};c.Gi=function(a){return Lt(this,a)};c.Jc=function(){var a=Ve(new We,this,0,this.R.m.length);return Vv(a)};c.hd=function(){return Dm(this)};c.ee=function(a){return aF(this,a,this.R.m.length)};c.aa=function(){return Ck(this)};c.be=function(){return(new S3).mq(this.R)};
+c.mq=function(a){this.R=a;return this};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return(new S3).mq(this.R)};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this.R};c.sf=function(a,b){return U8(this,0,this.R.m.length,a,b)};c.Ae=function(a,b,d){m9(this,a,b,d)};c.Eg=function(){return!0};c.r=function(){return this.R.r()};c.we=function(){for(var a=dc(new ec,gc()),b=0,d=this.R.m.length;b<d;)hc(a,void 0),b=1+b|0;return a.Oa};
+c.fg=function(a){return hE(this,a)};c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return Cm(this,a)};c.ve=function(a){return n9(this,a)};c.Ke=function(){return kd(this)};c.jc=function(a,b){return y5(this,a,b)};c.db=function(){return(new i7).b()};c.Ze=function(){return z5(this)};c.Ge=function(a,b){return Y8(this,a,b)};c.$classData=g({vY:0},!1,"scala.collection.mutable.ArrayOps$ofUnit",{vY:1,d:1,Tn:1,rg:1,Ef:1,kf:1,Id:1,Tc:1,tb:1,q:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,rb:1,Sc:1,Ne:1,ed:1});
+function o9(){}o9.prototype=new l9;o9.prototype.constructor=o9;function e0a(){}e0a.prototype=o9.prototype;function p9(a){var b=a.db();b.Zb(a);return b.Da()}function q9(a,b){b=a.pl(b);-1!==b&&a.By(b);return a}function r9(){this.af=this.ti=null}r9.prototype=new d0a;r9.prototype.constructor=r9;r9.prototype.ua=function(a){for(var b=this.af,d=b.Wb,b=cla(b),e=d.m[b];null!==e;){var f=e.ma();a.y(e.Y);for(e=f;null===e&&0<b;)b=-1+b|0,e=d.m[b]}};
+r9.prototype.Mu=function(a){if(null===a)throw ug(vg(),null);this.af=a;Kc.prototype.mg.call(this,a);return this};r9.prototype.$classData=g({Eha:0},!1,"scala.collection.mutable.HashMap$$anon$2",{Eha:1,mX:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,l:1,i:1});function Tv(){this.Rd=null}Tv.prototype=new l;Tv.prototype.constructor=Tv;c=Tv.prototype;c.nb=function(){return(new w).f(this.Rd)};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return Uj(this)};
+c.b=function(){Tv.prototype.f.call(this,[]);return this};c.W=function(a){return this.Rd[a]};c.Mb=function(a){return I8(this,a)};c.Hg=function(){return Ve(new We,this,0,this.Rd.length|0)};c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return g3(this)};c.lc=function(){return(new w).f(this.Rd)};c.o=function(a){return $2(this,a)};c.zb=function(a){return cc(this,"",a,"")};c.Mc=function(a,b,d){return cc(this,a,b,d)};
+c.md=function(a){this.Rd.push(a);return this};c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return N8(this)};c.k=function(){return w5(this)};c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.Rd.length|0,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.Cg=function(){return Ek(this)};c.of=function(a,b){return Q8(this,a,b)};c.gg=function(){dk();var a=ek().nc;return L(this,a)};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return px(this)};
+c.Ha=function(){return this.Rd.length|0};c.Td=function(){return F8(this)};c.Da=function(){return this.Rd};c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};c.Ta=function(){return Ve(new We,this,0,this.Rd.length|0)};c.dg=function(a,b){pU(this,a,b)};c.Mf=function(){return cc(this,"","","")};c.Vc=function(a,b){return Ht(this,a,b)};c.ra=function(){return this.Rd.length|0};c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.Rd.length|0};
+c.Gi=function(a){return Lt(this,a)};c.Jc=function(){var a=Ve(new We,this,0,this.Rd.length|0);return Vv(a)};c.hd=function(){return Dm(this)};c.ee=function(a){return Q8(this,a,this.Rd.length|0)};c.aa=function(){return Ck(this)};c.be=function(){return(new w).f(this.Rd)};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return(new w).f(this.Rd)};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this.Rd};c.sf=function(a,b){return U8(this,0,this.Rd.length|0,a,b)};
+c.Qa=function(a){this.Rd.push(a);return this};c.qc=function(){};c.Ae=function(a,b,d){V8(this,a,b,d)};c.Eg=function(){return!0};c.r=function(){return QT(Q(),(new w).f(this.Rd))};c.we=function(){for(var a=dc(new ec,gc()),b=0,d=this.Rd.length|0;b<d;)hc(a,this.Rd[b]),b=1+b|0;return a.Oa};c.fg=function(a){return hE(this,a)};c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return Cm(this,a)};c.ve=function(a){return iE(this,a)};c.Ke=function(){return kd(this)};c.f=function(a){this.Rd=a;return this};
+c.jc=function(a,b){return y5(this,a,b)};c.db=function(){return(new Tv).b()};c.Zb=function(a){return oE(this,a)};c.Ze=function(){return z5(this)};c.Ge=function(a,b){return Y8(this,a,b)};function Ku(a){return!!(a&&a.$classData&&a.$classData.n.FY)}c.$classData=g({FY:0},!1,"scala.scalajs.js.ArrayOps",{FY:1,d:1,rg:1,Ef:1,kf:1,Id:1,Tc:1,tb:1,q:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,rb:1,Sc:1,Ne:1,Ld:1,Kd:1,Jd:1});function MS(){}MS.prototype=new l;MS.prototype.constructor=MS;c=MS.prototype;
+c.Xk=function(a,b){var d=Jz().kg;return V0(this,a,b,d)};c.sj=function(){};c.cd=function(a,b){return MCa(this,a,b)};c.kz=function(a,b,d){return Cia(a,b,d)};c.th=function(){};c.Qn=function(){};c.ok=function(a){return py(this,a)};c.ih=function(a,b){a:{var d;d=gq(dt(a));if(iq(d))a=d.bd,d=d.fd,eq(),d=(new kq).Sb(a,d);else throw(new q).j(d);a=d.Pc;var e=b.y(d.Gc);d=a;a=e;b:for(;;){if(!hq(d)){if(iq(d)){e=d;d=e.fd;a=Nq(b.y(e.bd),a);continue b}throw(new q).j(d);}break a}}return a};c.tp=function(){};c.Gl=function(){};
+c.Ok=function(){};c.wh=function(a,b,d){return Y0(d,a,b,this)};c.Xq=function(){};c.Rn=function(){};c.tq=function(){Ad(this);Ky(this);ry(this);oz(this);this.Xq(pz(this));this.Zq(qz(this));tS(this);uS(this);vS(this);wS(this);zS(this);Bd(this);YR(this);oY(this);Ld(this);Kd(this);UR(this);return this};c.nh=function(a){return Jy(this,a)};c.Px=function(a,b,d){var e=a.Pc;a=b.y(a.Gc);return Qua(e,a,d)};c.Wg=function(){};c.Yq=function(){};c.Wk=function(a,b,d){return Cia(a,b,d)};
+function f0a(a,b,d,e){var f=b.Pc,h=d.y(b.Gc);b=f;f=h;for(;;){if(hq(b))return f;if(iq(b))h=b,b=h.fd,f=e.sc(f,K(function(a,b,d){return function(){return b.y(d)}}(a,d,h.bd)));else throw(new q).j(b);}}c.Qd=function(a){eq();a=ne(a);var b=[],d=fq().$d,e=b.length|0;a:for(;;){if(0!==e){d=(new jq).Sb(b[-1+e|0],d);e=-1+e|0;continue a}break}return(new kq).Sb(a,d)};c.pg=function(){};c.wf=function(a,b){return o2(this,a,b)};c.Wj=function(a,b,d){return f0a(this,a,b,d)};c.Em=function(){};c.$s=function(){};c.sh=function(){};
+c.Fl=function(){};c.rj=function(){};c.Zq=function(){};c.zi=function(a,b,d){var e=a.Pc;a=qb(d,b,a.Gc);return Qua(e,a,d)};c.jj=function(a){return p2(this,a)};c.$classData=g({y9:0},!1,"scalaz.NonEmptyListInstances$$anon$1",{y9:1,d:1,kC:1,Vl:1,fh:1,ug:1,cl:1,dl:1,dC:1,Gj:1,Bh:1,Dh:1,Eh:1,Ch:1,Ej:1,Fj:1,Ul:1,Jr:1,yt:1,Vm:1,qo:1,po:1,Ip:1});function g0a(a,b,d){var e=a.$b(b);if(Fk(e))return e.U;if(F()===e)return d=ne(d),a.rr(b,d),d;throw(new q).j(e);}
+function ox(a){var b=(new e3).qb(a.Ha());a.ua(m(new n,function(a,b){return function(a){return f3(b,a)}}(a,b)));return b}function h0a(a){for(var b=a.bv();b.ta();){var d=b.ma();a.yj(d)}}function i0a(a){var b=(new e3).qb(a.Ha());a.ua(m(new n,function(a,b){return function(a){return f3(b,a)}}(a,b)));return b}function hz(){}hz.prototype=new l;hz.prototype.constructor=hz;c=hz.prototype;c.Xk=function(a,b){var d=Jz().kg;return V0(this,a,b,d)};c.sj=function(){};
+function j0a(a,b,d){Lx();return(new Mx).Ac(K(function(a,b,d){return function(){var a=T(ne(d)),e=ne(b);return a.y(T(e))}}(a,b,d)))}c.b=function(){Ad(this);Ky(this);tS(this);uS(this);vS(this);wS(this);zS(this);YR(this);oY(this);ry(this);oz(this);this.Xq(pz(this));this.Zq(qz(this));Ld(this);Kd(this);UR(this);this.Wq(cS(this));return this};c.Wq=function(){};c.cd=function(a,b){return k0a(this,a,b)};c.kz=function(a,b,d){return l0a(this,a,b,d)};c.th=function(){};c.Qn=function(){};
+c.ok=function(a){return py(this,a)};c.ih=function(a,b){return m0a(this,a,b)};c.tp=function(){};c.Gl=function(){};c.Ok=function(){};c.wh=function(a,b,d){return Y0(d,a,b,this)};function l0a(a,b,d,e){return e.cd(d.y(T(b)),m(new n,function(a){return function(b){Lx();return(new Mx).Ac(K(function(a,b){return function(){return b}}(a,b)))}}(a)))}c.Xq=function(){};c.Rn=function(){};function k0a(a,b,d){Lx();return(new Mx).Ac(K(function(a,b,d){return function(){return d.y(T(b))}}(a,b,d)))}
+function m0a(a,b,d){Lx();return(new Mx).Ac(K(function(a,b,d){return function(){return T(d.y(T(b)))}}(a,b,d)))}c.nh=function(a){return Jy(this,a)};c.Px=function(a,b,d){return eoa(this,a,b,d)};c.Wg=function(){};c.Wk=function(a,b,d){return l0a(this,a,b,d)};c.Qd=function(a){Lx();return(new Mx).Ac(a)};c.pg=function(){};c.wf=function(a,b){return j0a(this,a,b)};c.Wj=function(a,b){return b.y(T(a))};c.Em=function(){};c.$s=function(){};c.sh=function(){};c.Fl=function(){};c.rj=function(){};c.Zq=function(){};
+c.zi=function(a,b,d){return qb(d,b,T(a))};c.jj=function(a){return p2(this,a)};c.$classData=g({u9:0},!1,"scalaz.Need$$anon$2",{u9:1,d:1,Gj:1,Bh:1,Dh:1,fh:1,ug:1,Eh:1,Ch:1,Ej:1,Fj:1,Ul:1,yt:1,Vm:1,xR:1,kC:1,Vl:1,cl:1,dl:1,dC:1,qo:1,po:1,Ip:1,bC:1});function s9(){}s9.prototype=new l;s9.prototype.constructor=s9;c=s9.prototype;c.Xk=function(a,b){return n0a(this,a,b)};c.sj=function(){};c.Fv=function(){};c.cd=function(a,b){dk();var d=ek().nc;return Cr(a,b,d)};c.th=function(){};c.Qn=function(){};
+c.ok=function(a){return py(this,a)};function o0a(a,b,d,e){var f=null,f=e.Qd(K(function(){return function(){return oc().ai.el}}(a)));for(b=gk(b);b.Yh;)var h=b.ma(),f=kz(e,K(function(a,b){return function(){return b}}(a,f)),K(function(a,b,d){return function(){return b.y(d)}}(a,d,h)),sb(new tb,function(){return function(a,b){return a.mc(b,(dk(),ek().nc))}}(a)));return f}c.ih=function(a,b){dk();var d=ek().nc;return u5(a,b,d)};c.tp=function(){};c.Gl=function(){};c.Kv=function(){};c.Ok=function(){};
+c.wh=function(a,b,d){return Y0(d,a,b,this)};function n0a(a,b,d){a=m(new n,function(a,b,d){return function(a){var e=oc().ai,t;t=(new A).e(a,e.el);for(a=gk(b);a.Yh;)e=a.ma(),e=Qy(d.y(e),t.ja(),Jz().kg),t=(new A).e(e.ja(),t.na().mc(e.na(),(dk(),ek().nc)));return t}}(a,b,d));b=Jz().kg;return Kz(new Lz,a,b)}c.Rn=function(){};c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Yq=function(){};c.Wk=function(a,b,d){return o0a(this,a,b,d)};c.Qd=function(a){return oc().ai.el.mc(ne(a),(dk(),ek().nc))};
+c.pg=function(){};c.wf=function(a,b){return o2(this,a,b)};c.Wj=function(a,b,d){return a1(this,a,b,d)};c.sh=function(){};c.Fl=function(){};c.rj=function(){};c.dt=function(){};c.zi=function(a,b,d){return b1(this,a,b,d).ja()};c.jj=function(a){return p2(this,a)};c.at=function(){};c.$classData=g({yaa:0},!1,"scalaz.std.VectorInstances$$anon$1",{yaa:1,d:1,Vl:1,fh:1,ug:1,cl:1,dl:1,Vw:1,Gj:1,Bh:1,Dh:1,Eh:1,Ch:1,Ej:1,Fj:1,Rw:1,Ct:1,Jr:1,Ww:1,Ul:1,qo:1,po:1,zt:1,Ip:1});function sS(){}sS.prototype=new l;
+sS.prototype.constructor=sS;c=sS.prototype;c.Xk=function(a,b){var d=Jz().kg;return V0(this,a,b,d)};c.sj=function(){};c.Fv=function(){};c.cd=function(a,b){return Fia(a,b)};c.th=function(){};
+function p0a(a,b,d,e){var f=e.Qd(K(function(){return function(){return fq().$d}}(a)));b=gq(b);for(;;){if(hq(b))return f;if(iq(b)){var h=b;b=h.fd;f=kz(e,K(function(a,b,d){return function(){return b.y(d)}}(a,d,h.bd)),K(function(a,b){return function(){return b}}(a,f)),sb(new tb,function(){return function(a,b){return(new jq).Sb(a,b)}}(a)))}else throw(new q).j(b);}}c.Qn=function(){};c.ok=function(a){return py(this,a)};
+c.ih=function(a,b){a:{var d=fq().$d;a=gq(a);b:for(;;){if(!hq(a)){if(iq(a)){var e=a;a=e.fd;d=Eia(b.y(e.bd),d);continue b}throw(new q).j(a);}break a}}return d};c.tp=function(){};c.Gl=function(){};c.Kv=function(){};c.Ok=function(){};c.wh=function(a,b,d){return Y0(d,a,b,this)};function q0a(a,b,d,e){var f=e.xe();for(;;){if(hq(b))return f;if(iq(b)){var h=b;b=h.fd;f=e.sc(f,K(function(a,b,d){return function(){return b.y(d)}}(a,d,h.bd)))}else throw(new q).j(b);}}c.Rn=function(){};
+c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Yq=function(){};c.Wk=function(a,b,d){return p0a(this,a,b,d)};c.Qd=function(a){var b=fq();a=ne(a);return(new jq).Sb(a,b.$d)};c.pg=function(){};c.wf=function(a,b){return o2(this,a,b)};c.Wj=function(a,b,d){return q0a(this,a,b,d)};c.Em=function(){};c.sh=function(){};c.Fl=function(){};c.rj=function(){};c.dt=function(){};c.zi=function(a,b,d){return Qua(a,b,d)};c.jj=function(a){return p2(this,a)};c.at=function(){};
+c.$classData=g({W8:0},!1,"scalaz.IListInstances$$anon$1",{W8:1,d:1,Vl:1,fh:1,ug:1,cl:1,dl:1,Vw:1,Gj:1,Bh:1,Dh:1,Eh:1,Ch:1,Ej:1,Fj:1,Rw:1,Ct:1,Jr:1,Ww:1,Ul:1,qo:1,po:1,Ip:1,zt:1,Vm:1});function t9(){}t9.prototype=new l;t9.prototype.constructor=t9;c=t9.prototype;c.Xk=function(a,b){var d=Jz().kg;return V0(this,a,b,d)};c.rF=function(){};c.sj=function(){};c.Wq=function(){};c.cd=function(a,b){return MCa(this,a,b)};c.kz=function(a,b){return b.y(a)};c.th=function(){};c.Qn=function(){};
+c.ok=function(a){return py(this,a)};function moa(){var a=new t9;Ad(a);Ky(a);ry(a);oz(a);a.Xq(pz(a));a.Zq(qz(a));tS(a);uS(a);vS(a);wS(a);zS(a);YR(a);oY(a);Ld(a);Kd(a);UR(a);a.Wq(cS(a));a.rF(woa(a));return a}c.ih=function(a,b){return b.y(a)};c.tp=function(){};c.Gl=function(){};c.Ok=function(){};c.wh=function(a,b,d){return d.cd(a,b)};c.Xq=function(){};c.Rn=function(){};c.nh=function(a){return a};c.Px=function(a,b,d){return eoa(this,a,b,d)};c.Wg=function(){};c.Wk=function(a,b){return b.y(a)};c.Qd=function(a){return ne(a)};
+c.pg=function(){};c.wf=function(a,b){return ne(b).y(ne(a))};c.Wj=function(a,b,d){return SBa(this,a,b,d)};c.Em=function(){};c.$s=function(){};c.sh=function(){};c.Fl=function(){};c.rj=function(){};c.Zq=function(){};c.zi=function(a,b,d){return b1(this,a,b,d).ja()};c.jj=function(a){return a};c.$classData=g({$8:0},!1,"scalaz.IdInstances$$anon$1",{$8:1,d:1,kC:1,Vl:1,fh:1,ug:1,cl:1,dl:1,dC:1,Gj:1,Bh:1,Dh:1,Eh:1,Ch:1,Ej:1,Fj:1,Ul:1,yt:1,Vm:1,xR:1,qo:1,po:1,Ip:1,bC:1,E9:1});function j1(){}j1.prototype=new l;
+j1.prototype.constructor=j1;c=j1.prototype;c.Xk=function(a,b){return r0a(this,a,b)};c.sj=function(){};c.Fv=function(){};c.cd=function(a,b){var d=B();return a.xa(b,d.s)};c.th=function(){};c.Qn=function(){};c.ok=function(a){return a};c.ih=function(a,b){var d=B();return a.fj(b,d.s)};c.tp=function(){};c.Gl=function(){};c.Kv=function(){};c.Ok=function(){};c.wh=function(a,b,d){return Y0(d,a,b,this)};
+function s0a(a,b,d,e){b=qy(b);for(var f=e.Qd(K(function(){return function(){return y()}}(a)));!b.z();){var h=b.$(),f=kz(e,K(function(a,b,d){return function(){return b.y(d)}}(a,d,h)),K(function(a,b){return function(){return b}}(a,f)),sb(new tb,function(){return function(a,b){return Ng(new Og,a,b)}}(a)));b=b.aa()}return f}c.Rn=function(){};c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Yq=function(){};c.Wk=function(a,b,d){return s0a(this,a,b,d)};
+c.Qd=function(a){a=ne(a);var b=y();return Ng(new Og,a,b)};c.pg=function(){};function r0a(a,b,d){a=m(new n,function(a,b,d){return function(a){var e=(new jc).b(),t;t=a;for(a=b;!a.z();){var x=a.$();t=Qy(d.y(x),t,Jz().kg);lc(e,t.na());t=t.ja();a=a.aa()}return(new A).e(t,e.ob())}}(a,b,d));b=Jz().kg;return Kz(new Lz,a,b)}c.wf=function(a,b){return o2(this,a,b)};c.Wj=function(a,b,d){return a1(this,a,b,d)};
+c.Eu=function(){Ad(this);Ky(this);ry(this);oz(this);tS(this);uS(this);vS(this);wS(this);Bd(this);xz(this);xS(this);yS(this);zS(this);Ld(this);Kd(this);UR(this);AS(this);YR(this);return this};c.Em=function(){};c.sh=function(){};c.Fl=function(){};c.rj=function(){};c.dt=function(){};c.zi=function(a,b,d){return a9(a,b,d)};c.jj=function(a){return p2(this,a)};c.at=function(){};
+c.$classData=g({gaa:0},!1,"scalaz.std.ListInstances$$anon$1",{gaa:1,d:1,Vl:1,fh:1,ug:1,cl:1,dl:1,Vw:1,Gj:1,Bh:1,Dh:1,Eh:1,Ch:1,Ej:1,Fj:1,Rw:1,Ct:1,Jr:1,Ww:1,Ul:1,qo:1,po:1,Ip:1,zt:1,Vm:1});function u9(){}u9.prototype=new l;u9.prototype.constructor=u9;c=u9.prototype;c.Xk=function(a,b){var d=Jz().kg;return V0(this,a,b,d)};c.sj=function(){};c.Fv=function(){};function t0a(a,b,d,e){return b.z()?ne(d):qb(e,b.$(),K(function(a,b,d,e){return function(){return t0a(a,b.aa(),d,e)}}(a,b,d,e)))}
+c.cd=function(a,b){return a.xa(b,(xg(),(new yg).b()))};c.th=function(){};c.Qn=function(){};c.ok=function(a){return py(this,a)};c.ih=function(a,b){return a.fj(b,(xg(),(new yg).b()))};c.tp=function(){};c.Gl=function(){};c.Kv=function(){};c.Ok=function(){};c.wh=function(a,b,d){return Y0(d,a,b,this)};c.Rn=function(){};c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Yq=function(){};c.Wk=function(a,b,d){return u0a(this,a,b,d)};
+c.ZD=function(){Ad(this);Ky(this);ry(this);oz(this);tS(this);uS(this);vS(this);wS(this);Bd(this);xz(this);xS(this);yS(this);zS(this);Ld(this);Kd(this);UR(this);AS(this);YR(this);return this};c.Qd=function(a){oc();a=(new w).f([ne(a)]);a=Ve(new We,a,0,a.pa.length|0);return Vv(a)};c.pg=function(){};c.wf=function(a,b){return o2(this,a,b)};c.Wj=function(a,b,d){return v0a(this,a,b,d)};c.Em=function(){};c.sh=function(){};
+function v0a(a,b,d,e){return t0a(a,b,K(function(a,b){return function(){return b.xe()}}(a,e)),sb(new tb,function(a,b,d){return function(a,e){return d.sc(b.y(a),e)}}(a,d,e)))}c.Fl=function(){};c.rj=function(){};c.dt=function(){};c.zi=function(a,b,d){return a.Gb(b,d)};
+function u0a(a,b,d,e){var f=e.Qd(K(function(){return function(){oc();return y().Jc()}}(a)));return t0a(a,b,K(function(a,b){return function(){return b}}(a,f)),sb(new tb,function(a,b,d){return function(e,f){return kz(d,K(function(a,b,d){return function(){return b.y(d)}}(a,b,e)),f,sb(new tb,function(a){return function(b,d){xg();return Eka((new rE).Ac(K(function(a,b){return function(){return b}}(a,d))),b)}}(a)))}}(a,d,e)))}c.jj=function(a){return p2(this,a)};c.at=function(){};
+c.$classData=g({qaa:0},!1,"scalaz.std.StreamInstances$$anon$1",{qaa:1,d:1,Vl:1,fh:1,ug:1,cl:1,dl:1,Vw:1,Gj:1,Bh:1,Dh:1,Eh:1,Ch:1,Ej:1,Fj:1,Rw:1,Ct:1,Jr:1,Ww:1,Ul:1,qo:1,po:1,Ip:1,zt:1,Vm:1});function v9(){}v9.prototype=new l9;v9.prototype.constructor=v9;function w9(){}c=w9.prototype=v9.prototype;c.CU=function(a,b){return qQ(this,a,b)};c.Mb=function(a){return E_a(this,a)};c.GD=function(a){return this.Te(a,0)};c.z=function(){return 0===this.Mb(0)};c.Am=function(a){return aC(this,a)};
+c.o=function(a){return $2(this,a)};c.Ij=function(a){return r_(this,a)};c.Fa=function(a){return this.y(a)|0};c.mc=function(a,b){return Di(this,a,b)};c.k=function(){return w5(this)};c.Te=function(a,b){return F_a(this,a,b)};c.Cf=function(){return G_a(this)};c.Ha=function(){return this.ra()};c.xl=function(a){return s_(new t_,this,a)};c.Qc=function(a,b){return qx(this,a,b)};c.xi=function(){return C8(this)};c.Ga=function(a){return!!this.y(a)};c.ib=function(a){return Kh(this,a)};c.be=function(){return this};
+c.Ic=function(){return this.be()};c.dp=function(a){return a3(this,a)};c.pl=function(a){return this.CU(a,0)};c.eb=function(a,b){return cC(this,a,b)};c.r=function(){return QT(Q(),this.vh())};c.Ca=function(a){return r_(this,a)};function x9(){}x9.prototype=new l9;x9.prototype.constructor=x9;function y9(){}c=y9.prototype=x9.prototype;c.y=function(a){var b=this.$b(a);if(F()===b)a=this.Dw(a);else if(Fk(b))a=b.U;else throw(new q).j(b);return a};c.z=function(){return 0===this.Ha()};
+c.Am=function(a){return aC(this,a)};c.o=function(a){return JP(this,a)};c.Ij=function(a){return r_(this,a)};c.Fa=function(a){return this.y(a)|0};c.k=function(){return w5(this)};c.bv=function(){return(new i3).mg(this)};c.al=function(a){return Ic(this,a)};c.Td=function(){return S_a(this)};c.xl=function(a){return s_(new t_,this,a)};c.mZ=function(){return(new Kc).mg(this)};c.Ga=function(a){return!!this.y(a)};c.Dw=function(a){throw(new Du).c("key not found: "+a);};c.wj=function(){return(new j3).mg(this)};
+c.ib=function(a){return this.$b(a).ba()};c.Sf=function(a,b,d,e){return T_a(this,a,b,d,e)};c.Ic=function(){return Yr(this)};c.gU=function(a){return g9(this,a)};c.Ya=function(a){return this.ib(a)};c.r=function(){var a=Q();return PD(a,this.Vn(),a.CV)};c.eb=function(a,b){var d=this.$b(a);if(Fk(d))a=d.U;else if(F()===d)a=b.y(a);else throw(new q).j(d);return a};c.Ca=function(a){return r_(this,a)};c.db=function(){return dc(new ec,this.fi())};c.Ze=function(){return"Map"};function z9(){}z9.prototype=new l9;
+z9.prototype.constructor=z9;function A9(){}c=A9.prototype=z9.prototype;c.z=function(){return 0===this.Ha()};c.o=function(a){return t5(this,a)};c.Fa=function(a){return this.ib(a)|0};c.k=function(){return w5(this)};c.$F=function(a){return this.lh(a)};c.al=function(a){return Ic(this,a)};c.Td=function(){return Q_a(this)};c.Ga=function(a){return this.ib(a)};c.Ic=function(){return kp(this)};c.r=function(){var a=Q();return PD(a,this.vp(),a.Qy)};c.xa=function(a,b){return Cr(this,a,b)};
+c.Ca=function(a){return pb(this,a)};c.Bp=function(a){return ql(this,a)};c.db=function(){return mh(new nh,this.gm())};c.Ze=function(){return"Set"};function PU(){this.uc=null}PU.prototype=new l;PU.prototype.constructor=PU;c=PU.prototype;c.nb=function(){return this};c.yg=function(a,b){$D(this,a,b)};c.$=function(){return gk(this.uc).ma()};c.W=function(a){return this.uc.W(a)};c.Mb=function(a){return E_a(this,a)};c.Hg=function(){return gk(this.uc)};c.GD=function(a){return F_a(this,a,0)};
+c.Le=function(a){return C7(this,a)};c.y=function(a){return this.uc.W(a|0)};c.ss=function(a){return Cka(this,a)};c.oe=function(a){var b=gk(this.uc);return upa(b,a)};c.ob=function(){var a=B().s;return L(this,a)};c.z=function(){return 0===this.Mb(0)};c.Am=function(a){return aC(this,a)};c.lc=function(){return this};c.fj=function(a,b){return u5(this,a,b)};c.o=function(a){return $2(this,a)};c.Ij=function(a){return r_(this,a)};c.WC=function(a){return cE(this,a)};c.Sj=function(a){return ZBa(this,a)};
+c.Fa=function(a){return this.uc.W(a)|0};c.zb=function(a){return cc(this,"",a,"")};c.Mc=function(a,b,d){return cc(this,a,b,d)};c.fo=function(a){return Xb(new Yb,this,a)};c.lh=function(a){var b=gk(this.uc);return WT(b,a)};c.mc=function(a,b){return Di(this,a,b)};c.Je=function(){return v5(this)};c.k=function(){return cc(this.uc,"[",", ","]")};c.nd=function(){return ek()};c.ua=function(a){var b=gk(this.uc);XT(b,a)};c.Gb=function(a,b){return nl(this,a,b)};
+c.Ai=function(a,b){var d=gk(this.uc);return yka(d,a,b)};c.Te=function(a,b){return F_a(this,a,b)};c.Cg=function(){return Ek(this)};c.gg=function(){return this.uc};c.Xf=function(a){return x5(this,a,!1)};c.Cf=function(){return(new PU).Es(G_a(this.uc))};c.ml=function(a,b){return x5(this,a,b)};c.Ha=function(){return this.uc.ra()};c.xl=function(a){return s_(new t_,this,a)};c.Td=function(){return F8(this)};c.xi=function(){return C8(this)};c.Qc=function(a,b){return qx(this,a,b)};c.Ga=function(a){return!!this.uc.W(a)};
+c.Ta=function(){return gk(this.uc)};c.Vj=function(a){var b=gk(this.uc);return vpa(b,a)};c.wn=function(){return WO(this)};c.Mf=function(){return cc(this,"","","")};c.Vc=function(a,b){return Ht(this,a,b)};c.xj=function(a){return yO(this,a)};c.ra=function(){return this.uc.ra()};c.vh=function(){return this};c.Af=function(a){return x5(this,a,!0)};c.nf=function(){return this.uc.ra()};c.Gi=function(a){return Lt(this,a)};c.Jc=function(){var a=gk(this.uc);return Vv(a)};c.hd=function(){return $Ba(this)};
+c.ee=function(a){return f_a(this,a)};c.ib=function(a){return Kh(this,a)};c.Es=function(a){this.uc=a;return this};c.be=function(){return this};c.aa=function(){return aCa(this)};c.Sf=function(a,b,d,e){return fE(this,a,b,d,e)};c.Ic=function(){return this};c.Ya=function(a){return a3(this,a|0)};c.dp=function(a){return a3(this,a)};c.gd=function(){var a=ol(),a=pl(a);return L(this,a)};c.Fd=function(){return this};c.sf=function(a,b){return nl(this,a,b)};c.pl=function(a){return qQ(this,a,0)};
+c.eb=function(a,b){return cC(this,a,b)};c.Ae=function(a,b,d){g_a(this,a,b,d)};c.Eg=function(){return!0};c.r=function(){return QT(Q(),this)};c.we=function(){for(var a=dc(new ec,gc()),b=gk(this.uc);b.Yh;){var d=b.ma();hc(a,d)}return a.Oa};c.fg=function(a){return hE(this,a)};c.xa=function(a,b){return Cr(this,a,b)};c.Wd=function(a){return h_a(this,a)};c.nk=function(a){return i_a(this,a)};c.ve=function(a){return iE(this,a)};c.Ca=function(a){return r_(this,a)};c.Ke=function(){return kd(this)};
+function Bo(a,b){return(new PU).Es(a.uc.mc(b,(dk(),ek().nc)))}c.jc=function(a,b){return y5(this,a,b)};c.ek=function(a){return jE(this,a)};c.db=function(){ek();$F();dk();return(new aG).b()};c.Ze=function(){return z5(this)};c.Ge=function(a,b){return xO(this,a,b)};function Eg(a){return!!(a&&a.$classData&&a.$classData.n.MH)}
+c.$classData=g({MH:0},!1,"org.nlogo.core.LogoList",{MH:1,d:1,og:1,he:1,Ea:1,fa:1,Ob:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Kb:1,rb:1,tb:1,q:1,ge:1,Sc:1,Tc:1,Id:1,l:1,i:1});function B9(){}B9.prototype=new l;B9.prototype.constructor=B9;c=B9.prototype;c.Xk=function(a,b){var d=Jz().kg;return V0(this,a,b,d)};c.rF=function(){};c.sj=function(){};c.Fv=function(){};c.Wq=function(){};c.cd=function(a,b){return a.z()?F():(new J).j(b.y(a.X()))};c.th=function(){};c.Qn=function(){};
+c.ok=function(a){return py(this,a)};c.ih=function(a,b){return a.z()?F():b.y(a.X())};function fua(){var a=new B9;Ad(a);Ky(a);ry(a);oz(a);tS(a);uS(a);vS(a);wS(a);Bd(a);xz(a);xS(a);yS(a);zS(a);a.Wq(cS(a));Ld(a);Kd(a);UR(a);AS(a);YR(a);a.rF(woa(a));return a}c.tp=function(){};c.Gl=function(){};c.Kv=function(){};c.Ok=function(){};c.wh=function(a,b,d){return Y0(d,a,b,this)};c.Rn=function(){};c.nh=function(a){return Jy(this,a)};c.Wg=function(){};c.Yq=function(){};
+c.Wk=function(a,b,d){return w0a(this,a,b,d)};function w0a(a,b,d,e){b.z()?d=F():(b=b.X(),d=(new J).j(e.cd(d.y(b),m(new n,function(){return function(a){return(new J).j(a)}}(a)))));return d.z()?e.Qd(K(function(){return function(){return F()}}(a))):d.X()}c.Qd=function(a){return(new J).j(ne(a))};c.pg=function(){};c.wf=function(a,b){a:{b=ne(b);if(Fk(b)){b=b.U;a=ne(a);if(Fk(a)){a=(new J).j(b.y(a.U));break a}if(F()===a){a=F();break a}throw(new q).j(a);}if(F()===b)a=F();else throw(new q).j(b);}return a};
+c.Wj=function(a,b,d){return a1(this,a,b,d)};c.Em=function(){};c.sh=function(){};c.Fl=function(){};c.rj=function(){};c.dt=function(){};c.zi=function(a,b,d){return b1(this,a,b,d).ja()};c.jj=function(a){return p2(this,a)};c.at=function(){};c.$classData=g({laa:0},!1,"scalaz.std.OptionInstances$$anon$1",{laa:1,d:1,Vl:1,fh:1,ug:1,cl:1,dl:1,Vw:1,Gj:1,Bh:1,Dh:1,Eh:1,Ch:1,Ej:1,Fj:1,Rw:1,Ct:1,Jr:1,Ww:1,Ul:1,bC:1,qo:1,po:1,Ip:1,zt:1,Vm:1,E9:1});function C9(){this.af=this.ov=null}C9.prototype=new y9;
+C9.prototype.constructor=C9;function x0a(){}c=x0a.prototype=C9.prototype;c.ua=function(a){this.af.ua(m(new n,function(a,d){return function(e){return a.ov.y(e.ja())?d.y(e):void 0}}(this,a)))};c.iE=function(a,b){this.ov=b;if(null===a)throw ug(vg(),null);this.af=a;return this};c.Ta=function(){var a=this.af.Ta();return(new Qo).Kf(a,m(new n,function(a){return function(d){return!!a.ov.y(d.ja())}}(this)))};c.$b=function(a){return this.ov.y(a)?this.af.$b(a):F()};c.ib=function(a){return!!this.ov.y(a)&&this.af.ib(a)};
+function D9(){this.af=this.Mx=null}D9.prototype=new y9;D9.prototype.constructor=D9;function y0a(){}c=y0a.prototype=D9.prototype;c.ua=function(a){Xb(new Yb,this.af,m(new n,function(){return function(a){return null!==a}}(this))).ua(m(new n,function(a,d){return function(e){if(null!==e)return d.y((new A).e(e.ja(),a.Mx.y(e.na())));throw(new q).j(e);}}(this,a)))};c.iE=function(a,b){this.Mx=b;if(null===a)throw ug(vg(),null);this.af=a;return this};c.Ha=function(){return this.af.Ha()};
+c.Ta=function(){var a=this.af.Ta(),a=(new Qo).Kf(a,m(new n,function(){return function(a){return null!==a}}(this)));return(new bc).Kf(a,m(new n,function(a){return function(d){if(null!==d)return(new A).e(d.ja(),a.Mx.y(d.na()));throw(new q).j(d);}}(this)))};c.$b=function(a){a=this.af.$b(a);var b=this.Mx;return a.z()?F():(new J).j(b.y(a.X()))};c.ib=function(a){return this.af.ib(a)};function E9(a,b){var d=dc(new ec,gc());oE(d,a);a=(new A).e(b.ja(),b.na());hc(d,a);return d.Oa}
+function F9(a,b){var d=dc(new ec,gc());Xb(new Yb,a,m(new n,function(a,b){return function(a){return!bn(cn(),a.ja(),b)}}(a,b))).ua(m(new n,function(a,b){return function(a){return b.Qa(a)}}(a,d)));return d.Oa}function G9(){this.CT=this.lz=null}G9.prototype=new y9;G9.prototype.constructor=G9;function z0a(){}c=z0a.prototype=G9.prototype;c.Sba=function(a,b){this.lz=a;this.CT=b;return this};c.Ta=function(){return this.lz.Ta()};c.Ha=function(){return this.lz.Ha()};c.Dw=function(a){return this.CT.y(a)};
+c.$b=function(a){return this.lz.$b(a)};function H9(){this.af=null}H9.prototype=new A9;H9.prototype.constructor=H9;function A0a(){}c=A0a.prototype=H9.prototype;c.ua=function(a){var b=this.af.bv();XT(b,a)};c.Ha=function(){return this.af.Ha()};c.Ta=function(){return this.af.bv()};c.mg=function(a){if(null===a)throw ug(vg(),null);this.af=a;return this};c.ib=function(a){return this.af.ib(a)};function I9(){}I9.prototype=new y9;I9.prototype.constructor=I9;function J9(){}c=J9.prototype=I9.prototype;c.nb=function(){return this};
+c.$f=function(){return this};c.te=function(){return this};c.lc=function(){return this};c.nd=function(){return el()};c.fi=function(){return this.gD()};c.gD=function(){return gc()};c.Vn=function(){return this};c.sk=function(a){return V_a(this,a)};c.Af=function(a){return this.gU(a)};c.we=function(){return this};function K9(){}K9.prototype=new A9;K9.prototype.constructor=K9;function B0a(){}c=B0a.prototype=K9.prototype;c.nb=function(){return this};c.$f=function(){return this};
+c.Rs=function(){throw(new Du).c("next of empty set");};c.y=function(a){return this.ib(a)};c.ye=function(a){return this.xw(a)};c.z=function(){return!0};c.te=function(){return this};c.lc=function(){return this};c.tr=function(a){return L9(new M9,this,a)};c.nd=function(){uZa||(uZa=(new $6).b());return uZa};c.Ha=function(){return 0};c.Ta=function(){var a=N9(this);return iv(a)};c.Ql=function(a){return this.xw(a)};c.gm=function(){return tZa()};
+function N9(a){for(var b=y();!a.z();){var d=a.ju(),b=Ng(new Og,d,b);a=a.Rs()}return b}c.vp=function(){return this};c.ju=function(){throw(new Du).c("elem of empty set");};c.ib=function(){return!1};function C0a(a,b){return b.z()?a:b.sf(a,sb(new tb,function(){return function(a,b){return a.tr(b)}}(a)))}c.gd=function(){return this};c.xw=function(){return this};c.ui=function(a){return this.tr(a)};c.Bp=function(a){return C0a(this,a)};c.Ze=function(){return"ListSet"};function O9(){}O9.prototype=new A9;
+O9.prototype.constructor=O9;c=O9.prototype;c.nb=function(){return this};c.$f=function(){return this};c.b=function(){return this};c.y=function(){return!1};c.ye=function(){return this};c.te=function(){return this};c.lc=function(){return this};c.nd=function(){return ol()};c.ua=function(){};c.Ha=function(){return 0};c.Ta=function(){return SC().Xd};c.Ql=function(){return this};c.gm=function(){return lh()};c.vp=function(){return this};c.ib=function(){return!1};c.gd=function(){return this};c.ui=function(a){return(new P9).j(a)};
+c.$classData=g({Hga:0},!1,"scala.collection.immutable.Set$EmptySet$",{Hga:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,Pk:1,kd:1,qd:1,pd:1,l:1,i:1});var D0a=void 0;function lh(){D0a||(D0a=(new O9).b());return D0a}function P9(){this.Kc=null}P9.prototype=new A9;P9.prototype.constructor=P9;c=P9.prototype;c.nb=function(){return this};c.$f=function(){return this};c.$=function(){return this.Kc};c.y=function(a){return this.ib(a)};
+c.ye=function(a){return this.Xi(a)};c.te=function(){return this};c.lc=function(){return this};c.lh=function(a){return!!a.y(this.Kc)};c.nd=function(){return ol()};c.ua=function(a){a.y(this.Kc)};c.Ha=function(){return 1};c.j=function(a){this.Kc=a;return this};c.Ta=function(){SC();var a=(new w).f([this.Kc]);return Ve(new We,a,0,a.pa.length|0)};c.Ql=function(a){return this.Xi(a)};c.gm=function(){return lh()};c.Nm=function(a){return this.ib(a)?this:(new Q9).e(this.Kc,a)};c.vp=function(){return this};
+c.aa=function(){return lh()};c.ib=function(a){return bn(cn(),a,this.Kc)};c.gd=function(){return this};c.ui=function(a){return this.Nm(a)};c.Xi=function(a){return bn(cn(),a,this.Kc)?lh():this};c.$classData=g({Iga:0},!1,"scala.collection.immutable.Set$Set1",{Iga:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,Pk:1,kd:1,qd:1,pd:1,l:1,i:1});function Q9(){this.Md=this.Kc=null}Q9.prototype=new A9;
+Q9.prototype.constructor=Q9;c=Q9.prototype;c.nb=function(){return this};c.$f=function(){return this};c.$=function(){return this.Kc};c.y=function(a){return this.ib(a)};c.ye=function(a){return this.Xi(a)};c.Xv=function(){return(new P9).j(this.Md)};c.te=function(){return this};c.lc=function(){return this};c.e=function(a,b){this.Kc=a;this.Md=b;return this};c.lh=function(a){return!!a.y(this.Kc)&&!!a.y(this.Md)};c.nd=function(){return ol()};c.ua=function(a){a.y(this.Kc);a.y(this.Md)};c.Ha=function(){return 2};
+c.Ta=function(){SC();var a=(new w).f([this.Kc,this.Md]);return Ve(new We,a,0,a.pa.length|0)};c.Ql=function(a){return this.Xi(a)};c.gm=function(){return lh()};c.Nm=function(a){return this.ib(a)?this:(new R9).Bd(this.Kc,this.Md,a)};c.vp=function(){return this};c.aa=function(){return this.Xv()};c.ib=function(a){return bn(cn(),a,this.Kc)||bn(cn(),a,this.Md)};c.gd=function(){return this};c.ui=function(a){return this.Nm(a)};
+c.Xi=function(a){return bn(cn(),a,this.Kc)?(new P9).j(this.Md):bn(cn(),a,this.Md)?(new P9).j(this.Kc):this};c.$classData=g({Jga:0},!1,"scala.collection.immutable.Set$Set2",{Jga:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,Pk:1,kd:1,qd:1,pd:1,l:1,i:1});function R9(){this.Vf=this.Md=this.Kc=null}R9.prototype=new A9;R9.prototype.constructor=R9;c=R9.prototype;c.nb=function(){return this};c.$f=function(){return this};
+c.$=function(){return this.Kc};c.y=function(a){return this.ib(a)};c.ye=function(a){return this.Xi(a)};c.Xv=function(){return(new Q9).e(this.Md,this.Vf)};c.te=function(){return this};c.lc=function(){return this};c.lh=function(a){return!!a.y(this.Kc)&&!!a.y(this.Md)&&!!a.y(this.Vf)};c.nd=function(){return ol()};c.ua=function(a){a.y(this.Kc);a.y(this.Md);a.y(this.Vf)};c.Ha=function(){return 3};c.Bd=function(a,b,d){this.Kc=a;this.Md=b;this.Vf=d;return this};
+c.Ta=function(){SC();var a=(new w).f([this.Kc,this.Md,this.Vf]);return Ve(new We,a,0,a.pa.length|0)};c.Ql=function(a){return this.Xi(a)};c.gm=function(){return lh()};c.Nm=function(a){return this.ib(a)?this:(new S9).mm(this.Kc,this.Md,this.Vf,a)};c.vp=function(){return this};c.aa=function(){return this.Xv()};c.ib=function(a){return bn(cn(),a,this.Kc)||bn(cn(),a,this.Md)||bn(cn(),a,this.Vf)};c.gd=function(){return this};c.ui=function(a){return this.Nm(a)};
+c.Xi=function(a){return bn(cn(),a,this.Kc)?(new Q9).e(this.Md,this.Vf):bn(cn(),a,this.Md)?(new Q9).e(this.Kc,this.Vf):bn(cn(),a,this.Vf)?(new Q9).e(this.Kc,this.Md):this};c.$classData=g({Kga:0},!1,"scala.collection.immutable.Set$Set3",{Kga:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,Pk:1,kd:1,qd:1,pd:1,l:1,i:1});function S9(){this.jl=this.Vf=this.Md=this.Kc=null}S9.prototype=new A9;S9.prototype.constructor=S9;
+c=S9.prototype;c.nb=function(){return this};c.$f=function(){return this};c.$=function(){return this.Kc};c.y=function(a){return this.ib(a)};c.ye=function(a){return this.Xi(a)};c.Xv=function(){return(new R9).Bd(this.Md,this.Vf,this.jl)};c.te=function(){return this};c.lc=function(){return this};c.lh=function(a){return!!a.y(this.Kc)&&!!a.y(this.Md)&&!!a.y(this.Vf)&&!!a.y(this.jl)};c.nd=function(){return ol()};c.ua=function(a){a.y(this.Kc);a.y(this.Md);a.y(this.Vf);a.y(this.jl)};c.Ha=function(){return 4};
+c.Ta=function(){SC();var a=(new w).f([this.Kc,this.Md,this.Vf,this.jl]);return Ve(new We,a,0,a.pa.length|0)};c.Ql=function(a){return this.Xi(a)};c.gm=function(){return lh()};c.Nm=function(a){return this.ib(a)?this:T9(T9(T9(T9(T9((new U9).b(),this.Kc),this.Md),this.Vf),this.jl),a)};c.vp=function(){return this};c.aa=function(){return this.Xv()};c.ib=function(a){return bn(cn(),a,this.Kc)||bn(cn(),a,this.Md)||bn(cn(),a,this.Vf)||bn(cn(),a,this.jl)};
+c.mm=function(a,b,d,e){this.Kc=a;this.Md=b;this.Vf=d;this.jl=e;return this};c.gd=function(){return this};c.ui=function(a){return this.Nm(a)};c.Xi=function(a){return bn(cn(),a,this.Kc)?(new R9).Bd(this.Md,this.Vf,this.jl):bn(cn(),a,this.Md)?(new R9).Bd(this.Kc,this.Vf,this.jl):bn(cn(),a,this.Vf)?(new R9).Bd(this.Kc,this.Md,this.jl):bn(cn(),a,this.jl)?(new R9).Bd(this.Kc,this.Md,this.Vf):this};
+c.$classData=g({Lga:0},!1,"scala.collection.immutable.Set$Set4",{Lga:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,Pk:1,kd:1,qd:1,pd:1,l:1,i:1});function U9(){}U9.prototype=new A9;U9.prototype.constructor=U9;function V9(){}c=V9.prototype=U9.prototype;c.kw=function(a,b){return W9(new X9,a,b)};c.nb=function(){return this};c.cn=function(a){return this.FD(OD(V(),a))};c.$f=function(){return this};c.b=function(){return this};
+c.y=function(a){return this.ib(a)};function T9(a,b){return a.kw(b,a.cn(b),0)}c.ye=function(a){return E0a(this,a)};c.te=function(){return this};c.lc=function(){return this};c.nd=function(){return ml()};c.ua=function(){};c.$F=function(a){if(a&&a.$classData&&a.$classData.n.ft)return this.Uv(a,0);var b=this.Ta();return WT(b,a)};c.Xf=function(a){var b=6+this.Ha()|0,b=la(Wa(V6),[224>b?b:224]);a=this.rs(a,!1,0,b,0);return null===a?Y6():a};c.Ha=function(){return 0};c.Ta=function(){return SC().Xd};
+c.Ql=function(a){return E0a(this,a)};c.zv=function(){return this};c.gm=function(){return Y6()};c.Af=function(a){var b=6+this.Ha()|0,b=la(Wa(V6),[224>b?b:224]);a=this.rs(a,!0,0,b,0);return null===a?Y6():a};c.FD=function(a){a=a+~(a<<9)|0;a^=a>>>14|0;a=a+(a<<4)|0;return a^(a>>>10|0)};function E0a(a,b){a=a.zv(b,a.cn(b),0);return null===a?Y6():a}c.vp=function(){return this};c.ib=function(a){return this.Vo(a,this.cn(a),0)};c.aa=function(){return this.cG()};c.cG=function(){return E0a(this,this.$())};
+c.gd=function(){return this};c.rs=function(){return null};c.Vo=function(){return!1};c.ui=function(a){return T9(this,a)};c.Uv=function(){return!0};var V6=g({ft:0},!1,"scala.collection.immutable.HashSet",{ft:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,Pk:1,kd:1,qd:1,pd:1,ed:1,l:1,i:1});U9.prototype.$classData=V6;function Y9(){}Y9.prototype=new B0a;Y9.prototype.constructor=Y9;Y9.prototype.b=function(){return this};
+Y9.prototype.$classData=g({rga:0},!1,"scala.collection.immutable.ListSet$EmptyListSet$",{rga:1,pga:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,Pk:1,kd:1,qd:1,pd:1,l:1,i:1});var F0a=void 0;function tZa(){F0a||(F0a=(new Y9).b());return F0a}function M9(){this.sz=this.dj=null}M9.prototype=new B0a;M9.prototype.constructor=M9;c=M9.prototype;c.Rs=function(){return this.sz};c.ye=function(a){return G0a(a,this)};c.z=function(){return!1};
+c.tr=function(a){return H0a(this,a)?this:L9(new M9,this,a)};c.Je=function(){return this.sz};c.Ha=function(){a:{var a=this,b=0;for(;;){if(a.z())break a;a=a.Rs();b=1+b|0}}return b};function G0a(a,b){var d=y();for(;;){if(b.z())return jn(d);if(bn(cn(),a,b.ju())){b=b.Rs();for(a=d;!a.z();)d=a.$(),b=L9(new M9,b,d.ju()),a=a.aa();return b}var e=b.Rs(),d=Ng(new Og,b,d);b=e}}c.Ql=function(a){return G0a(a,this)};function L9(a,b,d){a.dj=d;if(null===b)throw ug(vg(),null);a.sz=b;return a}c.hd=function(){return this.dj};
+c.ju=function(){return this.dj};c.ib=function(a){return H0a(this,a)};c.xw=function(a){return G0a(a,this)};function H0a(a,b){for(;;){if(a.z())return!1;if(bn(cn(),a.ju(),b))return!0;a=a.Rs()}}c.ui=function(a){return this.tr(a)};c.$classData=g({sga:0},!1,"scala.collection.immutable.ListSet$Node",{sga:1,pga:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,Pk:1,kd:1,qd:1,pd:1,l:1,i:1});function Z9(){this.af=null}
+Z9.prototype=new A0a;Z9.prototype.constructor=Z9;c=Z9.prototype;c.nb=function(){return this};c.$f=function(){return this};c.y=function(a){return this.af.ib(a)};c.ye=function(a){return this.Xi(a)};c.te=function(){return this};c.lc=function(){return this};c.nd=function(){return ol()};function Hc(a){var b=new Z9;H9.prototype.mg.call(b,a);return b}c.Ql=function(a){return this.Xi(a)};c.gm=function(){return lh()};c.Nm=function(a){return this.af.ib(a)?this:I(ol(),y()).Bp(this).ui(a)};c.vp=function(){return this};
+c.gd=function(){return this};c.ui=function(a){return this.Nm(a)};c.Xi=function(a){return this.af.ib(a)?I(ol(),y()).Bp(this).Ql(a):this};c.$classData=g({Bga:0},!1,"scala.collection.immutable.MapLike$ImmutableDefaultKeySet",{Bga:1,Opa:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,l:1,i:1,Pk:1,kd:1,qd:1,pd:1});function $9(){}$9.prototype=new w9;$9.prototype.constructor=$9;function a$(){}a$.prototype=$9.prototype;
+$9.prototype.nb=function(){return this.Gm()};$9.prototype.te=function(){return this.Gm()};$9.prototype.Gm=function(){return this};function dha(a){return b$(new c$,a,m(new n,function(a,d){return function(){return d}}(a,0)))}function d$(){}d$.prototype=new V9;d$.prototype.constructor=d$;c=d$.prototype;c.b=function(){return this};c.$=function(){throw(new Du).c("Empty Set");};c.aa=function(){return this.cG()};c.cG=function(){throw(new Du).c("Empty Set");};
+c.$classData=g({dga:0},!1,"scala.collection.immutable.HashSet$EmptyHashSet$",{dga:1,ft:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,Pk:1,kd:1,qd:1,pd:1,ed:1,l:1,i:1});var I0a=void 0;function Y6(){I0a||(I0a=(new d$).b());return I0a}function X6(){this.ci=0;this.me=null;this.Hm=0}X6.prototype=new V9;X6.prototype.constructor=X6;c=X6.prototype;
+c.kw=function(a,b,d){var e=1<<(31&(b>>>d|0)),f=OE(ti(),this.ci&(-1+e|0));if(0!==(this.ci&e)){e=this.me.m[f];a=e.kw(a,b,5+d|0);if(e===a)return this;b=la(Wa(V6),[this.me.m.length]);Kv(Bf(),this.me,0,b,0,this.me.m.length);b.m[f]=a;return W6(new X6,this.ci,b,this.Hm+(a.Ha()-e.Ha()|0)|0)}d=la(Wa(V6),[1+this.me.m.length|0]);Kv(Bf(),this.me,0,d,0,f);d.m[f]=W9(new X9,a,b);Kv(Bf(),this.me,f,d,1+f|0,this.me.m.length-f|0);return W6(new X6,this.ci|e,d,1+this.Hm|0)};
+c.ua=function(a){for(var b=0;b<this.me.m.length;)this.me.m[b].ua(a),b=1+b|0};c.Ha=function(){return this.Hm};c.Ta=function(){var a=new E5;r3.prototype.EU.call(a,this.me);return a};
+c.zv=function(a,b,d){var e=1<<(31&(b>>>d|0)),f=OE(ti(),this.ci&(-1+e|0));if(0!==(this.ci&e)){var h=this.me.m[f];a=h.zv(a,b,5+d|0);return h===a?this:null===a?(e^=this.ci,0!==e?(a=la(Wa(V6),[-1+this.me.m.length|0]),Kv(Bf(),this.me,0,a,0,f),Kv(Bf(),this.me,1+f|0,a,f,-1+(this.me.m.length-f|0)|0),f=this.Hm-h.Ha()|0,1!==a.m.length||t3(a.m[0])?W6(new X6,e,a,f):a.m[0]):null):1!==this.me.m.length||t3(a)?(e=la(Wa(V6),[this.me.m.length]),Kv(Bf(),this.me,0,e,0,this.me.m.length),e.m[f]=a,f=this.Hm+(a.Ha()-h.Ha()|
+0)|0,W6(new X6,this.ci,e,f)):a}return this};c.rs=function(a,b,d,e,f){for(var h=f,k=0,p=0,t=0;t<this.me.m.length;){var x=this.me.m[t].rs(a,b,5+d|0,e,h);null!==x&&(e.m[h]=x,h=1+h|0,k=k+x.Ha()|0,p|=1<<t);t=1+t|0}if(h===f)return null;if(k===this.Hm)return this;if(h!==(1+f|0)||t3(e.m[f])){b=h-f|0;a=la(Wa(V6),[b]);Oa(e,f,a,0,b);if(b===this.me.m.length)p=this.ci;else{ml();e=0;for(f=this.ci;0!==p;)b=f^f&(-1+f|0),0!==(1&p)&&(e|=b),f&=~b,p=p>>>1|0;p=e}return W6(new X6,p,a,k)}return e.m[f]};
+function W6(a,b,d,e){a.ci=b;a.me=d;a.Hm=e;un(Je(),OE(ti(),b)===d.m.length);return a}c.Vo=function(a,b,d){var e=31&(b>>>d|0),f=1<<e;return-1===this.ci?this.me.m[31&e].Vo(a,b,5+d|0):0!==(this.ci&f)?(e=OE(ti(),this.ci&(-1+f|0)),this.me.m[e].Vo(a,b,5+d|0)):!1};
+c.Uv=function(a,b){if(a===this)return!0;if(t3(a)&&this.Hm<=a.Hm){var d=this.ci,e=this.me,f=0,h=a.me;a=a.ci;var k=0;if((d&a)===d){for(;0!==d;){var p=d^d&(-1+d|0),t=a^a&(-1+a|0);if(p===t){if(!e.m[f].Uv(h.m[k],5+b|0))return!1;d&=~p;f=1+f|0}a&=~t;k=1+k|0}return!0}}return!1};function t3(a){return!!(a&&a.$classData&&a.$classData.n.VX)}
+c.$classData=g({VX:0},!1,"scala.collection.immutable.HashSet$HashTrieSet",{VX:1,ft:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,Pk:1,kd:1,qd:1,pd:1,ed:1,l:1,i:1});function e$(){}e$.prototype=new V9;e$.prototype.constructor=e$;function J0a(){}J0a.prototype=e$.prototype;function f$(){}f$.prototype=new J9;f$.prototype.constructor=f$;function K0a(){}c=K0a.prototype=f$.prototype;c.$f=function(){return this};
+c.Pl=function(){throw(new Du).c("value of empty map");};c.ye=function(a){return this.ww(a)};c.z=function(){return!0};c.lc=function(){return this};c.Aj=function(a){return this.Om(a)};c.Wi=function(a){return this.ww(a)};c.fi=function(){return Eu()};c.gD=function(){return Eu()};c.Ha=function(){return 0};c.sk=function(a){return yc(this,a)};c.Vn=function(){return this};c.kj=function(){throw(new Du).c("key of empty map");};c.Ta=function(){var a=hv(this);return iv(a)};
+c.Om=function(a){return g$(new h$,this,a.ja(),a.na())};function yc(a,b){return b.z()?a:b.sf(a,sb(new tb,function(){return function(a,b){return a.Om(b)}}(a)))}c.kt=function(a,b){return g$(new h$,this,a,b)};c.Af=function(a){return g9(this,a)};c.ww=function(){return this};c.$b=function(){return F()};function hv(a){for(var b=y();!a.z();){var d=(new A).e(a.kj(),a.Pl()),b=Ng(new Og,d,b);a=a.fp()}return b}c.fp=function(){throw(new Du).c("next of empty map");};c.Yi=function(a){return this.Om(a)};c.Ze=function(){return"ListMap"};
+function i$(){}i$.prototype=new J9;i$.prototype.constructor=i$;c=i$.prototype;c.b=function(){return this};c.y=function(a){this.Kt(a)};c.ye=function(){return this};c.Aj=function(a){return(new j$).e(a.ja(),a.na())};c.Wi=function(){return this};c.Ha=function(){return 0};c.Ta=function(){return SC().Xd};c.$b=function(){return F()};c.ib=function(){return!1};c.Kt=function(a){throw(new Du).c("key not found: "+a);};c.Yi=function(a){return(new j$).e(a.ja(),a.na())};
+c.$classData=g({uga:0},!1,"scala.collection.immutable.Map$EmptyMap$",{uga:1,Hl:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,tj:1,kd:1,qd:1,pd:1,lk:1,l:1,i:1});var L0a=void 0;function gc(){L0a||(L0a=(new i$).b());return L0a}function j$(){this.Xc=this.bc=null}j$.prototype=new J9;j$.prototype.constructor=j$;c=j$.prototype;c.y=function(a){if(bn(cn(),a,this.bc))return this.Xc;throw(new Du).c("key not found: "+a);};
+c.ye=function(a){return this.bl(a)};c.e=function(a,b){this.bc=a;this.Xc=b;return this};c.Aj=function(a){return this.Ol(a.ja(),a.na())};c.ua=function(a){a.y((new A).e(this.bc,this.Xc))};c.Wi=function(a){return this.bl(a)};c.Ha=function(){return 1};c.Ta=function(){SC();var a=(new w).f([(new A).e(this.bc,this.Xc)]);return Ve(new We,a,0,a.pa.length|0)};c.Ol=function(a,b){return bn(cn(),a,this.bc)?(new j$).e(this.bc,b):(new k$).mm(this.bc,this.Xc,a,b)};
+c.$b=function(a){return bn(cn(),a,this.bc)?(new J).j(this.Xc):F()};c.ib=function(a){return bn(cn(),a,this.bc)};c.bl=function(a){return bn(cn(),a,this.bc)?gc():this};c.Yi=function(a){return this.Ol(a.ja(),a.na())};c.$classData=g({vga:0},!1,"scala.collection.immutable.Map$Map1",{vga:1,Hl:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,tj:1,kd:1,qd:1,pd:1,lk:1,l:1,i:1});
+function k$(){this.Ud=this.Cc=this.Xc=this.bc=null}k$.prototype=new J9;k$.prototype.constructor=k$;c=k$.prototype;c.y=function(a){if(bn(cn(),a,this.bc))return this.Xc;if(bn(cn(),a,this.Cc))return this.Ud;throw(new Du).c("key not found: "+a);};c.ye=function(a){return this.bl(a)};c.Aj=function(a){return this.Ol(a.ja(),a.na())};c.ua=function(a){a.y((new A).e(this.bc,this.Xc));a.y((new A).e(this.Cc,this.Ud))};c.Wi=function(a){return this.bl(a)};c.Ha=function(){return 2};
+c.Ta=function(){SC();var a=(new w).f([(new A).e(this.bc,this.Xc),(new A).e(this.Cc,this.Ud)]);return Ve(new We,a,0,a.pa.length|0)};c.Ol=function(a,b){return bn(cn(),a,this.bc)?(new k$).mm(this.bc,b,this.Cc,this.Ud):bn(cn(),a,this.Cc)?(new k$).mm(this.bc,this.Xc,this.Cc,b):l$(this.bc,this.Xc,this.Cc,this.Ud,a,b)};c.$b=function(a){return bn(cn(),a,this.bc)?(new J).j(this.Xc):bn(cn(),a,this.Cc)?(new J).j(this.Ud):F()};c.ib=function(a){return bn(cn(),a,this.bc)||bn(cn(),a,this.Cc)};
+c.mm=function(a,b,d,e){this.bc=a;this.Xc=b;this.Cc=d;this.Ud=e;return this};c.bl=function(a){return bn(cn(),a,this.bc)?(new j$).e(this.Cc,this.Ud):bn(cn(),a,this.Cc)?(new j$).e(this.bc,this.Xc):this};c.Yi=function(a){return this.Ol(a.ja(),a.na())};c.$classData=g({wga:0},!1,"scala.collection.immutable.Map$Map2",{wga:1,Hl:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,tj:1,kd:1,qd:1,pd:1,lk:1,l:1,i:1});
+function m$(){this.Rf=this.Zd=this.Ud=this.Cc=this.Xc=this.bc=null}m$.prototype=new J9;m$.prototype.constructor=m$;c=m$.prototype;c.y=function(a){if(bn(cn(),a,this.bc))return this.Xc;if(bn(cn(),a,this.Cc))return this.Ud;if(bn(cn(),a,this.Zd))return this.Rf;throw(new Du).c("key not found: "+a);};c.ye=function(a){return this.bl(a)};c.Aj=function(a){return this.Ol(a.ja(),a.na())};c.ua=function(a){a.y((new A).e(this.bc,this.Xc));a.y((new A).e(this.Cc,this.Ud));a.y((new A).e(this.Zd,this.Rf))};c.Wi=function(a){return this.bl(a)};
+function l$(a,b,d,e,f,h){var k=new m$;k.bc=a;k.Xc=b;k.Cc=d;k.Ud=e;k.Zd=f;k.Rf=h;return k}c.Ha=function(){return 3};c.Ta=function(){SC();var a=(new w).f([(new A).e(this.bc,this.Xc),(new A).e(this.Cc,this.Ud),(new A).e(this.Zd,this.Rf)]);return Ve(new We,a,0,a.pa.length|0)};
+c.Ol=function(a,b){return bn(cn(),a,this.bc)?l$(this.bc,b,this.Cc,this.Ud,this.Zd,this.Rf):bn(cn(),a,this.Cc)?l$(this.bc,this.Xc,this.Cc,b,this.Zd,this.Rf):bn(cn(),a,this.Zd)?l$(this.bc,this.Xc,this.Cc,this.Ud,this.Zd,b):n$(this.bc,this.Xc,this.Cc,this.Ud,this.Zd,this.Rf,a,b)};c.$b=function(a){return bn(cn(),a,this.bc)?(new J).j(this.Xc):bn(cn(),a,this.Cc)?(new J).j(this.Ud):bn(cn(),a,this.Zd)?(new J).j(this.Rf):F()};c.ib=function(a){return bn(cn(),a,this.bc)||bn(cn(),a,this.Cc)||bn(cn(),a,this.Zd)};
+c.bl=function(a){return bn(cn(),a,this.bc)?(new k$).mm(this.Cc,this.Ud,this.Zd,this.Rf):bn(cn(),a,this.Cc)?(new k$).mm(this.bc,this.Xc,this.Zd,this.Rf):bn(cn(),a,this.Zd)?(new k$).mm(this.bc,this.Xc,this.Cc,this.Ud):this};c.Yi=function(a){return this.Ol(a.ja(),a.na())};
+c.$classData=g({xga:0},!1,"scala.collection.immutable.Map$Map3",{xga:1,Hl:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,tj:1,kd:1,qd:1,pd:1,lk:1,l:1,i:1});function o$(){this.Zk=this.ki=this.Rf=this.Zd=this.Ud=this.Cc=this.Xc=this.bc=null}o$.prototype=new J9;o$.prototype.constructor=o$;c=o$.prototype;
+c.y=function(a){if(bn(cn(),a,this.bc))return this.Xc;if(bn(cn(),a,this.Cc))return this.Ud;if(bn(cn(),a,this.Zd))return this.Rf;if(bn(cn(),a,this.ki))return this.Zk;throw(new Du).c("key not found: "+a);};c.ye=function(a){return this.bl(a)};c.Aj=function(a){return this.Ol(a.ja(),a.na())};c.ua=function(a){a.y((new A).e(this.bc,this.Xc));a.y((new A).e(this.Cc,this.Ud));a.y((new A).e(this.Zd,this.Rf));a.y((new A).e(this.ki,this.Zk))};c.Wi=function(a){return this.bl(a)};c.Ha=function(){return 4};
+c.Ta=function(){SC();var a=(new w).f([(new A).e(this.bc,this.Xc),(new A).e(this.Cc,this.Ud),(new A).e(this.Zd,this.Rf),(new A).e(this.ki,this.Zk)]);return Ve(new We,a,0,a.pa.length|0)};
+c.Ol=function(a,b){return bn(cn(),a,this.bc)?n$(this.bc,b,this.Cc,this.Ud,this.Zd,this.Rf,this.ki,this.Zk):bn(cn(),a,this.Cc)?n$(this.bc,this.Xc,this.Cc,b,this.Zd,this.Rf,this.ki,this.Zk):bn(cn(),a,this.Zd)?n$(this.bc,this.Xc,this.Cc,this.Ud,this.Zd,b,this.ki,this.Zk):bn(cn(),a,this.ki)?n$(this.bc,this.Xc,this.Cc,this.Ud,this.Zd,this.Rf,this.ki,b):p$(p$(p$(p$(p$((new q$).b(),this.bc,this.Xc),this.Cc,this.Ud),this.Zd,this.Rf),this.ki,this.Zk),a,b)};
+function n$(a,b,d,e,f,h,k,p){var t=new o$;t.bc=a;t.Xc=b;t.Cc=d;t.Ud=e;t.Zd=f;t.Rf=h;t.ki=k;t.Zk=p;return t}c.$b=function(a){return bn(cn(),a,this.bc)?(new J).j(this.Xc):bn(cn(),a,this.Cc)?(new J).j(this.Ud):bn(cn(),a,this.Zd)?(new J).j(this.Rf):bn(cn(),a,this.ki)?(new J).j(this.Zk):F()};c.ib=function(a){return bn(cn(),a,this.bc)||bn(cn(),a,this.Cc)||bn(cn(),a,this.Zd)||bn(cn(),a,this.ki)};
+c.bl=function(a){return bn(cn(),a,this.bc)?l$(this.Cc,this.Ud,this.Zd,this.Rf,this.ki,this.Zk):bn(cn(),a,this.Cc)?l$(this.bc,this.Xc,this.Zd,this.Rf,this.ki,this.Zk):bn(cn(),a,this.Zd)?l$(this.bc,this.Xc,this.Cc,this.Ud,this.ki,this.Zk):bn(cn(),a,this.ki)?l$(this.bc,this.Xc,this.Cc,this.Ud,this.Zd,this.Rf):this};c.Yi=function(a){return this.Ol(a.ja(),a.na())};
+c.$classData=g({yga:0},!1,"scala.collection.immutable.Map$Map4",{yga:1,Hl:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,tj:1,kd:1,qd:1,pd:1,lk:1,l:1,i:1});function XX(){C9.call(this)}XX.prototype=new x0a;XX.prototype.constructor=XX;c=XX.prototype;c.nb=function(){return this};c.Ds=function(a,b){C9.prototype.iE.call(this,a,b);return this};c.$f=function(){return this};c.ye=function(a){return F9(this,a)};c.te=function(){return this};
+c.lc=function(){return this};c.Aj=function(a){return E9(this,a)};c.nd=function(){return el()};c.Wi=function(a){return F9(this,a)};c.fi=function(){return gc()};c.sk=function(a){return V_a(this,a)};c.Vn=function(){return this};c.Af=function(a){return g9(this,a)};c.we=function(){return this};c.Yi=function(a){return E9(this,a)};
+c.$classData=g({zga:0},!1,"scala.collection.immutable.MapLike$$anon$1",{zga:1,Ppa:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,wfa:1,Vfa:1,tj:1,kd:1,qd:1,pd:1,lk:1});function Pu(){D9.call(this)}Pu.prototype=new y0a;Pu.prototype.constructor=Pu;c=Pu.prototype;c.nb=function(){return this};c.Ds=function(a,b){D9.prototype.iE.call(this,a,b);return this};c.$f=function(){return this};c.ye=function(a){return F9(this,a)};
+c.te=function(){return this};c.lc=function(){return this};c.Aj=function(a){return E9(this,a)};c.nd=function(){return el()};c.Wi=function(a){return F9(this,a)};c.fi=function(){return gc()};c.sk=function(a){return V_a(this,a)};c.Vn=function(){return this};c.Af=function(a){return g9(this,a)};c.we=function(){return this};c.Yi=function(a){return E9(this,a)};
+c.$classData=g({Aga:0},!1,"scala.collection.immutable.MapLike$$anon$2",{Aga:1,Qpa:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,wfa:1,Vfa:1,tj:1,kd:1,qd:1,pd:1,lk:1});function q$(){}q$.prototype=new J9;q$.prototype.constructor=q$;function r$(){}c=r$.prototype=q$.prototype;c.nb=function(){return this};c.cn=function(a){return this.FD(OD(V(),a))};c.$f=function(){return this};c.b=function(){return this};
+c.ye=function(a){return M0a(this,a)};c.lc=function(){return this};c.jt=function(a,b,d,e,f){return s$(a,b,e,f)};c.ts=function(){return F()};c.Aj=function(a){return N0a(this,a)};c.ua=function(){};function N0a(a,b){return a.jt(b.ja(),a.cn(b.ja()),0,b.na(),b,null)}function O0a(a,b){A6();var d=6+a.Ha()|0,d=la(Wa(w6),[224>d?d:224]);A6();a=a.qs(b,!0,0,d,0);return null===a?z6():a}function p$(a,b,d){return a.jt(b,a.cn(b),0,d,null,null)}c.Wi=function(a){return M0a(this,a)};c.fi=function(){A6();return z6()};
+c.yv=function(){return this};c.qs=function(){return null};function M0a(a,b){return a.yv(b,a.cn(b),0)}c.Xf=function(a){A6();var b=6+this.Ha()|0,b=la(Wa(w6),[224>b?b:224]);A6();a=this.qs(a,!1,0,b,0);return null===a?z6():a};c.gD=function(){A6();return z6()};c.Ha=function(){return 0};c.Vn=function(){return this};c.Ta=function(){return SC().Xd};c.bG=function(){return M0a(this,this.$().ja())};c.Af=function(a){return O0a(this,a)};c.FD=function(a){a=a+~(a<<9)|0;a^=a>>>14|0;a=a+(a<<4)|0;return a^(a>>>10|0)};
+c.$b=function(a){return this.ts(a,this.cn(a),0)};c.cs=function(){return!1};c.ib=function(a){return this.cs(a,this.cn(a),0)};c.aa=function(){return this.bG()};c.gU=function(a){return O0a(this,a)};c.Yi=function(a){return N0a(this,a)};var w6=g({Nv:0},!1,"scala.collection.immutable.HashMap",{Nv:1,Hl:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,tj:1,kd:1,qd:1,pd:1,lk:1,l:1,i:1,ed:1});q$.prototype.$classData=w6;
+function X9(){this.Zf=null;this.Ad=0}X9.prototype=new J0a;X9.prototype.constructor=X9;c=X9.prototype;c.kw=function(a,b,d){if(b===this.Ad&&bn(cn(),a,this.Zf))return this;if(b!==this.Ad)return qZa(ml(),this.Ad,this,b,W9(new X9,a,b),d);d=tZa();return t$(new u$,b,L9(new M9,d,this.Zf).tr(a))};c.ua=function(a){a.y(this.Zf)};function W9(a,b,d){a.Zf=b;a.Ad=d;return a}c.Ha=function(){return 1};c.Ta=function(){SC();var a=(new w).f([this.Zf]);return Ve(new We,a,0,a.pa.length|0)};
+c.zv=function(a,b){return b===this.Ad&&bn(cn(),a,this.Zf)?null:this};c.rs=function(a,b){return b!==!!a.y(this.Zf)?this:null};c.Vo=function(a,b){return b===this.Ad&&bn(cn(),a,this.Zf)};c.Uv=function(a,b){return a.Vo(this.Zf,this.Ad,b)};c.$classData=g({UX:0},!1,"scala.collection.immutable.HashSet$HashSet1",{UX:1,gga:1,ft:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,Pk:1,kd:1,qd:1,pd:1,ed:1,l:1,i:1});
+function u$(){this.Ad=0;this.Hk=null}u$.prototype=new J0a;u$.prototype.constructor=u$;c=u$.prototype;c.kw=function(a,b,d){return b===this.Ad?t$(new u$,b,this.Hk.tr(a)):qZa(ml(),this.Ad,this,b,W9(new X9,a,b),d)};c.ua=function(a){var b=N9(this.Hk);XT(iv(b),a)};c.Ha=function(){return this.Hk.Ha()};c.Ta=function(){var a=N9(this.Hk);return iv(a)};
+c.zv=function(a,b){if(b===this.Ad){a=this.Hk.xw(a);var d=a.Ha();switch(d){case 0:return null;case 1:return a=N9(a),W9(new X9,iv(a).ma(),b);default:return d===this.Hk.Ha()?this:t$(new u$,b,a)}}else return this};function t$(a,b,d){a.Ad=b;a.Hk=d;return a}c.rs=function(a,b){a=b?x5(this.Hk,a,!0):x5(this.Hk,a,!1);b=a.Ha();switch(b){case 0:return null;case 1:return a=N9(a),W9(new X9,iv(a).ma(),this.Ad);default:return b===this.Hk.Ha()?this:t$(new u$,this.Ad,a)}};c.Vo=function(a,b){return b===this.Ad&&this.Hk.ib(a)};
+c.Uv=function(a,b){for(var d=N9(this.Hk),d=iv(d),e=!0;e&&d.ta();)e=d.ma(),e=a.Vo(e,this.Ad,b);return e};c.$classData=g({ega:0},!1,"scala.collection.immutable.HashSet$HashSetCollision1",{ega:1,gga:1,ft:1,Nk:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,Pk:1,kd:1,qd:1,pd:1,ed:1,l:1,i:1});function v$(){}v$.prototype=new K0a;v$.prototype.constructor=v$;v$.prototype.b=function(){return this};
+v$.prototype.$classData=g({nga:0},!1,"scala.collection.immutable.ListMap$EmptyListMap$",{nga:1,lga:1,Hl:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,tj:1,kd:1,qd:1,pd:1,lk:1,l:1,i:1});var P0a=void 0;function Eu(){P0a||(P0a=(new v$).b());return P0a}function h$(){this.tz=this.eo=this.Zf=null}h$.prototype=new K0a;h$.prototype.constructor=h$;
+function w$(a,b){var d=y();for(;;){if(b.z())return jn(d);if(bn(cn(),a,b.kj())){b=b.fp();for(a=d;!a.z();)d=a.$(),b=g$(new h$,b,d.kj(),d.Pl()),a=a.aa();return b}var e=b.fp(),d=Ng(new Og,b,d);b=e}}c=h$.prototype;c.y=function(a){a:{var b=this;for(;;){if(b.z())throw(new Du).c("key not found: "+a);if(bn(cn(),a,b.kj())){a=b.Pl();break a}b=b.fp()}}return a};c.ye=function(a){return w$(a,this)};c.Pl=function(){return this.eo};c.z=function(){return!1};c.Aj=function(a){return this.Om(a)};c.Je=function(){return this.tz};
+c.Wi=function(a){return w$(a,this)};c.Ha=function(){a:{var a=this,b=0;for(;;){if(a.z())break a;a=a.fp();b=1+b|0}}return b};c.kj=function(){return this.Zf};c.Om=function(a){var b=w$(a.ja(),this);return g$(new h$,b,a.ja(),a.na())};c.kt=function(a,b){var d=w$(a,this);return g$(new h$,d,a,b)};c.ww=function(a){return w$(a,this)};c.$b=function(a){a:{var b=this;for(;;){if(b.z()){a=F();break a}if(bn(cn(),a,b.kj())){a=(new J).j(b.Pl());break a}b=b.fp()}}return a};c.hd=function(){return(new A).e(this.Zf,this.eo)};
+function g$(a,b,d,e){a.Zf=d;a.eo=e;if(null===b)throw ug(vg(),null);a.tz=b;return a}c.ib=function(a){a:{var b=this;for(;;){if(b.z()){a=!1;break a}if(bn(cn(),a,b.kj())){a=!0;break a}b=b.fp()}}return a};c.fp=function(){return this.tz};c.Yi=function(a){return this.Om(a)};
+c.$classData=g({oga:0},!1,"scala.collection.immutable.ListMap$Node",{oga:1,lga:1,Hl:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,tj:1,kd:1,qd:1,pd:1,lk:1,l:1,i:1});function a0(){this.sd=this.hm=this.ie=0;this.Nh=!1;this.Ky=this.Ki=0}a0.prototype=new w9;a0.prototype.constructor=a0;function Q0a(){}Q0a.prototype=a0.prototype;
+function R0a(a,b){if(0>=b)return a;if(0<=a.Ki)return b=a.Ki-b|0,0>=b||a.Nh?(b=a.ie,a=(new a0).Q(b,b,a.sd)):a=b>=a.Ki&&0<=a.Ki?a:(new O).Q(a.ie,a.ie+da(a.sd,-1+b|0)|0,a.sd),a;b=x$(a)-da(a.sd,b)|0;return 0<a.sd&&b<a.ie||0>a.sd&&b>a.ie?(b=a.ie,(new a0).Q(b,b,a.sd)):(new O).Q(a.ie,b,a.sd)}c=a0.prototype;c.nb=function(){return this};c.rn=function(){return!1};c.$=function(){return y$(this)};c.W=function(a){return this.Fa(a)};c.Wh=function(){return this};c.y=function(a){return this.Fa(a|0)};c.z=function(){return this.Nh};
+c.te=function(){return this};c.lc=function(){return this};c.o=function(a){if(a&&a.$classData&&a.$classData.n.CF){if(this.Nh)return a.Nh;if(kd(a)&&this.ie===a.ie){var b=x$(this);return b===x$(a)&&(this.ie===b||this.sd===a.sd)}return!1}return $2(this,a)};c.Fa=function(a){0>this.Ki&&Hn(Ln(),this.ie,this.hm,this.sd,this.rn());if(0>a||a>=this.Ki)throw(new P).c(""+a);return this.ie+da(this.sd,a)|0};
+c.Sj=function(a){var b;if(this.Nh)a=this.ie,b=(new Vb).ia(a,a>>31);else{b=this.ie;for(var d=x$(this);b!==d&&a.Ga(b);)b=b+this.sd|0;if(b===d&&a.Ga(b)){a=b;b=a>>31;var e=this.sd,d=e>>31,e=a+e|0;b=(new Vb).ia(e,(-2147483648^e)<(-2147483648^a)?1+(b+d|0)|0:b+d|0)}else a=b,b=(new Vb).ia(a,a>>31)}a=b.la;b=b.qa;d=this.ie;a===d&&b===d>>31?a=this:(a=a-this.sd|0,a===x$(this)?(a=x$(this),a=(new a0).Q(a,a,this.sd)):a=(new O).Q(a+this.sd|0,x$(this),this.sd));return a};
+c.Q=function(a,b,d){this.ie=a;this.hm=b;this.sd=d;this.Nh=a>b&&0<d||a<b&&0>d||a===b&&!this.rn();if(0===d)throw(new Ne).c("step cannot be 0.");if(this.Nh)a=0;else{var e;e=S0a(this);a=e.la;var f=e.qa,h=this.sd,k=h>>31;e=Ra();a=kf(e,a,f,h,k);e=e.Rb;h=this.rn()||!T0a(this)?1:0;f=h>>31;h=a+h|0;e=(new Vb).ia(h,(-2147483648^h)<(-2147483648^a)?1+(e+f|0)|0:e+f|0);a=e.la;e=e.qa;a=(0===e?-1<(-2147483648^a):0<e)?-1:a}this.Ki=a;switch(d){case 1:b=this.rn()?b:-1+b|0;break;case -1:b=this.rn()?b:1+b|0;break;default:e=
+S0a(this),a=e.la,e=e.qa,f=d>>31,a=Uf(Ra(),a,e,d,f),b=0!==a?b-a|0:this.rn()?b:b-d|0}this.Ky=b;return this};c.Je=function(){if(this.Nh){var a=y();v5(a)}return R0a(this,1)};c.k=function(){var a=this.rn()?"to":"until",b=1===this.sd?"":u((new v).G((new w).f([" by ",""])),(new w).f([this.sd])),d=this.Nh?"empty ":T0a(this)?"":"inexact ";return u((new v).G((new w).f(";Range ; ; ;;".split(";"))),(new w).f([d,this.ie,a,this.hm,b]))};c.nd=function(){return $F()};
+c.ua=function(a){if(!this.Nh)for(var b=this.ie;;){a.y(b);if(b===this.Ky)break;b=b+this.sd|0}};c.zT=function(a,b,d){return(new a0).Q(a,b,d)};c.Cf=function(){return this.Nh?this:(new O).Q(x$(this),this.ie,-this.sd|0)};c.Ha=function(){return this.ra()};c.Td=function(){return F8(this)};c.Ta=function(){return Ve(new We,this,0,this.ra())};c.ra=function(){return 0>this.Ki?Hn(Ln(),this.ie,this.hm,this.sd,this.rn()):this.Ki};c.vh=function(){return this};c.nf=function(){return this.ra()};
+function U0a(a,b){return 0>=b||a.Nh?a:b>=a.Ki&&0<=a.Ki?(b=a.hm,(new a0).Q(b,b,a.sd)):a.zT(a.ie+da(a.sd,b)|0,a.hm,a.sd)}function T0a(a){var b=S0a(a),d=b.la,b=b.qa,e=a.sd,f=e>>31;a=Ra();d=Uf(a,d,b,e,f);b=a.Rb;return 0===d&&0===b}c.hd=function(){return x$(this)};c.ee=function(a){return U0a(this,a)};c.be=function(){return this};c.aa=function(){this.Nh&&V0a(y());return U0a(this,1)};c.Ic=function(){return this};function x$(a){return a.Nh?(a=y(),jn(a)|0):a.Ky}c.Ya=function(a){return a3(this,a|0)};
+c.r=function(){return QT(Q(),this)};c.fg=function(a){return W0a(this,a)};c.Wd=function(a){return R0a(this,a)};
+c.nk=function(a){var b;if(0>=a)b=this.ie,b=(new a0).Q(b,b,this.sd);else if(0<=this.Ki)b=U0a(this,this.Ki-a|0);else{b=x$(this);var d=b>>31,e=this.sd,f=e>>31;a=-1+a|0;var h=a>>31,k=65535&e,p=e>>>16|0,t=65535&a,x=a>>>16|0,E=da(k,t),t=da(p,t),S=da(k,x),k=E+((t+S|0)<<16)|0,E=(E>>>16|0)+S|0,f=(((da(e,h)+da(f,a)|0)+da(p,x)|0)+(E>>>16|0)|0)+(((65535&E)+t|0)>>>16|0)|0,e=b-k|0,d=(-2147483648^e)>(-2147483648^b)?-1+(d-f|0)|0:d-f|0;0<this.sd?(f=this.ie,a=f>>31,f=d===a?(-2147483648^e)<(-2147483648^f):d<a):f=!1;
+f?d=!0:0>this.sd?(f=this.ie,a=f>>31,d=d===a?(-2147483648^e)>(-2147483648^f):d>a):d=!1;b=d?this:(new O).Q(e,b,this.sd)}return b};
+function W0a(a,b){if(b===Jv()){if(a.Nh)return 0;if(1===a.Ki)return y$(a);b=a.Ki;var d=b>>31,e=y$(a),f=e>>31;a=x$(a);var h=a>>31;a=e+a|0;var e=(-2147483648^a)<(-2147483648^e)?1+(f+h|0)|0:f+h|0,k=65535&b,f=b>>>16|0,p=65535&a,h=a>>>16|0,t=da(k,p),p=da(f,p),x=da(k,h),k=t+((p+x|0)<<16)|0,t=(t>>>16|0)+x|0;b=(((da(b,e)+da(d,a)|0)+da(f,h)|0)+(t>>>16|0)|0)+(((65535&t)+p|0)>>>16|0)|0;return kf(Ra(),k,b,2,0)}if(a.Nh)return 0;b=0;for(d=y$(a);;){b=(b|0)+d|0;if(d===a.Ky)return b|0;d=d+a.sd|0}}
+function y$(a){return a.Nh?y().Sx():a.ie}function S0a(a){var b=a.hm,d=b>>31,e=a.ie;a=e>>31;e=b-e|0;return(new Vb).ia(e,(-2147483648^e)>(-2147483648^b)?-1+(d-a|0)|0:d-a|0)}c.$classData=g({CF:0},!1,"scala.collection.immutable.Range",{CF:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,AF:1,$q:1,kd:1,qd:1,pd:1,og:1,Id:1,ed:1,l:1,i:1});function z$(){}z$.prototype=new w9;z$.prototype.constructor=z$;function X0a(){}
+c=X0a.prototype=z$.prototype;c.nb=function(){return this};function Y0a(a){for(var b=YT(),b=(new Al).j(b),d=a;!d.z();){xg();var e=Eka((new rE).Ac(K(function(a,b){return function(){return b.Ba}}(a,b))),d.$());e.aa();b.Ba=e;d=d.aa()}return b.Ba}c.W=function(a){return Bi(this,a)};c.Wh=function(){return this};c.Mb=function(a){return og(this,a)};c.y=function(a){return Bi(this,a|0)};c.Le=function(a){return kF(this,a)};c.ss=function(a){return Uv(this,a)};c.oe=function(a){return Z8(this,a)};c.te=function(){return this};
+c.lc=function(){return this};c.o=function(a){return this===a||$2(this,a)};c.fj=function(a,b){if(I5(b.cf(this))){if(this.z())a=YT();else{b=(new Al).j(this);for(var d=a.y(b.Ba.$()).Jc();!b.Ba.z()&&d.z();)b.Ba=b.Ba.aa(),b.Ba.z()||(d=a.y(b.Ba.$()).Jc());a=b.Ba.z()?(xg(),YT()):uE(d,K(function(a,b,d){return function(){return d.Ba.aa().fj(b,(xg(),(new yg).b()))}}(this,a,b)))}return a}return u5(this,a,b)};function nU(a,b,d){for(;!a.z()&&!!b.y(a.$())===d;)a=a.aa();return kd(a)?k_a(xg(),a,b,d):YT()}
+c.iu=function(a){return LV(this,a)};c.Sj=function(a){for(var b=this;!b.z()&&a.y(b.$());)b=b.aa();return b};c.zb=function(a){return this.Mc("",a,"")};c.Mc=function(a,b,d){var e=this,f=this;for(e.z()||(e=e.aa());f!==e&&!e.z();){e=e.aa();if(e.z())break;e=e.aa();if(e===f)break;f=f.aa()}return cc(this,a,b,d)};c.lh=function(a){return $8(this,a)};c.fo=function(a){return Bpa(new mU,K(function(a){return function(){return a}}(this)),a)};c.Je=function(){return Z0a(this)};c.nd=function(){return xg()};
+c.k=function(){return cc(this,"Stream(",", ",")")};c.ua=function(a){var b=this;a:for(;;){if(!b.z()){a.y(b.$());b=b.aa();continue a}break}};c.Gb=function(a,b){var d=this;for(;;){if(d.z())return a;var e=d.aa();a=qb(b,a,d.$());d=e}};c.Ai=function(a,b){return N_a(this,a,b)};function $0a(a,b,d,e){for(;;){if(e.z())return xg(),YT();if(b.z())b=qy(d),d=y();else{var f=b.$();return sE(new tE,f,K(function(a,b,d,e){return function(){var f=b.aa(),E=e.$();return $0a(a,f,Ng(new Og,E,d),e.aa())}}(a,b,d,e)))}}}
+c.Te=function(a,b){return b9(this,a,b)};function a1a(a,b,d){for(;;){if(d.z())return d;var e=d.$();if(b.ib(e))d=d.aa();else return e=d.$(),sE(new tE,e,K(function(a,b,d){return function(){return a1a(a,b.ui(d.$()),d.aa())}}(a,b,d)))}}c.Cf=function(){return Y0a(this)};c.ml=function(a,b){return nU(this,a,b)};c.xi=function(){return a1a(this,I(ol(),y()),this)};c.Qc=function(a,b){return I5(b.cf(this))?sE(new tE,a,K(function(a){return function(){return a}}(this))):qx(this,a,b)};c.Ta=function(){return sva(this)};
+c.Vj=function(a){return c9(this,a)};c.ra=function(){for(var a=0,b=this;!b.z();)a=1+a|0,b=b.aa();return a};c.Vc=function(a,b){return I5(b.cf(this))?(this.z()?a=a.Jc():(b=this.$(),a=sE(new tE,b,K(function(a,b){return function(){return a.aa().Vc(b,(xg(),(new yg).b()))}}(this,a)))),a):Ht(this,a,b)};c.xj=function(a){var b=xg();return this.Ge(j_a(b,0,1),a)};c.Mf=function(){return this.Mc("","","")};c.vh=function(){return this};
+c.Gi=function(a){var b=nU(this,m(new n,function(a,b){return function(a){return!!b.y(a)}}(this,a)),!1);return(new A).e(b,nU(this,m(new n,function(a,b){return function(a){return!!b.y(a)}}(this,a)),!0))};c.Yv=function(a){return b1a(this,a)};c.Jc=function(){return this};
+function Uv(a,b){for(var d=(new Al).j(a);;)if(kd(d.Ba)){var e=b.y(d.Ba.$());if(e.z())d.Ba=d.Ba.aa();else return e=e.Jc(),xg(),Fka((new rE).Ac(K(function(a,b,d){return function(){return Uv(d.Ba.aa(),b)}}(a,b,d))),e)}else break;xg();return YT()}c.hd=function(){return jn(this)};c.ee=function(a){return LV(this,a)};function LV(a,b){for(;;){if(0>=b||a.z())return a;a=a.aa();b=-1+b|0}}c.be=function(){return this};c.ib=function(a){return d9(this,a)};
+c.Sf=function(a,b,d,e){Ur(a,b);if(!this.z()){Wr(a,this.$());b=this;if(b.Yn()){var f=this.aa();if(f.z())return Ur(a,e),a;if(b!==f&&(b=f,f.Yn()))for(f=f.aa();b!==f&&f.Yn();)Wr(Ur(a,d),b.$()),b=b.aa(),f=f.aa(),f.Yn()&&(f=f.aa());if(f.Yn()){for(var h=this,k=0;h!==f;)h=h.aa(),f=f.aa(),k=1+k|0;b===f&&0<k&&(Wr(Ur(a,d),b.$()),b=b.aa());for(;b!==f;)Wr(Ur(a,d),b.$()),b=b.aa()}else{for(;b!==f;)Wr(Ur(a,d),b.$()),b=b.aa();kd(b)&&Wr(Ur(a,d),b.$())}}b.z()||(b.Yn()?Ur(Ur(a,d),"..."):Ur(Ur(a,d),"?"))}Ur(a,e);return a};
+c.Ic=function(){return this};c.Ya=function(a){return e9(this,a|0)};c.dp=function(a){return e9(this,a)};c.r=function(){return QT(Q(),this)};function Z0a(a){if(a.z())return v5(a);if(a.aa().z())return YT();var b=a.$();return sE(new tE,b,K(function(a){return function(){return Z0a(a.aa())}}(a)))}c.xa=function(a,b){return I5(b.cf(this))?(this.z()?a=YT():(b=a.y(this.$()),a=sE(new tE,b,K(function(a,b){return function(){return a.aa().xa(b,(xg(),(new yg).b()))}}(this,a)))),a):Cr(this,a,b)};
+c.nk=function(a){var b=this;for(a=LV(this,a);!a.z();)b=b.aa(),a=a.aa();return b};c.Wd=function(a){if(0>=a)a=this;else{var b=b1a(this,a),d=B().s;a=$0a(this,L(b,d),y(),LV(this,a))}return a};function b1a(a,b){if(0>=b||a.z())return xg(),YT();if(1===b)return b=a.$(),sE(new tE,b,K(function(){return function(){xg();return YT()}}(a)));var d=a.$();return sE(new tE,d,K(function(a,b){return function(){return b1a(a.aa(),-1+b|0)}}(a,b)))}
+c.jc=function(a,b){if(I5(b.cf(this))){for(var d=this,e=(new Al).j(null),f=a.Am(m(new n,function(a,b){return function(a){b.Ba=a}}(this,e)));;)if(kd(d)&&!f.y(d.$()))d=d.aa();else break;return d.z()?YT():l_a(xg(),e.Ba,d,a,b)}return y5(this,a,b)};c.ek=function(a){if(this.z())throw(new il).c("empty.reduceLeft");for(var b=this.$(),d=this.aa();!d.z();)b=qb(a,b,d.$()),d=d.aa();return b};
+function uE(a,b){if(a.z())return ne(b).Jc();var d=a.$();return sE(new tE,d,K(function(a,b){return function(){return uE(a.aa(),b)}}(a,b)))}c.Ze=function(){return"Stream"};c.Ge=function(a,b){return I5(b.cf(this))?(this.z()||a.z()?a=YT():(b=(new A).e(this.$(),a.$()),a=sE(new tE,b,K(function(a,b){return function(){return a.aa().Ge(b.aa(),(xg(),(new yg).b()))}}(this,a)))),a):xO(this,a,b)};function c1a(a,b){if(b>=a.Uc)throw(new P).c(""+b);return a.pa.m[b]}
+function d1a(a,b){var d=a.pa.m.length,e=d>>31,f=b>>31;if(f===e?(-2147483648^b)>(-2147483648^d):f>e){f=d<<1;for(d=d>>>31|0|e<<1;;){var e=b>>31,h=f,k=d;if(e===k?(-2147483648^b)>(-2147483648^h):e>k)d=f>>>31|0|d<<1,f<<=1;else break}b=d;if(0===b?-1<(-2147483648^f):0<b)f=2147483647;b=f;b=la(Wa(Ua),[b]);Oa(a.pa,0,b,0,a.Uc);a.pa=b}}function A$(){}A$.prototype=new r$;A$.prototype.constructor=A$;c=A$.prototype;c.b=function(){return this};c.$=function(){throw(new Du).c("Empty Map");};
+c.bG=function(){throw(new Du).c("Empty Map");};c.aa=function(){return this.bG()};c.$classData=g({Zfa:0},!1,"scala.collection.immutable.HashMap$EmptyHashMap$",{Zfa:1,Nv:1,Hl:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,tj:1,kd:1,qd:1,pd:1,lk:1,l:1,i:1,ed:1});var e1a=void 0;function z6(){e1a||(e1a=(new A$).b());return e1a}function B$(){this.Zf=null;this.Ad=0;this.dy=this.eo=null}B$.prototype=new r$;
+B$.prototype.constructor=B$;function D5(a){null===a.dy&&(a.dy=(new A).e(a.Zf,a.eo));return a.dy}function s$(a,b,d,e){var f=new B$;f.Zf=a;f.Ad=b;f.eo=d;f.dy=e;return f}c=B$.prototype;c.jt=function(a,b,d,e,f,h){if(b===this.Ad&&bn(cn(),a,this.Zf)){if(null===h)return this.eo===e?this:s$(a,b,e,f);a=h.JC(D5(this),null!==f?f:(new A).e(a,e));return s$(a.ja(),b,a.na(),a)}if(b!==this.Ad)return a=s$(a,b,e,f),ACa(A6(),this.Ad,this,b,a,d,2);d=Eu();return C$(new D$,b,g$(new h$,d,this.Zf,this.eo).kt(a,e))};
+c.ts=function(a,b){return b===this.Ad&&bn(cn(),a,this.Zf)?(new J).j(this.eo):F()};c.ua=function(a){a.y(D5(this))};c.yv=function(a,b){return b===this.Ad&&bn(cn(),a,this.Zf)?(A6(),z6()):this};c.qs=function(a,b){return b!==!!a.y(D5(this))?this:null};c.Ha=function(){return 1};c.Ta=function(){SC();var a=(new w).f([D5(this)]);return Ve(new We,a,0,a.pa.length|0)};c.cs=function(a,b){return b===this.Ad&&bn(cn(),a,this.Zf)};
+c.$classData=g({SX:0},!1,"scala.collection.immutable.HashMap$HashMap1",{SX:1,Nv:1,Hl:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,tj:1,kd:1,qd:1,pd:1,lk:1,l:1,i:1,ed:1});function D$(){this.Ad=0;this.li=null}D$.prototype=new r$;D$.prototype.constructor=D$;c=D$.prototype;
+c.jt=function(a,b,d,e,f,h){if(b===this.Ad)return null!==h&&this.li.ib(a)?C$(new D$,b,this.li.Om(h.JC((new A).e(a,this.li.y(a)),f))):C$(new D$,b,this.li.kt(a,e));a=s$(a,b,e,f);return ACa(A6(),this.Ad,this,b,a,d,1+this.li.Ha()|0)};c.ts=function(a,b){return b===this.Ad?this.li.$b(a):F()};c.ua=function(a){var b=hv(this.li);XT(iv(b),a)};
+c.yv=function(a,b){if(b===this.Ad){a=this.li.ww(a);var d=a.Ha();switch(d){case 0:return A6(),z6();case 1:return a=hv(a),a=iv(a).ma(),s$(a.ja(),b,a.na(),a);default:return d===this.li.Ha()?this:C$(new D$,b,a)}}else return this};c.qs=function(a,b){a=b?g9(this.li,a):x5(this.li,a,!1);b=a.Ha();switch(b){case 0:return null;case 1:a=hv(a);a=iv(a).ma();if(null===a)throw(new q).j(a);return s$(a.ja(),this.Ad,a.na(),a);default:return b===this.li.Ha()?this:C$(new D$,this.Ad,a)}};
+c.Ta=function(){var a=hv(this.li);return iv(a)};c.Ha=function(){return this.li.Ha()};function C$(a,b,d){a.Ad=b;a.li=d;return a}c.cs=function(a,b){return b===this.Ad&&this.li.ib(a)};c.$classData=g({$fa:0},!1,"scala.collection.immutable.HashMap$HashMapCollision1",{$fa:1,Nv:1,Hl:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,tj:1,kd:1,qd:1,pd:1,lk:1,l:1,i:1,ed:1});function y6(){this.Gh=0;this.ne=null;this.Uc=0}
+y6.prototype=new r$;y6.prototype.constructor=y6;c=y6.prototype;
+c.jt=function(a,b,d,e,f,h){var k=1<<(31&(b>>>d|0)),p=OE(ti(),this.Gh&(-1+k|0));if(0!==(this.Gh&k)){k=this.ne.m[p];a=k.jt(a,b,5+d|0,e,f,h);if(a===k)return this;b=la(Wa(w6),[this.ne.m.length]);Kv(Bf(),this.ne,0,b,0,this.ne.m.length);b.m[p]=a;return x6(new y6,this.Gh,b,this.Uc+(a.Ha()-k.Ha()|0)|0)}d=la(Wa(w6),[1+this.ne.m.length|0]);Kv(Bf(),this.ne,0,d,0,p);d.m[p]=s$(a,b,e,f);Kv(Bf(),this.ne,p,d,1+p|0,this.ne.m.length-p|0);return x6(new y6,this.Gh|k,d,1+this.Uc|0)};
+c.ts=function(a,b,d){var e=31&(b>>>d|0);if(-1===this.Gh)return this.ne.m[e].ts(a,b,5+d|0);e=1<<e;return 0!==(this.Gh&e)?(e=OE(ti(),this.Gh&(-1+e|0)),this.ne.m[e].ts(a,b,5+d|0)):F()};c.ua=function(a){for(var b=0;b<this.ne.m.length;)this.ne.m[b].ua(a),b=1+b|0};
+c.yv=function(a,b,d){var e=1<<(31&(b>>>d|0)),f=OE(ti(),this.Gh&(-1+e|0));if(0!==(this.Gh&e)){var h=this.ne.m[f];a=h.yv(a,b,5+d|0);if(a===h)return this;if(0===a.Ha()){e^=this.Gh;if(0!==e)return a=la(Wa(w6),[-1+this.ne.m.length|0]),Kv(Bf(),this.ne,0,a,0,f),Kv(Bf(),this.ne,1+f|0,a,f,-1+(this.ne.m.length-f|0)|0),f=this.Uc-h.Ha()|0,1!==a.m.length||s3(a.m[0])?x6(new y6,e,a,f):a.m[0];A6();return z6()}return 1!==this.ne.m.length||s3(a)?(e=la(Wa(w6),[this.ne.m.length]),Kv(Bf(),this.ne,0,e,0,this.ne.m.length),
+e.m[f]=a,f=this.Uc+(a.Ha()-h.Ha()|0)|0,x6(new y6,this.Gh,e,f)):a}return this};
+c.qs=function(a,b,d,e,f){for(var h=f,k=0,p=0,t=0;t<this.ne.m.length;){var x=this.ne.m[t].qs(a,b,5+d|0,e,h);null!==x&&(e.m[h]=x,h=1+h|0,k=k+x.Ha()|0,p|=1<<t);t=1+t|0}if(h===f)return null;if(k===this.Uc)return this;if(h!==(1+f|0)||s3(e.m[f])){b=h-f|0;a=la(Wa(w6),[b]);Oa(e,f,a,0,b);if(b===this.ne.m.length)p=this.Gh;else{A6();e=0;for(f=this.Gh;0!==p;)b=f^f&(-1+f|0),0!==(1&p)&&(e|=b),f&=~b,p=p>>>1|0;p=e}return x6(new y6,p,a,k)}return e.m[f]};
+c.Ta=function(){var a=new C5;r3.prototype.EU.call(a,this.ne);return a};c.Ha=function(){return this.Uc};function x6(a,b,d,e){a.Gh=b;a.ne=d;a.Uc=e;return a}c.cs=function(a,b,d){var e=31&(b>>>d|0);if(-1===this.Gh)return this.ne.m[e].cs(a,b,5+d|0);e=1<<e;return 0!==(this.Gh&e)?(e=OE(ti(),this.Gh&(-1+e|0)),this.ne.m[e].cs(a,b,5+d|0)):!1};function s3(a){return!!(a&&a.$classData&&a.$classData.n.TX)}
+c.$classData=g({TX:0},!1,"scala.collection.immutable.HashMap$HashTrieMap",{TX:1,Nv:1,Hl:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,tj:1,kd:1,qd:1,pd:1,lk:1,l:1,i:1,ed:1});function E$(){}E$.prototype=new w9;E$.prototype.constructor=E$;function f1a(){}c=f1a.prototype=E$.prototype;c.nb=function(){return this};c.W=function(a){return Bi(this,a)};c.Wh=function(){return this};c.Mb=function(a){return og(this,a)};
+c.y=function(a){return Bi(this,a|0)};c.Le=function(a){return kF(this,a)};c.oe=function(a){return Z8(this,a)};c.ob=function(){return this};c.te=function(){return this};c.lc=function(){return this};
+c.fj=function(a,b){if(b===B().s){if(this===y())return y();b=this;for(var d=(new gE).od(!1),e=(new Al).j(null),f=(new Al).j(null);b!==y();)a.y(b.$()).nb().ua(m(new n,function(a,b,d,e){return function(a){b.Ba?(a=Ng(new Og,a,y()),e.Ba.Ia=a,e.Ba=a):(d.Ba=Ng(new Og,a,y()),e.Ba=d.Ba,b.Ba=!0)}}(this,d,e,f))),b=b.aa();return d.Ba?e.Ba:y()}return u5(this,a,b)};c.iu=function(a){return wO(this,a)};c.Sj=function(a){a:{var b=this;for(;;){if(b.z()||!a.y(b.$()))break a;b=b.aa()}}return b};
+c.lh=function(a){return $8(this,a)};c.nd=function(){return B()};c.ua=function(a){for(var b=this;!b.z();)a.y(b.$()),b=b.aa()};c.Gb=function(a,b){return a9(this,a,b)};c.Ai=function(a,b){for(var d=qy(this);!d.z();){var e=d.$();a=qb(b,e,a);d=d.aa()}return a};c.Te=function(a,b){return b9(this,a,b)};function Oq(a,b){a.z()?a=b:b.z()||(b=hl((new jc).b(),b),b.z()||(b.Qo&&F$(b),b.ng.Ia=a,a=b.ob()));return a}c.Cf=function(){return qy(this)};
+c.Qc=function(a,b){return b&&b.$classData&&b.$classData.n.yF?Ng(new Og,a,this):qx(this,a,b)};c.Ta=function(){return iv(this)};function wO(a,b){for(;!a.z()&&0<b;)a=a.aa(),b=-1+b|0;return a}c.Vj=function(a){return c9(this,a)};c.Vc=function(a,b){return b===B().s?Oq(a.nb().ob(),this):Ht(this,a,b)};c.ra=function(){return fn(this)};c.vh=function(){return this};
+c.Yv=function(a){a:if(this.z()||0>=a)a=y();else{for(var b=Ng(new Og,this.$(),y()),d=b,e=this.aa(),f=1;;){if(e.z()){a=this;break a}if(f<a)var f=1+f|0,h=Ng(new Og,e.$(),y()),d=d.Ia=h,e=e.aa();else break}a=b}return a};c.Jc=function(){return this.z()?YT():sE(new tE,this.$(),K(function(a){return function(){return a.aa().Jc()}}(this)))};c.hd=function(){return jn(this)};c.ee=function(a){return wO(this,a)};c.ib=function(a){return d9(this,a)};c.be=function(){return this};c.Ic=function(){return this};
+c.dp=function(a){return e9(this,a)};c.Ya=function(a){return e9(this,a|0)};c.r=function(){return QT(Q(),this)};c.xa=function(a,b){if(b===B().s){if(this===y())return y();for(var d=b=Ng(new Og,a.y(this.$()),y()),e=this.aa();e!==y();)var f=Ng(new Og,a.y(e.$()),y()),d=d.Ia=f,e=e.aa();return b}return Cr(this,a,b)};c.nk=function(a){a:{var b=wO(this,a);a=this;for(;;){if(y().o(b))break a;if(si(b))b=b.Ia,a=a.aa();else throw(new q).j(b);}}return a};c.Wd=function(a){return ho(this,a)};
+c.jc=function(a,b){if(b===B().s){if(this===y())return y();b=this;var d=null;do{var e=a.eb(b.$(),B().pv);e!==B().pv&&(d=Ng(new Og,e,y()));b=b.aa();if(b===y())return null===d?y():d}while(null===d);e=d;do{var f=a.eb(b.$(),B().pv);f!==B().pv&&(f=Ng(new Og,f,y()),e=e.Ia=f);b=b.aa()}while(b!==y());return d}return y5(this,a,b)};c.ek=function(a){return P_a(this,a)};function qy(a){for(var b=y();!a.z();){var d=a.$(),b=Ng(new Og,d,b);a=a.aa()}return b}c.Ze=function(){return"List"};
+function Mg(a){return!!(a&&a.$classData&&a.$classData.n.WX)}function O(){a0.call(this)}O.prototype=new Q0a;O.prototype.constructor=O;O.prototype.rn=function(){return!0};O.prototype.Q=function(a,b,d){a0.prototype.Q.call(this,a,b,d);return this};O.prototype.zT=function(a,b,d){return(new O).Q(a,b,d)};
+O.prototype.$classData=g({Ega:0},!1,"scala.collection.immutable.Range$Inclusive",{Ega:1,CF:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,AF:1,$q:1,kd:1,qd:1,pd:1,og:1,Id:1,ed:1,l:1,i:1});function tE(){this.Zy=this.WY=this.Rx=null}tE.prototype=new X0a;tE.prototype.constructor=tE;c=tE.prototype;c.$=function(){return this.Rx};function G$(a){a.Yn()||a.Yn()||(a.WY=ne(a.Zy),a.Zy=null);return a.WY}
+c.Le=function(a){return g1a(a)?h1a(this,a):kF(this,a)};c.z=function(){return!1};c.Yn=function(){return null===this.Zy};function h1a(a,b){for(;;)if(bn(cn(),a.Rx,b.Rx))if(a=G$(a),g1a(a))if(b=G$(b),g1a(b)){if(a===b)return!0}else return!1;else return G$(b).z();else return!1}c.aa=function(){return G$(this)};function sE(a,b,d){a.Rx=b;a.Zy=d;return a}function g1a(a){return!!(a&&a.$classData&&a.$classData.n.XX)}
+c.$classData=g({XX:0},!1,"scala.collection.immutable.Stream$Cons",{XX:1,Mga:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,BF:1,$q:1,kd:1,qd:1,pd:1,qp:1,Ws:1,Ev:1,l:1,i:1});function H$(){}H$.prototype=new X0a;H$.prototype.constructor=H$;c=H$.prototype;c.$=function(){this.Sx()};c.b=function(){return this};c.z=function(){return!0};c.Yn=function(){return!1};c.Sx=function(){throw(new Du).c("head of empty stream");};
+c.aa=function(){throw(new il).c("tail of empty stream");};c.$classData=g({Qga:0},!1,"scala.collection.immutable.Stream$Empty$",{Qga:1,Mga:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,BF:1,$q:1,kd:1,qd:1,pd:1,qp:1,Ws:1,Ev:1,l:1,i:1});var i1a=void 0;function YT(){i1a||(i1a=(new H$).b());return i1a}function J5(){this.Lg=this.Qe=this.ue=0;this.Be=!1;this.He=0;this.Pj=this.ei=this.Kg=this.Uf=this.df=this.Ie=null}
+J5.prototype=new w9;J5.prototype.constructor=J5;c=J5.prototype;c.nb=function(){return this};c.kc=function(){return this.Kg};
+function I$(a,b,d,e){if(a.Be)if(32>e)a.Rc(Me(a.Ce()));else if(1024>e)a.oc(Me(a.yb())),a.yb().m[31&(b>>>5|0)]=a.Ce(),a.Rc(Pe(a.yb(),31&(d>>>5|0)));else if(32768>e)a.oc(Me(a.yb())),a.Yc(Me(a.Lb())),a.yb().m[31&(b>>>5|0)]=a.Ce(),a.Lb().m[31&(b>>>10|0)]=a.yb(),a.oc(Pe(a.Lb(),31&(d>>>10|0))),a.Rc(Pe(a.yb(),31&(d>>>5|0)));else if(1048576>e)a.oc(Me(a.yb())),a.Yc(Me(a.Lb())),a.De(Me(a.kc())),a.yb().m[31&(b>>>5|0)]=a.Ce(),a.Lb().m[31&(b>>>10|0)]=a.yb(),a.kc().m[31&(b>>>15|0)]=a.Lb(),a.Yc(Pe(a.kc(),31&(d>>>
+15|0))),a.oc(Pe(a.Lb(),31&(d>>>10|0))),a.Rc(Pe(a.yb(),31&(d>>>5|0)));else if(33554432>e)a.oc(Me(a.yb())),a.Yc(Me(a.Lb())),a.De(Me(a.kc())),a.jh(Me(a.ud())),a.yb().m[31&(b>>>5|0)]=a.Ce(),a.Lb().m[31&(b>>>10|0)]=a.yb(),a.kc().m[31&(b>>>15|0)]=a.Lb(),a.ud().m[31&(b>>>20|0)]=a.kc(),a.De(Pe(a.ud(),31&(d>>>20|0))),a.Yc(Pe(a.kc(),31&(d>>>15|0))),a.oc(Pe(a.Lb(),31&(d>>>10|0))),a.Rc(Pe(a.yb(),31&(d>>>5|0)));else if(1073741824>e)a.oc(Me(a.yb())),a.Yc(Me(a.Lb())),a.De(Me(a.kc())),a.jh(Me(a.ud())),a.Jo(Me(a.Ih())),
+a.yb().m[31&(b>>>5|0)]=a.Ce(),a.Lb().m[31&(b>>>10|0)]=a.yb(),a.kc().m[31&(b>>>15|0)]=a.Lb(),a.ud().m[31&(b>>>20|0)]=a.kc(),a.Ih().m[31&(b>>>25|0)]=a.ud(),a.jh(Pe(a.Ih(),31&(d>>>25|0))),a.De(Pe(a.ud(),31&(d>>>20|0))),a.Yc(Pe(a.kc(),31&(d>>>15|0))),a.oc(Pe(a.Lb(),31&(d>>>10|0))),a.Rc(Pe(a.yb(),31&(d>>>5|0)));else throw(new Ne).b();else{b=-1+a.yf()|0;switch(b){case 5:a.Jo(Me(a.Ih()));a.jh(Pe(a.Ih(),31&(d>>>25|0)));a.De(Pe(a.ud(),31&(d>>>20|0)));a.Yc(Pe(a.kc(),31&(d>>>15|0)));a.oc(Pe(a.Lb(),31&(d>>>10|
+0)));a.Rc(Pe(a.yb(),31&(d>>>5|0)));break;case 4:a.jh(Me(a.ud()));a.De(Pe(a.ud(),31&(d>>>20|0)));a.Yc(Pe(a.kc(),31&(d>>>15|0)));a.oc(Pe(a.Lb(),31&(d>>>10|0)));a.Rc(Pe(a.yb(),31&(d>>>5|0)));break;case 3:a.De(Me(a.kc()));a.Yc(Pe(a.kc(),31&(d>>>15|0)));a.oc(Pe(a.Lb(),31&(d>>>10|0)));a.Rc(Pe(a.yb(),31&(d>>>5|0)));break;case 2:a.Yc(Me(a.Lb()));a.oc(Pe(a.Lb(),31&(d>>>10|0)));a.Rc(Pe(a.yb(),31&(d>>>5|0)));break;case 1:a.oc(Me(a.yb()));a.Rc(Pe(a.yb(),31&(d>>>5|0)));break;case 0:a.Rc(Me(a.Ce()));break;default:throw(new q).j(b);
+}a.Be=!0}}c.$=function(){if(0===this.Mb(0))throw(new il).c("empty.head");return this.W(0)};c.W=function(a){var b=a+this.ue|0;if(0<=a&&b<this.Qe)a=b;else throw(new P).c(""+a);return lba(this,a,a^this.Lg)};c.Wh=function(){return this};c.Mb=function(a){return this.ra()-a|0};c.yf=function(){return this.He};c.y=function(a){return this.W(a|0)};c.te=function(){return this};c.lc=function(){return this};c.Q=function(a,b,d){this.ue=a;this.Qe=b;this.Lg=d;this.Be=!1;return this};c.Jo=function(a){this.Pj=a};
+c.mc=function(a,b){return b===($F(),ek().nc)||b===ko().s||b===r().s?j1a(this,a):Di(this,a,b)};c.Je=function(){if(0===this.Mb(0))throw(new il).c("empty.init");return k1a(this,1)};c.nd=function(){return dk()};c.Ce=function(){return this.Ie};c.ud=function(){return this.ei};c.Yc=function(a){this.Uf=a};
+function J$(a,b,d){var e=-1+a.He|0;switch(e){case 0:a.Ie=Oe(a.Ie,b,d);break;case 1:a.df=Oe(a.df,b,d);break;case 2:a.Uf=Oe(a.Uf,b,d);break;case 3:a.Kg=Oe(a.Kg,b,d);break;case 4:a.ei=Oe(a.ei,b,d);break;case 5:a.Pj=Oe(a.Pj,b,d);break;default:throw(new q).j(e);}}c.gg=function(){return this};
+function j1a(a,b){if(a.Qe!==a.ue){var d=-32&a.Qe,e=31&a.Qe;if(a.Qe!==d){var f=(new J5).Q(a.ue,1+a.Qe|0,d);Qe(f,a,a.He);f.Be=a.Be;I$(f,a.Lg,d,a.Lg^d);f.Ie.m[e]=b;return f}var h=a.ue&~(-1+(1<<da(5,-1+a.He|0))|0),f=a.ue>>>da(5,-1+a.He|0)|0;if(0!==h){if(1<a.He){var d=d-h|0,k=a.Lg-h|0,h=(new J5).Q(a.ue-h|0,(1+a.Qe|0)-h|0,d);Qe(h,a,a.He);h.Be=a.Be;J$(h,f,0);K$(h,k,d,k^d);h.Ie.m[e]=b;return h}e=-32+d|0;d=a.Lg;k=(new J5).Q(a.ue-h|0,(1+a.Qe|0)-h|0,e);Qe(k,a,a.He);k.Be=a.Be;J$(k,f,0);I$(k,d,e,d^e);k.Ie.m[32-
+h|0]=b;return k}f=a.Lg;h=(new J5).Q(a.ue,1+a.Qe|0,d);Qe(h,a,a.He);h.Be=a.Be;K$(h,f,d,f^d);h.Ie.m[e]=b;return h}a=la(Wa(Ua),[32]);a.m[0]=b;b=(new J5).Q(0,1,0);b.He=1;b.Ie=a;return b}c.Td=function(){return F8(this)};
+function l1a(a,b){a.He=b;b=-1+b|0;switch(b){case 0:a.df=null;a.Uf=null;a.Kg=null;a.ei=null;a.Pj=null;break;case 1:a.Uf=null;a.Kg=null;a.ei=null;a.Pj=null;break;case 2:a.Kg=null;a.ei=null;a.Pj=null;break;case 3:a.ei=null;a.Pj=null;break;case 4:a.Pj=null;break;case 5:break;default:throw(new q).j(b);}}c.Qc=function(a,b){return b===($F(),ek().nc)||b===ko().s||b===r().s?m1a(this,a):qx(this,a,b)};c.Ta=function(){return gk(this)};c.oc=function(a){this.df=a};
+function L$(a,b){for(;b<a.m.length;)a.m[b]=null,b=1+b|0}c.ra=function(){return this.Qe-this.ue|0};
+c.Vc=function(a,b){if(b===($F(),ek().nc)||b===ko().s||b===r().s){if(a.z())return this;a=a.Eg()?a.nb():a.gg();var d=a.Ha();if(2>=d||d<(this.ra()>>>5|0))return b=(new Al).j(this),a.ua(m(new n,function(a,b){return function(a){b.Ba=b.Ba.mc(a,(dk(),ek().nc))}}(this,b))),b.Ba;if(this.ra()<(d>>>5|0)&&a&&a.$classData&&a.$classData.n.aY){b=a;for(a=(new u3).Es(this);a.ta();)d=a.ma(),b=b.Qc(d,(dk(),ek().nc));return b}return Ht(this,a,b)}return Ht(this,a.nb(),b)};c.jh=function(a){this.ei=a};c.vh=function(){return this};
+function k1a(a,b){if(!(0>=b))if((a.Qe-b|0)>a.ue){var d=a.Qe-b|0,e=-32&(-1+d|0),f=n1a(a.ue^(-1+d|0)),h=a.ue&~(-1+(1<<da(5,f))|0);b=(new J5).Q(a.ue-h|0,d-h|0,e-h|0);Qe(b,a,a.He);b.Be=a.Be;I$(b,a.Lg,e,a.Lg^e);l1a(b,f);a=d-h|0;if(32>=a)L$(b.Ie,a);else if(1024>=a)L$(b.Ie,1+(31&(-1+a|0))|0),b.df=M$(b.df,a>>>5|0);else if(32768>=a)L$(b.Ie,1+(31&(-1+a|0))|0),b.df=M$(b.df,1+(31&((-1+a|0)>>>5|0))|0),b.Uf=M$(b.Uf,a>>>10|0);else if(1048576>=a)L$(b.Ie,1+(31&(-1+a|0))|0),b.df=M$(b.df,1+(31&((-1+a|0)>>>5|0))|0),
+b.Uf=M$(b.Uf,1+(31&((-1+a|0)>>>10|0))|0),b.Kg=M$(b.Kg,a>>>15|0);else if(33554432>=a)L$(b.Ie,1+(31&(-1+a|0))|0),b.df=M$(b.df,1+(31&((-1+a|0)>>>5|0))|0),b.Uf=M$(b.Uf,1+(31&((-1+a|0)>>>10|0))|0),b.Kg=M$(b.Kg,1+(31&((-1+a|0)>>>15|0))|0),b.ei=M$(b.ei,a>>>20|0);else if(1073741824>=a)L$(b.Ie,1+(31&(-1+a|0))|0),b.df=M$(b.df,1+(31&((-1+a|0)>>>5|0))|0),b.Uf=M$(b.Uf,1+(31&((-1+a|0)>>>10|0))|0),b.Kg=M$(b.Kg,1+(31&((-1+a|0)>>>15|0))|0),b.ei=M$(b.ei,1+(31&((-1+a|0)>>>20|0))|0),b.Pj=M$(b.Pj,a>>>25|0);else throw(new Ne).b();
+a=b}else a=dk().el;return a}function K$(a,b,d,e){a.Be?(oba(a,b),mba(a,b,d,e)):(mba(a,b,d,e),a.Be=!0)}c.nf=function(){return this.ra()};c.yb=function(){return this.df};c.hd=function(){if(0===this.Mb(0))throw(new il).c("empty.last");return this.W(-1+this.ra()|0)};c.Ih=function(){return this.Pj};c.ee=function(a){return o1a(this,a)};c.be=function(){return this};c.aa=function(){if(0===this.Mb(0))throw(new il).c("empty.tail");return o1a(this,1)};c.Ic=function(){return this};
+function gk(a){var b=(new K5).ia(a.ue,a.Qe);Qe(b,a,a.He);a.Be&&oba(b,a.Lg);1<b.$C&&nba(b,a.ue,a.ue^a.Lg);return b}function n1a(a){if(32>a)return 1;if(1024>a)return 2;if(32768>a)return 3;if(1048576>a)return 4;if(33554432>a)return 5;if(1073741824>a)return 6;throw(new Ne).b();}c.Ya=function(a){return a3(this,a|0)};function N$(a,b){for(var d=0;d<b;)a.m[d]=null,d=1+d|0}c.r=function(){return QT(Q(),this)};c.Oj=function(a){this.He=a};c.Wd=function(a){return k1a(this,a)};
+c.nk=function(a){return 0>=a?dk().el:(this.Qe-a|0)>this.ue?p1a(this,this.Qe-a|0):this};c.Lb=function(){return this.Uf};
+function p1a(a,b){var d=-32&b,e=n1a(b^(-1+a.Qe|0)),f=b&~(-1+(1<<da(5,e))|0),h=(new J5).Q(b-f|0,a.Qe-f|0,d-f|0);Qe(h,a,a.He);h.Be=a.Be;I$(h,a.Lg,d,a.Lg^d);l1a(h,e);a=b-f|0;if(32>a)N$(h.Ie,a);else if(1024>a)N$(h.Ie,31&a),h.df=O$(h.df,a>>>5|0);else if(32768>a)N$(h.Ie,31&a),h.df=O$(h.df,31&(a>>>5|0)),h.Uf=O$(h.Uf,a>>>10|0);else if(1048576>a)N$(h.Ie,31&a),h.df=O$(h.df,31&(a>>>5|0)),h.Uf=O$(h.Uf,31&(a>>>10|0)),h.Kg=O$(h.Kg,a>>>15|0);else if(33554432>a)N$(h.Ie,31&a),h.df=O$(h.df,31&(a>>>5|0)),h.Uf=O$(h.Uf,
+31&(a>>>10|0)),h.Kg=O$(h.Kg,31&(a>>>15|0)),h.ei=O$(h.ei,a>>>20|0);else if(1073741824>a)N$(h.Ie,31&a),h.df=O$(h.df,31&(a>>>5|0)),h.Uf=O$(h.Uf,31&(a>>>10|0)),h.Kg=O$(h.Kg,31&(a>>>15|0)),h.ei=O$(h.ei,31&(a>>>20|0)),h.Pj=O$(h.Pj,a>>>25|0);else throw(new Ne).b();return h}c.Rc=function(a){this.Ie=a};function o1a(a,b){return 0>=b?a:a.ue<(a.Qe-b|0)?p1a(a,a.ue+b|0):dk().el}
+function m1a(a,b){if(a.Qe!==a.ue){var d=-32&(-1+a.ue|0),e=31&(-1+a.ue|0);if(a.ue!==(32+d|0)){var f=(new J5).Q(-1+a.ue|0,a.Qe,d);Qe(f,a,a.He);f.Be=a.Be;I$(f,a.Lg,d,a.Lg^d);f.Ie.m[e]=b;return f}var h=(1<<da(5,a.He))-a.Qe|0,f=h&~(-1+(1<<da(5,-1+a.He|0))|0),h=h>>>da(5,-1+a.He|0)|0;if(0!==f){if(1<a.He){var d=d+f|0,k=a.Lg+f|0,f=(new J5).Q((-1+a.ue|0)+f|0,a.Qe+f|0,d);Qe(f,a,a.He);f.Be=a.Be;J$(f,0,h);K$(f,k,d,k^d);f.Ie.m[e]=b;return f}e=32+d|0;d=a.Lg;k=(new J5).Q((-1+a.ue|0)+f|0,a.Qe+f|0,e);Qe(k,a,a.He);
+k.Be=a.Be;J$(k,0,h);I$(k,d,e,d^e);k.Ie.m[-1+f|0]=b;return k}if(0>d)return f=(1<<da(5,1+a.He|0))-(1<<da(5,a.He))|0,h=d+f|0,d=a.Lg+f|0,f=(new J5).Q((-1+a.ue|0)+f|0,a.Qe+f|0,h),Qe(f,a,a.He),f.Be=a.Be,K$(f,d,h,d^h),f.Ie.m[e]=b,f;f=a.Lg;h=(new J5).Q(-1+a.ue|0,a.Qe,d);Qe(h,a,a.He);h.Be=a.Be;K$(h,f,d,f^d);h.Ie.m[e]=b;return h}a=la(Wa(Ua),[32]);a.m[31]=b;b=(new J5).Q(31,32,0);b.He=1;b.Ie=a;return b}function M$(a,b){var d=la(Wa(Ua),[a.m.length]);Oa(a,0,d,0,b);return d}
+function O$(a,b){var d=la(Wa(Ua),[a.m.length]);Oa(a,b,d,b,d.m.length-b|0);return d}c.De=function(a){this.Kg=a};c.$classData=g({aY:0},!1,"scala.collection.immutable.Vector",{aY:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,AF:1,$q:1,kd:1,qd:1,pd:1,og:1,Id:1,bY:1,l:1,i:1,ed:1});function pj(){this.uh=null}pj.prototype=new w9;pj.prototype.constructor=pj;c=pj.prototype;c.nb=function(){return this};c.$=function(){return Uj(this)};
+c.W=function(a){a=65535&(this.uh.charCodeAt(a)|0);return(new Ke).Xa(a)};c.Wh=function(){return this};c.Mb=function(a){return I8(this,a)};c.Le=function(a){return J8(this,a)};c.y=function(a){a=65535&(this.uh.charCodeAt(a|0)|0);return(new Ke).Xa(a)};c.oe=function(a){return K8(this,a)};c.z=function(){return g3(this)};c.te=function(){return this};c.lc=function(){return this};c.to=function(a){return 65535&(this.uh.charCodeAt(a)|0)};c.Sj=function(a){return L8(this,a)};c.lh=function(a){return M8(this,a)};
+c.Je=function(){return N8(this)};c.nd=function(){return $F()};c.k=function(){return this.uh};c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.uh.length|0,a,b)};c.Ai=function(a,b){return T8(this,this.uh.length|0,a,b)};c.xg=function(a){var b=this.uh;return b===a?0:b<a?-1:1};c.Te=function(a,b){return P8(this,a,b)};c.of=function(a,b){return q1a(this,a,b)};c.Cf=function(){return px(this)};c.Td=function(){return F8(this)};c.Ta=function(){return Ve(new We,this,0,this.uh.length|0)};
+c.Vj=function(a){return R8(this,a)};c.Mf=function(){return this.uh};c.xj=function(a){return S8(this,a)};c.ra=function(){return this.uh.length|0};c.vh=function(){return this};c.nf=function(){return this.uh.length|0};c.hd=function(){return Dm(this)};c.ee=function(a){return q1a(this,a,this.uh.length|0)};c.aa=function(){return Ck(this)};c.be=function(){return this};c.Ic=function(){return this};c.Ya=function(a){return a3(this,a|0)};c.Ae=function(a,b,d){V8(this,a,b,d)};c.r=function(){return QT(Q(),this)};
+c.c=function(a){this.uh=a;return this};c.Wd=function(a){return Cm(this,a)};c.nk=function(a){return W8(this,a)};c.ve=function(){return uF(Ha(),this.uh)};function q1a(a,b,d){b=0>b?0:b;if(d<=b||b>=(a.uh.length|0))return(new pj).c("");d=d>(a.uh.length|0)?a.uh.length|0:d;Je();return(new pj).c((null!==a?a.uh:null).substring(b,d))}c.ek=function(a){return X8(this,a)};c.db=function(){DE||(DE=(new AE).b());return DE.db()};c.Ge=function(a,b){return Y8(this,a,b)};
+c.$classData=g({cha:0},!1,"scala.collection.immutable.WrappedString",{cha:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,AF:1,$q:1,kd:1,qd:1,pd:1,og:1,Id:1,ZX:1,Ne:1,Cm:1,Ed:1});function Og(){this.Ia=this.Cb=null}Og.prototype=new f1a;Og.prototype.constructor=Og;c=Og.prototype;c.u=function(){return"::"};c.$=function(){return this.Cb};c.v=function(){return 2};c.z=function(){return!1};
+c.w=function(a){switch(a){case 0:return this.Cb;case 1:return this.Ia;default:throw(new P).c(""+a);}};c.aa=function(){return this.Ia};function Ng(a,b,d){a.Cb=b;a.Ia=d;return a}c.x=function(){return Y(new Z,this)};function si(a){return!!(a&&a.$classData&&a.$classData.n.RX)}
+c.$classData=g({RX:0},!1,"scala.collection.immutable.$colon$colon",{RX:1,WX:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,BF:1,$q:1,kd:1,qd:1,pd:1,qp:1,Ws:1,t:1,Ev:1,l:1,i:1});function P$(){}P$.prototype=new f1a;P$.prototype.constructor=P$;c=P$.prototype;c.u=function(){return"Nil"};c.$=function(){this.Sx()};c.b=function(){return this};c.v=function(){return 0};c.z=function(){return!0};
+function V0a(){throw(new il).c("tail of empty list");}c.o=function(a){return a&&a.$classData&&a.$classData.n.ge?a.z():!1};c.w=function(a){throw(new P).c(""+a);};c.Sx=function(){throw(new Du).c("head of empty list");};c.aa=function(){return V0a()};c.x=function(){return Y(new Z,this)};
+c.$classData=g({Cga:0},!1,"scala.collection.immutable.Nil$",{Cga:1,WX:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,BF:1,$q:1,kd:1,qd:1,pd:1,qp:1,Ws:1,t:1,Ev:1,l:1,i:1});var r1a=void 0;function y(){r1a||(r1a=(new P$).b());return r1a}function Q$(){}Q$.prototype=new y9;Q$.prototype.constructor=Q$;function R$(){}c=R$.prototype=Q$.prototype;c.nb=function(){return this};c.te=function(){return this};c.nd=function(){return zva()};
+c.wG=function(a){return this.fi().Zb(this).Rl(a)};c.rr=function(a,b){this.Rl((new A).e(a,b))};c.dg=function(a,b){pU(this,a,b)};c.nz=function(a,b){return this.wG((new A).e(a,b))};c.zD=function(a,b){return g0a(this,a,b)};c.Ic=function(){return ox(this)};c.qc=function(){};c.vG=function(a){return this.fi().Zb(this).yj(a)};c.Ur=function(){h0a(this)};c.Zb=function(a){return oE(this,a)};c.db=function(){return this.fi()};function S$(){}S$.prototype=new e0a;S$.prototype.constructor=S$;function s1a(){}
+c=s1a.prototype=S$.prototype;c.te=function(){return this};c.z=function(){return 0===this.Ha()};c.o=function(a){return t5(this,a)};c.Fa=function(a){return this.ib(a)|0};c.k=function(){return w5(this)};c.$F=function(a){var b=this.Ta();return WT(b,a)};c.Td=function(){return Q_a(this)};c.Ga=function(a){return this.ib(a)};c.dg=function(a,b){pU(this,a,b)};c.Ic=function(){return i0a(this)};c.r=function(){var a=Q();return PD(a,this,a.Qy)};c.qc=function(){};c.xa=function(a,b){return Cr(this,a,b)};
+c.Ca=function(a){return pb(this,a)};c.db=function(){return this.gm()};c.Zb=function(a){return oE(this,a)};c.Ze=function(){return"Set"};function lx(){this.il=null}lx.prototype=new R$;lx.prototype.constructor=lx;c=lx.prototype;c.$f=function(){return this};c.yj=function(a){return t1a(this,a)};c.y=function(a){var b=this.il;if(Cu().Dm.call(b,a))a=this.il[a];else throw(new Du).c("key not found: "+a);return a};c.ye=function(a){var b=(new lx).nm({});return oE(b,this).yj(a)};c.lc=function(){return this};
+c.nm=function(a){this.il=a;return this};c.md=function(a){return u1a(this,a)};c.fi=function(){return(new lx).nm({})};c.Wi=function(a){var b=(new lx).nm({});return oE(b,this).yj(a)};c.al=function(a){var b=(new lx).nm({}),b=oE(b,this);a=a.nb();return Le(b,a)};c.rr=function(a,b){this.il[a]=b};c.Vn=function(){return this};c.Da=function(){return this};c.Gx=function(){return(new lx).nm({})};c.Ta=function(){return(new N1).nm(this.il)};c.Af=function(a){return g9(this,a)};
+function t1a(a,b){var d=a.il;Cu().Dm.call(d,b)&&delete a.il[b];return a}c.us=function(a){var b=this.il;return Cu().Dm.call(b,a)?(new J).j(this.il[a]):F()};c.$b=function(a){return this.us(a)};function u1a(a,b){a.il[b.ja()]=b.na();return a}c.Rl=function(a){return u1a(this,a)};c.ib=function(a){var b=this.il;return!!Cu().Dm.call(b,a)};c.Qa=function(a){return u1a(this,a)};c.Mm=function(a){return t1a(this,a)};c.Yi=function(a){var b=(new lx).nm({});return oE(b,this).Rl(a)};
+c.$classData=g({yia:0},!1,"scala.scalajs.js.WrappedDictionary",{yia:1,EF:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,My:1,lf:1,mf:1,gf:1,Ny:1,Ld:1,Kd:1,Jd:1,Sn:1,jf:1,ff:1,Ve:1});function L7(){this.oi=this.dj=null}L7.prototype=new a$;L7.prototype.constructor=L7;c=L7.prototype;c.nb=function(){return this};c.$=function(){return X_a(this)};c.b=function(){this.oi=this;return this};c.W=function(a){return i9(this,a)};
+c.Wh=function(){return this};c.y=function(a){return i9(this,a|0)};c.z=function(){return this.oi===this};c.te=function(){return this};c.lc=function(){return this};c.pf=function(a,b){Z_a(this,a,b)};c.nd=function(){r_a||(r_a=(new K7).b());return r_a};c.ua=function(a){for(var b=this;;)if(kd(b))a.y(b.dj),b=b.oi;else break};c.Gm=function(){return this};c.Ta=function(){var a=new F3;a.bb=this;return a};c.ra=function(){a:{var a=this,b=0;for(;;){if(a.oi===a)break a;b=1+b|0;a=a.oi}}return b};c.vh=function(){return this};
+c.ee=function(a){return Y_a(this,a)};c.be=function(){return this};c.aa=function(){return $_a(this)};c.Ya=function(a){return a3(this,a|0)};c.r=function(){return QT(Q(),this)};c.$classData=g({Tha:0},!1,"scala.collection.mutable.LinkedList",{Tha:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,zY:1,qp:1,Ws:1,dqa:1,l:1,i:1});function T$(){}T$.prototype=new a$;
+T$.prototype.constructor=T$;function U$(){}U$.prototype=T$.prototype;T$.prototype.nd=function(){return Dc()};T$.prototype.rz=function(a){return q9(this,a)};T$.prototype.Zb=function(a){return oE(this,a)};function c$(){G9.call(this);this.ds=this.rc=null}c$.prototype=new z0a;c$.prototype.constructor=c$;c=c$.prototype;c.nb=function(){return this};c.$f=function(){return this};c.yj=function(a){this.rc.yj(a);return this};c.ye=function(a){return v1a(this,a)};c.te=function(){return this};c.lc=function(){return this};
+c.md=function(a){return w1a(this,a)};function v1a(a,b){return b$(new c$,a.rc.vG(b),a.ds)}c.nd=function(){return zva()};c.wG=function(a){return b$(new c$,this.rc.nz(a.ja(),a.na()),this.ds)};c.Wi=function(a){return v1a(this,a)};c.fi=function(){return V$(this)};c.al=function(a){var b=V$(this),b=oE(b,this);a=a.nb();return Le(b,a)};c.rr=function(a,b){this.Rl((new A).e(a,b))};c.Vn=function(){return this};c.Da=function(){return this};c.Gx=function(){return V$(this)};c.dg=function(a,b){pU(this,a,b)};
+c.Af=function(a){return g9(this,a)};c.nz=function(a,b){return b$(new c$,this.rc.nz(a,b),this.ds)};c.zD=function(a,b){return g0a(this,a,b)};c.Rl=function(a){return w1a(this,a)};c.Ic=function(){return ox(this)};function b$(a,b,d){a.rc=b;a.ds=d;G9.prototype.Sba.call(a,b,d);return a}c.Qa=function(a){return w1a(this,a)};function V$(a){return b$(new c$,a.rc.Gx(),a.ds)}c.qc=function(){};c.Mm=function(a){this.rc.yj(a);return this};function w1a(a,b){a.rc.Rl(b);return a}c.Ur=function(){h0a(this)};
+c.vG=function(a){return v1a(this,a)};c.Yi=function(a){return b$(new c$,this.rc.nz(a.ja(),a.na()),this.ds)};c.db=function(){return V$(this)};c.Zb=function(a){return oE(this,a)};c.$classData=g({Zha:0},!1,"scala.collection.mutable.Map$WithDefault",{Zha:1,Npa:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,l:1,i:1,My:1,lf:1,mf:1,gf:1,Ny:1,Ld:1,Kd:1,Jd:1,Sn:1,jf:1,ff:1,Ve:1});function W$(){}W$.prototype=new a$;
+W$.prototype.constructor=W$;function X$(){}c=X$.prototype=W$.prototype;c.nb=function(){return this};c.$=function(){return Uj(this)};c.Wh=function(){return this};c.Mb=function(a){return I8(this,a)};c.Le=function(a){return J8(this,a)};c.oe=function(a){return K8(this,a)};c.z=function(){return g3(this)};c.te=function(){return this};c.lc=function(){return this};c.Sj=function(a){return L8(this,a)};c.lh=function(a){return M8(this,a)};c.Je=function(){return N8(this)};c.nd=function(){return ECa()};
+c.ua=function(a){O8(this,a)};c.Gb=function(a,b){var d=this.ra();return U8(this,0,d,a,b)};c.Ai=function(a,b){var d=this.ra();return T8(this,d,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.of=function(a,b){return Q8(this,a,b)};c.Cf=function(){return px(this)};c.Td=function(){return F8(this)};c.Ta=function(){return Ve(new We,this,0,this.ra())};c.Gm=function(){return this};c.Vj=function(a){return R8(this,a)};c.xj=function(a){return S8(this,a)};c.vh=function(){return this};c.nf=function(){return this.ra()};
+c.hd=function(){return Dm(this)};c.ee=function(a){var b=this.ra();return Q8(this,a,b)};c.be=function(){return this};c.aa=function(){return Ck(this)};c.Ya=function(a){return a3(this,a|0)};c.Ae=function(a,b,d){V8(this,a,b,d)};c.nk=function(a){return W8(this,a)};c.Wd=function(a){return Cm(this,a)};c.ve=function(a){var b=a.Gd();return AA(oa(this.pa))===b?this.pa:iE(this,a)};c.ek=function(a){return X8(this,a)};c.db=function(){return(new K3).ap(this.fm())};c.Ze=function(){return"WrappedArray"};
+c.Ge=function(a,b){return Y8(this,a,b)};function I7(){this.tl=0;this.Pr=null}I7.prototype=new a$;I7.prototype.constructor=I7;c=I7.prototype;c.nb=function(){return this};c.$=function(){return Uj(this)};c.W=function(a){if(a>=this.tl)throw(new P).c(""+a);return this.Pr.m[a]};c.Wh=function(){return this};c.Mb=function(a){return I8(this,a)};c.Le=function(a){return J8(this,a)};c.y=function(a){return this.W(a|0)};c.oe=function(a){return K8(this,a)};c.z=function(){return g3(this)};c.te=function(){return this};
+c.lc=function(){return this};c.pf=function(a,b){if(a>=this.tl)throw(new P).c(""+a);this.Pr.m[a]=b};c.Sj=function(a){return L8(this,a)};c.lh=function(a){return M8(this,a)};c.Je=function(){return N8(this)};c.nd=function(){return Zoa()};c.ua=function(a){for(var b=0;b<this.tl;)a.y(this.Pr.m[b]),b=1+b|0};c.Gb=function(a,b){return U8(this,0,this.tl,a,b)};c.Ai=function(a,b){return T8(this,this.tl,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.of=function(a,b){return Q8(this,a,b)};c.Cf=function(){return px(this)};
+c.Td=function(){return F8(this)};c.Ta=function(){return Ve(new We,this,0,this.tl)};c.Gm=function(){return this};c.Vj=function(a){return R8(this,a)};c.qb=function(a){this.tl=a;this.Pr=la(Wa(Ua),[a]);return this};c.ra=function(){return this.tl};c.xj=function(a){return S8(this,a)};c.vh=function(){return this};c.nf=function(){return this.tl};c.hd=function(){return Dm(this)};c.ee=function(a){return Q8(this,a,this.tl)};c.be=function(){return this};c.aa=function(){return Ck(this)};
+c.Ya=function(a){return a3(this,a|0)};c.Ae=function(a,b,d){var e=aE(W(),a)-b|0;d=d<e?d:e;e=this.tl;d=d<e?d:e;0<d&&Kv(Bf(),this.Pr,0,a,b,d)};c.r=function(){return QT(Q(),this)};c.nk=function(a){return W8(this,a)};c.Wd=function(a){return Cm(this,a)};c.ek=function(a){return X8(this,a)};c.Ge=function(a,b){return Y8(this,a,b)};
+c.$classData=g({rha:0},!1,"scala.collection.mutable.ArraySeq",{rha:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,uj:1,og:1,Id:1,kf:1,Ef:1,Ne:1,ed:1,l:1,i:1});function L5(){this.Ks=this.kn=null;this.Sl=0;this.Wb=null;this.Uk=this.Gf=0;this.Qf=null;this.Il=0}L5.prototype=new R$;L5.prototype.constructor=L5;c=L5.prototype;c.$f=function(){return this};
+c.vv=function(a,b){a=dla(this,a,b);if(null===a)return F();var d=a.Y;a.Y=b;return(new J).j(d)};c.b=function(){$ka(this);this.Ks=this.kn=null;return this};c.yj=function(a){x1a(this,a);return this};c.RF=function(a){this.Il=a};c.ye=function(a){var b=(new L5).b();return oE(b,this).yj(a)};c.lc=function(){return this};function x1a(a,b){b=ala(a,b);null===b?F():(null===b.Lo?a.kn=b.Ik:b.Lo.Ik=b.Ik,null===b.Ik?a.Ks=b.Lo:b.Ik.Lo=b.Lo,b.Lo=null,b.Ik=null,(new J).j(b.Y))}c.md=function(a){return y1a(this,a)};
+c.ua=function(a){for(var b=this.kn;null!==b;)a.y((new A).e(b.ak,b.Y)),b=b.Ik};c.bv=function(){return(new D3).Nu(this)};c.Wi=function(a){var b=(new L5).b();return oE(b,this).yj(a)};c.fi=function(){return(new L5).b()};c.al=function(a){var b=(new L5).b(),b=oE(b,this);a=a.nb();return Le(b,a)};c.Ha=function(){return this.Gf};c.Vn=function(){return this};c.Da=function(){return this};c.Ta=function(){return(new C3).Nu(this)};c.Gx=function(){return(new L5).b()};c.wj=function(){return(new E3).Nu(this)};
+c.Af=function(a){return g9(this,a)};c.AT=function(a,b){a=(new M1).e(a,b);null===this.kn?this.kn=a:(this.Ks.Ik=a,a.Lo=this.Ks);return this.Ks=a};c.$b=function(a){a=WE(this,a);return null===a?F():(new J).j(a.Y)};c.Rl=function(a){return y1a(this,a)};c.Sy=function(a){this.Qf=a};c.Wy=function(a){this.Wb=a};c.Qa=function(a){return y1a(this,a)};c.Mm=function(a){x1a(this,a);return this};c.Ur=function(){Xka(this);this.Ks=this.kn=null};function y1a(a,b){a.vv(b.ja(),b.na());return a}
+c.zz=function(a){this.Sl=a};c.Yy=function(a){this.Uk=a};c.Yi=function(a){var b=(new L5).b();return oE(b,this).Rl(a)};c.ir=function(a){this.Gf=a};c.$classData=g({Oha:0},!1,"scala.collection.mutable.LinkedHashMap",{Oha:1,EF:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,My:1,lf:1,mf:1,gf:1,Ny:1,Ld:1,Kd:1,Jd:1,Sn:1,jf:1,ff:1,Ve:1,xY:1,yY:1,l:1,i:1});function M7(){this.bk=this.jg=null;this.ni=0}M7.prototype=new a$;
+M7.prototype.constructor=M7;function z1a(){}c=z1a.prototype=M7.prototype;c.nb=function(){return this};c.$=function(){if(kd(this))return X_a(this.jg);throw(new Du).b();};c.b=function(){this.bk=this.jg=(new L7).b();this.ni=0;return this};c.W=function(a){return i9(this.jg,a)};c.Wh=function(){return this};c.Mb=function(a){return og(this,a)};c.Le=function(a){return kF(this,a)};c.y=function(a){return i9(this.jg,a|0)};c.oe=function(a){return Z8(this,a)};c.ob=function(){var a=this.jg,b=B().s;return L(a,b)};
+c.z=function(){return 0===this.ni};c.te=function(){return this};c.pf=function(a,b){Z_a(this.jg,a,b)};c.lc=function(){return this};c.iu=function(a){return M_a(this,a)};c.md=function(a){return Fna(this,a)};c.lh=function(a){return $8(this,a)};c.nd=function(){t_a||(t_a=(new W7).b());return t_a};c.ua=function(a){for(var b=this;!b.z();)a.y(b.$()),b=b.aa()};c.Gb=function(a,b){return a9(this,a,b)};c.Ai=function(a,b){return N_a(this,a,b)};c.Te=function(a,b){return b9(this,a,b)};
+function A1a(a,b){if(!kd(a))throw(new Ne).c("requirement failed: tail of empty list");b.jg=$_a(a.jg);b.ni=-1+a.ni|0;b.bk=0===b.ni?b.jg:a.bk}c.Da=function(){return this};c.Ta=function(){var a;this.z()?a=SC().Xd:(a=new H3,a.bb=this.jg,a.$t=this.ni);return a};c.Gm=function(){return this};c.Vj=function(a){return c9(this,a)};c.dg=function(a,b){pU(this,a,b)};c.ra=function(){return this.ni};c.vh=function(){return this};c.Yv=function(a){return O_a(this,a)};
+c.hd=function(){if(this.z())throw(new Du).c("MutableList.empty.last");return this.bk.dj};c.ee=function(a){return M_a(this,a)};c.ib=function(a){return d9(this,a)};c.be=function(){return this};c.aa=function(){return this.SY()};c.Ya=function(a){return e9(this,a|0)};c.dp=function(a){return e9(this,a)};c.Qa=function(a){return Fna(this,a)};c.qc=function(){};c.r=function(){return QT(Q(),this)};
+function Fna(a,b){if(0===a.ni){var d=a.jg,e=new L7;L7.prototype.b.call(e);null!==d&&(e.dj=b,e.oi=d);a.jg=e;0===a.ni&&(a.bk=a.jg)}else d=a.bk,e=(new L7).b(),d.oi=e,a.bk=a.bk.oi,a.bk.dj=b,b=a.bk,d=(new L7).b(),b.oi=d;a.ni=1+a.ni|0;return a}c.Wd=function(a){return ho(this,a)};c.SY=function(){var a=(new M7).b();A1a(this,a);return a};c.ek=function(a){return P_a(this,a)};c.db=function(){return(new M7).b()};c.Zb=function(a){return oE(this,a)};
+c.$classData=g({BY:0},!1,"scala.collection.mutable.MutableList",{BY:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,zY:1,qp:1,Ws:1,Ev:1,Ld:1,Kd:1,Jd:1,l:1,i:1});function Av(){this.Sl=0;this.Wb=null;this.Uk=this.Gf=0;this.Qf=null;this.Il=0}Av.prototype=new R$;Av.prototype.constructor=Av;function B1a(){}c=B1a.prototype=Av.prototype;c.nb=function(){return this};c.$f=function(){return this};
+c.vv=function(a,b){a=dla(this,a,b);if(null===a)return F();var d=a.Y;a.Y=b;return(new J).j(d)};c.b=function(){Av.prototype.KU.call(this,null);return this};c.yj=function(a){ala(this,a);return this};c.RF=function(a){this.Il=a};c.y=function(a){var b=WE(this,a);return null===b?this.Dw(a):b.Y};c.ye=function(a){var b=(new Av).b();return oE(b,this).yj(a)};c.lc=function(){return this};function C1a(a,b){var d=dla(a,b.ja(),b.na());null!==d&&(d.Y=b.na());return a}c.md=function(a){return C1a(this,a)};
+c.ua=function(a){for(var b=this.Wb,d=cla(this),e=b.m[d];null!==e;){var f=e.ma();a.y((new A).e(e.ak,e.Y));for(e=f;null===e&&0<d;)d=-1+d|0,e=b.m[d]}};c.bv=function(){return(new x3).Mu(this)};c.Wi=function(a){var b=(new Av).b();return oE(b,this).yj(a)};c.fi=function(){return(new Av).b()};c.al=function(a){var b=(new Av).b(),b=oE(b,this);a=a.nb();return Le(b,a)};c.rr=function(a,b){this.vv(a,b)};c.Ha=function(){return this.Gf};c.Vn=function(){return this};c.Da=function(){return this};c.mZ=function(){return(new r9).Mu(this)};
+c.Ta=function(){return(new bc).Kf(xva(this),m(new n,function(){return function(a){return(new A).e(a.ak,a.Y)}}(this)))};c.Gx=function(){return(new Av).b()};c.wj=function(){return(new y3).Mu(this)};c.KU=function(a){$ka(this);null!==a&&(this.zz(a.lda()),this.Wy(a.Wb),this.ir(a.Gf),this.Yy(a.Uk),this.RF(a.Il),this.Sy(a.Qf));return this};function D1a(a,b){return null!==b?(b=b.ak,!bn(cn(),b,a)):!1}c.Af=function(a){return g9(this,a)};
+c.zD=function(a,b){var d=OD(V(),a),e=TE(this,d),f;for(f=this.Wb.m[e];D1a(a,f);)f=f.qe;if(null!==f)return f.Y;f=this.Wb;b=ne(b);d=f===this.Wb?e:TE(this,d);a=(new K1).e(a,b);this.Gf>=this.Uk?(d=a.kj(),d=OD(V(),d),d=TE(this,d),ela(this,a,d)):(a.qe=this.Wb.m[d],this.Wb.m[d]=a,this.Gf=1+this.Gf|0,fla(this,d));return a.Y};c.AT=function(a,b){return(new K1).e(a,b)};c.$b=function(a){a=WE(this,a);return null===a?F():(new J).j(a.Y)};c.Rl=function(a){return C1a(this,a)};c.Sy=function(a){this.Qf=a};
+c.ib=function(a){return null!==WE(this,a)};c.Wy=function(a){this.Wb=a};c.Qa=function(a){return C1a(this,a)};c.Mm=function(a){ala(this,a);return this};c.Ur=function(){Xka(this)};c.zz=function(a){this.Sl=a};c.Yy=function(a){this.Uk=a};c.Yi=function(a){var b=(new Av).b();return oE(b,this).Rl(a)};c.ir=function(a){this.Gf=a};
+c.$classData=g({wY:0},!1,"scala.collection.mutable.HashMap",{wY:1,EF:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,My:1,lf:1,mf:1,gf:1,Ny:1,Ld:1,Kd:1,Jd:1,Sn:1,jf:1,ff:1,Ve:1,xY:1,yY:1,ed:1,l:1,i:1});function l8(){M7.call(this)}l8.prototype=new z1a;l8.prototype.constructor=l8;c=l8.prototype;c.b=function(){M7.prototype.b.call(this);return this};c.Wh=function(){return this};c.lc=function(){return this};c.nd=function(){return Gna()};
+c.vh=function(){return this};c.Yv=function(a){return O_a(this,a)};c.ee=function(a){return M_a(this,a)};c.aa=function(){return E1a(this)};c.be=function(){return this};c.Ya=function(a){return e9(this,a|0)};function E1a(a){var b=(new l8).b();A1a(a,b);return b}c.Wd=function(a){return ho(this,a)};c.SY=function(){return E1a(this)};c.db=function(){return Gna().db()};
+c.$classData=g({cia:0},!1,"scala.collection.mutable.Queue",{cia:1,BY:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,zY:1,qp:1,Ws:1,Ev:1,Ld:1,Kd:1,Jd:1,l:1,i:1});function Y$(){Av.call(this)}Y$.prototype=new B1a;Y$.prototype.constructor=Y$;Y$.prototype.Dw=function(){return 0};function I_a(){var a=new Y$;Av.prototype.KU.call(a,null);return a}
+Y$.prototype.$classData=g({Ofa:0},!1,"scala.collection.SeqLike$$anon$1",{Ofa:1,wY:1,EF:1,oh:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,qh:1,Vg:1,ph:1,rh:1,Ea:1,fa:1,jd:1,My:1,lf:1,mf:1,gf:1,Ny:1,Ld:1,Kd:1,Jd:1,Sn:1,jf:1,ff:1,Ve:1,xY:1,yY:1,ed:1,l:1,i:1});function oS(){this.Li=null;this.Pf=0}oS.prototype=new a$;oS.prototype.constructor=oS;c=oS.prototype;c.nb=function(){return this};c.$=function(){return Uj(this)};
+c.b=function(){oS.prototype.Kba.call(this,la(Wa(Ua),[1]),0);return this};c.W=function(a){return this.Li.m[(-1+this.Pf|0)-a|0]};c.Wh=function(){return this};c.Mb=function(a){return I8(this,a)};c.Le=function(a){return J8(this,a)};c.y=function(a){return this.W(a|0)};c.oe=function(a){return K8(this,a)};c.z=function(){return 0===this.Pf};c.te=function(){return this};c.pf=function(a,b){this.Li.m[(-1+this.Pf|0)-a|0]=b};c.lc=function(){return this};
+function F1a(a,b){b.ua(m(new n,function(a){return function(b){return pS(a,b)}}(a)));return a}c.Sj=function(a){return L8(this,a)};c.md=function(a){return pS(this,a)};c.lh=function(a){return M8(this,a)};c.Je=function(){return N8(this)};c.nd=function(){return q_a()};c.ua=function(a){for(var b=this.Pf;0<b;)b=-1+b|0,a.y(this.Li.m[b])};c.Gb=function(a,b){return U8(this,0,this.Pf,a,b)};c.Ai=function(a,b){return T8(this,this.Pf,a,b)};c.Te=function(a,b){return P8(this,a,b)};
+c.of=function(a,b){return Q8(this,a,b)};c.Cf=function(){return px(this)};function doa(a){0===a.Pf&&Bn(Cn(),"Stack empty");a.Pf=-1+a.Pf|0;var b=a.Li.m[a.Pf];a.Li.m[a.Pf]=null;return b}c.Ha=function(){return this.Pf};c.Td=function(){return F8(this)};c.Da=function(){for(var a=0,b=this.Pf/2|0;a<b;){var d=-1+(this.Pf-a|0)|0,e=this.Li.m[a];this.Li.m[a]=this.Li.m[d];this.Li.m[d]=e;a=1+a|0}return this};c.Ta=function(){var a=new v3;if(null===this)throw ug(vg(),null);a.Va=this;a.bu=this.Pf;return a};c.Gm=function(){return this};
+c.dg=function(a,b){pU(this,a,b)};c.Vj=function(a){return R8(this,a)};c.ra=function(){return this.Pf};c.xj=function(a){return S8(this,a)};c.vh=function(){return this};c.nf=function(){return this.Pf};c.hd=function(){return Dm(this)};c.ee=function(a){return Q8(this,a,this.Pf)};c.aa=function(){return Ck(this)};c.be=function(){return this};c.Ya=function(a){return a3(this,a|0)};
+function pS(a,b){if(a.Pf===a.Li.m.length){q_a();var d=a.Li,e=d.m.length<<1,e=la(Wa(Ua),[1<e?e:1]);Kv(Bf(),d,0,e,0,d.m.length);a.Li=e}a.Li.m[a.Pf]=b;a.Pf=1+a.Pf|0;return a}c.Qa=function(a){return pS(this,a)};c.qc=function(){};c.Ae=function(a,b,d){V8(this,a,b,d)};c.r=function(){return QT(Q(),this)};c.Wd=function(a){return Cm(this,a)};c.nk=function(a){return W8(this,a)};c.ek=function(a){return X8(this,a)};c.Zb=function(a){return F1a(this,a)};c.Kba=function(a,b){this.Li=a;this.Pf=b;return this};
+c.Ge=function(a,b){return Y8(this,a,b)};c.$classData=g({tha:0},!1,"scala.collection.mutable.ArrayStack",{tha:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,uj:1,og:1,Id:1,kf:1,Ef:1,Ne:1,Ld:1,Kd:1,Jd:1,l:1,i:1});function k7(){this.Sl=0;this.Wb=null;this.Uk=this.Gf=0;this.Qf=null;this.Il=0}k7.prototype=new s1a;k7.prototype.constructor=k7;c=k7.prototype;c.nb=function(){return this};
+c.$f=function(){return this};c.b=function(){k7.prototype.Tba.call(this,null);return this};c.y=function(a){return null!==Tka(this,a)};c.ye=function(a){var b=(new k7).b();return G1a(oE(b,this),a)};c.lc=function(){return this};c.md=function(a){return D8(this,a)};c.nd=function(){return PZa()};c.ua=function(a){for(var b=0,d=this.Wb.m.length;b<d;){var e=this.Wb.m[b];null!==e&&a.y(qba(e));b=1+b|0}};c.al=function(a){var b=(new k7).b(),b=oE(b,this);a=a.nb();return Le(b,a)};c.Ha=function(){return this.Gf};
+c.Da=function(){return this};c.Ta=function(){var a=new w3;if(null===this)throw ug(vg(),null);a.Va=this;a.ii=0;return a};c.Ql=function(a){var b=(new k7).b();return G1a(oE(b,this),a)};c.gm=function(){return(new k7).b()};c.ib=function(a){return null!==Tka(this,a)};c.Tba=function(a){this.Sl=450;this.Wb=la(Wa(Ua),[VE(UE(),32)]);this.Gf=0;this.Uk=Ska().hv(this.Sl,VE(UE(),32));this.Qf=null;this.Il=Qka(this);null!==a&&(this.Sl=a.lda(),this.Wb=a.rqa(),this.Gf=a.Gf,this.Uk=a.Uk,this.Il=a.Il,this.Qf=a.Qf);return this};
+c.Qa=function(a){return D8(this,a)};c.Mm=function(a){return G1a(this,a)};function G1a(a,b){a:{b=Re(b);for(var d=Fa(b),d=PE(a,d),e=a.Wb.m[d];null!==e;){if(bn(cn(),e,b)){b=d;for(d=(1+b|0)%a.Wb.m.length|0;null!==a.Wb.m[d];){var e=Fa(a.Wb.m[d]),e=PE(a,e),f;if(f=e!==d)f=a.Wb.m.length>>1,f=e<=b?(b-e|0)<f:(e-b|0)>f;f&&(a.Wb.m[b]=a.Wb.m[d],b=d);d=(1+d|0)%a.Wb.m.length|0}a.Wb.m[b]=null;a.Gf=-1+a.Gf|0;null!==a.Qf&&(d=a.Qf,b>>=5,d.m[b]=-1+d.m[b]|0);break a}d=(1+d|0)%a.Wb.m.length|0;e=a.Wb.m[d]}}return a}
+c.ui=function(a){var b=(new k7).b();return D8(oE(b,this),a)};c.Bp=function(a){var b=(new k7).b(),b=oE(b,this);a=a.nb();return oE(b,a)};function D8(a,b){b=Re(b);Rka(a,b);return a}c.$classData=g({Hha:0},!1,"scala.collection.mutable.HashSet",{Hha:1,$pa:1,Zpa:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,lf:1,mf:1,gf:1,fqa:1,qj:1,fa:1,pj:1,hk:1,kk:1,ik:1,jd:1,gqa:1,Jy:1,Ld:1,Kd:1,Jd:1,Sn:1,jf:1,ff:1,Ve:1,aqa:1,bqa:1,ed:1,l:1,i:1});
+function R3(){this.pa=null}R3.prototype=new X$;R3.prototype.constructor=R3;c=R3.prototype;c.W=function(a){return this.Ga(a)};c.y=function(a){return this.Ga(a|0)};c.pf=function(a,b){this.pa.m[a]=!!b};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.n.IF)if(WA(),b=this.pa,a=a.pa,b===a)b=!0;else if(null!==b&&null!==a&&b.m.length===a.m.length){for(var d=lw(Je(),b),d=SA(d),d=Ve(new We,d,0,d.ra()),e=!0;e&&d.ta();)e=d.ma()|0,e=bn(cn(),b.m[e],a.m[e]);b=e}else b=!1;else b=$2(this,a);return b};c.Ga=function(a){return this.pa.m[a]};
+c.ra=function(){return this.pa.m.length};c.fm=function(){return oD()};c.lq=function(a){this.pa=a;return this};c.r=function(){for(var a=Q(),b=this.pa,d=a.mk,e=0;e<b.m.length;)d=a.da(d,b.m[e]?1231:1237),e=1+e|0;return a.pb(d,b.m.length)};
+c.$classData=g({IF:0},!1,"scala.collection.mutable.WrappedArray$ofBoolean",{IF:1,Un:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,uj:1,og:1,Id:1,kf:1,rg:1,Ef:1,Ne:1,ed:1,l:1,i:1});function L3(){this.pa=null}L3.prototype=new X$;L3.prototype.constructor=L3;c=L3.prototype;c.W=function(a){return this.pa.m[a]};c.y=function(a){return this.pa.m[a|0]};
+c.pf=function(a,b){this.pa.m[a]=b|0};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.n.JF)if(WA(),b=this.pa,a=a.pa,b===a)b=!0;else if(null!==b&&null!==a&&b.m.length===a.m.length){for(var d=lw(Je(),b),d=SA(d),d=Ve(new We,d,0,d.ra()),e=!0;e&&d.ta();)e=d.ma()|0,e=bn(cn(),b.m[e],a.m[e]);b=e}else b=!1;else b=$2(this,a);return b};c.ra=function(){return this.pa.m.length};c.fm=function(){return iD()};
+c.r=function(){for(var a=Q(),b=this.pa,d=b.m.length,e=a.mk,f=0;4<=d;)var h=255&b.m[f],h=h|(255&b.m[1+f|0])<<8,h=h|(255&b.m[2+f|0])<<16,h=h|(255&b.m[3+f|0])<<24,e=a.da(e,h),f=4+f|0,d=-4+d|0;h=0;3===d&&(h^=(255&b.m[2+f|0])<<16);2<=d&&(h^=(255&b.m[1+f|0])<<8);1<=d&&(h^=255&b.m[f],e=a.Ps(e,h));return a.pb(e,b.m.length)};c.gq=function(a){this.pa=a;return this};
+c.$classData=g({JF:0},!1,"scala.collection.mutable.WrappedArray$ofByte",{JF:1,Un:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,uj:1,og:1,Id:1,kf:1,rg:1,Ef:1,Ne:1,ed:1,l:1,i:1});function N3(){this.pa=null}N3.prototype=new X$;N3.prototype.constructor=N3;c=N3.prototype;c.W=function(a){a=this.to(a);return(new Ke).Xa(a)};c.y=function(a){a=this.to(a|0);return(new Ke).Xa(a)};
+c.pf=function(a,b){this.pa.m[a]=null===b?0:b.Y};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.n.KF)if(WA(),b=this.pa,a=a.pa,b===a)b=!0;else if(null!==b&&null!==a&&b.m.length===a.m.length){for(var d=lw(Je(),b),d=SA(d),d=Ve(new We,d,0,d.ra()),e=!0;e&&d.ta();)e=d.ma()|0,e=bn(cn(),(new Ke).Xa(b.m[e]),(new Ke).Xa(a.m[e]));b=e}else b=!1;else b=$2(this,a);return b};c.to=function(a){return this.pa.m[a]};c.ra=function(){return this.pa.m.length};c.lm=function(a){this.pa=a;return this};c.fm=function(){return kD()};
+c.r=function(){for(var a=Q(),b=this.pa,d=a.mk,e=0;e<b.m.length;)d=a.da(d,b.m[e]),e=1+e|0;return a.pb(d,b.m.length)};c.$classData=g({KF:0},!1,"scala.collection.mutable.WrappedArray$ofChar",{KF:1,Un:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,uj:1,og:1,Id:1,kf:1,rg:1,Ef:1,Ne:1,ed:1,l:1,i:1});function Q3(){this.pa=null}Q3.prototype=new X$;Q3.prototype.constructor=Q3;c=Q3.prototype;
+c.W=function(a){return this.pa.m[a]};c.y=function(a){return this.pa.m[a|0]};c.pf=function(a,b){this.pa.m[a]=+b};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.n.LF)if(WA(),b=this.pa,a=a.pa,b===a)b=!0;else if(null!==b&&null!==a&&b.m.length===a.m.length){for(var d=lw(Je(),b),d=SA(d),d=Ve(new We,d,0,d.ra()),e=!0;e&&d.ta();)e=d.ma()|0,e=bn(cn(),b.m[e],a.m[e]);b=e}else b=!1;else b=$2(this,a);return b};c.hq=function(a){this.pa=a;return this};c.ra=function(){return this.pa.m.length};c.fm=function(){return nD()};
+c.r=function(){for(var a=Q(),b=this.pa,d=a.mk,e=0;e<b.m.length;)d=a.da(d,RF(V(),b.m[e])),e=1+e|0;return a.pb(d,b.m.length)};c.$classData=g({LF:0},!1,"scala.collection.mutable.WrappedArray$ofDouble",{LF:1,Un:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,uj:1,og:1,Id:1,kf:1,rg:1,Ef:1,Ne:1,ed:1,l:1,i:1});function $B(){this.pa=null}$B.prototype=new X$;$B.prototype.constructor=$B;
+c=$B.prototype;c.W=function(a){return this.pa.m[a]};c.y=function(a){return this.pa.m[a|0]};c.pf=function(a,b){this.pa.m[a]=+b};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.n.MF)if(WA(),b=this.pa,a=a.pa,b===a)b=!0;else if(null!==b&&null!==a&&b.m.length===a.m.length){for(var d=lw(Je(),b),d=SA(d),d=Ve(new We,d,0,d.ra()),e=!0;e&&d.ta();)e=d.ma()|0,e=bn(cn(),b.m[e],a.m[e]);b=e}else b=!1;else b=$2(this,a);return b};c.Xo=function(a){this.pa=a;return this};c.ra=function(){return this.pa.m.length};
+c.fm=function(){return Gi()};c.r=function(){for(var a=Q(),b=this.pa,d=a.mk,e=0;e<b.m.length;)V(),d=a.da(d,RF(0,b.m[e])),e=1+e|0;return a.pb(d,b.m.length)};c.$classData=g({MF:0},!1,"scala.collection.mutable.WrappedArray$ofFloat",{MF:1,Un:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,uj:1,og:1,Id:1,kf:1,rg:1,Ef:1,Ne:1,ed:1,l:1,i:1});function O3(){this.pa=null}O3.prototype=new X$;
+O3.prototype.constructor=O3;c=O3.prototype;c.W=function(a){return this.Fa(a)};c.y=function(a){return this.Fa(a|0)};c.pf=function(a,b){this.pa.m[a]=b|0};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.n.NF)if(WA(),b=this.pa,a=a.pa,b===a)b=!0;else if(null!==b&&null!==a&&b.m.length===a.m.length){for(var d=lw(Je(),b),d=SA(d),d=Ve(new We,d,0,d.ra()),e=!0;e&&d.ta();)e=d.ma()|0,e=bn(cn(),b.m[e],a.m[e]);b=e}else b=!1;else b=$2(this,a);return b};c.Fa=function(a){return this.pa.m[a]};
+c.iq=function(a){this.pa=a;return this};c.ra=function(){return this.pa.m.length};c.fm=function(){return lD()};c.r=function(){for(var a=Q(),b=this.pa,d=a.mk,e=0;e<b.m.length;)d=a.da(d,b.m[e]),e=1+e|0;return a.pb(d,b.m.length)};
+c.$classData=g({NF:0},!1,"scala.collection.mutable.WrappedArray$ofInt",{NF:1,Un:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,uj:1,og:1,Id:1,kf:1,rg:1,Ef:1,Ne:1,ed:1,l:1,i:1});function P3(){this.pa=null}P3.prototype=new X$;P3.prototype.constructor=P3;c=P3.prototype;c.W=function(a){return this.pa.m[a]};c.y=function(a){return this.pa.m[a|0]};c.jq=function(a){this.pa=a;return this};
+c.pf=function(a,b){b=Qa(b);this.pa.m[a]=b};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.n.OF)if(WA(),b=this.pa,a=a.pa,b===a)b=!0;else if(null!==b&&null!==a&&b.m.length===a.m.length){for(var d=lw(Je(),b),d=SA(d),d=Ve(new We,d,0,d.ra()),e=!0;e&&d.ta();)e=d.ma()|0,e=bn(cn(),b.m[e],a.m[e]);b=e}else b=!1;else b=$2(this,a);return b};c.ra=function(){return this.pa.m.length};c.fm=function(){return mD()};
+c.r=function(){for(var a=Q(),b=this.pa,d=a.mk,e=0;e<b.m.length;)d=a.da(d,TF(V(),b.m[e])),e=1+e|0;return a.pb(d,b.m.length)};c.$classData=g({OF:0},!1,"scala.collection.mutable.WrappedArray$ofLong",{OF:1,Un:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,uj:1,og:1,Id:1,kf:1,rg:1,Ef:1,Ne:1,ed:1,l:1,i:1});function ri(){this.pa=this.WT=null;this.MC=!1}ri.prototype=new X$;
+ri.prototype.constructor=ri;c=ri.prototype;c.W=function(a){return this.pa.m[a]};c.y=function(a){return this.W(a|0)};c.pf=function(a,b){this.pa.m[a]=b};c.o=function(a){return a&&a.$classData&&a.$classData.n.PF?lja(WA(),this.pa,a.pa):$2(this,a)};c.Mh=function(a){this.pa=a;return this};c.ra=function(){return this.pa.m.length};c.fm=function(){this.MC||this.MC||(this.WT=$oa(apa(),AA(oa(this.pa))),this.MC=!0);return this.WT};
+c.r=function(){for(var a=Q(),b=this.pa,d=a.mk,e=0;e<aE(W(),b);)d=a.da(d,OD(V(),ZE(W(),b,e))),e=1+e|0;return a.pb(d,aE(W(),b))};c.$classData=g({PF:0},!1,"scala.collection.mutable.WrappedArray$ofRef",{PF:1,Un:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,uj:1,og:1,Id:1,kf:1,rg:1,Ef:1,Ne:1,ed:1,l:1,i:1});function M3(){this.pa=null}M3.prototype=new X$;M3.prototype.constructor=M3;
+c=M3.prototype;c.W=function(a){return this.pa.m[a]};c.y=function(a){return this.pa.m[a|0]};c.kq=function(a){this.pa=a;return this};c.pf=function(a,b){this.pa.m[a]=b|0};c.o=function(a){var b;if(a&&a.$classData&&a.$classData.n.QF)if(WA(),b=this.pa,a=a.pa,b===a)b=!0;else if(null!==b&&null!==a&&b.m.length===a.m.length){for(var d=lw(Je(),b),d=SA(d),d=Ve(new We,d,0,d.ra()),e=!0;e&&d.ta();)e=d.ma()|0,e=bn(cn(),b.m[e],a.m[e]);b=e}else b=!1;else b=$2(this,a);return b};c.ra=function(){return this.pa.m.length};
+c.fm=function(){return jD()};c.r=function(){for(var a=Q(),b=this.pa,d=a.mk,e=0;e<b.m.length;)d=a.da(d,b.m[e]),e=1+e|0;return a.pb(d,b.m.length)};c.$classData=g({QF:0},!1,"scala.collection.mutable.WrappedArray$ofShort",{QF:1,Un:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,uj:1,og:1,Id:1,kf:1,rg:1,Ef:1,Ne:1,ed:1,l:1,i:1});function S3(){this.pa=null}S3.prototype=new X$;
+S3.prototype.constructor=S3;c=S3.prototype;c.W=function(a){this.pa.m[a]};c.y=function(a){this.pa.m[a|0]};c.pf=function(a,b){this.pa.m[a]=b};c.o=function(a){return a&&a.$classData&&a.$classData.n.CY?this.pa.m.length===a.pa.m.length:$2(this,a)};c.ra=function(){return this.pa.m.length};c.fm=function(){return pD()};c.mq=function(a){this.pa=a;return this};c.r=function(){for(var a=Q(),b=this.pa,d=a.mk,e=0;e<b.m.length;)d=a.da(d,0),e=1+e|0;return a.pb(d,b.m.length)};
+c.$classData=g({CY:0},!1,"scala.collection.mutable.WrappedArray$ofUnit",{CY:1,Un:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,uj:1,og:1,Id:1,kf:1,rg:1,Ef:1,Ne:1,ed:1,l:1,i:1});function wn(){this.ey=this.Vq=this.Xy=null;this.Xn=0}wn.prototype=new U$;wn.prototype.constructor=wn;c=wn.prototype;c.$f=function(){return this};
+c.W=function(a){if(0<=a&&a<this.Xn)return this.Vq.W(a);throw(new P).c(""+a);};c.Wh=function(){return this};c.ap=function(a){a=this.Xy=a;var b=new YE;YE.prototype.FU.call(b,0,a.Qg(cF().nG),null,this,a);this.ey=this.Vq=b;this.Xn=0;return this};c.y=function(a){return this.W(a|0)};c.ye=function(a){var b=H1a(this);return q9(b,a)};c.pf=function(a,b){if(0<=a&&a<this.Xn)this.Vq.pf(a,b);else throw(new P).c(""+a);};c.lc=function(){return this};c.md=function(a){return I1a(this,a)};c.ua=function(a){this.Vq.ua(a)};
+c.al=function(a){var b=H1a(this);a=a.nb();return Le(b,a)};c.zj=function(a){return I1a(this,a)};c.Da=function(){return this};c.Ta=function(){var a=new J3;a.$c=-1;a.Gq=this.Vq;Dva(a);return a};c.dg=function(a,b){pU(this,a,b)};c.ra=function(){return this.Xn};c.vh=function(){return this};
+c.By=function(a){if(0<=a&&a<this.Xn){this.Xn=-1+this.Xn|0;a:{var b=a;a=this.Vq;for(;;){if(b<a.rd){for(var d=ZE(W(),a.Fh,b),e=a;b<(-1+e.rd|0);)$E(W(),e.Fh,b,ZE(W(),e.Fh,1+b|0)),b=1+b|0;for(var f=1+b|0;b<f;)$E(W(),e.Fh,b,null),b=1+b|0;a.rd=-1+a.rd|0;b=a;null!==b.qe&&(b.rd+b.qe.rd|0)<(da(aE(W(),b.Fh),cF().qZ)/cF().rZ|0)?(Kv(Bf(),b.qe.Fh,0,b.Fh,b.rd,b.qe.rd),b.rd=b.rd+b.qe.rd|0,b.qe=b.qe.qe,b=null===b.qe):b=!1;b&&(this.ey=a);break a}d=b-a.rd|0;a=a.qe;b=d}}return d}throw(new P).c(""+a);};
+c.Ya=function(a){return a3(this,a|0)};function H1a(a){var b=(new wn).ap(a.Xy);return oE(b,a)}c.Qa=function(a){return I1a(this,a)};c.qc=function(){};c.Mm=function(a){return q9(this,a)};function I1a(a,b){a:{var d=a.ey;for(;;){if(d.rd<aE(W(),d.Fh)){$E(W(),d.Fh,d.rd,b);d.rd=1+d.rd|0;break a}d.qe=(new YE).FU(0,d.lD.Qg(kla(d)),null,d.NC,d.lD);d=d.qe}}a.ey=d;a.Xn=1+a.Xn|0;return a}c.db=function(){return(new wn).ap(this.Xy)};c.Ze=function(){return"UnrolledBuffer"};
+c.$classData=g({iia:0},!1,"scala.collection.mutable.UnrolledBuffer",{iia:1,DF:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,FF:1,GF:1,Kd:1,Jd:1,Sn:1,Jy:1,jd:1,Upa:1,Ld:1,l:1,i:1});function jc(){this.ng=this.ec=null;this.Qo=!1;this.Ci=0}jc.prototype=new U$;jc.prototype.constructor=jc;c=jc.prototype;c.CU=function(a,b){return qQ(this.ec,a,b)};c.yg=function(a,b){$D(this.ec,a,b)};
+function F$(a){if(!a.z()){var b=a.ec,d=a.ng.Ia;for(a.Ur();b!==d;)lc(a,b.$()),b=b.aa()}}c.$f=function(){return this};c.$=function(){return this.ec.$()};c.b=function(){this.ec=y();this.Qo=!1;this.Ci=0;return this};c.W=function(a){if(0>a||a>=this.Ci)throw(new P).c(""+a);return Bi(this.ec,a)};c.Wh=function(){return this};c.Mb=function(a){return og(this.ec,a)};c.GD=function(a){return b9(this.ec,a,0)};c.Le=function(a){return kF(this.ec,a)};c.y=function(a){return this.W(a|0)};
+c.oe=function(a){return Z8(this.ec,a)};c.ye=function(a){return J1a(hl((new jc).b(),this),a)};c.ob=function(){this.Qo=!this.z();return this.ec};c.z=function(){return 0===this.Ci};c.pf=function(a,b){if(0>a||a>=this.Ci)throw(new P).c(""+a);this.Qo&&F$(this);if(0===a){var d=Ng(new Og,b,this.ec.aa());this.ng===this.ec&&(this.ng=d);this.ec=d}else{for(var d=this.ec,e=1;e<a;)d=d.aa(),e=1+e|0;a=Ng(new Og,b,d.aa().aa());this.ng===d.aa()&&(this.ng=a);d.Ia=a}};c.lc=function(){return this};
+c.o=function(a){return a&&a.$classData&&a.$classData.n.AY?this.ec.o(a.ec):$2(this,a)};c.WC=function(a){return cE(this.ec,a)};c.zb=function(a){return cc(this.ec,"",a,"")};c.Mc=function(a,b,d){return cc(this.ec,a,b,d)};c.md=function(a){return lc(this,a)};c.lh=function(a){return $8(this.ec,a)};c.nd=function(){s_a||(s_a=(new P7).b());return s_a};c.ua=function(a){for(var b=this.ec;!b.z();)a.y(b.$()),b=b.aa()};c.Gb=function(a,b){return a9(this.ec,a,b)};c.Ai=function(a,b){return this.ec.Ai(a,b)};
+c.Te=function(a,b){return b9(this.ec,a,b)};c.al=function(a){var b=hl((new jc).b(),this);a=a.nb();return Le(b,a)};c.Cg=function(){return Ek(this.ec)};c.zj=function(a){return lc(this,a)};c.Ha=function(){return this.Ci};c.Td=function(){var a=this.ec,b=i0().s;return L(a,b)};c.Da=function(){return this.ob()};c.Ta=function(){var a=new G3;a.cu=this.z()?y():this.ec;return a};c.dg=function(a,b){pU(this,a,b)};c.Vj=function(a){return c9(this.ec,a)};c.wn=function(){return null===this.ng?F():(new J).j(this.ng.Cb)};
+c.Mf=function(){return cc(this.ec,"","","")};c.ra=function(){return this.Ci};c.vh=function(){return this};c.By=function(a){if(0>a||a>=this.Ci)throw(new P).c(""+a);this.Qo&&F$(this);var b=this.ec.$();if(0===a)this.ec=this.ec.aa();else{for(var d=this.ec,b=1;b<a;)d=d.aa(),b=1+b|0;b=d.aa().$();this.ng===d.aa()&&(this.ng=d);d.Ia=d.aa().aa()}K1a(this);return b};
+function J1a(a,b){a.Qo&&F$(a);if(!a.z())if(bn(cn(),a.ec.$(),b))a.ec=a.ec.aa(),K1a(a);else{for(var d=a.ec;!d.aa().z()&&!bn(cn(),d.aa().$(),b);)d=d.aa();if(!d.aa().z()){b=d;var e=b.Ia,f=a.ng;if(null===e?null===f:e.o(f))a.ng=b;b.Ia=d.aa().aa();K1a(a)}}return a}c.Jc=function(){return this.ec.Jc()};c.hd=function(){if(null===this.ng)throw(new Du).c("last of empty ListBuffer");return this.ng.Cb};function K1a(a){a.Ci=a.Ci-1|0;0>=a.Ci&&(a.ng=null)}c.ib=function(a){return d9(this.ec,a)};
+c.Sf=function(a,b,d,e){return fE(this.ec,a,b,d,e)};function lc(a,b){a.Qo&&F$(a);if(a.z())a.ng=Ng(new Og,b,y()),a.ec=a.ng;else{var d=a.ng;a.ng=Ng(new Og,b,y());d.Ia=a.ng}a.Ci=1+a.Ci|0;return a}c.Ic=function(){return this.ec};c.Ya=function(a){return e9(this.ec,a|0)};c.rz=function(a){return J1a(this,a)};c.dp=function(a){return e9(this.ec,a)};c.gd=function(){var a=this.ec,b=ol(),b=pl(b);return L(a,b)};c.sf=function(a,b){return a9(this.ec,a,b)};c.Qa=function(a){return lc(this,a)};
+c.pl=function(a){return qQ(this.ec,a,0)};c.qc=function(){};c.Ae=function(a,b,d){g_a(this.ec,a,b,d)};c.we=function(){for(var a=this.ec,b=dc(new ec,gc());!a.z();){var d=a.$();hc(b,d);a=a.aa()}return b.Oa};c.fg=function(a){return hE(this.ec,a)};c.Mm=function(a){return J1a(this,a)};c.Ur=function(){this.ec=y();this.ng=null;this.Qo=!1;this.Ci=0};c.ve=function(a){return iE(this.ec,a)};c.Ke=function(){return 0<this.Ci};
+function hl(a,b){a:for(;;){var d=b;if(null!==d&&d===a){b=e_a(a,a.Ci);continue a}return oE(a,b)}}c.ek=function(a){return P_a(this.ec,a)};c.Zb=function(a){return hl(this,a)};c.Ze=function(){return"ListBuffer"};
+c.$classData=g({AY:0},!1,"scala.collection.mutable.ListBuffer",{AY:1,DF:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,FF:1,GF:1,Kd:1,Jd:1,Sn:1,Jy:1,jd:1,Uh:1,Ld:1,Xpa:1,Vpa:1,Ypa:1,l:1,i:1});function pm(){this.rc=null}pm.prototype=new a$;pm.prototype.constructor=pm;c=pm.prototype;c.nb=function(){return this};c.$=function(){return Uj(this)};
+function ama(a,b){qm(a,b);return a}c.b=function(){pm.prototype.Yo.call(this,16,"");return this};c.W=function(a){a=iua(this.rc,a);return(new Ke).Xa(a)};c.Wh=function(){return this};c.Mb=function(a){return I8(this,a)};c.Le=function(a){return J8(this,a)};c.y=function(a){a=iua(this.rc,a|0);return(new Ke).Xa(a)};c.oe=function(a){return K8(this,a)};c.z=function(){return g3(this)};c.te=function(){return this};
+c.pf=function(a,b){var d=this.rc,e=null===b?0:b.Y;b=d.Xb;if(0>a||a>=(b.length|0))throw(new wF).qb(a);var f=b.substring(0,a),e=(new Ke).Xa(e);d.Xb=""+f+e+b.substring(1+a|0)};c.lc=function(){return this};c.Tv=function(a,b){return this.rc.Xb.substring(a,b)};c.to=function(a){return iua(this.rc,a)};c.Sj=function(a){return L8(this,a)};c.md=function(a){return ama(this,null===a?0:a.Y)};c.lh=function(a){return M8(this,a)};c.Je=function(){return N8(this)};c.nd=function(){return ECa()};c.k=function(){return this.rc.Xb};
+c.ua=function(a){O8(this,a)};c.Gb=function(a,b){var d=this.rc.ra();return U8(this,0,d,a,b)};c.Ai=function(a,b){var d=this.rc.ra();return T8(this,d,a,b)};c.xg=function(a){var b=this.rc.Xb;return b===a?0:b<a?-1:1};c.Te=function(a,b){return P8(this,a,b)};c.of=function(a,b){return W_a(this,a,b)};c.Cf=function(){return(new pm).Iu(hua((new n1).gE(this.rc)))};c.Td=function(){return F8(this)};c.Da=function(){return this.rc.Xb};function Ur(a,b){var d=a.rc;d.Xb=""+d.Xb+b;return a}
+c.Ta=function(){return Ve(new We,this,0,this.rc.ra())};c.Gm=function(){return this};c.dg=function(a,b){pU(this,a,b)};c.Vj=function(a){return R8(this,a)};c.qb=function(a){pm.prototype.Yo.call(this,a,"");return this};c.Yo=function(a,b){a=(new n1).qb((b.length|0)+a|0);a.Xb=""+a.Xb+b;pm.prototype.Iu.call(this,a);return this};c.Mf=function(){return this.rc.Xb};c.xj=function(a){return S8(this,a)};c.ra=function(){return this.rc.ra()};c.vh=function(){return this};c.nf=function(){return this.rc.ra()};
+c.hd=function(){return Dm(this)};c.ee=function(a){var b=this.rc.ra();return W_a(this,a,b)};c.aa=function(){return Ck(this)};c.be=function(){return this};c.Iu=function(a){this.rc=a;return this};function Wr(a,b){var d=a.rc;d.Xb+=""+b;return a}c.Ya=function(a){return a3(this,a|0)};c.Qa=function(a){return ama(this,null===a?0:a.Y)};c.qc=function(){};c.Ae=function(a,b,d){V8(this,a,b,d)};c.r=function(){return QT(Q(),this)};c.Wd=function(a){return Cm(this,a)};c.nk=function(a){return W8(this,a)};
+c.ve=function(){return uF(Ha(),this.rc.Xb)};function qm(a,b){o1(a.rc,b);return a}c.ek=function(a){return X8(this,a)};c.db=function(){return rua(new L1,(new pm).b())};c.Zb=function(a){return oE(this,a)};c.Ge=function(a,b){return Y8(this,a,b)};
+c.$classData=g({gia:0},!1,"scala.collection.mutable.StringBuilder",{gia:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,Zu:1,uj:1,og:1,Id:1,kf:1,ZX:1,Ne:1,Cm:1,Ed:1,Uh:1,Ld:1,Kd:1,Jd:1,l:1,i:1});function w(){this.pa=null}w.prototype=new U$;w.prototype.constructor=w;c=w.prototype;c.nb=function(){return this};c.$f=function(){return this};c.$=function(){return Uj(this)};
+c.b=function(){w.prototype.f.call(this,[]);return this};c.W=function(a){return this.pa[a]};c.Wh=function(){return this};c.Mb=function(a){return I8(this,a)};c.Le=function(a){return J8(this,a)};c.y=function(a){return this.pa[a|0]};c.oe=function(a){return K8(this,a)};c.ye=function(a){return p9(this).rz(a)};c.z=function(){return g3(this)};c.te=function(){return this};c.pf=function(a,b){this.pa[a]=b};c.lc=function(){return this};c.Sj=function(a){return L8(this,a)};c.md=function(a){this.pa.push(a);return this};
+c.lh=function(a){return M8(this,a)};c.Je=function(){return N8(this)};c.nd=function(){return Gn()};c.ua=function(a){O8(this,a)};c.Gb=function(a,b){return U8(this,0,this.pa.length|0,a,b)};c.Ai=function(a,b){return T8(this,this.pa.length|0,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.al=function(a){var b=p9(this);a=a.nb();return Le(b,a)};c.zj=function(a){this.pa.push(a);return this};c.of=function(a,b){return Q8(this,a,b)};c.Cf=function(){return px(this)};c.Td=function(){return F8(this)};c.Da=function(){return this};
+c.Ta=function(){return Ve(new We,this,0,this.pa.length|0)};c.Gm=function(){return this};c.dg=function(a,b){pU(this,a,b)};c.Vj=function(a){return R8(this,a)};c.ra=function(){return this.pa.length|0};c.xj=function(a){return S8(this,a)};c.vh=function(){return this};c.nf=function(){return this.pa.length|0};c.By=function(a){return this.pa.splice(a,1)[0]};c.hd=function(){return Dm(this)};c.ee=function(a){return Q8(this,a,this.pa.length|0)};c.aa=function(){return Ck(this)};c.be=function(){return this};
+c.Ya=function(a){return a3(this,a|0)};c.Qa=function(a){this.pa.push(a);return this};c.qc=function(){};c.Ae=function(a,b,d){V8(this,a,b,d)};c.r=function(){return QT(Q(),this)};c.Mm=function(a){return q9(this,a)};c.Wd=function(a){return Cm(this,a)};c.nk=function(a){return W8(this,a)};c.f=function(a){this.pa=a;return this};c.ek=function(a){return X8(this,a)};c.Ze=function(){return"WrappedArray"};c.Ge=function(a,b){return Y8(this,a,b)};function Lu(a){return!!(a&&a.$classData&&a.$classData.n.HY)}
+c.$classData=g({HY:0},!1,"scala.scalajs.js.WrappedArray",{HY:1,DF:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,FF:1,GF:1,Kd:1,Jd:1,Sn:1,Jy:1,jd:1,uj:1,og:1,Id:1,kf:1,rg:1,Ef:1,Ne:1,Ld:1});function e3(){this.MU=0;this.pa=null;this.Uc=0}e3.prototype=new U$;e3.prototype.constructor=e3;c=e3.prototype;c.nb=function(){return this};c.$f=function(){return this};
+function f3(a,b){d1a(a,1+a.Uc|0);a.pa.m[a.Uc]=b;a.Uc=1+a.Uc|0;return a}c.$=function(){return Uj(this)};c.b=function(){e3.prototype.qb.call(this,16);return this};c.W=function(a){return c1a(this,a)};function lva(a,b,d){if(0>d)throw(new Ne).c("removing negative number of elements: "+d);if(0!==d){if(0>b||b>(a.Uc-d|0))throw(new P).c("at "+b+" deleting "+d);Oa(a.pa,b+d|0,a.pa,b,a.Uc-(b+d|0)|0);b=a.Uc-d|0;for(oF(Je(),b<=a.Uc);a.Uc>b;)a.Uc=-1+a.Uc|0,a.pa.m[a.Uc]=null}}c.Wh=function(){return this};
+c.Mb=function(a){return I8(this,a)};c.Le=function(a){return J8(this,a)};c.y=function(a){return c1a(this,a|0)};c.oe=function(a){return K8(this,a)};c.ye=function(a){return p9(this).rz(a)};c.z=function(){return g3(this)};c.te=function(){return this};c.pf=function(a,b){if(a>=this.Uc)throw(new P).c(""+a);this.pa.m[a]=b};c.lc=function(){return this};c.Sj=function(a){return L8(this,a)};c.md=function(a){return f3(this,a)};c.lh=function(a){return M8(this,a)};c.Je=function(){return N8(this)};c.nd=function(){return i0()};
+c.ua=function(a){for(var b=0,d=this.Uc;b<d;)a.y(this.pa.m[b]),b=1+b|0};c.Gb=function(a,b){return U8(this,0,this.Uc,a,b)};c.Ai=function(a,b){return T8(this,this.Uc,a,b)};c.Te=function(a,b){return P8(this,a,b)};c.al=function(a){var b=p9(this);a=a.nb();return Le(b,a)};c.zj=function(a){return f3(this,a)};c.of=function(a,b){return Q8(this,a,b)};c.Cf=function(){return px(this)};c.Td=function(){return F8(this)};c.Da=function(){return this};c.Ta=function(){return Ve(new We,this,0,this.Uc)};c.Gm=function(){return this};
+c.dg=function(a,b){pU(this,a,b)};c.Vj=function(a){return R8(this,a)};c.qb=function(a){a=this.MU=a;this.pa=la(Wa(Ua),[1<a?a:1]);this.Uc=0;return this};c.xj=function(a){return S8(this,a)};c.ra=function(){return this.Uc};c.vh=function(){return this};c.nf=function(){return this.Uc};c.By=function(a){var b=c1a(this,a);lva(this,a,1);return b};c.hd=function(){return Dm(this)};c.ee=function(a){return Q8(this,a,this.Uc)};c.aa=function(){return Ck(this)};c.be=function(){return this};
+function mva(a,b){if(b&&b.$classData&&b.$classData.n.Id){var d=b.ra();d1a(a,a.Uc+d|0);b.Ae(a.pa,a.Uc,d);a.Uc=a.Uc+d|0;return a}return oE(a,b)}c.Ya=function(a){return a3(this,a|0)};c.Qa=function(a){return f3(this,a)};c.qc=function(a){a>this.Uc&&1<=a&&(a=la(Wa(Ua),[a]),Oa(this.pa,0,a,0,this.Uc),this.pa=a)};c.Ae=function(a,b,d){var e=aE(W(),a)-b|0;d=d<e?d:e;e=this.Uc;d=d<e?d:e;0<d&&Kv(Bf(),this.pa,0,a,b,d)};c.r=function(){return QT(Q(),this)};c.Mm=function(a){return q9(this,a)};
+c.Wd=function(a){return Cm(this,a)};c.nk=function(a){return W8(this,a)};c.ek=function(a){return X8(this,a)};c.Zb=function(a){return mva(this,a)};c.Ze=function(){return"ArrayBuffer"};c.Ge=function(a,b){return Y8(this,a,b)};
+c.$classData=g({eha:0},!1,"scala.collection.mutable.ArrayBuffer",{eha:1,DF:1,Yg:1,Me:1,Tb:1,Ub:1,d:1,Pb:1,vb:1,wb:1,mb:1,La:1,Ka:1,sb:1,ub:1,Nb:1,Qb:1,Ob:1,Kb:1,rb:1,tb:1,q:1,he:1,Ea:1,fa:1,ge:1,Sc:1,Tc:1,Zg:1,lf:1,mf:1,gf:1,$g:1,jf:1,ff:1,Ve:1,FF:1,GF:1,Kd:1,Jd:1,Sn:1,Jy:1,jd:1,Ef:1,kf:1,Id:1,Ne:1,Ld:1,eqa:1,uj:1,og:1,ed:1,l:1,i:1});function Z$(){this.Zx=this.Pt=this.tu=this.fy=this.Tx=null}Z$.prototype=new l;Z$.prototype.constructor=Z$;c=Z$.prototype;c.FX=function(){};
+c.b=function(){L1a=this;aba(this);Coa(this);this.vF((new j1).Eu(this));this.wF(fua());var a=new k6;ry(a);Bd(a);xz(a);AS(a);(new u9).ZD(this);(new l6).ZD(this);(new L2).Fu(this);(new bT).Fu(this);(new j9).Fu(this);a=new XY;a.Wq(cS(a));a=new s9;Ad(a);Ky(a);ry(a);oz(a);tS(a);uS(a);vS(a);wS(a);Bd(a);xz(a);xS(a);yS(a);zS(a);Ld(a);Kd(a);AS(a);UR(a);(new J2).Mg(this);(new RY).Mg(this);(new SY).Mg(this);(new TY).Mg(this);(new UY).Mg(this);(new VY).Mg(this);(new WY).Mg(this);(new e1).Mg(this);(new f1).Mg(this);
+(new g1).Mg(this);a=new p7;yd(a);a.tF(zsa(a));a.sF(xoa(a));a.uF(Asa(a));zx(a);a.lF(tCa(a));a.nF(Ota(a));var b=new g5;if(null===a)throw ug(vg(),null);b.Va=a;a.JX=b;(new YY).$D(this);(new ZY).$D(this);(new n6).cE(this);(new $Y).cE(this);bba(this);a=new O2;yx(a);xd(a);Uz(a);(new m6).aE(this);(new h5).aE(this);a=new r8;Ad(a);Ky(a);tS(a);uS(a);vS(a);wS(a);this.oF(moa());return this};c.wX=function(){};c.xX=function(){};c.AX=function(a){this.Zx=a};c.HX=function(a){this.tu=a};c.GX=function(){};c.uX=function(){};
+c.LX=function(){};c.wF=function(){};c.EX=function(){};c.tX=function(){};c.yX=function(){};c.vX=function(){};c.zX=function(){};c.vF=function(a){this.fy=a};c.DX=function(){};c.IX=function(){};c.KX=function(){};c.BX=function(){};c.oF=function(a){this.Tx=a};c.CX=function(){};c.sX=function(){};
+c.$classData=g({P9:0},!1,"scalaz.Scalaz$",{P9:1,d:1,Y9:1,b9:1,voa:1,koa:1,$na:1,Mna:1,loa:1,coa:1,Lna:1,doa:1,eoa:1,foa:1,goa:1,gba:1,hba:1,iba:1,jba:1,Fna:1,Gna:1,fna:1,gna:1,bna:1,cna:1,pna:1,qna:1,Vna:1,Wna:1,Bna:1,Cna:1,zna:1,Ana:1,lna:1,mna:1,Hna:1,Ina:1,dna:1,ena:1,Xna:1,Yna:1,lba:1,mba:1,UR:1,VR:1,nna:1,ona:1,jna:1,kna:1,rna:1,sna:1,Dna:1,Ena:1,vna:1,wna:1,hna:1,ina:1,moa:1,noa:1,poa:1,qoa:1,hoa:1,ioa:1,xna:1,yna:1,Aoa:1,Boa:1,woa:1,xoa:1,Zna:1,Una:1,Tna:1,Nna:1,Ona:1,soa:1,toa:1,aoa:1,boa:1,
+tna:1,una:1,$ma:1,ana:1,Jna:1,Pna:1,uoa:1,joa:1,zoa:1,ooa:1,yoa:1,Qna:1,Rna:1,Kna:1,kba:1,roa:1,Sna:1,Zla:1,w$:1,Z$:1,baa:1,caa:1,faa:1,iaa:1,fma:1,ima:1,jma:1,gma:1,hma:1,kma:1,kaa:1,maa:1,mma:1,qma:1,oma:1,uma:1,xma:1,wma:1,vma:1,zma:1,Ama:1,cma:1,dma:1,ama:1,bma:1,lma:1,yma:1,Fma:1,Maa:1,Hma:1,Dma:1,Cma:1,Bma:1,Ema:1,Yla:1,eaa:1,jaa:1,nma:1,$la:1,Gma:1,pma:1,Y$:1,Foa:1,Goa:1,Noa:1,Moa:1,Koa:1,Ooa:1,Soa:1,Joa:1,Ioa:1,Poa:1,Roa:1,Loa:1,Hoa:1,Qoa:1,Z8:1});var L1a=void 0;
+function Aq(){L1a||(L1a=(new Z$).b())}for(var M1a=[[[],function(){return(new vT).b()}]],N1a=Wv(),O1a=pa(Woa),P1a=[],$$=0,Q1a=M1a.length|0;$$<Q1a;){var R1a=M1a[$$],S1a=R1a[0],T1a=B().s.hh(),U1a=S1a.length|0;switch(U1a){case -1:break;default:T1a.qc(U1a)}T1a.Zb((new w).f(S1a));var V1a=new nF,W1a=T1a.Da(),X1a=R1a[1];V1a.UE=W1a;V1a.QV=X1a;P1a.push(V1a);$$=1+$$|0}var Y1a=N1a.Ou,Z1a=B().s.hh(),$1a=P1a.length|0;switch($1a){case -1:break;default:Z1a.qc($1a)}Z1a.Zb((new w).f(P1a));
+Y1a.rr("utest.runner.Framework",function(a,b,d){a.El=b;a.DT=d;return a}(new jF,O1a,Z1a.Da()));ca.BrowserCompiler=function(){var a=new Up;Up.prototype.b.call(a);return a};ca.BrowserCompiler.prototype=Up.prototype;is||(is=(new es).b());ca.Converter=is;ca.Nobody=Hfa();ca.org=ca.org||{};ca.org.scalajs=ca.org.scalajs||{};ca.org.scalajs.testinterface=ca.org.scalajs.testinterface||{};ca.org.scalajs.testinterface.internal=ca.org.scalajs.testinterface.internal||{};
+ca.org.scalajs.testinterface.internal.detectFrameworks=function(a){Aha||(Aha=(new uw).b());for(var b=[],d=0,e=a.length|0;d<e;){for(var f=a[d],h=f.length|0,k=0;;){var p;if(p=k<h){p=f[k];var t;t=p;t=Wv().Ou.$b(t);t.z()?t=!1:(t=t.X(),t=gl(pa(vd),t.El));if(!t){var x=aa.exportsNamespace;p=(new Sb).c(p);p=qi(p,46);t=p.m.length;var E=0;a:for(;;){if(E!==t){var S=p.m[E],x=void 0===x?void 0:x[S],E=1+E|0;continue a}break}t=void 0!==x}p=!t}if(p)k=1+k|0;else break}h=k;f=h<(f.length|0)?(new J).j(f[h]):F();f=f.z()?
+void 0:f.X();b.push(f);d=1+d|0}return b};ca.org=ca.org||{};ca.org.scalajs=ca.org.scalajs||{};ca.org.scalajs.testinterface=ca.org.scalajs.testinterface||{};ca.org.scalajs.testinterface.internal=ca.org.scalajs.testinterface.internal||{};ca.org.scalajs.testinterface.internal.InfoSender=function(a){var b=new xw;xw.prototype.c.call(b,a);return b};ca.org.scalajs.testinterface.internal.InfoSender.prototype=xw.prototype;ca.org=ca.org||{};ca.org.scalajs=ca.org.scalajs||{};
+ca.org.scalajs.testinterface=ca.org.scalajs.testinterface||{};ca.org.scalajs.testinterface.HTMLRunner=function(){sR||(sR=(new rR).b());return sR};ca.org=ca.org||{};ca.org.scalajs=ca.org.scalajs||{};ca.org.scalajs.testinterface=ca.org.scalajs.testinterface||{};ca.org.scalajs.testinterface.internal=ca.org.scalajs.testinterface.internal||{};ca.org.scalajs.testinterface.internal.Master=function(a){var b=new AR;AR.prototype.c.call(b,a);return b};ca.org.scalajs.testinterface.internal.Master.prototype=AR.prototype;
+ca.org=ca.org||{};ca.org.scalajs=ca.org.scalajs||{};ca.org.scalajs.testinterface=ca.org.scalajs.testinterface||{};ca.org.scalajs.testinterface.internal=ca.org.scalajs.testinterface.internal||{};ca.org.scalajs.testinterface.internal.Slave=function(a,b,d){var e=new BR;BR.prototype.Oba.call(e,a,b,d);return e};ca.org.scalajs.testinterface.internal.Slave.prototype=BR.prototype;
+}).call(this);
+//# sourceMappingURL=tortoise-compiler.js.map
+</script> 
+  <script>tortoise_require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+'use strict'
+
+exports.byteLength = byteLength
+exports.toByteArray = toByteArray
+exports.fromByteArray = fromByteArray
+
+var lookup = []
+var revLookup = []
+var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
+
+var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
+for (var i = 0, len = code.length; i < len; ++i) {
+  lookup[i] = code[i]
+  revLookup[code.charCodeAt(i)] = i
+}
+
+revLookup['-'.charCodeAt(0)] = 62
+revLookup['_'.charCodeAt(0)] = 63
+
+function placeHoldersCount (b64) {
+  var len = b64.length
+  if (len % 4 > 0) {
+    throw new Error('Invalid string. Length must be a multiple of 4')
+  }
+
+  // the number of equal signs (place holders)
+  // if there are two placeholders, than the two characters before it
+  // represent one byte
+  // if there is only one, then the three characters before it represent 2 bytes
+  // this is just a cheap hack to not do indexOf twice
+  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
+}
+
+function byteLength (b64) {
+  // base64 is 4/3 + up to two characters of the original data
+  return b64.length * 3 / 4 - placeHoldersCount(b64)
+}
+
+function toByteArray (b64) {
+  var i, j, l, tmp, placeHolders, arr
+  var len = b64.length
+  placeHolders = placeHoldersCount(b64)
+
+  arr = new Arr(len * 3 / 4 - placeHolders)
+
+  // if there are placeholders, only get up to the last complete 4 chars
+  l = placeHolders > 0 ? len - 4 : len
+
+  var L = 0
+
+  for (i = 0, j = 0; i < l; i += 4, j += 3) {
+    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
+    arr[L++] = (tmp >> 16) & 0xFF
+    arr[L++] = (tmp >> 8) & 0xFF
+    arr[L++] = tmp & 0xFF
+  }
+
+  if (placeHolders === 2) {
+    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
+    arr[L++] = tmp & 0xFF
+  } else if (placeHolders === 1) {
+    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
+    arr[L++] = (tmp >> 8) & 0xFF
+    arr[L++] = tmp & 0xFF
+  }
+
+  return arr
+}
+
+function tripletToBase64 (num) {
+  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
+}
+
+function encodeChunk (uint8, start, end) {
+  var tmp
+  var output = []
+  for (var i = start; i < end; i += 3) {
+    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
+    output.push(tripletToBase64(tmp))
+  }
+  return output.join('')
+}
+
+function fromByteArray (uint8) {
+  var tmp
+  var len = uint8.length
+  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
+  var output = ''
+  var parts = []
+  var maxChunkLength = 16383 // must be multiple of 3
+
+  // go through the array every three bytes, we'll deal with trailing stuff later
+  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
+    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
+  }
+
+  // pad the end with zeros, but make sure to not forget the extra bytes
+  if (extraBytes === 1) {
+    tmp = uint8[len - 1]
+    output += lookup[tmp >> 2]
+    output += lookup[(tmp << 4) & 0x3F]
+    output += '=='
+  } else if (extraBytes === 2) {
+    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
+    output += lookup[tmp >> 10]
+    output += lookup[(tmp >> 4) & 0x3F]
+    output += lookup[(tmp << 2) & 0x3F]
+    output += '='
+  }
+
+  parts.push(output)
+
+  return parts.join('')
+}
+
+},{}],2:[function(require,module,exports){
+
+},{}],3:[function(require,module,exports){
+(function (global){
+'use strict';
+
+var buffer = require('buffer');
+var Buffer = buffer.Buffer;
+var SlowBuffer = buffer.SlowBuffer;
+var MAX_LEN = buffer.kMaxLength || 2147483647;
+exports.alloc = function alloc(size, fill, encoding) {
+  if (typeof Buffer.alloc === 'function') {
+    return Buffer.alloc(size, fill, encoding);
+  }
+  if (typeof encoding === 'number') {
+    throw new TypeError('encoding must not be number');
+  }
+  if (typeof size !== 'number') {
+    throw new TypeError('size must be a number');
+  }
+  if (size > MAX_LEN) {
+    throw new RangeError('size is too large');
+  }
+  var enc = encoding;
+  var _fill = fill;
+  if (_fill === undefined) {
+    enc = undefined;
+    _fill = 0;
+  }
+  var buf = new Buffer(size);
+  if (typeof _fill === 'string') {
+    var fillBuf = new Buffer(_fill, enc);
+    var flen = fillBuf.length;
+    var i = -1;
+    while (++i < size) {
+      buf[i] = fillBuf[i % flen];
+    }
+  } else {
+    buf.fill(_fill);
+  }
+  return buf;
+}
+exports.allocUnsafe = function allocUnsafe(size) {
+  if (typeof Buffer.allocUnsafe === 'function') {
+    return Buffer.allocUnsafe(size);
+  }
+  if (typeof size !== 'number') {
+    throw new TypeError('size must be a number');
+  }
+  if (size > MAX_LEN) {
+    throw new RangeError('size is too large');
+  }
+  return new Buffer(size);
+}
+exports.from = function from(value, encodingOrOffset, length) {
+  if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
+    return Buffer.from(value, encodingOrOffset, length);
+  }
+  if (typeof value === 'number') {
+    throw new TypeError('"value" argument must not be a number');
+  }
+  if (typeof value === 'string') {
+    return new Buffer(value, encodingOrOffset);
+  }
+  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
+    var offset = encodingOrOffset;
+    if (arguments.length === 1) {
+      return new Buffer(value);
+    }
+    if (typeof offset === 'undefined') {
+      offset = 0;
+    }
+    var len = length;
+    if (typeof len === 'undefined') {
+      len = value.byteLength - offset;
+    }
+    if (offset >= value.byteLength) {
+      throw new RangeError('\'offset\' is out of bounds');
+    }
+    if (len > value.byteLength - offset) {
+      throw new RangeError('\'length\' is out of bounds');
+    }
+    return new Buffer(value.slice(offset, offset + len));
+  }
+  if (Buffer.isBuffer(value)) {
+    var out = new Buffer(value.length);
+    value.copy(out, 0, 0, value.length);
+    return out;
+  }
+  if (value) {
+    if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
+      return new Buffer(value);
+    }
+    if (value.type === 'Buffer' && Array.isArray(value.data)) {
+      return new Buffer(value.data);
+    }
+  }
+
+  throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
+}
+exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
+  if (typeof Buffer.allocUnsafeSlow === 'function') {
+    return Buffer.allocUnsafeSlow(size);
+  }
+  if (typeof size !== 'number') {
+    throw new TypeError('size must be a number');
+  }
+  if (size >= MAX_LEN) {
+    throw new RangeError('size is too large');
+  }
+  return new SlowBuffer(size);
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"buffer":4}],4:[function(require,module,exports){
+(function (global){
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+/* eslint-disable no-proto */
+
+'use strict'
+
+var base64 = require('base64-js')
+var ieee754 = require('ieee754')
+var isArray = require('isarray')
+
+exports.Buffer = Buffer
+exports.SlowBuffer = SlowBuffer
+exports.INSPECT_MAX_BYTES = 50
+
+/**
+ * If `Buffer.TYPED_ARRAY_SUPPORT`:
+ *   === true    Use Uint8Array implementation (fastest)
+ *   === false   Use Object implementation (most compatible, even IE6)
+ *
+ * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
+ * Opera 11.6+, iOS 4.2+.
+ *
+ * Due to various browser bugs, sometimes the Object implementation will be used even
+ * when the browser supports typed arrays.
+ *
+ * Note:
+ *
+ *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
+ *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
+ *
+ *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
+ *
+ *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
+ *     incorrect length in some situations.
+
+ * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
+ * get the Object implementation, which is slower but behaves correctly.
+ */
+Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
+  ? global.TYPED_ARRAY_SUPPORT
+  : typedArraySupport()
+
+/*
+ * Export kMaxLength after typed array support is determined.
+ */
+exports.kMaxLength = kMaxLength()
+
+function typedArraySupport () {
+  try {
+    var arr = new Uint8Array(1)
+    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
+    return arr.foo() === 42 && // typed array instances can be augmented
+        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
+        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
+  } catch (e) {
+    return false
+  }
+}
+
+function kMaxLength () {
+  return Buffer.TYPED_ARRAY_SUPPORT
+    ? 0x7fffffff
+    : 0x3fffffff
+}
+
+function createBuffer (that, length) {
+  if (kMaxLength() < length) {
+    throw new RangeError('Invalid typed array length')
+  }
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    // Return an augmented `Uint8Array` instance, for best performance
+    that = new Uint8Array(length)
+    that.__proto__ = Buffer.prototype
+  } else {
+    // Fallback: Return an object instance of the Buffer class
+    if (that === null) {
+      that = new Buffer(length)
+    }
+    that.length = length
+  }
+
+  return that
+}
+
+/**
+ * The Buffer constructor returns instances of `Uint8Array` that have their
+ * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
+ * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
+ * and the `Uint8Array` methods. Square bracket notation works as expected -- it
+ * returns a single octet.
+ *
+ * The `Uint8Array` prototype remains unmodified.
+ */
+
+function Buffer (arg, encodingOrOffset, length) {
+  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
+    return new Buffer(arg, encodingOrOffset, length)
+  }
+
+  // Common case.
+  if (typeof arg === 'number') {
+    if (typeof encodingOrOffset === 'string') {
+      throw new Error(
+        'If encoding is specified then the first argument must be a string'
+      )
+    }
+    return allocUnsafe(this, arg)
+  }
+  return from(this, arg, encodingOrOffset, length)
+}
+
+Buffer.poolSize = 8192 // not used by this implementation
+
+// TODO: Legacy, not needed anymore. Remove in next major version.
+Buffer._augment = function (arr) {
+  arr.__proto__ = Buffer.prototype
+  return arr
+}
+
+function from (that, value, encodingOrOffset, length) {
+  if (typeof value === 'number') {
+    throw new TypeError('"value" argument must not be a number')
+  }
+
+  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
+    return fromArrayBuffer(that, value, encodingOrOffset, length)
+  }
+
+  if (typeof value === 'string') {
+    return fromString(that, value, encodingOrOffset)
+  }
+
+  return fromObject(that, value)
+}
+
+/**
+ * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
+ * if value is a number.
+ * Buffer.from(str[, encoding])
+ * Buffer.from(array)
+ * Buffer.from(buffer)
+ * Buffer.from(arrayBuffer[, byteOffset[, length]])
+ **/
+Buffer.from = function (value, encodingOrOffset, length) {
+  return from(null, value, encodingOrOffset, length)
+}
+
+if (Buffer.TYPED_ARRAY_SUPPORT) {
+  Buffer.prototype.__proto__ = Uint8Array.prototype
+  Buffer.__proto__ = Uint8Array
+  if (typeof Symbol !== 'undefined' && Symbol.species &&
+      Buffer[Symbol.species] === Buffer) {
+    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
+    Object.defineProperty(Buffer, Symbol.species, {
+      value: null,
+      configurable: true
+    })
+  }
+}
+
+function assertSize (size) {
+  if (typeof size !== 'number') {
+    throw new TypeError('"size" argument must be a number')
+  } else if (size < 0) {
+    throw new RangeError('"size" argument must not be negative')
+  }
+}
+
+function alloc (that, size, fill, encoding) {
+  assertSize(size)
+  if (size <= 0) {
+    return createBuffer(that, size)
+  }
+  if (fill !== undefined) {
+    // Only pay attention to encoding if it's a string. This
+    // prevents accidentally sending in a number that would
+    // be interpretted as a start offset.
+    return typeof encoding === 'string'
+      ? createBuffer(that, size).fill(fill, encoding)
+      : createBuffer(that, size).fill(fill)
+  }
+  return createBuffer(that, size)
+}
+
+/**
+ * Creates a new filled Buffer instance.
+ * alloc(size[, fill[, encoding]])
+ **/
+Buffer.alloc = function (size, fill, encoding) {
+  return alloc(null, size, fill, encoding)
+}
+
+function allocUnsafe (that, size) {
+  assertSize(size)
+  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
+  if (!Buffer.TYPED_ARRAY_SUPPORT) {
+    for (var i = 0; i < size; ++i) {
+      that[i] = 0
+    }
+  }
+  return that
+}
+
+/**
+ * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
+ * */
+Buffer.allocUnsafe = function (size) {
+  return allocUnsafe(null, size)
+}
+/**
+ * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
+ */
+Buffer.allocUnsafeSlow = function (size) {
+  return allocUnsafe(null, size)
+}
+
+function fromString (that, string, encoding) {
+  if (typeof encoding !== 'string' || encoding === '') {
+    encoding = 'utf8'
+  }
+
+  if (!Buffer.isEncoding(encoding)) {
+    throw new TypeError('"encoding" must be a valid string encoding')
+  }
+
+  var length = byteLength(string, encoding) | 0
+  that = createBuffer(that, length)
+
+  var actual = that.write(string, encoding)
+
+  if (actual !== length) {
+    // Writing a hex string, for example, that contains invalid characters will
+    // cause everything after the first invalid character to be ignored. (e.g.
+    // 'abxxcd' will be treated as 'ab')
+    that = that.slice(0, actual)
+  }
+
+  return that
+}
+
+function fromArrayLike (that, array) {
+  var length = array.length < 0 ? 0 : checked(array.length) | 0
+  that = createBuffer(that, length)
+  for (var i = 0; i < length; i += 1) {
+    that[i] = array[i] & 255
+  }
+  return that
+}
+
+function fromArrayBuffer (that, array, byteOffset, length) {
+  array.byteLength // this throws if `array` is not a valid ArrayBuffer
+
+  if (byteOffset < 0 || array.byteLength < byteOffset) {
+    throw new RangeError('\'offset\' is out of bounds')
+  }
+
+  if (array.byteLength < byteOffset + (length || 0)) {
+    throw new RangeError('\'length\' is out of bounds')
+  }
+
+  if (byteOffset === undefined && length === undefined) {
+    array = new Uint8Array(array)
+  } else if (length === undefined) {
+    array = new Uint8Array(array, byteOffset)
+  } else {
+    array = new Uint8Array(array, byteOffset, length)
+  }
+
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    // Return an augmented `Uint8Array` instance, for best performance
+    that = array
+    that.__proto__ = Buffer.prototype
+  } else {
+    // Fallback: Return an object instance of the Buffer class
+    that = fromArrayLike(that, array)
+  }
+  return that
+}
+
+function fromObject (that, obj) {
+  if (Buffer.isBuffer(obj)) {
+    var len = checked(obj.length) | 0
+    that = createBuffer(that, len)
+
+    if (that.length === 0) {
+      return that
+    }
+
+    obj.copy(that, 0, 0, len)
+    return that
+  }
+
+  if (obj) {
+    if ((typeof ArrayBuffer !== 'undefined' &&
+        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
+      if (typeof obj.length !== 'number' || isnan(obj.length)) {
+        return createBuffer(that, 0)
+      }
+      return fromArrayLike(that, obj)
+    }
+
+    if (obj.type === 'Buffer' && isArray(obj.data)) {
+      return fromArrayLike(that, obj.data)
+    }
+  }
+
+  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
+}
+
+function checked (length) {
+  // Note: cannot use `length < kMaxLength()` here because that fails when
+  // length is NaN (which is otherwise coerced to zero.)
+  if (length >= kMaxLength()) {
+    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
+                         'size: 0x' + kMaxLength().toString(16) + ' bytes')
+  }
+  return length | 0
+}
+
+function SlowBuffer (length) {
+  if (+length != length) { // eslint-disable-line eqeqeq
+    length = 0
+  }
+  return Buffer.alloc(+length)
+}
+
+Buffer.isBuffer = function isBuffer (b) {
+  return !!(b != null && b._isBuffer)
+}
+
+Buffer.compare = function compare (a, b) {
+  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
+    throw new TypeError('Arguments must be Buffers')
+  }
+
+  if (a === b) return 0
+
+  var x = a.length
+  var y = b.length
+
+  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
+    if (a[i] !== b[i]) {
+      x = a[i]
+      y = b[i]
+      break
+    }
+  }
+
+  if (x < y) return -1
+  if (y < x) return 1
+  return 0
+}
+
+Buffer.isEncoding = function isEncoding (encoding) {
+  switch (String(encoding).toLowerCase()) {
+    case 'hex':
+    case 'utf8':
+    case 'utf-8':
+    case 'ascii':
+    case 'latin1':
+    case 'binary':
+    case 'base64':
+    case 'ucs2':
+    case 'ucs-2':
+    case 'utf16le':
+    case 'utf-16le':
+      return true
+    default:
+      return false
+  }
+}
+
+Buffer.concat = function concat (list, length) {
+  if (!isArray(list)) {
+    throw new TypeError('"list" argument must be an Array of Buffers')
+  }
+
+  if (list.length === 0) {
+    return Buffer.alloc(0)
+  }
+
+  var i
+  if (length === undefined) {
+    length = 0
+    for (i = 0; i < list.length; ++i) {
+      length += list[i].length
+    }
+  }
+
+  var buffer = Buffer.allocUnsafe(length)
+  var pos = 0
+  for (i = 0; i < list.length; ++i) {
+    var buf = list[i]
+    if (!Buffer.isBuffer(buf)) {
+      throw new TypeError('"list" argument must be an Array of Buffers')
+    }
+    buf.copy(buffer, pos)
+    pos += buf.length
+  }
+  return buffer
+}
+
+function byteLength (string, encoding) {
+  if (Buffer.isBuffer(string)) {
+    return string.length
+  }
+  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
+      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
+    return string.byteLength
+  }
+  if (typeof string !== 'string') {
+    string = '' + string
+  }
+
+  var len = string.length
+  if (len === 0) return 0
+
+  // Use a for loop to avoid recursion
+  var loweredCase = false
+  for (;;) {
+    switch (encoding) {
+      case 'ascii':
+      case 'latin1':
+      case 'binary':
+        return len
+      case 'utf8':
+      case 'utf-8':
+      case undefined:
+        return utf8ToBytes(string).length
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return len * 2
+      case 'hex':
+        return len >>> 1
+      case 'base64':
+        return base64ToBytes(string).length
+      default:
+        if (loweredCase) return utf8ToBytes(string).length // assume utf8
+        encoding = ('' + encoding).toLowerCase()
+        loweredCase = true
+    }
+  }
+}
+Buffer.byteLength = byteLength
+
+function slowToString (encoding, start, end) {
+  var loweredCase = false
+
+  // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
+  // property of a typed array.
+
+  // This behaves neither like String nor Uint8Array in that we set start/end
+  // to their upper/lower bounds if the value passed is out of range.
+  // undefined is handled specially as per ECMA-262 6th Edition,
+  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
+  if (start === undefined || start < 0) {
+    start = 0
+  }
+  // Return early if start > this.length. Done here to prevent potential uint32
+  // coercion fail below.
+  if (start > this.length) {
+    return ''
+  }
+
+  if (end === undefined || end > this.length) {
+    end = this.length
+  }
+
+  if (end <= 0) {
+    return ''
+  }
+
+  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
+  end >>>= 0
+  start >>>= 0
+
+  if (end <= start) {
+    return ''
+  }
+
+  if (!encoding) encoding = 'utf8'
+
+  while (true) {
+    switch (encoding) {
+      case 'hex':
+        return hexSlice(this, start, end)
+
+      case 'utf8':
+      case 'utf-8':
+        return utf8Slice(this, start, end)
+
+      case 'ascii':
+        return asciiSlice(this, start, end)
+
+      case 'latin1':
+      case 'binary':
+        return latin1Slice(this, start, end)
+
+      case 'base64':
+        return base64Slice(this, start, end)
+
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return utf16leSlice(this, start, end)
+
+      default:
+        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+        encoding = (encoding + '').toLowerCase()
+        loweredCase = true
+    }
+  }
+}
+
+// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
+// Buffer instances.
+Buffer.prototype._isBuffer = true
+
+function swap (b, n, m) {
+  var i = b[n]
+  b[n] = b[m]
+  b[m] = i
+}
+
+Buffer.prototype.swap16 = function swap16 () {
+  var len = this.length
+  if (len % 2 !== 0) {
+    throw new RangeError('Buffer size must be a multiple of 16-bits')
+  }
+  for (var i = 0; i < len; i += 2) {
+    swap(this, i, i + 1)
+  }
+  return this
+}
+
+Buffer.prototype.swap32 = function swap32 () {
+  var len = this.length
+  if (len % 4 !== 0) {
+    throw new RangeError('Buffer size must be a multiple of 32-bits')
+  }
+  for (var i = 0; i < len; i += 4) {
+    swap(this, i, i + 3)
+    swap(this, i + 1, i + 2)
+  }
+  return this
+}
+
+Buffer.prototype.swap64 = function swap64 () {
+  var len = this.length
+  if (len % 8 !== 0) {
+    throw new RangeError('Buffer size must be a multiple of 64-bits')
+  }
+  for (var i = 0; i < len; i += 8) {
+    swap(this, i, i + 7)
+    swap(this, i + 1, i + 6)
+    swap(this, i + 2, i + 5)
+    swap(this, i + 3, i + 4)
+  }
+  return this
+}
+
+Buffer.prototype.toString = function toString () {
+  var length = this.length | 0
+  if (length === 0) return ''
+  if (arguments.length === 0) return utf8Slice(this, 0, length)
+  return slowToString.apply(this, arguments)
+}
+
+Buffer.prototype.equals = function equals (b) {
+  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
+  if (this === b) return true
+  return Buffer.compare(this, b) === 0
+}
+
+Buffer.prototype.inspect = function inspect () {
+  var str = ''
+  var max = exports.INSPECT_MAX_BYTES
+  if (this.length > 0) {
+    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
+    if (this.length > max) str += ' ... '
+  }
+  return '<Buffer ' + str + '>'
+}
+
+Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
+  if (!Buffer.isBuffer(target)) {
+    throw new TypeError('Argument must be a Buffer')
+  }
+
+  if (start === undefined) {
+    start = 0
+  }
+  if (end === undefined) {
+    end = target ? target.length : 0
+  }
+  if (thisStart === undefined) {
+    thisStart = 0
+  }
+  if (thisEnd === undefined) {
+    thisEnd = this.length
+  }
+
+  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
+    throw new RangeError('out of range index')
+  }
+
+  if (thisStart >= thisEnd && start >= end) {
+    return 0
+  }
+  if (thisStart >= thisEnd) {
+    return -1
+  }
+  if (start >= end) {
+    return 1
+  }
+
+  start >>>= 0
+  end >>>= 0
+  thisStart >>>= 0
+  thisEnd >>>= 0
+
+  if (this === target) return 0
+
+  var x = thisEnd - thisStart
+  var y = end - start
+  var len = Math.min(x, y)
+
+  var thisCopy = this.slice(thisStart, thisEnd)
+  var targetCopy = target.slice(start, end)
+
+  for (var i = 0; i < len; ++i) {
+    if (thisCopy[i] !== targetCopy[i]) {
+      x = thisCopy[i]
+      y = targetCopy[i]
+      break
+    }
+  }
+
+  if (x < y) return -1
+  if (y < x) return 1
+  return 0
+}
+
+// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
+// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
+//
+// Arguments:
+// - buffer - a Buffer to search
+// - val - a string, Buffer, or number
+// - byteOffset - an index into `buffer`; will be clamped to an int32
+// - encoding - an optional encoding, relevant is val is a string
+// - dir - true for indexOf, false for lastIndexOf
+function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
+  // Empty buffer means no match
+  if (buffer.length === 0) return -1
+
+  // Normalize byteOffset
+  if (typeof byteOffset === 'string') {
+    encoding = byteOffset
+    byteOffset = 0
+  } else if (byteOffset > 0x7fffffff) {
+    byteOffset = 0x7fffffff
+  } else if (byteOffset < -0x80000000) {
+    byteOffset = -0x80000000
+  }
+  byteOffset = +byteOffset  // Coerce to Number.
+  if (isNaN(byteOffset)) {
+    // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
+    byteOffset = dir ? 0 : (buffer.length - 1)
+  }
+
+  // Normalize byteOffset: negative offsets start from the end of the buffer
+  if (byteOffset < 0) byteOffset = buffer.length + byteOffset
+  if (byteOffset >= buffer.length) {
+    if (dir) return -1
+    else byteOffset = buffer.length - 1
+  } else if (byteOffset < 0) {
+    if (dir) byteOffset = 0
+    else return -1
+  }
+
+  // Normalize val
+  if (typeof val === 'string') {
+    val = Buffer.from(val, encoding)
+  }
+
+  // Finally, search either indexOf (if dir is true) or lastIndexOf
+  if (Buffer.isBuffer(val)) {
+    // Special case: looking for empty string/buffer always fails
+    if (val.length === 0) {
+      return -1
+    }
+    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
+  } else if (typeof val === 'number') {
+    val = val & 0xFF // Search for a byte value [0-255]
+    if (Buffer.TYPED_ARRAY_SUPPORT &&
+        typeof Uint8Array.prototype.indexOf === 'function') {
+      if (dir) {
+        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
+      } else {
+        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
+      }
+    }
+    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
+  }
+
+  throw new TypeError('val must be string, number or Buffer')
+}
+
+function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
+  var indexSize = 1
+  var arrLength = arr.length
+  var valLength = val.length
+
+  if (encoding !== undefined) {
+    encoding = String(encoding).toLowerCase()
+    if (encoding === 'ucs2' || encoding === 'ucs-2' ||
+        encoding === 'utf16le' || encoding === 'utf-16le') {
+      if (arr.length < 2 || val.length < 2) {
+        return -1
+      }
+      indexSize = 2
+      arrLength /= 2
+      valLength /= 2
+      byteOffset /= 2
+    }
+  }
+
+  function read (buf, i) {
+    if (indexSize === 1) {
+      return buf[i]
+    } else {
+      return buf.readUInt16BE(i * indexSize)
+    }
+  }
+
+  var i
+  if (dir) {
+    var foundIndex = -1
+    for (i = byteOffset; i < arrLength; i++) {
+      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
+        if (foundIndex === -1) foundIndex = i
+        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
+      } else {
+        if (foundIndex !== -1) i -= i - foundIndex
+        foundIndex = -1
+      }
+    }
+  } else {
+    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
+    for (i = byteOffset; i >= 0; i--) {
+      var found = true
+      for (var j = 0; j < valLength; j++) {
+        if (read(arr, i + j) !== read(val, j)) {
+          found = false
+          break
+        }
+      }
+      if (found) return i
+    }
+  }
+
+  return -1
+}
+
+Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
+  return this.indexOf(val, byteOffset, encoding) !== -1
+}
+
+Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
+  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
+}
+
+Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
+  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
+}
+
+function hexWrite (buf, string, offset, length) {
+  offset = Number(offset) || 0
+  var remaining = buf.length - offset
+  if (!length) {
+    length = remaining
+  } else {
+    length = Number(length)
+    if (length > remaining) {
+      length = remaining
+    }
+  }
+
+  // must be an even number of digits
+  var strLen = string.length
+  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
+
+  if (length > strLen / 2) {
+    length = strLen / 2
+  }
+  for (var i = 0; i < length; ++i) {
+    var parsed = parseInt(string.substr(i * 2, 2), 16)
+    if (isNaN(parsed)) return i
+    buf[offset + i] = parsed
+  }
+  return i
+}
+
+function utf8Write (buf, string, offset, length) {
+  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
+}
+
+function asciiWrite (buf, string, offset, length) {
+  return blitBuffer(asciiToBytes(string), buf, offset, length)
+}
+
+function latin1Write (buf, string, offset, length) {
+  return asciiWrite(buf, string, offset, length)
+}
+
+function base64Write (buf, string, offset, length) {
+  return blitBuffer(base64ToBytes(string), buf, offset, length)
+}
+
+function ucs2Write (buf, string, offset, length) {
+  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
+}
+
+Buffer.prototype.write = function write (string, offset, length, encoding) {
+  // Buffer#write(string)
+  if (offset === undefined) {
+    encoding = 'utf8'
+    length = this.length
+    offset = 0
+  // Buffer#write(string, encoding)
+  } else if (length === undefined && typeof offset === 'string') {
+    encoding = offset
+    length = this.length
+    offset = 0
+  // Buffer#write(string, offset[, length][, encoding])
+  } else if (isFinite(offset)) {
+    offset = offset | 0
+    if (isFinite(length)) {
+      length = length | 0
+      if (encoding === undefined) encoding = 'utf8'
+    } else {
+      encoding = length
+      length = undefined
+    }
+  // legacy write(string, encoding, offset, length) - remove in v0.13
+  } else {
+    throw new Error(
+      'Buffer.write(string, encoding, offset[, length]) is no longer supported'
+    )
+  }
+
+  var remaining = this.length - offset
+  if (length === undefined || length > remaining) length = remaining
+
+  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
+    throw new RangeError('Attempt to write outside buffer bounds')
+  }
+
+  if (!encoding) encoding = 'utf8'
+
+  var loweredCase = false
+  for (;;) {
+    switch (encoding) {
+      case 'hex':
+        return hexWrite(this, string, offset, length)
+
+      case 'utf8':
+      case 'utf-8':
+        return utf8Write(this, string, offset, length)
+
+      case 'ascii':
+        return asciiWrite(this, string, offset, length)
+
+      case 'latin1':
+      case 'binary':
+        return latin1Write(this, string, offset, length)
+
+      case 'base64':
+        // Warning: maxLength not taken into account in base64Write
+        return base64Write(this, string, offset, length)
+
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return ucs2Write(this, string, offset, length)
+
+      default:
+        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+        encoding = ('' + encoding).toLowerCase()
+        loweredCase = true
+    }
+  }
+}
+
+Buffer.prototype.toJSON = function toJSON () {
+  return {
+    type: 'Buffer',
+    data: Array.prototype.slice.call(this._arr || this, 0)
+  }
+}
+
+function base64Slice (buf, start, end) {
+  if (start === 0 && end === buf.length) {
+    return base64.fromByteArray(buf)
+  } else {
+    return base64.fromByteArray(buf.slice(start, end))
+  }
+}
+
+function utf8Slice (buf, start, end) {
+  end = Math.min(buf.length, end)
+  var res = []
+
+  var i = start
+  while (i < end) {
+    var firstByte = buf[i]
+    var codePoint = null
+    var bytesPerSequence = (firstByte > 0xEF) ? 4
+      : (firstByte > 0xDF) ? 3
+      : (firstByte > 0xBF) ? 2
+      : 1
+
+    if (i + bytesPerSequence <= end) {
+      var secondByte, thirdByte, fourthByte, tempCodePoint
+
+      switch (bytesPerSequence) {
+        case 1:
+          if (firstByte < 0x80) {
+            codePoint = firstByte
+          }
+          break
+        case 2:
+          secondByte = buf[i + 1]
+          if ((secondByte & 0xC0) === 0x80) {
+            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
+            if (tempCodePoint > 0x7F) {
+              codePoint = tempCodePoint
+            }
+          }
+          break
+        case 3:
+          secondByte = buf[i + 1]
+          thirdByte = buf[i + 2]
+          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
+            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
+            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
+              codePoint = tempCodePoint
+            }
+          }
+          break
+        case 4:
+          secondByte = buf[i + 1]
+          thirdByte = buf[i + 2]
+          fourthByte = buf[i + 3]
+          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
+            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
+            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
+              codePoint = tempCodePoint
+            }
+          }
+      }
+    }
+
+    if (codePoint === null) {
+      // we did not generate a valid codePoint so insert a
+      // replacement char (U+FFFD) and advance only 1 byte
+      codePoint = 0xFFFD
+      bytesPerSequence = 1
+    } else if (codePoint > 0xFFFF) {
+      // encode to utf16 (surrogate pair dance)
+      codePoint -= 0x10000
+      res.push(codePoint >>> 10 & 0x3FF | 0xD800)
+      codePoint = 0xDC00 | codePoint & 0x3FF
+    }
+
+    res.push(codePoint)
+    i += bytesPerSequence
+  }
+
+  return decodeCodePointsArray(res)
+}
+
+// Based on http://stackoverflow.com/a/22747272/680742, the browser with
+// the lowest limit is Chrome, with 0x10000 args.
+// We go 1 magnitude less, for safety
+var MAX_ARGUMENTS_LENGTH = 0x1000
+
+function decodeCodePointsArray (codePoints) {
+  var len = codePoints.length
+  if (len <= MAX_ARGUMENTS_LENGTH) {
+    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
+  }
+
+  // Decode in chunks to avoid "call stack size exceeded".
+  var res = ''
+  var i = 0
+  while (i < len) {
+    res += String.fromCharCode.apply(
+      String,
+      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
+    )
+  }
+  return res
+}
+
+function asciiSlice (buf, start, end) {
+  var ret = ''
+  end = Math.min(buf.length, end)
+
+  for (var i = start; i < end; ++i) {
+    ret += String.fromCharCode(buf[i] & 0x7F)
+  }
+  return ret
+}
+
+function latin1Slice (buf, start, end) {
+  var ret = ''
+  end = Math.min(buf.length, end)
+
+  for (var i = start; i < end; ++i) {
+    ret += String.fromCharCode(buf[i])
+  }
+  return ret
+}
+
+function hexSlice (buf, start, end) {
+  var len = buf.length
+
+  if (!start || start < 0) start = 0
+  if (!end || end < 0 || end > len) end = len
+
+  var out = ''
+  for (var i = start; i < end; ++i) {
+    out += toHex(buf[i])
+  }
+  return out
+}
+
+function utf16leSlice (buf, start, end) {
+  var bytes = buf.slice(start, end)
+  var res = ''
+  for (var i = 0; i < bytes.length; i += 2) {
+    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
+  }
+  return res
+}
+
+Buffer.prototype.slice = function slice (start, end) {
+  var len = this.length
+  start = ~~start
+  end = end === undefined ? len : ~~end
+
+  if (start < 0) {
+    start += len
+    if (start < 0) start = 0
+  } else if (start > len) {
+    start = len
+  }
+
+  if (end < 0) {
+    end += len
+    if (end < 0) end = 0
+  } else if (end > len) {
+    end = len
+  }
+
+  if (end < start) end = start
+
+  var newBuf
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    newBuf = this.subarray(start, end)
+    newBuf.__proto__ = Buffer.prototype
+  } else {
+    var sliceLen = end - start
+    newBuf = new Buffer(sliceLen, undefined)
+    for (var i = 0; i < sliceLen; ++i) {
+      newBuf[i] = this[i + start]
+    }
+  }
+
+  return newBuf
+}
+
+/*
+ * Need to make sure that buffer isn't trying to write out of bounds.
+ */
+function checkOffset (offset, ext, length) {
+  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
+  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
+}
+
+Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+  var val = this[offset]
+  var mul = 1
+  var i = 0
+  while (++i < byteLength && (mul *= 0x100)) {
+    val += this[offset + i] * mul
+  }
+
+  return val
+}
+
+Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) {
+    checkOffset(offset, byteLength, this.length)
+  }
+
+  var val = this[offset + --byteLength]
+  var mul = 1
+  while (byteLength > 0 && (mul *= 0x100)) {
+    val += this[offset + --byteLength] * mul
+  }
+
+  return val
+}
+
+Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 1, this.length)
+  return this[offset]
+}
+
+Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  return this[offset] | (this[offset + 1] << 8)
+}
+
+Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  return (this[offset] << 8) | this[offset + 1]
+}
+
+Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+
+  return ((this[offset]) |
+      (this[offset + 1] << 8) |
+      (this[offset + 2] << 16)) +
+      (this[offset + 3] * 0x1000000)
+}
+
+Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+
+  return (this[offset] * 0x1000000) +
+    ((this[offset + 1] << 16) |
+    (this[offset + 2] << 8) |
+    this[offset + 3])
+}
+
+Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+  var val = this[offset]
+  var mul = 1
+  var i = 0
+  while (++i < byteLength && (mul *= 0x100)) {
+    val += this[offset + i] * mul
+  }
+  mul *= 0x80
+
+  if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+  return val
+}
+
+Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+  var i = byteLength
+  var mul = 1
+  var val = this[offset + --i]
+  while (i > 0 && (mul *= 0x100)) {
+    val += this[offset + --i] * mul
+  }
+  mul *= 0x80
+
+  if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+  return val
+}
+
+Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 1, this.length)
+  if (!(this[offset] & 0x80)) return (this[offset])
+  return ((0xff - this[offset] + 1) * -1)
+}
+
+Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  var val = this[offset] | (this[offset + 1] << 8)
+  return (val & 0x8000) ? val | 0xFFFF0000 : val
+}
+
+Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 2, this.length)
+  var val = this[offset + 1] | (this[offset] << 8)
+  return (val & 0x8000) ? val | 0xFFFF0000 : val
+}
+
+Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+
+  return (this[offset]) |
+    (this[offset + 1] << 8) |
+    (this[offset + 2] << 16) |
+    (this[offset + 3] << 24)
+}
+
+Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+
+  return (this[offset] << 24) |
+    (this[offset + 1] << 16) |
+    (this[offset + 2] << 8) |
+    (this[offset + 3])
+}
+
+Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+  return ieee754.read(this, offset, true, 23, 4)
+}
+
+Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 4, this.length)
+  return ieee754.read(this, offset, false, 23, 4)
+}
+
+Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 8, this.length)
+  return ieee754.read(this, offset, true, 52, 8)
+}
+
+Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
+  if (!noAssert) checkOffset(offset, 8, this.length)
+  return ieee754.read(this, offset, false, 52, 8)
+}
+
+function checkInt (buf, value, offset, ext, max, min) {
+  if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
+  if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
+  if (offset + ext > buf.length) throw new RangeError('Index out of range')
+}
+
+Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
+  value = +value
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) {
+    var maxBytes = Math.pow(2, 8 * byteLength) - 1
+    checkInt(this, value, offset, byteLength, maxBytes, 0)
+  }
+
+  var mul = 1
+  var i = 0
+  this[offset] = value & 0xFF
+  while (++i < byteLength && (mul *= 0x100)) {
+    this[offset + i] = (value / mul) & 0xFF
+  }
+
+  return offset + byteLength
+}
+
+Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
+  value = +value
+  offset = offset | 0
+  byteLength = byteLength | 0
+  if (!noAssert) {
+    var maxBytes = Math.pow(2, 8 * byteLength) - 1
+    checkInt(this, value, offset, byteLength, maxBytes, 0)
+  }
+
+  var i = byteLength - 1
+  var mul = 1
+  this[offset + i] = value & 0xFF
+  while (--i >= 0 && (mul *= 0x100)) {
+    this[offset + i] = (value / mul) & 0xFF
+  }
+
+  return offset + byteLength
+}
+
+Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
+  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+  this[offset] = (value & 0xff)
+  return offset + 1
+}
+
+function objectWriteUInt16 (buf, value, offset, littleEndian) {
+  if (value < 0) value = 0xffff + value + 1
+  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
+    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
+      (littleEndian ? i : 1 - i) * 8
+  }
+}
+
+Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value & 0xff)
+    this[offset + 1] = (value >>> 8)
+  } else {
+    objectWriteUInt16(this, value, offset, true)
+  }
+  return offset + 2
+}
+
+Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value >>> 8)
+    this[offset + 1] = (value & 0xff)
+  } else {
+    objectWriteUInt16(this, value, offset, false)
+  }
+  return offset + 2
+}
+
+function objectWriteUInt32 (buf, value, offset, littleEndian) {
+  if (value < 0) value = 0xffffffff + value + 1
+  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
+    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
+  }
+}
+
+Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset + 3] = (value >>> 24)
+    this[offset + 2] = (value >>> 16)
+    this[offset + 1] = (value >>> 8)
+    this[offset] = (value & 0xff)
+  } else {
+    objectWriteUInt32(this, value, offset, true)
+  }
+  return offset + 4
+}
+
+Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value >>> 24)
+    this[offset + 1] = (value >>> 16)
+    this[offset + 2] = (value >>> 8)
+    this[offset + 3] = (value & 0xff)
+  } else {
+    objectWriteUInt32(this, value, offset, false)
+  }
+  return offset + 4
+}
+
+Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) {
+    var limit = Math.pow(2, 8 * byteLength - 1)
+
+    checkInt(this, value, offset, byteLength, limit - 1, -limit)
+  }
+
+  var i = 0
+  var mul = 1
+  var sub = 0
+  this[offset] = value & 0xFF
+  while (++i < byteLength && (mul *= 0x100)) {
+    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
+      sub = 1
+    }
+    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+  }
+
+  return offset + byteLength
+}
+
+Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) {
+    var limit = Math.pow(2, 8 * byteLength - 1)
+
+    checkInt(this, value, offset, byteLength, limit - 1, -limit)
+  }
+
+  var i = byteLength - 1
+  var mul = 1
+  var sub = 0
+  this[offset + i] = value & 0xFF
+  while (--i >= 0 && (mul *= 0x100)) {
+    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
+      sub = 1
+    }
+    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+  }
+
+  return offset + byteLength
+}
+
+Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
+  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+  if (value < 0) value = 0xff + value + 1
+  this[offset] = (value & 0xff)
+  return offset + 1
+}
+
+Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value & 0xff)
+    this[offset + 1] = (value >>> 8)
+  } else {
+    objectWriteUInt16(this, value, offset, true)
+  }
+  return offset + 2
+}
+
+Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value >>> 8)
+    this[offset + 1] = (value & 0xff)
+  } else {
+    objectWriteUInt16(this, value, offset, false)
+  }
+  return offset + 2
+}
+
+Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value & 0xff)
+    this[offset + 1] = (value >>> 8)
+    this[offset + 2] = (value >>> 16)
+    this[offset + 3] = (value >>> 24)
+  } else {
+    objectWriteUInt32(this, value, offset, true)
+  }
+  return offset + 4
+}
+
+Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
+  value = +value
+  offset = offset | 0
+  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+  if (value < 0) value = 0xffffffff + value + 1
+  if (Buffer.TYPED_ARRAY_SUPPORT) {
+    this[offset] = (value >>> 24)
+    this[offset + 1] = (value >>> 16)
+    this[offset + 2] = (value >>> 8)
+    this[offset + 3] = (value & 0xff)
+  } else {
+    objectWriteUInt32(this, value, offset, false)
+  }
+  return offset + 4
+}
+
+function checkIEEE754 (buf, value, offset, ext, max, min) {
+  if (offset + ext > buf.length) throw new RangeError('Index out of range')
+  if (offset < 0) throw new RangeError('Index out of range')
+}
+
+function writeFloat (buf, value, offset, littleEndian, noAssert) {
+  if (!noAssert) {
+    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
+  }
+  ieee754.write(buf, value, offset, littleEndian, 23, 4)
+  return offset + 4
+}
+
+Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
+  return writeFloat(this, value, offset, true, noAssert)
+}
+
+Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
+  return writeFloat(this, value, offset, false, noAssert)
+}
+
+function writeDouble (buf, value, offset, littleEndian, noAssert) {
+  if (!noAssert) {
+    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
+  }
+  ieee754.write(buf, value, offset, littleEndian, 52, 8)
+  return offset + 8
+}
+
+Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
+  return writeDouble(this, value, offset, true, noAssert)
+}
+
+Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
+  return writeDouble(this, value, offset, false, noAssert)
+}
+
+// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
+Buffer.prototype.copy = function copy (target, targetStart, start, end) {
+  if (!start) start = 0
+  if (!end && end !== 0) end = this.length
+  if (targetStart >= target.length) targetStart = target.length
+  if (!targetStart) targetStart = 0
+  if (end > 0 && end < start) end = start
+
+  // Copy 0 bytes; we're done
+  if (end === start) return 0
+  if (target.length === 0 || this.length === 0) return 0
+
+  // Fatal error conditions
+  if (targetStart < 0) {
+    throw new RangeError('targetStart out of bounds')
+  }
+  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
+  if (end < 0) throw new RangeError('sourceEnd out of bounds')
+
+  // Are we oob?
+  if (end > this.length) end = this.length
+  if (target.length - targetStart < end - start) {
+    end = target.length - targetStart + start
+  }
+
+  var len = end - start
+  var i
+
+  if (this === target && start < targetStart && targetStart < end) {
+    // descending copy from end
+    for (i = len - 1; i >= 0; --i) {
+      target[i + targetStart] = this[i + start]
+    }
+  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
+    // ascending copy from start
+    for (i = 0; i < len; ++i) {
+      target[i + targetStart] = this[i + start]
+    }
+  } else {
+    Uint8Array.prototype.set.call(
+      target,
+      this.subarray(start, start + len),
+      targetStart
+    )
+  }
+
+  return len
+}
+
+// Usage:
+//    buffer.fill(number[, offset[, end]])
+//    buffer.fill(buffer[, offset[, end]])
+//    buffer.fill(string[, offset[, end]][, encoding])
+Buffer.prototype.fill = function fill (val, start, end, encoding) {
+  // Handle string cases:
+  if (typeof val === 'string') {
+    if (typeof start === 'string') {
+      encoding = start
+      start = 0
+      end = this.length
+    } else if (typeof end === 'string') {
+      encoding = end
+      end = this.length
+    }
+    if (val.length === 1) {
+      var code = val.charCodeAt(0)
+      if (code < 256) {
+        val = code
+      }
+    }
+    if (encoding !== undefined && typeof encoding !== 'string') {
+      throw new TypeError('encoding must be a string')
+    }
+    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
+      throw new TypeError('Unknown encoding: ' + encoding)
+    }
+  } else if (typeof val === 'number') {
+    val = val & 255
+  }
+
+  // Invalid ranges are not set to a default, so can range check early.
+  if (start < 0 || this.length < start || this.length < end) {
+    throw new RangeError('Out of range index')
+  }
+
+  if (end <= start) {
+    return this
+  }
+
+  start = start >>> 0
+  end = end === undefined ? this.length : end >>> 0
+
+  if (!val) val = 0
+
+  var i
+  if (typeof val === 'number') {
+    for (i = start; i < end; ++i) {
+      this[i] = val
+    }
+  } else {
+    var bytes = Buffer.isBuffer(val)
+      ? val
+      : utf8ToBytes(new Buffer(val, encoding).toString())
+    var len = bytes.length
+    for (i = 0; i < end - start; ++i) {
+      this[i + start] = bytes[i % len]
+    }
+  }
+
+  return this
+}
+
+// HELPER FUNCTIONS
+// ================
+
+var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
+
+function base64clean (str) {
+  // Node strips out invalid characters like \n and \t from the string, base64-js does not
+  str = stringtrim(str).replace(INVALID_BASE64_RE, '')
+  // Node converts strings with length < 2 to ''
+  if (str.length < 2) return ''
+  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
+  while (str.length % 4 !== 0) {
+    str = str + '='
+  }
+  return str
+}
+
+function stringtrim (str) {
+  if (str.trim) return str.trim()
+  return str.replace(/^\s+|\s+$/g, '')
+}
+
+function toHex (n) {
+  if (n < 16) return '0' + n.toString(16)
+  return n.toString(16)
+}
+
+function utf8ToBytes (string, units) {
+  units = units || Infinity
+  var codePoint
+  var length = string.length
+  var leadSurrogate = null
+  var bytes = []
+
+  for (var i = 0; i < length; ++i) {
+    codePoint = string.charCodeAt(i)
+
+    // is surrogate component
+    if (codePoint > 0xD7FF && codePoint < 0xE000) {
+      // last char was a lead
+      if (!leadSurrogate) {
+        // no lead yet
+        if (codePoint > 0xDBFF) {
+          // unexpected trail
+          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+          continue
+        } else if (i + 1 === length) {
+          // unpaired lead
+          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+          continue
+        }
+
+        // valid lead
+        leadSurrogate = codePoint
+
+        continue
+      }
+
+      // 2 leads in a row
+      if (codePoint < 0xDC00) {
+        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+        leadSurrogate = codePoint
+        continue
+      }
+
+      // valid surrogate pair
+      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
+    } else if (leadSurrogate) {
+      // valid bmp char, but last char was a lead
+      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+    }
+
+    leadSurrogate = null
+
+    // encode utf8
+    if (codePoint < 0x80) {
+      if ((units -= 1) < 0) break
+      bytes.push(codePoint)
+    } else if (codePoint < 0x800) {
+      if ((units -= 2) < 0) break
+      bytes.push(
+        codePoint >> 0x6 | 0xC0,
+        codePoint & 0x3F | 0x80
+      )
+    } else if (codePoint < 0x10000) {
+      if ((units -= 3) < 0) break
+      bytes.push(
+        codePoint >> 0xC | 0xE0,
+        codePoint >> 0x6 & 0x3F | 0x80,
+        codePoint & 0x3F | 0x80
+      )
+    } else if (codePoint < 0x110000) {
+      if ((units -= 4) < 0) break
+      bytes.push(
+        codePoint >> 0x12 | 0xF0,
+        codePoint >> 0xC & 0x3F | 0x80,
+        codePoint >> 0x6 & 0x3F | 0x80,
+        codePoint & 0x3F | 0x80
+      )
+    } else {
+      throw new Error('Invalid code point')
+    }
+  }
+
+  return bytes
+}
+
+function asciiToBytes (str) {
+  var byteArray = []
+  for (var i = 0; i < str.length; ++i) {
+    // Node's code seems to be doing this and not & 0x7F..
+    byteArray.push(str.charCodeAt(i) & 0xFF)
+  }
+  return byteArray
+}
+
+function utf16leToBytes (str, units) {
+  var c, hi, lo
+  var byteArray = []
+  for (var i = 0; i < str.length; ++i) {
+    if ((units -= 2) < 0) break
+
+    c = str.charCodeAt(i)
+    hi = c >> 8
+    lo = c % 256
+    byteArray.push(lo)
+    byteArray.push(hi)
+  }
+
+  return byteArray
+}
+
+function base64ToBytes (str) {
+  return base64.toByteArray(base64clean(str))
+}
+
+function blitBuffer (src, dst, offset, length) {
+  for (var i = 0; i < length; ++i) {
+    if ((i + offset >= dst.length) || (i >= src.length)) break
+    dst[i + offset] = src[i]
+  }
+  return i
+}
+
+function isnan (val) {
+  return val !== val // eslint-disable-line no-self-compare
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"base64-js":1,"ieee754":9,"isarray":17}],5:[function(require,module,exports){
+(function (Buffer){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
+
+function isArray(arg) {
+  if (Array.isArray) {
+    return Array.isArray(arg);
+  }
+  return objectToString(arg) === '[object Array]';
+}
+exports.isArray = isArray;
+
+function isBoolean(arg) {
+  return typeof arg === 'boolean';
+}
+exports.isBoolean = isBoolean;
+
+function isNull(arg) {
+  return arg === null;
+}
+exports.isNull = isNull;
+
+function isNullOrUndefined(arg) {
+  return arg == null;
+}
+exports.isNullOrUndefined = isNullOrUndefined;
+
+function isNumber(arg) {
+  return typeof arg === 'number';
+}
+exports.isNumber = isNumber;
+
+function isString(arg) {
+  return typeof arg === 'string';
+}
+exports.isString = isString;
+
+function isSymbol(arg) {
+  return typeof arg === 'symbol';
+}
+exports.isSymbol = isSymbol;
+
+function isUndefined(arg) {
+  return arg === void 0;
+}
+exports.isUndefined = isUndefined;
+
+function isRegExp(re) {
+  return objectToString(re) === '[object RegExp]';
+}
+exports.isRegExp = isRegExp;
+
+function isObject(arg) {
+  return typeof arg === 'object' && arg !== null;
+}
+exports.isObject = isObject;
+
+function isDate(d) {
+  return objectToString(d) === '[object Date]';
+}
+exports.isDate = isDate;
+
+function isError(e) {
+  return (objectToString(e) === '[object Error]' || e instanceof Error);
+}
+exports.isError = isError;
+
+function isFunction(arg) {
+  return typeof arg === 'function';
+}
+exports.isFunction = isFunction;
+
+function isPrimitive(arg) {
+  return arg === null ||
+         typeof arg === 'boolean' ||
+         typeof arg === 'number' ||
+         typeof arg === 'string' ||
+         typeof arg === 'symbol' ||  // ES6 symbol
+         typeof arg === 'undefined';
+}
+exports.isPrimitive = isPrimitive;
+
+exports.isBuffer = Buffer.isBuffer;
+
+function objectToString(o) {
+  return Object.prototype.toString.call(o);
+}
+
+}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
+},{"../../is-buffer/index.js":16}],6:[function(require,module,exports){
+(function (process,Buffer){
+// Generated by CoffeeScript 1.10.0
+var Parser, StringDecoder, stream, util;
+
+stream = require('stream');
+
+util = require('util');
+
+StringDecoder = require('string_decoder').StringDecoder;
+
+module.exports = function() {
+  var callback, called, chunks, data, options, parser;
+  if (arguments.length === 3) {
+    data = arguments[0];
+    options = arguments[1];
+    callback = arguments[2];
+    if (typeof callback !== 'function') {
+      throw Error("Invalid callback argument: " + (JSON.stringify(callback)));
+    }
+    if (!(typeof data === 'string' || Buffer.isBuffer(arguments[0]))) {
+      return callback(Error("Invalid data argument: " + (JSON.stringify(data))));
+    }
+  } else if (arguments.length === 2) {
+    if (typeof arguments[0] === 'string' || Buffer.isBuffer(arguments[0])) {
+      data = arguments[0];
+    } else {
+      options = arguments[0];
+    }
+    if (typeof arguments[1] === 'function') {
+      callback = arguments[1];
+    } else {
+      options = arguments[1];
+    }
+  } else if (arguments.length === 1) {
+    if (typeof arguments[0] === 'function') {
+      callback = arguments[0];
+    } else {
+      options = arguments[0];
+    }
+  }
+  if (options == null) {
+    options = {};
+  }
+  parser = new Parser(options);
+  if (data != null) {
+    process.nextTick(function() {
+      parser.write(data);
+      return parser.end();
+    });
+  }
+  if (callback) {
+    called = false;
+    chunks = options.objname ? {} : [];
+    parser.on('readable', function() {
+      var chunk, results;
+      results = [];
+      while (chunk = parser.read()) {
+        if (options.objname) {
+          results.push(chunks[chunk[0]] = chunk[1]);
+        } else {
+          results.push(chunks.push(chunk));
+        }
+      }
+      return results;
+    });
+    parser.on('error', function(err) {
+      called = true;
+      return callback(err);
+    });
+    parser.on('end', function() {
+      if (!called) {
+        return callback(null, chunks);
+      }
+    });
+  }
+  return parser;
+};
+
+Parser = function(options) {
+  var base, base1, base10, base11, base12, base13, base14, base15, base16, base2, base3, base4, base5, base6, base7, base8, base9, k, v;
+  if (options == null) {
+    options = {};
+  }
+  options.objectMode = true;
+  this.options = {};
+  for (k in options) {
+    v = options[k];
+    this.options[k] = v;
+  }
+  stream.Transform.call(this, this.options);
+  if ((base = this.options).rowDelimiter == null) {
+    base.rowDelimiter = null;
+  }
+  if (typeof this.options.rowDelimiter === 'string') {
+    this.options.rowDelimiter = [this.options.rowDelimiter];
+  }
+  if ((base1 = this.options).delimiter == null) {
+    base1.delimiter = ',';
+  }
+  if ((base2 = this.options).quote == null) {
+    base2.quote = '"';
+  }
+  if ((base3 = this.options).escape == null) {
+    base3.escape = '"';
+  }
+  if ((base4 = this.options).columns == null) {
+    base4.columns = null;
+  }
+  if ((base5 = this.options).comment == null) {
+    base5.comment = '';
+  }
+  if ((base6 = this.options).objname == null) {
+    base6.objname = false;
+  }
+  if ((base7 = this.options).trim == null) {
+    base7.trim = false;
+  }
+  if ((base8 = this.options).ltrim == null) {
+    base8.ltrim = false;
+  }
+  if ((base9 = this.options).rtrim == null) {
+    base9.rtrim = false;
+  }
+  if ((base10 = this.options).auto_parse == null) {
+    base10.auto_parse = false;
+  }
+  if ((base11 = this.options).auto_parse_date == null) {
+    base11.auto_parse_date = false;
+  }
+  if ((base12 = this.options).relax == null) {
+    base12.relax = false;
+  }
+  if ((base13 = this.options).relax_column_count == null) {
+    base13.relax_column_count = false;
+  }
+  if ((base14 = this.options).skip_empty_lines == null) {
+    base14.skip_empty_lines = false;
+  }
+  if ((base15 = this.options).max_limit_on_data_read == null) {
+    base15.max_limit_on_data_read = 128000;
+  }
+  if ((base16 = this.options).skip_lines_with_empty_values == null) {
+    base16.skip_lines_with_empty_values = false;
+  }
+  this.lines = 0;
+  this.count = 0;
+  this.skipped_line_count = 0;
+  this.empty_line_count = 0;
+  this.is_int = /^(\-|\+)?([1-9]+[0-9]*)$/;
+  this.is_float = function(value) {
+    return (value - parseFloat(value) + 1) >= 0;
+  };
+  this._ = {};
+  this._.decoder = new StringDecoder();
+  this._.quoting = false;
+  this._.commenting = false;
+  this._.field = null;
+  this._.nextChar = null;
+  this._.closingQuote = 0;
+  this._.line = [];
+  this._.chunks = [];
+  this._.rawBuf = '';
+  this._.buf = '';
+  if (this.options.rowDelimiter) {
+    this._.rowDelimiterLength = Math.max.apply(Math, this.options.rowDelimiter.map(function(v) {
+      return v.length;
+    }));
+  }
+  return this;
+};
+
+util.inherits(Parser, stream.Transform);
+
+module.exports.Parser = Parser;
+
+Parser.prototype._transform = function(chunk, encoding, callback) {
+  var err, error;
+  if (chunk instanceof Buffer) {
+    chunk = this._.decoder.write(chunk);
+  }
+  try {
+    this.__write(chunk, false);
+    return callback();
+  } catch (error) {
+    err = error;
+    return this.emit('error', err);
+  }
+};
+
+Parser.prototype._flush = function(callback) {
+  var err, error;
+  try {
+    this.__write(this._.decoder.end(), true);
+    if (this._.quoting) {
+      this.emit('error', new Error("Quoted field not terminated at line " + (this.lines + 1)));
+      return;
+    }
+    if (this._.line.length > 0) {
+      this.__push(this._.line);
+    }
+    return callback();
+  } catch (error) {
+    err = error;
+    return this.emit('error', err);
+  }
+};
+
+Parser.prototype.__push = function(line) {
+  var field, i, j, len, lineAsColumns, rawBuf, row;
+  if (this.options.skip_lines_with_empty_values && line.join('').trim() === '') {
+    return;
+  }
+  row = null;
+  if (this.options.columns === true) {
+    this.options.columns = line;
+    rawBuf = '';
+    return;
+  } else if (typeof this.options.columns === 'function') {
+    this.options.columns = this.options.columns(line);
+    rawBuf = '';
+    return;
+  }
+  if (!this._.line_length && line.length > 0) {
+    this._.line_length = this.options.columns ? this.options.columns.length : line.length;
+  }
+  if (line.length === 1 && line[0] === '') {
+    this.empty_line_count++;
+  } else if (line.length !== this._.line_length) {
+    if (this.options.relax_column_count) {
+      this.skipped_line_count++;
+    } else if (this.options.columns != null) {
+      throw Error("Number of columns on line " + this.lines + " does not match header");
+    } else {
+      throw Error("Number of columns is inconsistent on line " + this.lines);
+    }
+  } else {
+    this.count++;
+  }
+  if (this.options.columns != null) {
+    lineAsColumns = {};
+    for (i = j = 0, len = line.length; j < len; i = ++j) {
+      field = line[i];
+      if (this.options.columns[i] === false) {
+        continue;
+      }
+      lineAsColumns[this.options.columns[i]] = field;
+    }
+    if (this.options.objname) {
+      row = [lineAsColumns[this.options.objname], lineAsColumns];
+    } else {
+      row = lineAsColumns;
+    }
+  } else {
+    row = line;
+  }
+  if (this.count < this.options.from) {
+    return;
+  }
+  if (this.count > this.options.to) {
+    return;
+  }
+  if (this.options.raw) {
+    this.push({
+      raw: this._.rawBuf,
+      row: row
+    });
+    return this._.rawBuf = '';
+  } else {
+    return this.push(row);
+  }
+};
+
+Parser.prototype.__write = function(chars, end) {
+  var areNextCharsDelimiter, areNextCharsRowDelimiters, auto_parse, char, escapeIsQuote, i, isDelimiter, isEscape, isNextCharAComment, isQuote, isRowDelimiter, isRowDelimiterLength, is_float, is_int, l, ltrim, nextCharPos, ref, ref1, ref2, ref3, ref4, remainingBuffer, results, rowDelimiter, rtrim, wasCommenting;
+  is_int = (function(_this) {
+    return function(value) {
+      if (typeof _this.is_int === 'function') {
+        return _this.is_int(value);
+      } else {
+        return _this.is_int.test(value);
+      }
+    };
+  })(this);
+  is_float = (function(_this) {
+    return function(value) {
+      if (typeof _this.is_float === 'function') {
+        return _this.is_float(value);
+      } else {
+        return _this.is_float.test(value);
+      }
+    };
+  })(this);
+  auto_parse = (function(_this) {
+    return function(value) {
+      var m;
+      if (!_this.options.auto_parse) {
+        return value;
+      }
+      if (is_int(value)) {
+        value = parseInt(value);
+      } else if (is_float(value)) {
+        value = parseFloat(value);
+      } else if (_this.options.auto_parse_date) {
+        m = Date.parse(value);
+        if (!isNaN(m)) {
+          value = new Date(m);
+        }
+      }
+      return value;
+    };
+  })(this);
+  ltrim = this.options.trim || this.options.ltrim;
+  rtrim = this.options.trim || this.options.rtrim;
+  chars = this._.buf + chars;
+  l = chars.length;
+  i = 0;
+  if (this.lines === 0 && 0xFEFF === chars.charCodeAt(0)) {
+    i++;
+  }
+  while (i < l) {
+    if (!end) {
+      remainingBuffer = chars.substr(i, l - i);
+      if ((!this.options.rowDelimiter && i + 3 > l) || (!this._.commenting && l - i < this.options.comment.length && this.options.comment.substr(0, l - i) === remainingBuffer) || (this.options.rowDelimiter && l - i < this._.rowDelimiterLength && this.options.rowDelimiter.some(function(rd) {
+        return rd.substr(0, l - i) === remainingBuffer;
+      })) || (this.options.rowDelimiter && this._.quoting && l - i < (this.options.quote.length + this._.rowDelimiterLength) && this.options.rowDelimiter.some((function(_this) {
+        return function(rd) {
+          return (_this.options.quote + rd).substr(0, l - i) === remainingBuffer;
+        };
+      })(this))) || (l - i <= this.options.delimiter.length && this.options.delimiter.substr(0, l - i) === remainingBuffer) || (l - i <= this.options.escape.length && this.options.escape.substr(0, l - i) === remainingBuffer)) {
+        break;
+      }
+    }
+    char = this._.nextChar ? this._.nextChar : chars.charAt(i);
+    this._.nextChar = l > i + 1 ? chars.charAt(i + 1) : '';
+    if (this.options.raw) {
+      this._.rawBuf += char;
+    }
+    if (this.options.rowDelimiter == null) {
+      nextCharPos = i;
+      rowDelimiter = null;
+      if (!this._.quoting && (char === '\n' || char === '\r')) {
+        rowDelimiter = char;
+        nextCharPos += 1;
+      } else if (!(!this._.quoting && char === this.options.quote) && (this._.nextChar === '\n' || this._.nextChar === '\r')) {
+        rowDelimiter = this._.nextChar;
+        nextCharPos += 2;
+        if (this.raw) {
+          rawBuf += this._.nextChar;
+        }
+      }
+      if (rowDelimiter) {
+        if (rowDelimiter === '\r' && chars.charAt(nextCharPos) === '\n') {
+          rowDelimiter += '\n';
+        }
+        this.options.rowDelimiter = [rowDelimiter];
+        this._.rowDelimiterLength = rowDelimiter.length;
+      }
+    }
+    if (!this._.commenting && char === this.options.escape) {
+      escapeIsQuote = this.options.escape === this.options.quote;
+      isEscape = this._.nextChar === this.options.escape;
+      isQuote = this._.nextChar === this.options.quote;
+      if (!(escapeIsQuote && (this._.field == null) && !this._.quoting) && (isEscape || isQuote)) {
+        i++;
+        char = this._.nextChar;
+        this._.nextChar = chars.charAt(i + 1);
+        if (this._.field == null) {
+          this._.field = '';
+        }
+        this._.field += char;
+        if (this.options.raw) {
+          this._.rawBuf += char;
+        }
+        i++;
+        continue;
+      }
+    }
+    if (!this._.commenting && char === this.options.quote) {
+      if (this._.quoting) {
+        areNextCharsRowDelimiters = this.options.rowDelimiter && this.options.rowDelimiter.some(function(rd) {
+          return chars.substr(i + 1, rd.length) === rd;
+        });
+        areNextCharsDelimiter = chars.substr(i + 1, this.options.delimiter.length) === this.options.delimiter;
+        isNextCharAComment = this._.nextChar === this.options.comment;
+        if (this._.nextChar && !areNextCharsRowDelimiters && !areNextCharsDelimiter && !isNextCharAComment) {
+          if (this.options.relax) {
+            this._.quoting = false;
+            this._.field = "" + this.options.quote + this._.field;
+          } else {
+            throw Error("Invalid closing quote at line " + (this.lines + 1) + "; found " + (JSON.stringify(this._.nextChar)) + " instead of delimiter " + (JSON.stringify(this.options.delimiter)));
+          }
+        } else {
+          this._.quoting = false;
+          this._.closingQuote = this.options.quote.length;
+          i++;
+          if (end && i === l) {
+            this._.line.push(auto_parse(this._.field || ''));
+            this._.field = null;
+          }
+          continue;
+        }
+      } else if (!this._.field) {
+        this._.quoting = true;
+        i++;
+        continue;
+      } else if ((this._.field != null) && !this.options.relax) {
+        throw Error("Invalid opening quote at line " + (this.lines + 1));
+      }
+    }
+    isRowDelimiter = this.options.rowDelimiter && this.options.rowDelimiter.some(function(rd) {
+      return chars.substr(i, rd.length) === rd;
+    });
+    if (isRowDelimiter) {
+      isRowDelimiterLength = this.options.rowDelimiter.filter(function(rd) {
+        return chars.substr(i, rd.length) === rd;
+      })[0].length;
+    }
+    if (isRowDelimiter || (end && i === l - 1)) {
+      this.lines++;
+    }
+    wasCommenting = false;
+    if (!this._.commenting && !this._.quoting && this.options.comment && chars.substr(i, this.options.comment.length) === this.options.comment) {
+      this._.commenting = true;
+    } else if (this._.commenting && isRowDelimiter) {
+      wasCommenting = true;
+      this._.commenting = false;
+    }
+    isDelimiter = chars.substr(i, this.options.delimiter.length) === this.options.delimiter;
+    if (!this._.commenting && !this._.quoting && (isDelimiter || isRowDelimiter)) {
+      if (isRowDelimiter && this._.line.length === 0 && (this._.field == null)) {
+        if (wasCommenting || this.options.skip_empty_lines) {
+          i += isRowDelimiterLength;
+          this._.nextChar = chars.charAt(i);
+          continue;
+        }
+      }
+      if (rtrim) {
+        if (!this._.closingQuote) {
+          this._.field = (ref = this._.field) != null ? ref.trimRight() : void 0;
+        }
+      }
+      this._.line.push(auto_parse(this._.field || ''));
+      this._.closingQuote = 0;
+      this._.field = null;
+      if (isDelimiter) {
+        i += this.options.delimiter.length;
+        this._.nextChar = chars.charAt(i);
+        if (end && !this._.nextChar) {
+          isRowDelimiter = true;
+          this._.line.push('');
+        }
+      }
+      if (isRowDelimiter) {
+        this.__push(this._.line);
+        this._.line = [];
+        i += isRowDelimiterLength;
+        this._.nextChar = chars.charAt(i);
+        continue;
+      }
+    } else if (!this._.commenting && !this._.quoting && (char === ' ' || char === '\t')) {
+      if (this._.field == null) {
+        this._.field = '';
+      }
+      if (!(ltrim && !this._.field)) {
+        this._.field += char;
+      }
+      i++;
+    } else if (!this._.commenting) {
+      if (this._.field == null) {
+        this._.field = '';
+      }
+      this._.field += char;
+      i++;
+    } else {
+      i++;
+    }
+    if (!this._.commenting && ((ref1 = this._.field) != null ? ref1.length : void 0) > this.options.max_limit_on_data_read) {
+      throw Error("Delimiter not found in the file " + (JSON.stringify(this.options.delimiter)));
+    }
+    if (!this._.commenting && ((ref2 = this._.line) != null ? ref2.length : void 0) > this.options.max_limit_on_data_read) {
+      throw Error("Row delimiter not found in the file " + (JSON.stringify(this.options.rowDelimiter)));
+    }
+  }
+  if (end) {
+    if (this._.field != null) {
+      if (rtrim) {
+        if (!this._.closingQuote) {
+          this._.field = (ref3 = this._.field) != null ? ref3.trimRight() : void 0;
+        }
+      }
+      this._.line.push(auto_parse(this._.field || ''));
+      this._.field = null;
+    }
+    if (((ref4 = this._.field) != null ? ref4.length : void 0) > this.options.max_limit_on_data_read) {
+      throw Error("Delimiter not found in the file " + (JSON.stringify(this.options.delimiter)));
+    }
+    if (l === 0) {
+      this.lines++;
+    }
+    if (this._.line.length > this.options.max_limit_on_data_read) {
+      throw Error("Row delimiter not found in the file " + (JSON.stringify(this.options.rowDelimiter)));
+    }
+  }
+  this._.buf = '';
+  results = [];
+  while (i < l) {
+    this._.buf += chars.charAt(i);
+    results.push(i++);
+  }
+  return results;
+};
+
+}).call(this,require('_process'),require("buffer").Buffer)
+},{"_process":19,"buffer":4,"stream":31,"string_decoder":32,"util":36}],7:[function(require,module,exports){
+(function (Buffer){
+// Generated by CoffeeScript 1.10.0
+var StringDecoder, parse;
+
+StringDecoder = require('string_decoder').StringDecoder;
+
+parse = require('./index');
+
+module.exports = function(data, options) {
+  var decoder, parser, records;
+  if (options == null) {
+    options = {};
+  }
+  records = options.objname ? {} : [];
+  if (data instanceof Buffer) {
+    decoder = new StringDecoder();
+    data = decoder.write(data);
+  }
+  parser = new parse.Parser(options);
+  parser.push = function(record) {
+    if (options.objname) {
+      return records[record[0]] = record[1];
+    } else {
+      return records.push(record);
+    }
+  };
+  parser.__write(data, false);
+  if (data instanceof Buffer) {
+    parser.__write(data.end(), true);
+  }
+  parser._flush((function() {}));
+  return records;
+};
+
+}).call(this,require("buffer").Buffer)
+},{"./index":6,"buffer":4,"string_decoder":32}],8:[function(require,module,exports){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+function EventEmitter() {
+  this._events = this._events || {};
+  this._maxListeners = this._maxListeners || undefined;
+}
+module.exports = EventEmitter;
+
+// Backwards-compat with node 0.10.x
+EventEmitter.EventEmitter = EventEmitter;
+
+EventEmitter.prototype._events = undefined;
+EventEmitter.prototype._maxListeners = undefined;
+
+// By default EventEmitters will print a warning if more than 10 listeners are
+// added to it. This is a useful default which helps finding memory leaks.
+EventEmitter.defaultMaxListeners = 10;
+
+// Obviously not all Emitters should be limited to 10. This function allows
+// that to be increased. Set to zero for unlimited.
+EventEmitter.prototype.setMaxListeners = function(n) {
+  if (!isNumber(n) || n < 0 || isNaN(n))
+    throw TypeError('n must be a positive number');
+  this._maxListeners = n;
+  return this;
+};
+
+EventEmitter.prototype.emit = function(type) {
+  var er, handler, len, args, i, listeners;
+
+  if (!this._events)
+    this._events = {};
+
+  // If there is no 'error' event listener then throw.
+  if (type === 'error') {
+    if (!this._events.error ||
+        (isObject(this._events.error) && !this._events.error.length)) {
+      er = arguments[1];
+      if (er instanceof Error) {
+        throw er; // Unhandled 'error' event
+      } else {
+        // At least give some kind of context to the user
+        var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
+        err.context = er;
+        throw err;
+      }
+    }
+  }
+
+  handler = this._events[type];
+
+  if (isUndefined(handler))
+    return false;
+
+  if (isFunction(handler)) {
+    switch (arguments.length) {
+      // fast cases
+      case 1:
+        handler.call(this);
+        break;
+      case 2:
+        handler.call(this, arguments[1]);
+        break;
+      case 3:
+        handler.call(this, arguments[1], arguments[2]);
+        break;
+      // slower
+      default:
+        args = Array.prototype.slice.call(arguments, 1);
+        handler.apply(this, args);
+    }
+  } else if (isObject(handler)) {
+    args = Array.prototype.slice.call(arguments, 1);
+    listeners = handler.slice();
+    len = listeners.length;
+    for (i = 0; i < len; i++)
+      listeners[i].apply(this, args);
+  }
+
+  return true;
+};
+
+EventEmitter.prototype.addListener = function(type, listener) {
+  var m;
+
+  if (!isFunction(listener))
+    throw TypeError('listener must be a function');
+
+  if (!this._events)
+    this._events = {};
+
+  // To avoid recursion in the case that type === "newListener"! Before
+  // adding it to the listeners, first emit "newListener".
+  if (this._events.newListener)
+    this.emit('newListener', type,
+              isFunction(listener.listener) ?
+              listener.listener : listener);
+
+  if (!this._events[type])
+    // Optimize the case of one listener. Don't need the extra array object.
+    this._events[type] = listener;
+  else if (isObject(this._events[type]))
+    // If we've already got an array, just append.
+    this._events[type].push(listener);
+  else
+    // Adding the second element, need to change to array.
+    this._events[type] = [this._events[type], listener];
+
+  // Check for listener leak
+  if (isObject(this._events[type]) && !this._events[type].warned) {
+    if (!isUndefined(this._maxListeners)) {
+      m = this._maxListeners;
+    } else {
+      m = EventEmitter.defaultMaxListeners;
+    }
+
+    if (m && m > 0 && this._events[type].length > m) {
+      this._events[type].warned = true;
+      console.error('(node) warning: possible EventEmitter memory ' +
+                    'leak detected. %d listeners added. ' +
+                    'Use emitter.setMaxListeners() to increase limit.',
+                    this._events[type].length);
+      if (typeof console.trace === 'function') {
+        // not supported in IE 10
+        console.trace();
+      }
+    }
+  }
+
+  return this;
+};
+
+EventEmitter.prototype.on = EventEmitter.prototype.addListener;
+
+EventEmitter.prototype.once = function(type, listener) {
+  if (!isFunction(listener))
+    throw TypeError('listener must be a function');
+
+  var fired = false;
+
+  function g() {
+    this.removeListener(type, g);
+
+    if (!fired) {
+      fired = true;
+      listener.apply(this, arguments);
+    }
+  }
+
+  g.listener = listener;
+  this.on(type, g);
+
+  return this;
+};
+
+// emits a 'removeListener' event iff the listener was removed
+EventEmitter.prototype.removeListener = function(type, listener) {
+  var list, position, length, i;
+
+  if (!isFunction(listener))
+    throw TypeError('listener must be a function');
+
+  if (!this._events || !this._events[type])
+    return this;
+
+  list = this._events[type];
+  length = list.length;
+  position = -1;
+
+  if (list === listener ||
+      (isFunction(list.listener) && list.listener === listener)) {
+    delete this._events[type];
+    if (this._events.removeListener)
+      this.emit('removeListener', type, listener);
+
+  } else if (isObject(list)) {
+    for (i = length; i-- > 0;) {
+      if (list[i] === listener ||
+          (list[i].listener && list[i].listener === listener)) {
+        position = i;
+        break;
+      }
+    }
+
+    if (position < 0)
+      return this;
+
+    if (list.length === 1) {
+      list.length = 0;
+      delete this._events[type];
+    } else {
+      list.splice(position, 1);
+    }
+
+    if (this._events.removeListener)
+      this.emit('removeListener', type, listener);
+  }
+
+  return this;
+};
+
+EventEmitter.prototype.removeAllListeners = function(type) {
+  var key, listeners;
+
+  if (!this._events)
+    return this;
+
+  // not listening for removeListener, no need to emit
+  if (!this._events.removeListener) {
+    if (arguments.length === 0)
+      this._events = {};
+    else if (this._events[type])
+      delete this._events[type];
+    return this;
+  }
+
+  // emit removeListener for all listeners on all events
+  if (arguments.length === 0) {
+    for (key in this._events) {
+      if (key === 'removeListener') continue;
+      this.removeAllListeners(key);
+    }
+    this.removeAllListeners('removeListener');
+    this._events = {};
+    return this;
+  }
+
+  listeners = this._events[type];
+
+  if (isFunction(listeners)) {
+    this.removeListener(type, listeners);
+  } else if (listeners) {
+    // LIFO order
+    while (listeners.length)
+      this.removeListener(type, listeners[listeners.length - 1]);
+  }
+  delete this._events[type];
+
+  return this;
+};
+
+EventEmitter.prototype.listeners = function(type) {
+  var ret;
+  if (!this._events || !this._events[type])
+    ret = [];
+  else if (isFunction(this._events[type]))
+    ret = [this._events[type]];
+  else
+    ret = this._events[type].slice();
+  return ret;
+};
+
+EventEmitter.prototype.listenerCount = function(type) {
+  if (this._events) {
+    var evlistener = this._events[type];
+
+    if (isFunction(evlistener))
+      return 1;
+    else if (evlistener)
+      return evlistener.length;
+  }
+  return 0;
+};
+
+EventEmitter.listenerCount = function(emitter, type) {
+  return emitter.listenerCount(type);
+};
+
+function isFunction(arg) {
+  return typeof arg === 'function';
+}
+
+function isNumber(arg) {
+  return typeof arg === 'number';
+}
+
+function isObject(arg) {
+  return typeof arg === 'object' && arg !== null;
+}
+
+function isUndefined(arg) {
+  return arg === void 0;
+}
+
+},{}],9:[function(require,module,exports){
+exports.read = function (buffer, offset, isLE, mLen, nBytes) {
+  var e, m
+  var eLen = nBytes * 8 - mLen - 1
+  var eMax = (1 << eLen) - 1
+  var eBias = eMax >> 1
+  var nBits = -7
+  var i = isLE ? (nBytes - 1) : 0
+  var d = isLE ? -1 : 1
+  var s = buffer[offset + i]
+
+  i += d
+
+  e = s & ((1 << (-nBits)) - 1)
+  s >>= (-nBits)
+  nBits += eLen
+  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+  m = e & ((1 << (-nBits)) - 1)
+  e >>= (-nBits)
+  nBits += mLen
+  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+  if (e === 0) {
+    e = 1 - eBias
+  } else if (e === eMax) {
+    return m ? NaN : ((s ? -1 : 1) * Infinity)
+  } else {
+    m = m + Math.pow(2, mLen)
+    e = e - eBias
+  }
+  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
+}
+
+exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
+  var e, m, c
+  var eLen = nBytes * 8 - mLen - 1
+  var eMax = (1 << eLen) - 1
+  var eBias = eMax >> 1
+  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
+  var i = isLE ? 0 : (nBytes - 1)
+  var d = isLE ? 1 : -1
+  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
+
+  value = Math.abs(value)
+
+  if (isNaN(value) || value === Infinity) {
+    m = isNaN(value) ? 1 : 0
+    e = eMax
+  } else {
+    e = Math.floor(Math.log(value) / Math.LN2)
+    if (value * (c = Math.pow(2, -e)) < 1) {
+      e--
+      c *= 2
+    }
+    if (e + eBias >= 1) {
+      value += rt / c
+    } else {
+      value += rt * Math.pow(2, 1 - eBias)
+    }
+    if (value * c >= 2) {
+      e++
+      c /= 2
+    }
+
+    if (e + eBias >= eMax) {
+      m = 0
+      e = eMax
+    } else if (e + eBias >= 1) {
+      m = (value * c - 1) * Math.pow(2, mLen)
+      e = e + eBias
+    } else {
+      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
+      e = 0
+    }
+  }
+
+  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
+
+  e = (e << mLen) | m
+  eLen += mLen
+  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
+
+  buffer[offset + i - d] |= s * 128
+}
+
+},{}],10:[function(require,module,exports){
+var structuredClone = require('./structured-clone');
+var HELLO_INTERVAL_LENGTH = 200;
+var HELLO_TIMEOUT_LENGTH = 60000;
+
+function IFrameEndpoint() {
+  var listeners = {};
+  var isInitialized = false;
+  var connected = false;
+  var postMessageQueue = [];
+  var helloInterval;
+
+  function postToParent(message) {
+    // See http://dev.opera.com/articles/view/window-postmessage-messagechannel/#crossdoc
+    //     https://github.com/Modernizr/Modernizr/issues/388
+    //     http://jsfiddle.net/ryanseddon/uZTgD/2/
+    if (structuredClone.supported()) {
+      window.parent.postMessage(message, '*');
+    } else {
+      window.parent.postMessage(JSON.stringify(message), '*');
+    }
+  }
+
+  function post(type, content) {
+    var message;
+    // Message object can be constructed from 'type' and 'content' arguments or it can be passed
+    // as the first argument.
+    if (arguments.length === 1 && typeof type === 'object' && typeof type.type === 'string') {
+      message = type;
+    } else {
+      message = {
+        type: type,
+        content: content
+      };
+    }
+    if (connected) {
+      postToParent(message);
+    } else {
+      postMessageQueue.push(message);
+    }
+  }
+
+  function postHello() {
+    postToParent({
+      type: 'hello'
+    });
+  }
+
+  function addListener(type, fn) {
+    listeners[type] = fn;
+  }
+
+  function removeAllListeners() {
+    listeners = {};
+  }
+
+  function getListenerNames() {
+    return Object.keys(listeners);
+  }
+
+  function messageListener(message) {
+    // Anyone can send us a message. Only pay attention to messages from parent.
+    if (message.source !== window.parent) return;
+    var messageData = message.data;
+    if (typeof messageData === 'string') messageData = JSON.parse(messageData);
+
+    if (!connected && messageData.type === 'hello') {
+      connected = true;
+      stopPostingHello();
+      while (postMessageQueue.length > 0) {
+        post(postMessageQueue.shift());
+      }
+    }
+
+    if (connected && listeners[messageData.type]) {
+      listeners[messageData.type](messageData.content);
+    }
+  }
+
+  function disconnect() {
+    connected = false;
+    stopPostingHello();
+    window.removeEventListener('message', messsageListener);
+  }
+
+  /**
+    Initialize communication with the parent frame. This should not be called until the app's custom
+    listeners are registered (via our 'addListener' public method) because, once we open the
+    communication, the parent window may send any messages it may have queued. Messages for which
+    we don't have handlers will be silently ignored.
+  */
+  function initialize() {
+    if (isInitialized) {
+      return;
+    }
+    isInitialized = true;
+    if (window.parent === window) return;
+
+    // We kick off communication with the parent window by sending a "hello" message. Then we wait
+    // for a handshake (another "hello" message) from the parent window.
+    startPostingHello();
+    window.addEventListener('message', messageListener, false);
+  }
+
+  function startPostingHello() {
+    if (helloInterval) {
+      stopPostingHello();
+    }
+    helloInterval = window.setInterval(postHello, HELLO_INTERVAL_LENGTH);
+    window.setTimeout(stopPostingHello, HELLO_TIMEOUT_LENGTH);
+    // Post the first msg immediately.
+    postHello();
+  }
+
+  function stopPostingHello() {
+    window.clearInterval(helloInterval);
+    helloInterval = null;
+  }
+
+  // Public API.
+  return {
+    initialize: initialize,
+    getListenerNames: getListenerNames,
+    addListener: addListener,
+    removeAllListeners: removeAllListeners,
+    disconnect: disconnect,
+    post: post
+  };
+}
+
+var instance = null;
+
+// IFrameEndpoint is a singleton, as iframe can't have multiple parents anyway.
+module.exports = function getIFrameEndpoint() {
+  if (!instance) {
+    instance = new IFrameEndpoint();
+  }
+  return instance;
+};
+
+},{"./structured-clone":13}],11:[function(require,module,exports){
+var ParentEndpoint = require('./parent-endpoint');
+var getIFrameEndpoint = require('./iframe-endpoint');
+
+// Not a real UUID as there's an RFC for that (needed for proper distributed computing).
+// But in this fairly parochial situation, we just need to be fairly sure to avoid repeats.
+function getPseudoUUID() {
+  var chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
+  var len = chars.length;
+  var ret = [];
+
+  for (var i = 0; i < 10; i++) {
+    ret.push(chars[Math.floor(Math.random() * len)]);
+  }
+  return ret.join('');
+}
+
+module.exports = function IframePhoneRpcEndpoint(handler, namespace, targetWindow, targetOrigin, phone) {
+  var pendingCallbacks = Object.create({});
+
+  // if it's a non-null object, rather than a function, 'handler' is really an options object
+  if (handler && typeof handler === 'object') {
+    namespace = handler.namespace;
+    targetWindow = handler.targetWindow;
+    targetOrigin = handler.targetOrigin;
+    phone = handler.phone;
+    handler = handler.handler;
+  }
+
+  if (!phone) {
+    if (targetWindow === window.parent) {
+      phone = getIFrameEndpoint();
+      phone.initialize();
+    } else {
+      phone = new ParentEndpoint(targetWindow, targetOrigin);
+    }
+  }
+
+  phone.addListener(namespace, function (message) {
+    var callbackObj;
+
+    if (message.messageType === 'call' && typeof this.handler === 'function') {
+      this.handler.call(undefined, message.value, function (returnValue) {
+        phone.post(namespace, {
+          messageType: 'returnValue',
+          uuid: message.uuid,
+          value: returnValue
+        });
+      });
+    } else if (message.messageType === 'returnValue') {
+      callbackObj = pendingCallbacks[message.uuid];
+
+      if (callbackObj) {
+        window.clearTimeout(callbackObj.timeout);
+        if (callbackObj.callback) {
+          callbackObj.callback.call(undefined, message.value);
+        }
+        pendingCallbacks[message.uuid] = null;
+      }
+    }
+  }.bind(this));
+
+  function call(message, callback) {
+    var uuid = getPseudoUUID();
+
+    pendingCallbacks[uuid] = {
+      callback: callback,
+      timeout: window.setTimeout(function () {
+        if (callback) {
+          callback(undefined, new Error("IframePhone timed out waiting for reply"));
+        }
+      }, 2000)
+    };
+
+    phone.post(namespace, {
+      messageType: 'call',
+      uuid: uuid,
+      value: message
+    });
+  }
+
+  function disconnect() {
+    phone.disconnect();
+  }
+
+  this.handler = handler;
+  this.call = call.bind(this);
+  this.disconnect = disconnect.bind(this);
+};
+
+},{"./iframe-endpoint":10,"./parent-endpoint":12}],12:[function(require,module,exports){
+var structuredClone = require('./structured-clone');
+
+/**
+  Call as:
+    new ParentEndpoint(targetWindow, targetOrigin, afterConnectedCallback)
+      targetWindow is a WindowProxy object. (Messages will be sent to it)
+
+      targetOrigin is the origin of the targetWindow. (Messages will be restricted to this origin)
+
+      afterConnectedCallback is an optional callback function to be called when the connection is
+        established.
+
+  OR (less secure):
+    new ParentEndpoint(targetIframe, afterConnectedCallback)
+
+      targetIframe is a DOM object (HTMLIframeElement); messages will be sent to its contentWindow.
+
+      afterConnectedCallback is an optional callback function
+
+    In this latter case, targetOrigin will be inferred from the value of the src attribute of the
+    provided DOM object at the time of the constructor invocation. This is less secure because the
+    iframe might have been navigated to an unexpected domain before constructor invocation.
+
+  Note that it is important to specify the expected origin of the iframe's content to safeguard
+  against sending messages to an unexpected domain. This might happen if our iframe is navigated to
+  a third-party URL unexpectedly. Furthermore, having a reference to Window object (as in the first
+  form of the constructor) does not protect against sending a message to the wrong domain. The
+  window object is actualy a WindowProxy which transparently proxies the Window object of the
+  underlying iframe, so that when the iframe is navigated, the "same" WindowProxy now references a
+  completely differeent Window object, possibly controlled by a hostile domain.
+
+  See http://www.esdiscuss.org/topic/a-dom-use-case-that-can-t-be-emulated-with-direct-proxies for
+  more about this weird behavior of WindowProxies (the type returned by <iframe>.contentWindow).
+*/
+
+module.exports = function ParentEndpoint(targetWindowOrIframeEl, targetOrigin, afterConnectedCallback) {
+  var postMessageQueue = [];
+  var connected = false;
+  var handlers = {};
+  var targetWindowIsIframeElement;
+
+  function getIframeOrigin(iframe) {
+    return iframe.src.match(/(.*?\/\/.*?)\//)[1];
+  }
+
+  function post(type, content) {
+    var message;
+    // Message object can be constructed from 'type' and 'content' arguments or it can be passed
+    // as the first argument.
+    if (arguments.length === 1 && typeof type === 'object' && typeof type.type === 'string') {
+      message = type;
+    } else {
+      message = {
+        type: type,
+        content: content
+      };
+    }
+    if (connected) {
+      var tWindow = getTargetWindow();
+      // if we are laready connected ... send the message
+      // See http://dev.opera.com/articles/view/window-postmessage-messagechannel/#crossdoc
+      //     https://github.com/Modernizr/Modernizr/issues/388
+      //     http://jsfiddle.net/ryanseddon/uZTgD/2/
+      if (structuredClone.supported()) {
+        tWindow.postMessage(message, targetOrigin);
+      } else {
+        tWindow.postMessage(JSON.stringify(message), targetOrigin);
+      }
+    } else {
+      // else queue up the messages to send after connection complete.
+      postMessageQueue.push(message);
+    }
+  }
+
+  function addListener(messageName, func) {
+    handlers[messageName] = func;
+  }
+
+  function removeListener(messageName) {
+    handlers[messageName] = null;
+  }
+
+  // Note that this function can't be used when IFrame element hasn't been added to DOM yet
+  // (.contentWindow would be null). At the moment risk is purely theoretical, as the parent endpoint
+  // only listens for an incoming 'hello' message and the first time we call this function
+  // is in #receiveMessage handler (so iframe had to be initialized before, as it could send 'hello').
+  // It would become important when we decide to refactor the way how communication is initialized.
+  function getTargetWindow() {
+    if (targetWindowIsIframeElement) {
+      var tWindow = targetWindowOrIframeEl.contentWindow;
+      if (!tWindow) {
+        throw "IFrame element needs to be added to DOM before communication " +
+              "can be started (.contentWindow is not available)";
+      }
+      return tWindow;
+    }
+    return targetWindowOrIframeEl;
+  }
+
+  function receiveMessage(message) {
+    var messageData;
+    if (message.source === getTargetWindow() && (targetOrigin === '*' || message.origin === targetOrigin)) {
+      messageData = message.data;
+      if (typeof messageData === 'string') {
+        messageData = JSON.parse(messageData);
+      }
+      if (handlers[messageData.type]) {
+        handlers[messageData.type](messageData.content);
+      } else {
+        console.log("cant handle type: " + messageData.type);
+      }
+    }
+  }
+
+  function disconnect() {
+    connected = false;
+    window.removeEventListener('message', receiveMessage);
+  }
+
+  // handle the case that targetWindowOrIframeEl is actually an <iframe> rather than a Window(Proxy) object
+  // Note that if it *is* a WindowProxy, this probe will throw a SecurityException, but in that case
+  // we also don't need to do anything
+  try {
+    targetWindowIsIframeElement = targetWindowOrIframeEl.constructor === HTMLIFrameElement;
+  } catch (e) {
+    targetWindowIsIframeElement = false;
+  }
+
+  if (targetWindowIsIframeElement) {
+    // Infer the origin ONLY if the user did not supply an explicit origin, i.e., if the second
+    // argument is empty or is actually a callback (meaning it is supposed to be the
+    // afterConnectionCallback)
+    if (!targetOrigin || targetOrigin.constructor === Function) {
+      afterConnectedCallback = targetOrigin;
+      targetOrigin = getIframeOrigin(targetWindowOrIframeEl);
+    }
+  }
+
+  // Handle pages served through file:// protocol. Behaviour varies in different browsers. Safari sets origin
+  // to 'file://' and everything works fine, but Chrome and Safari set message.origin to null.
+  // Also, https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage says:
+  //  > Lastly, posting a message to a page at a file: URL currently requires that the targetOrigin argument be "*".
+  //  > file:// cannot be used as a security restriction; this restriction may be modified in the future.
+  // So, using '*' seems like the only possible solution.
+  if (targetOrigin === 'file://') {
+    targetOrigin = '*';
+  }
+
+  // when we receive 'hello':
+  addListener('hello', function () {
+    connected = true;
+
+    // send hello response
+    post({
+      type: 'hello',
+      // `origin` property isn't used by IframeEndpoint anymore (>= 1.2.0), but it's being sent to be
+      // backward compatible with old IframeEndpoint versions (< v1.2.0).
+      origin: window.location.href.match(/(.*?\/\/.*?)\//)[1]
+    });
+
+    // give the user a chance to do things now that we are connected
+    // note that is will happen before any queued messages
+    if (afterConnectedCallback && typeof afterConnectedCallback === "function") {
+      afterConnectedCallback();
+    }
+
+    // Now send any messages that have been queued up ...
+    while (postMessageQueue.length > 0) {
+      post(postMessageQueue.shift());
+    }
+  });
+
+  window.addEventListener('message', receiveMessage, false);
+
+  // Public API.
+  return {
+    post: post,
+    addListener: addListener,
+    removeListener: removeListener,
+    disconnect: disconnect,
+    getTargetWindow: getTargetWindow,
+    targetOrigin: targetOrigin
+  };
+};
+
+},{"./structured-clone":13}],13:[function(require,module,exports){
+var featureSupported = false;
+
+(function () {
+  var result = 0;
+
+  if (!!window.postMessage) {
+    try {
+      // Safari 5.1 will sometimes throw an exception and sometimes won't, lolwut?
+      // When it doesn't we capture the message event and check the
+      // internal [[Class]] property of the message being passed through.
+      // Safari will pass through DOM nodes as Null iOS safari on the other hand
+      // passes it through as DOMWindow, gotcha.
+      window.onmessage = function (e) {
+        var type = Object.prototype.toString.call(e.data);
+        result = (type.indexOf("Null") != -1 || type.indexOf("DOMWindow") != -1) ? 1 : 0;
+        featureSupported = {
+          'structuredClones': result
+        };
+      };
+      // Spec states you can't transmit DOM nodes and it will throw an error
+      // postMessage implimentations that support cloned data will throw.
+      window.postMessage(document.createElement("a"), "*");
+    } catch (e) {
+      // BBOS6 throws but doesn't pass through the correct exception
+      // so check error message
+      result = (e.DATA_CLONE_ERR || e.message == "Cannot post cyclic structures.") ? 1 : 0;
+      featureSupported = {
+        'structuredClones': result
+      };
+    }
+  }
+}());
+
+exports.supported = function supported() {
+  return featureSupported && featureSupported.structuredClones > 0;
+};
+
+},{}],14:[function(require,module,exports){
+module.exports = {
+  /**
+   * Allows to communicate with an iframe.
+   */
+  ParentEndpoint:  require('./lib/parent-endpoint'),
+  /**
+   * Allows to communicate with a parent page.
+   * IFrameEndpoint is a singleton, as iframe can't have multiple parents anyway.
+   */
+  getIFrameEndpoint: require('./lib/iframe-endpoint'),
+  structuredClone: require('./lib/structured-clone'),
+
+  // TODO: May be misnamed
+  IframePhoneRpcEndpoint: require('./lib/iframe-phone-rpc-endpoint')
+
+};
+
+},{"./lib/iframe-endpoint":10,"./lib/iframe-phone-rpc-endpoint":11,"./lib/parent-endpoint":12,"./lib/structured-clone":13}],15:[function(require,module,exports){
+if (typeof Object.create === 'function') {
+  // implementation from standard node.js 'util' module
+  module.exports = function inherits(ctor, superCtor) {
+    ctor.super_ = superCtor
+    ctor.prototype = Object.create(superCtor.prototype, {
+      constructor: {
+        value: ctor,
+        enumerable: false,
+        writable: true,
+        configurable: true
+      }
+    });
+  };
+} else {
+  // old school shim for old browsers
+  module.exports = function inherits(ctor, superCtor) {
+    ctor.super_ = superCtor
+    var TempCtor = function () {}
+    TempCtor.prototype = superCtor.prototype
+    ctor.prototype = new TempCtor()
+    ctor.prototype.constructor = ctor
+  }
+}
+
+},{}],16:[function(require,module,exports){
+/*!
+ * Determine if an object is a Buffer
+ *
+ * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license  MIT
+ */
+
+// The _isBuffer check is for Safari 5-7 support, because it's missing
+// Object.prototype.constructor. Remove this eventually
+module.exports = function (obj) {
+  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
+}
+
+function isBuffer (obj) {
+  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
+}
+
+// For Node v0.10 support. Remove this eventually.
+function isSlowBuffer (obj) {
+  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
+}
+
+},{}],17:[function(require,module,exports){
+var toString = {}.toString;
+
+module.exports = Array.isArray || function (arr) {
+  return toString.call(arr) == '[object Array]';
+};
+
+},{}],18:[function(require,module,exports){
+(function (process){
+'use strict';
+
+if (!process.version ||
+    process.version.indexOf('v0.') === 0 ||
+    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
+  module.exports = nextTick;
+} else {
+  module.exports = process.nextTick;
+}
+
+function nextTick(fn, arg1, arg2, arg3) {
+  if (typeof fn !== 'function') {
+    throw new TypeError('"callback" argument must be a function');
+  }
+  var len = arguments.length;
+  var args, i;
+  switch (len) {
+  case 0:
+  case 1:
+    return process.nextTick(fn);
+  case 2:
+    return process.nextTick(function afterTickOne() {
+      fn.call(null, arg1);
+    });
+  case 3:
+    return process.nextTick(function afterTickTwo() {
+      fn.call(null, arg1, arg2);
+    });
+  case 4:
+    return process.nextTick(function afterTickThree() {
+      fn.call(null, arg1, arg2, arg3);
+    });
+  default:
+    args = new Array(len - 1);
+    i = 0;
+    while (i < args.length) {
+      args[i++] = arguments[i];
+    }
+    return process.nextTick(function afterTick() {
+      fn.apply(null, args);
+    });
+  }
+}
+
+}).call(this,require('_process'))
+},{"_process":19}],19:[function(require,module,exports){
+// shim for using process in browser
+var process = module.exports = {};
+
+// cached from whatever global is present so that test runners that stub it
+// don't break things.  But we need to wrap it in a try catch in case it is
+// wrapped in strict mode code which doesn't define any globals.  It's inside a
+// function because try/catches deoptimize in certain engines.
+
+var cachedSetTimeout;
+var cachedClearTimeout;
+
+function defaultSetTimout() {
+    throw new Error('setTimeout has not been defined');
+}
+function defaultClearTimeout () {
+    throw new Error('clearTimeout has not been defined');
+}
+(function () {
+    try {
+        if (typeof setTimeout === 'function') {
+            cachedSetTimeout = setTimeout;
+        } else {
+            cachedSetTimeout = defaultSetTimout;
+        }
+    } catch (e) {
+        cachedSetTimeout = defaultSetTimout;
+    }
+    try {
+        if (typeof clearTimeout === 'function') {
+            cachedClearTimeout = clearTimeout;
+        } else {
+            cachedClearTimeout = defaultClearTimeout;
+        }
+    } catch (e) {
+        cachedClearTimeout = defaultClearTimeout;
+    }
+} ())
+function runTimeout(fun) {
+    if (cachedSetTimeout === setTimeout) {
+        //normal enviroments in sane situations
+        return setTimeout(fun, 0);
+    }
+    // if setTimeout wasn't available but was latter defined
+    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
+        cachedSetTimeout = setTimeout;
+        return setTimeout(fun, 0);
+    }
+    try {
+        // when when somebody has screwed with setTimeout but no I.E. maddness
+        return cachedSetTimeout(fun, 0);
+    } catch(e){
+        try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
+            return cachedSetTimeout.call(null, fun, 0);
+        } catch(e){
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
+            return cachedSetTimeout.call(this, fun, 0);
+        }
+    }
+
+
+}
+function runClearTimeout(marker) {
+    if (cachedClearTimeout === clearTimeout) {
+        //normal enviroments in sane situations
+        return clearTimeout(marker);
+    }
+    // if clearTimeout wasn't available but was latter defined
+    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
+        cachedClearTimeout = clearTimeout;
+        return clearTimeout(marker);
+    }
+    try {
+        // when when somebody has screwed with setTimeout but no I.E. maddness
+        return cachedClearTimeout(marker);
+    } catch (e){
+        try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
+            return cachedClearTimeout.call(null, marker);
+        } catch (e){
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
+            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
+            return cachedClearTimeout.call(this, marker);
+        }
+    }
+
+
+
+}
+var queue = [];
+var draining = false;
+var currentQueue;
+var queueIndex = -1;
+
+function cleanUpNextTick() {
+    if (!draining || !currentQueue) {
+        return;
+    }
+    draining = false;
+    if (currentQueue.length) {
+        queue = currentQueue.concat(queue);
+    } else {
+        queueIndex = -1;
+    }
+    if (queue.length) {
+        drainQueue();
+    }
+}
+
+function drainQueue() {
+    if (draining) {
+        return;
+    }
+    var timeout = runTimeout(cleanUpNextTick);
+    draining = true;
+
+    var len = queue.length;
+    while(len) {
+        currentQueue = queue;
+        queue = [];
+        while (++queueIndex < len) {
+            if (currentQueue) {
+                currentQueue[queueIndex].run();
+            }
+        }
+        queueIndex = -1;
+        len = queue.length;
+    }
+    currentQueue = null;
+    draining = false;
+    runClearTimeout(timeout);
+}
+
+process.nextTick = function (fun) {
+    var args = new Array(arguments.length - 1);
+    if (arguments.length > 1) {
+        for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i];
+        }
+    }
+    queue.push(new Item(fun, args));
+    if (queue.length === 1 && !draining) {
+        runTimeout(drainQueue);
+    }
+};
+
+// v8 likes predictible objects
+function Item(fun, array) {
+    this.fun = fun;
+    this.array = array;
+}
+Item.prototype.run = function () {
+    this.fun.apply(null, this.array);
+};
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+process.version = ''; // empty string to avoid regexp issues
+process.versions = {};
+
+function noop() {}
+
+process.on = noop;
+process.addListener = noop;
+process.once = noop;
+process.off = noop;
+process.removeListener = noop;
+process.removeAllListeners = noop;
+process.emit = noop;
+
+process.binding = function (name) {
+    throw new Error('process.binding is not supported');
+};
+
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+    throw new Error('process.chdir is not supported');
+};
+process.umask = function() { return 0; };
+
+},{}],20:[function(require,module,exports){
+module.exports = require("./lib/_stream_duplex.js")
+
+},{"./lib/_stream_duplex.js":21}],21:[function(require,module,exports){
+// a duplex stream is just a stream that is both readable and writable.
+// Since JS doesn't have multiple prototypal inheritance, this class
+// prototypally inherits from Readable, and then parasitically from
+// Writable.
+
+'use strict';
+
+/*<replacement>*/
+
+var objectKeys = Object.keys || function (obj) {
+  var keys = [];
+  for (var key in obj) {
+    keys.push(key);
+  }return keys;
+};
+/*</replacement>*/
+
+module.exports = Duplex;
+
+/*<replacement>*/
+var processNextTick = require('process-nextick-args');
+/*</replacement>*/
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+var Readable = require('./_stream_readable');
+var Writable = require('./_stream_writable');
+
+util.inherits(Duplex, Readable);
+
+var keys = objectKeys(Writable.prototype);
+for (var v = 0; v < keys.length; v++) {
+  var method = keys[v];
+  if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
+}
+
+function Duplex(options) {
+  if (!(this instanceof Duplex)) return new Duplex(options);
+
+  Readable.call(this, options);
+  Writable.call(this, options);
+
+  if (options && options.readable === false) this.readable = false;
+
+  if (options && options.writable === false) this.writable = false;
+
+  this.allowHalfOpen = true;
+  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
+
+  this.once('end', onend);
+}
+
+// the no-half-open enforcer
+function onend() {
+  // if we allow half-open state, or if the writable side ended,
+  // then we're ok.
+  if (this.allowHalfOpen || this._writableState.ended) return;
+
+  // no more data can be written.
+  // But allow more writes to happen in this tick.
+  processNextTick(onEndNT, this);
+}
+
+function onEndNT(self) {
+  self.end();
+}
+
+function forEach(xs, f) {
+  for (var i = 0, l = xs.length; i < l; i++) {
+    f(xs[i], i);
+  }
+}
+},{"./_stream_readable":23,"./_stream_writable":25,"core-util-is":5,"inherits":15,"process-nextick-args":18}],22:[function(require,module,exports){
+// a passthrough stream.
+// basically just the most minimal sort of Transform stream.
+// Every written chunk gets output as-is.
+
+'use strict';
+
+module.exports = PassThrough;
+
+var Transform = require('./_stream_transform');
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+util.inherits(PassThrough, Transform);
+
+function PassThrough(options) {
+  if (!(this instanceof PassThrough)) return new PassThrough(options);
+
+  Transform.call(this, options);
+}
+
+PassThrough.prototype._transform = function (chunk, encoding, cb) {
+  cb(null, chunk);
+};
+},{"./_stream_transform":24,"core-util-is":5,"inherits":15}],23:[function(require,module,exports){
+(function (process){
+'use strict';
+
+module.exports = Readable;
+
+/*<replacement>*/
+var processNextTick = require('process-nextick-args');
+/*</replacement>*/
+
+/*<replacement>*/
+var isArray = require('isarray');
+/*</replacement>*/
+
+/*<replacement>*/
+var Duplex;
+/*</replacement>*/
+
+Readable.ReadableState = ReadableState;
+
+/*<replacement>*/
+var EE = require('events').EventEmitter;
+
+var EElistenerCount = function (emitter, type) {
+  return emitter.listeners(type).length;
+};
+/*</replacement>*/
+
+/*<replacement>*/
+var Stream;
+(function () {
+  try {
+    Stream = require('st' + 'ream');
+  } catch (_) {} finally {
+    if (!Stream) Stream = require('events').EventEmitter;
+  }
+})();
+/*</replacement>*/
+
+var Buffer = require('buffer').Buffer;
+/*<replacement>*/
+var bufferShim = require('buffer-shims');
+/*</replacement>*/
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+/*<replacement>*/
+var debugUtil = require('util');
+var debug = void 0;
+if (debugUtil && debugUtil.debuglog) {
+  debug = debugUtil.debuglog('stream');
+} else {
+  debug = function () {};
+}
+/*</replacement>*/
+
+var BufferList = require('./internal/streams/BufferList');
+var StringDecoder;
+
+util.inherits(Readable, Stream);
+
+function prependListener(emitter, event, fn) {
+  // Sadly this is not cacheable as some libraries bundle their own
+  // event emitter implementation with them.
+  if (typeof emitter.prependListener === 'function') {
+    return emitter.prependListener(event, fn);
+  } else {
+    // This is a hack to make sure that our error handler is attached before any
+    // userland ones.  NEVER DO THIS. This is here only because this code needs
+    // to continue to work with older versions of Node.js that do not include
+    // the prependListener() method. The goal is to eventually remove this hack.
+    if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
+  }
+}
+
+function ReadableState(options, stream) {
+  Duplex = Duplex || require('./_stream_duplex');
+
+  options = options || {};
+
+  // object stream flag. Used to make read(n) ignore n and to
+  // make all the buffer merging and length checks go away
+  this.objectMode = !!options.objectMode;
+
+  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+  // the point at which it stops calling _read() to fill the buffer
+  // Note: 0 is a valid value, means "don't call _read preemptively ever"
+  var hwm = options.highWaterMark;
+  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
+  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
+
+  // cast to ints.
+  this.highWaterMark = ~ ~this.highWaterMark;
+
+  // A linked list is used to store data chunks instead of an array because the
+  // linked list can remove elements from the beginning faster than
+  // array.shift()
+  this.buffer = new BufferList();
+  this.length = 0;
+  this.pipes = null;
+  this.pipesCount = 0;
+  this.flowing = null;
+  this.ended = false;
+  this.endEmitted = false;
+  this.reading = false;
+
+  // a flag to be able to tell if the onwrite cb is called immediately,
+  // or on a later tick.  We set this to true at first, because any
+  // actions that shouldn't happen until "later" should generally also
+  // not happen before the first write call.
+  this.sync = true;
+
+  // whenever we return null, then we set a flag to say
+  // that we're awaiting a 'readable' event emission.
+  this.needReadable = false;
+  this.emittedReadable = false;
+  this.readableListening = false;
+  this.resumeScheduled = false;
+
+  // Crypto is kind of old and crusty.  Historically, its default string
+  // encoding is 'binary' so we have to make this configurable.
+  // Everything else in the universe uses 'utf8', though.
+  this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+  // when piping, we only care about 'readable' events that happen
+  // after read()ing all the bytes and not getting any pushback.
+  this.ranOut = false;
+
+  // the number of writers that are awaiting a drain event in .pipe()s
+  this.awaitDrain = 0;
+
+  // if true, a maybeReadMore has been scheduled
+  this.readingMore = false;
+
+  this.decoder = null;
+  this.encoding = null;
+  if (options.encoding) {
+    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
+    this.decoder = new StringDecoder(options.encoding);
+    this.encoding = options.encoding;
+  }
+}
+
+function Readable(options) {
+  Duplex = Duplex || require('./_stream_duplex');
+
+  if (!(this instanceof Readable)) return new Readable(options);
+
+  this._readableState = new ReadableState(options, this);
+
+  // legacy
+  this.readable = true;
+
+  if (options && typeof options.read === 'function') this._read = options.read;
+
+  Stream.call(this);
+}
+
+// Manually shove something into the read() buffer.
+// This returns true if the highWaterMark has not been hit yet,
+// similar to how Writable.write() returns true if you should
+// write() some more.
+Readable.prototype.push = function (chunk, encoding) {
+  var state = this._readableState;
+
+  if (!state.objectMode && typeof chunk === 'string') {
+    encoding = encoding || state.defaultEncoding;
+    if (encoding !== state.encoding) {
+      chunk = bufferShim.from(chunk, encoding);
+      encoding = '';
+    }
+  }
+
+  return readableAddChunk(this, state, chunk, encoding, false);
+};
+
+// Unshift should *always* be something directly out of read()
+Readable.prototype.unshift = function (chunk) {
+  var state = this._readableState;
+  return readableAddChunk(this, state, chunk, '', true);
+};
+
+Readable.prototype.isPaused = function () {
+  return this._readableState.flowing === false;
+};
+
+function readableAddChunk(stream, state, chunk, encoding, addToFront) {
+  var er = chunkInvalid(state, chunk);
+  if (er) {
+    stream.emit('error', er);
+  } else if (chunk === null) {
+    state.reading = false;
+    onEofChunk(stream, state);
+  } else if (state.objectMode || chunk && chunk.length > 0) {
+    if (state.ended && !addToFront) {
+      var e = new Error('stream.push() after EOF');
+      stream.emit('error', e);
+    } else if (state.endEmitted && addToFront) {
+      var _e = new Error('stream.unshift() after end event');
+      stream.emit('error', _e);
+    } else {
+      var skipAdd;
+      if (state.decoder && !addToFront && !encoding) {
+        chunk = state.decoder.write(chunk);
+        skipAdd = !state.objectMode && chunk.length === 0;
+      }
+
+      if (!addToFront) state.reading = false;
+
+      // Don't add to the buffer if we've decoded to an empty string chunk and
+      // we're not in object mode
+      if (!skipAdd) {
+        // if we want the data now, just emit it.
+        if (state.flowing && state.length === 0 && !state.sync) {
+          stream.emit('data', chunk);
+          stream.read(0);
+        } else {
+          // update the buffer info.
+          state.length += state.objectMode ? 1 : chunk.length;
+          if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
+
+          if (state.needReadable) emitReadable(stream);
+        }
+      }
+
+      maybeReadMore(stream, state);
+    }
+  } else if (!addToFront) {
+    state.reading = false;
+  }
+
+  return needMoreData(state);
+}
+
+// if it's past the high water mark, we can push in some more.
+// Also, if we have no data yet, we can stand some
+// more bytes.  This is to work around cases where hwm=0,
+// such as the repl.  Also, if the push() triggered a
+// readable event, and the user called read(largeNumber) such that
+// needReadable was set, then we ought to push more, so that another
+// 'readable' event will be triggered.
+function needMoreData(state) {
+  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
+}
+
+// backwards compatibility.
+Readable.prototype.setEncoding = function (enc) {
+  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
+  this._readableState.decoder = new StringDecoder(enc);
+  this._readableState.encoding = enc;
+  return this;
+};
+
+// Don't raise the hwm > 8MB
+var MAX_HWM = 0x800000;
+function computeNewHighWaterMark(n) {
+  if (n >= MAX_HWM) {
+    n = MAX_HWM;
+  } else {
+    // Get the next highest power of 2 to prevent increasing hwm excessively in
+    // tiny amounts
+    n--;
+    n |= n >>> 1;
+    n |= n >>> 2;
+    n |= n >>> 4;
+    n |= n >>> 8;
+    n |= n >>> 16;
+    n++;
+  }
+  return n;
+}
+
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function howMuchToRead(n, state) {
+  if (n <= 0 || state.length === 0 && state.ended) return 0;
+  if (state.objectMode) return 1;
+  if (n !== n) {
+    // Only flow one buffer at a time
+    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
+  }
+  // If we're asking for more than the current hwm, then raise the hwm.
+  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
+  if (n <= state.length) return n;
+  // Don't have enough
+  if (!state.ended) {
+    state.needReadable = true;
+    return 0;
+  }
+  return state.length;
+}
+
+// you can override either this method, or the async _read(n) below.
+Readable.prototype.read = function (n) {
+  debug('read', n);
+  n = parseInt(n, 10);
+  var state = this._readableState;
+  var nOrig = n;
+
+  if (n !== 0) state.emittedReadable = false;
+
+  // if we're doing read(0) to trigger a readable event, but we
+  // already have a bunch of data in the buffer, then just trigger
+  // the 'readable' event and move on.
+  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
+    debug('read: emitReadable', state.length, state.ended);
+    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
+    return null;
+  }
+
+  n = howMuchToRead(n, state);
+
+  // if we've ended, and we're now clear, then finish it up.
+  if (n === 0 && state.ended) {
+    if (state.length === 0) endReadable(this);
+    return null;
+  }
+
+  // All the actual chunk generation logic needs to be
+  // *below* the call to _read.  The reason is that in certain
+  // synthetic stream cases, such as passthrough streams, _read
+  // may be a completely synchronous operation which may change
+  // the state of the read buffer, providing enough data when
+  // before there was *not* enough.
+  //
+  // So, the steps are:
+  // 1. Figure out what the state of things will be after we do
+  // a read from the buffer.
+  //
+  // 2. If that resulting state will trigger a _read, then call _read.
+  // Note that this may be asynchronous, or synchronous.  Yes, it is
+  // deeply ugly to write APIs this way, but that still doesn't mean
+  // that the Readable class should behave improperly, as streams are
+  // designed to be sync/async agnostic.
+  // Take note if the _read call is sync or async (ie, if the read call
+  // has returned yet), so that we know whether or not it's safe to emit
+  // 'readable' etc.
+  //
+  // 3. Actually pull the requested chunks out of the buffer and return.
+
+  // if we need a readable event, then we need to do some reading.
+  var doRead = state.needReadable;
+  debug('need readable', doRead);
+
+  // if we currently have less than the highWaterMark, then also read some
+  if (state.length === 0 || state.length - n < state.highWaterMark) {
+    doRead = true;
+    debug('length less than watermark', doRead);
+  }
+
+  // however, if we've ended, then there's no point, and if we're already
+  // reading, then it's unnecessary.
+  if (state.ended || state.reading) {
+    doRead = false;
+    debug('reading or ended', doRead);
+  } else if (doRead) {
+    debug('do read');
+    state.reading = true;
+    state.sync = true;
+    // if the length is currently zero, then we *need* a readable event.
+    if (state.length === 0) state.needReadable = true;
+    // call internal read method
+    this._read(state.highWaterMark);
+    state.sync = false;
+    // If _read pushed data synchronously, then `reading` will be false,
+    // and we need to re-evaluate how much data we can return to the user.
+    if (!state.reading) n = howMuchToRead(nOrig, state);
+  }
+
+  var ret;
+  if (n > 0) ret = fromList(n, state);else ret = null;
+
+  if (ret === null) {
+    state.needReadable = true;
+    n = 0;
+  } else {
+    state.length -= n;
+  }
+
+  if (state.length === 0) {
+    // If we have nothing in the buffer, then we want to know
+    // as soon as we *do* get something into the buffer.
+    if (!state.ended) state.needReadable = true;
+
+    // If we tried to read() past the EOF, then emit end on the next tick.
+    if (nOrig !== n && state.ended) endReadable(this);
+  }
+
+  if (ret !== null) this.emit('data', ret);
+
+  return ret;
+};
+
+function chunkInvalid(state, chunk) {
+  var er = null;
+  if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
+    er = new TypeError('Invalid non-string/buffer chunk');
+  }
+  return er;
+}
+
+function onEofChunk(stream, state) {
+  if (state.ended) return;
+  if (state.decoder) {
+    var chunk = state.decoder.end();
+    if (chunk && chunk.length) {
+      state.buffer.push(chunk);
+      state.length += state.objectMode ? 1 : chunk.length;
+    }
+  }
+  state.ended = true;
+
+  // emit 'readable' now to make sure it gets picked up.
+  emitReadable(stream);
+}
+
+// Don't emit readable right away in sync mode, because this can trigger
+// another read() call => stack overflow.  This way, it might trigger
+// a nextTick recursion warning, but that's not so bad.
+function emitReadable(stream) {
+  var state = stream._readableState;
+  state.needReadable = false;
+  if (!state.emittedReadable) {
+    debug('emitReadable', state.flowing);
+    state.emittedReadable = true;
+    if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
+  }
+}
+
+function emitReadable_(stream) {
+  debug('emit readable');
+  stream.emit('readable');
+  flow(stream);
+}
+
+// at this point, the user has presumably seen the 'readable' event,
+// and called read() to consume some data.  that may have triggered
+// in turn another _read(n) call, in which case reading = true if
+// it's in progress.
+// However, if we're not ended, or reading, and the length < hwm,
+// then go ahead and try to read some more preemptively.
+function maybeReadMore(stream, state) {
+  if (!state.readingMore) {
+    state.readingMore = true;
+    processNextTick(maybeReadMore_, stream, state);
+  }
+}
+
+function maybeReadMore_(stream, state) {
+  var len = state.length;
+  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
+    debug('maybeReadMore read 0');
+    stream.read(0);
+    if (len === state.length)
+      // didn't get any data, stop spinning.
+      break;else len = state.length;
+  }
+  state.readingMore = false;
+}
+
+// abstract method.  to be overridden in specific implementation classes.
+// call cb(er, data) where data is <= n in length.
+// for virtual (non-string, non-buffer) streams, "length" is somewhat
+// arbitrary, and perhaps not very meaningful.
+Readable.prototype._read = function (n) {
+  this.emit('error', new Error('_read() is not implemented'));
+};
+
+Readable.prototype.pipe = function (dest, pipeOpts) {
+  var src = this;
+  var state = this._readableState;
+
+  switch (state.pipesCount) {
+    case 0:
+      state.pipes = dest;
+      break;
+    case 1:
+      state.pipes = [state.pipes, dest];
+      break;
+    default:
+      state.pipes.push(dest);
+      break;
+  }
+  state.pipesCount += 1;
+  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+
+  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
+
+  var endFn = doEnd ? onend : cleanup;
+  if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
+
+  dest.on('unpipe', onunpipe);
+  function onunpipe(readable) {
+    debug('onunpipe');
+    if (readable === src) {
+      cleanup();
+    }
+  }
+
+  function onend() {
+    debug('onend');
+    dest.end();
+  }
+
+  // when the dest drains, it reduces the awaitDrain counter
+  // on the source.  This would be more elegant with a .once()
+  // handler in flow(), but adding and removing repeatedly is
+  // too slow.
+  var ondrain = pipeOnDrain(src);
+  dest.on('drain', ondrain);
+
+  var cleanedUp = false;
+  function cleanup() {
+    debug('cleanup');
+    // cleanup event handlers once the pipe is broken
+    dest.removeListener('close', onclose);
+    dest.removeListener('finish', onfinish);
+    dest.removeListener('drain', ondrain);
+    dest.removeListener('error', onerror);
+    dest.removeListener('unpipe', onunpipe);
+    src.removeListener('end', onend);
+    src.removeListener('end', cleanup);
+    src.removeListener('data', ondata);
+
+    cleanedUp = true;
+
+    // if the reader is waiting for a drain event from this
+    // specific writer, then it would cause it to never start
+    // flowing again.
+    // So, if this is awaiting a drain, then we just call it now.
+    // If we don't know, then assume that we are waiting for one.
+    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
+  }
+
+  // If the user pushes more data while we're writing to dest then we'll end up
+  // in ondata again. However, we only want to increase awaitDrain once because
+  // dest will only emit one 'drain' event for the multiple writes.
+  // => Introduce a guard on increasing awaitDrain.
+  var increasedAwaitDrain = false;
+  src.on('data', ondata);
+  function ondata(chunk) {
+    debug('ondata');
+    increasedAwaitDrain = false;
+    var ret = dest.write(chunk);
+    if (false === ret && !increasedAwaitDrain) {
+      // If the user unpiped during `dest.write()`, it is possible
+      // to get stuck in a permanently paused state if that write
+      // also returned false.
+      // => Check whether `dest` is still a piping destination.
+      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
+        debug('false write response, pause', src._readableState.awaitDrain);
+        src._readableState.awaitDrain++;
+        increasedAwaitDrain = true;
+      }
+      src.pause();
+    }
+  }
+
+  // if the dest has an error, then stop piping into it.
+  // however, don't suppress the throwing behavior for this.
+  function onerror(er) {
+    debug('onerror', er);
+    unpipe();
+    dest.removeListener('error', onerror);
+    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
+  }
+
+  // Make sure our error handler is attached before userland ones.
+  prependListener(dest, 'error', onerror);
+
+  // Both close and finish should trigger unpipe, but only once.
+  function onclose() {
+    dest.removeListener('finish', onfinish);
+    unpipe();
+  }
+  dest.once('close', onclose);
+  function onfinish() {
+    debug('onfinish');
+    dest.removeListener('close', onclose);
+    unpipe();
+  }
+  dest.once('finish', onfinish);
+
+  function unpipe() {
+    debug('unpipe');
+    src.unpipe(dest);
+  }
+
+  // tell the dest that it's being piped to
+  dest.emit('pipe', src);
+
+  // start the flow if it hasn't been started already.
+  if (!state.flowing) {
+    debug('pipe resume');
+    src.resume();
+  }
+
+  return dest;
+};
+
+function pipeOnDrain(src) {
+  return function () {
+    var state = src._readableState;
+    debug('pipeOnDrain', state.awaitDrain);
+    if (state.awaitDrain) state.awaitDrain--;
+    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
+      state.flowing = true;
+      flow(src);
+    }
+  };
+}
+
+Readable.prototype.unpipe = function (dest) {
+  var state = this._readableState;
+
+  // if we're not piping anywhere, then do nothing.
+  if (state.pipesCount === 0) return this;
+
+  // just one destination.  most common case.
+  if (state.pipesCount === 1) {
+    // passed in one, but it's not the right one.
+    if (dest && dest !== state.pipes) return this;
+
+    if (!dest) dest = state.pipes;
+
+    // got a match.
+    state.pipes = null;
+    state.pipesCount = 0;
+    state.flowing = false;
+    if (dest) dest.emit('unpipe', this);
+    return this;
+  }
+
+  // slow case. multiple pipe destinations.
+
+  if (!dest) {
+    // remove all.
+    var dests = state.pipes;
+    var len = state.pipesCount;
+    state.pipes = null;
+    state.pipesCount = 0;
+    state.flowing = false;
+
+    for (var i = 0; i < len; i++) {
+      dests[i].emit('unpipe', this);
+    }return this;
+  }
+
+  // try to find the right one.
+  var index = indexOf(state.pipes, dest);
+  if (index === -1) return this;
+
+  state.pipes.splice(index, 1);
+  state.pipesCount -= 1;
+  if (state.pipesCount === 1) state.pipes = state.pipes[0];
+
+  dest.emit('unpipe', this);
+
+  return this;
+};
+
+// set up data events if they are asked for
+// Ensure readable listeners eventually get something
+Readable.prototype.on = function (ev, fn) {
+  var res = Stream.prototype.on.call(this, ev, fn);
+
+  if (ev === 'data') {
+    // Start flowing on next tick if stream isn't explicitly paused
+    if (this._readableState.flowing !== false) this.resume();
+  } else if (ev === 'readable') {
+    var state = this._readableState;
+    if (!state.endEmitted && !state.readableListening) {
+      state.readableListening = state.needReadable = true;
+      state.emittedReadable = false;
+      if (!state.reading) {
+        processNextTick(nReadingNextTick, this);
+      } else if (state.length) {
+        emitReadable(this, state);
+      }
+    }
+  }
+
+  return res;
+};
+Readable.prototype.addListener = Readable.prototype.on;
+
+function nReadingNextTick(self) {
+  debug('readable nexttick read 0');
+  self.read(0);
+}
+
+// pause() and resume() are remnants of the legacy readable stream API
+// If the user uses them, then switch into old mode.
+Readable.prototype.resume = function () {
+  var state = this._readableState;
+  if (!state.flowing) {
+    debug('resume');
+    state.flowing = true;
+    resume(this, state);
+  }
+  return this;
+};
+
+function resume(stream, state) {
+  if (!state.resumeScheduled) {
+    state.resumeScheduled = true;
+    processNextTick(resume_, stream, state);
+  }
+}
+
+function resume_(stream, state) {
+  if (!state.reading) {
+    debug('resume read 0');
+    stream.read(0);
+  }
+
+  state.resumeScheduled = false;
+  state.awaitDrain = 0;
+  stream.emit('resume');
+  flow(stream);
+  if (state.flowing && !state.reading) stream.read(0);
+}
+
+Readable.prototype.pause = function () {
+  debug('call pause flowing=%j', this._readableState.flowing);
+  if (false !== this._readableState.flowing) {
+    debug('pause');
+    this._readableState.flowing = false;
+    this.emit('pause');
+  }
+  return this;
+};
+
+function flow(stream) {
+  var state = stream._readableState;
+  debug('flow', state.flowing);
+  while (state.flowing && stream.read() !== null) {}
+}
+
+// wrap an old-style stream as the async data source.
+// This is *not* part of the readable stream interface.
+// It is an ugly unfortunate mess of history.
+Readable.prototype.wrap = function (stream) {
+  var state = this._readableState;
+  var paused = false;
+
+  var self = this;
+  stream.on('end', function () {
+    debug('wrapped end');
+    if (state.decoder && !state.ended) {
+      var chunk = state.decoder.end();
+      if (chunk && chunk.length) self.push(chunk);
+    }
+
+    self.push(null);
+  });
+
+  stream.on('data', function (chunk) {
+    debug('wrapped data');
+    if (state.decoder) chunk = state.decoder.write(chunk);
+
+    // don't skip over falsy values in objectMode
+    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
+
+    var ret = self.push(chunk);
+    if (!ret) {
+      paused = true;
+      stream.pause();
+    }
+  });
+
+  // proxy all the other methods.
+  // important when wrapping filters and duplexes.
+  for (var i in stream) {
+    if (this[i] === undefined && typeof stream[i] === 'function') {
+      this[i] = function (method) {
+        return function () {
+          return stream[method].apply(stream, arguments);
+        };
+      }(i);
+    }
+  }
+
+  // proxy certain important events.
+  var events = ['error', 'close', 'destroy', 'pause', 'resume'];
+  forEach(events, function (ev) {
+    stream.on(ev, self.emit.bind(self, ev));
+  });
+
+  // when we try to consume some more bytes, simply unpause the
+  // underlying stream.
+  self._read = function (n) {
+    debug('wrapped _read', n);
+    if (paused) {
+      paused = false;
+      stream.resume();
+    }
+  };
+
+  return self;
+};
+
+// exposed for testing purposes only.
+Readable._fromList = fromList;
+
+// Pluck off n bytes from an array of buffers.
+// Length is the combined lengths of all the buffers in the list.
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function fromList(n, state) {
+  // nothing buffered
+  if (state.length === 0) return null;
+
+  var ret;
+  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
+    // read it all, truncate the list
+    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
+    state.buffer.clear();
+  } else {
+    // read part of list
+    ret = fromListPartial(n, state.buffer, state.decoder);
+  }
+
+  return ret;
+}
+
+// Extracts only enough buffered data to satisfy the amount requested.
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function fromListPartial(n, list, hasStrings) {
+  var ret;
+  if (n < list.head.data.length) {
+    // slice is the same for buffers and strings
+    ret = list.head.data.slice(0, n);
+    list.head.data = list.head.data.slice(n);
+  } else if (n === list.head.data.length) {
+    // first chunk is a perfect match
+    ret = list.shift();
+  } else {
+    // result spans more than one buffer
+    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
+  }
+  return ret;
+}
+
+// Copies a specified amount of characters from the list of buffered data
+// chunks.
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function copyFromBufferString(n, list) {
+  var p = list.head;
+  var c = 1;
+  var ret = p.data;
+  n -= ret.length;
+  while (p = p.next) {
+    var str = p.data;
+    var nb = n > str.length ? str.length : n;
+    if (nb === str.length) ret += str;else ret += str.slice(0, n);
+    n -= nb;
+    if (n === 0) {
+      if (nb === str.length) {
+        ++c;
+        if (p.next) list.head = p.next;else list.head = list.tail = null;
+      } else {
+        list.head = p;
+        p.data = str.slice(nb);
+      }
+      break;
+    }
+    ++c;
+  }
+  list.length -= c;
+  return ret;
+}
+
+// Copies a specified amount of bytes from the list of buffered data chunks.
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function copyFromBuffer(n, list) {
+  var ret = bufferShim.allocUnsafe(n);
+  var p = list.head;
+  var c = 1;
+  p.data.copy(ret);
+  n -= p.data.length;
+  while (p = p.next) {
+    var buf = p.data;
+    var nb = n > buf.length ? buf.length : n;
+    buf.copy(ret, ret.length - n, 0, nb);
+    n -= nb;
+    if (n === 0) {
+      if (nb === buf.length) {
+        ++c;
+        if (p.next) list.head = p.next;else list.head = list.tail = null;
+      } else {
+        list.head = p;
+        p.data = buf.slice(nb);
+      }
+      break;
+    }
+    ++c;
+  }
+  list.length -= c;
+  return ret;
+}
+
+function endReadable(stream) {
+  var state = stream._readableState;
+
+  // If we get here before consuming all the bytes, then that is a
+  // bug in node.  Should never happen.
+  if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
+
+  if (!state.endEmitted) {
+    state.ended = true;
+    processNextTick(endReadableNT, state, stream);
+  }
+}
+
+function endReadableNT(state, stream) {
+  // Check that we didn't get one last unshift.
+  if (!state.endEmitted && state.length === 0) {
+    state.endEmitted = true;
+    stream.readable = false;
+    stream.emit('end');
+  }
+}
+
+function forEach(xs, f) {
+  for (var i = 0, l = xs.length; i < l; i++) {
+    f(xs[i], i);
+  }
+}
+
+function indexOf(xs, x) {
+  for (var i = 0, l = xs.length; i < l; i++) {
+    if (xs[i] === x) return i;
+  }
+  return -1;
+}
+}).call(this,require('_process'))
+},{"./_stream_duplex":21,"./internal/streams/BufferList":26,"_process":19,"buffer":4,"buffer-shims":3,"core-util-is":5,"events":8,"inherits":15,"isarray":17,"process-nextick-args":18,"string_decoder/":32,"util":2}],24:[function(require,module,exports){
+// a transform stream is a readable/writable stream where you do
+// something with the data.  Sometimes it's called a "filter",
+// but that's not a great name for it, since that implies a thing where
+// some bits pass through, and others are simply ignored.  (That would
+// be a valid example of a transform, of course.)
+//
+// While the output is causally related to the input, it's not a
+// necessarily symmetric or synchronous transformation.  For example,
+// a zlib stream might take multiple plain-text writes(), and then
+// emit a single compressed chunk some time in the future.
+//
+// Here's how this works:
+//
+// The Transform stream has all the aspects of the readable and writable
+// stream classes.  When you write(chunk), that calls _write(chunk,cb)
+// internally, and returns false if there's a lot of pending writes
+// buffered up.  When you call read(), that calls _read(n) until
+// there's enough pending readable data buffered up.
+//
+// In a transform stream, the written data is placed in a buffer.  When
+// _read(n) is called, it transforms the queued up data, calling the
+// buffered _write cb's as it consumes chunks.  If consuming a single
+// written chunk would result in multiple output chunks, then the first
+// outputted bit calls the readcb, and subsequent chunks just go into
+// the read buffer, and will cause it to emit 'readable' if necessary.
+//
+// This way, back-pressure is actually determined by the reading side,
+// since _read has to be called to start processing a new chunk.  However,
+// a pathological inflate type of transform can cause excessive buffering
+// here.  For example, imagine a stream where every byte of input is
+// interpreted as an integer from 0-255, and then results in that many
+// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
+// 1kb of data being output.  In this case, you could write a very small
+// amount of input, and end up with a very large amount of output.  In
+// such a pathological inflating mechanism, there'd be no way to tell
+// the system to stop doing the transform.  A single 4MB write could
+// cause the system to run out of memory.
+//
+// However, even in such a pathological case, only a single written chunk
+// would be consumed, and then the rest would wait (un-transformed) until
+// the results of the previous transformed chunk were consumed.
+
+'use strict';
+
+module.exports = Transform;
+
+var Duplex = require('./_stream_duplex');
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+util.inherits(Transform, Duplex);
+
+function TransformState(stream) {
+  this.afterTransform = function (er, data) {
+    return afterTransform(stream, er, data);
+  };
+
+  this.needTransform = false;
+  this.transforming = false;
+  this.writecb = null;
+  this.writechunk = null;
+  this.writeencoding = null;
+}
+
+function afterTransform(stream, er, data) {
+  var ts = stream._transformState;
+  ts.transforming = false;
+
+  var cb = ts.writecb;
+
+  if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
+
+  ts.writechunk = null;
+  ts.writecb = null;
+
+  if (data !== null && data !== undefined) stream.push(data);
+
+  cb(er);
+
+  var rs = stream._readableState;
+  rs.reading = false;
+  if (rs.needReadable || rs.length < rs.highWaterMark) {
+    stream._read(rs.highWaterMark);
+  }
+}
+
+function Transform(options) {
+  if (!(this instanceof Transform)) return new Transform(options);
+
+  Duplex.call(this, options);
+
+  this._transformState = new TransformState(this);
+
+  var stream = this;
+
+  // start out asking for a readable event once data is transformed.
+  this._readableState.needReadable = true;
+
+  // we have implemented the _read method, and done the other things
+  // that Readable wants before the first _read call, so unset the
+  // sync guard flag.
+  this._readableState.sync = false;
+
+  if (options) {
+    if (typeof options.transform === 'function') this._transform = options.transform;
+
+    if (typeof options.flush === 'function') this._flush = options.flush;
+  }
+
+  // When the writable side finishes, then flush out anything remaining.
+  this.once('prefinish', function () {
+    if (typeof this._flush === 'function') this._flush(function (er, data) {
+      done(stream, er, data);
+    });else done(stream);
+  });
+}
+
+Transform.prototype.push = function (chunk, encoding) {
+  this._transformState.needTransform = false;
+  return Duplex.prototype.push.call(this, chunk, encoding);
+};
+
+// This is the part where you do stuff!
+// override this function in implementation classes.
+// 'chunk' is an input chunk.
+//
+// Call `push(newChunk)` to pass along transformed output
+// to the readable side.  You may call 'push' zero or more times.
+//
+// Call `cb(err)` when you are done with this chunk.  If you pass
+// an error, then that'll put the hurt on the whole operation.  If you
+// never call cb(), then you'll never get another chunk.
+Transform.prototype._transform = function (chunk, encoding, cb) {
+  throw new Error('_transform() is not implemented');
+};
+
+Transform.prototype._write = function (chunk, encoding, cb) {
+  var ts = this._transformState;
+  ts.writecb = cb;
+  ts.writechunk = chunk;
+  ts.writeencoding = encoding;
+  if (!ts.transforming) {
+    var rs = this._readableState;
+    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
+  }
+};
+
+// Doesn't matter what the args are here.
+// _transform does all the work.
+// That we got here means that the readable side wants more data.
+Transform.prototype._read = function (n) {
+  var ts = this._transformState;
+
+  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
+    ts.transforming = true;
+    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+  } else {
+    // mark that we need a transform, so that any data that comes in
+    // will get processed, now that we've asked for it.
+    ts.needTransform = true;
+  }
+};
+
+function done(stream, er, data) {
+  if (er) return stream.emit('error', er);
+
+  if (data !== null && data !== undefined) stream.push(data);
+
+  // if there's nothing in the write buffer, then that means
+  // that nothing more will ever be provided
+  var ws = stream._writableState;
+  var ts = stream._transformState;
+
+  if (ws.length) throw new Error('Calling transform done when ws.length != 0');
+
+  if (ts.transforming) throw new Error('Calling transform done when still transforming');
+
+  return stream.push(null);
+}
+},{"./_stream_duplex":21,"core-util-is":5,"inherits":15}],25:[function(require,module,exports){
+(function (process){
+// A bit simpler than readable streams.
+// Implement an async ._write(chunk, encoding, cb), and it'll handle all
+// the drain event emission and buffering.
+
+'use strict';
+
+module.exports = Writable;
+
+/*<replacement>*/
+var processNextTick = require('process-nextick-args');
+/*</replacement>*/
+
+/*<replacement>*/
+var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
+/*</replacement>*/
+
+/*<replacement>*/
+var Duplex;
+/*</replacement>*/
+
+Writable.WritableState = WritableState;
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+/*<replacement>*/
+var internalUtil = {
+  deprecate: require('util-deprecate')
+};
+/*</replacement>*/
+
+/*<replacement>*/
+var Stream;
+(function () {
+  try {
+    Stream = require('st' + 'ream');
+  } catch (_) {} finally {
+    if (!Stream) Stream = require('events').EventEmitter;
+  }
+})();
+/*</replacement>*/
+
+var Buffer = require('buffer').Buffer;
+/*<replacement>*/
+var bufferShim = require('buffer-shims');
+/*</replacement>*/
+
+util.inherits(Writable, Stream);
+
+function nop() {}
+
+function WriteReq(chunk, encoding, cb) {
+  this.chunk = chunk;
+  this.encoding = encoding;
+  this.callback = cb;
+  this.next = null;
+}
+
+function WritableState(options, stream) {
+  Duplex = Duplex || require('./_stream_duplex');
+
+  options = options || {};
+
+  // object stream flag to indicate whether or not this stream
+  // contains buffers or objects.
+  this.objectMode = !!options.objectMode;
+
+  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+  // the point at which write() starts returning false
+  // Note: 0 is a valid value, means that we always return false if
+  // the entire buffer is not flushed immediately on write()
+  var hwm = options.highWaterMark;
+  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
+  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
+
+  // cast to ints.
+  this.highWaterMark = ~ ~this.highWaterMark;
+
+  // drain event flag.
+  this.needDrain = false;
+  // at the start of calling end()
+  this.ending = false;
+  // when end() has been called, and returned
+  this.ended = false;
+  // when 'finish' is emitted
+  this.finished = false;
+
+  // should we decode strings into buffers before passing to _write?
+  // this is here so that some node-core streams can optimize string
+  // handling at a lower level.
+  var noDecode = options.decodeStrings === false;
+  this.decodeStrings = !noDecode;
+
+  // Crypto is kind of old and crusty.  Historically, its default string
+  // encoding is 'binary' so we have to make this configurable.
+  // Everything else in the universe uses 'utf8', though.
+  this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+  // not an actual buffer we keep track of, but a measurement
+  // of how much we're waiting to get pushed to some underlying
+  // socket or file.
+  this.length = 0;
+
+  // a flag to see when we're in the middle of a write.
+  this.writing = false;
+
+  // when true all writes will be buffered until .uncork() call
+  this.corked = 0;
+
+  // a flag to be able to tell if the onwrite cb is called immediately,
+  // or on a later tick.  We set this to true at first, because any
+  // actions that shouldn't happen until "later" should generally also
+  // not happen before the first write call.
+  this.sync = true;
+
+  // a flag to know if we're processing previously buffered items, which
+  // may call the _write() callback in the same tick, so that we don't
+  // end up in an overlapped onwrite situation.
+  this.bufferProcessing = false;
+
+  // the callback that's passed to _write(chunk,cb)
+  this.onwrite = function (er) {
+    onwrite(stream, er);
+  };
+
+  // the callback that the user supplies to write(chunk,encoding,cb)
+  this.writecb = null;
+
+  // the amount that is being written when _write is called.
+  this.writelen = 0;
+
+  this.bufferedRequest = null;
+  this.lastBufferedRequest = null;
+
+  // number of pending user-supplied write callbacks
+  // this must be 0 before 'finish' can be emitted
+  this.pendingcb = 0;
+
+  // emit prefinish if the only thing we're waiting for is _write cbs
+  // This is relevant for synchronous Transform streams
+  this.prefinished = false;
+
+  // True if the error was already emitted and should not be thrown again
+  this.errorEmitted = false;
+
+  // count buffered requests
+  this.bufferedRequestCount = 0;
+
+  // allocate the first CorkedRequest, there is always
+  // one allocated and free to use, and we maintain at most two
+  this.corkedRequestsFree = new CorkedRequest(this);
+}
+
+WritableState.prototype.getBuffer = function getBuffer() {
+  var current = this.bufferedRequest;
+  var out = [];
+  while (current) {
+    out.push(current);
+    current = current.next;
+  }
+  return out;
+};
+
+(function () {
+  try {
+    Object.defineProperty(WritableState.prototype, 'buffer', {
+      get: internalUtil.deprecate(function () {
+        return this.getBuffer();
+      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
+    });
+  } catch (_) {}
+})();
+
+// Test _writableState for inheritance to account for Duplex streams,
+// whose prototype chain only points to Readable.
+var realHasInstance;
+if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
+  realHasInstance = Function.prototype[Symbol.hasInstance];
+  Object.defineProperty(Writable, Symbol.hasInstance, {
+    value: function (object) {
+      if (realHasInstance.call(this, object)) return true;
+
+      return object && object._writableState instanceof WritableState;
+    }
+  });
+} else {
+  realHasInstance = function (object) {
+    return object instanceof this;
+  };
+}
+
+function Writable(options) {
+  Duplex = Duplex || require('./_stream_duplex');
+
+  // Writable ctor is applied to Duplexes, too.
+  // `realHasInstance` is necessary because using plain `instanceof`
+  // would return false, as no `_writableState` property is attached.
+
+  // Trying to use the custom `instanceof` for Writable here will also break the
+  // Node.js LazyTransform implementation, which has a non-trivial getter for
+  // `_writableState` that would lead to infinite recursion.
+  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
+    return new Writable(options);
+  }
+
+  this._writableState = new WritableState(options, this);
+
+  // legacy.
+  this.writable = true;
+
+  if (options) {
+    if (typeof options.write === 'function') this._write = options.write;
+
+    if (typeof options.writev === 'function') this._writev = options.writev;
+  }
+
+  Stream.call(this);
+}
+
+// Otherwise people can pipe Writable streams, which is just wrong.
+Writable.prototype.pipe = function () {
+  this.emit('error', new Error('Cannot pipe, not readable'));
+};
+
+function writeAfterEnd(stream, cb) {
+  var er = new Error('write after end');
+  // TODO: defer error events consistently everywhere, not just the cb
+  stream.emit('error', er);
+  processNextTick(cb, er);
+}
+
+// If we get something that is not a buffer, string, null, or undefined,
+// and we're not in objectMode, then that's an error.
+// Otherwise stream chunks are all considered to be of length=1, and the
+// watermarks determine how many objects to keep in the buffer, rather than
+// how many bytes or characters.
+function validChunk(stream, state, chunk, cb) {
+  var valid = true;
+  var er = false;
+  // Always throw error if a null is written
+  // if we are not in object mode then throw
+  // if it is not a buffer, string, or undefined.
+  if (chunk === null) {
+    er = new TypeError('May not write null values to stream');
+  } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
+    er = new TypeError('Invalid non-string/buffer chunk');
+  }
+  if (er) {
+    stream.emit('error', er);
+    processNextTick(cb, er);
+    valid = false;
+  }
+  return valid;
+}
+
+Writable.prototype.write = function (chunk, encoding, cb) {
+  var state = this._writableState;
+  var ret = false;
+
+  if (typeof encoding === 'function') {
+    cb = encoding;
+    encoding = null;
+  }
+
+  if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
+
+  if (typeof cb !== 'function') cb = nop;
+
+  if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
+    state.pendingcb++;
+    ret = writeOrBuffer(this, state, chunk, encoding, cb);
+  }
+
+  return ret;
+};
+
+Writable.prototype.cork = function () {
+  var state = this._writableState;
+
+  state.corked++;
+};
+
+Writable.prototype.uncork = function () {
+  var state = this._writableState;
+
+  if (state.corked) {
+    state.corked--;
+
+    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
+  }
+};
+
+Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
+  // node::ParseEncoding() requires lower case.
+  if (typeof encoding === 'string') encoding = encoding.toLowerCase();
+  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
+  this._writableState.defaultEncoding = encoding;
+  return this;
+};
+
+function decodeChunk(state, chunk, encoding) {
+  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
+    chunk = bufferShim.from(chunk, encoding);
+  }
+  return chunk;
+}
+
+// if we're already writing something, then just put this
+// in the queue, and wait our turn.  Otherwise, call _write
+// If we return false, then we need a drain event, so set that flag.
+function writeOrBuffer(stream, state, chunk, encoding, cb) {
+  chunk = decodeChunk(state, chunk, encoding);
+
+  if (Buffer.isBuffer(chunk)) encoding = 'buffer';
+  var len = state.objectMode ? 1 : chunk.length;
+
+  state.length += len;
+
+  var ret = state.length < state.highWaterMark;
+  // we must ensure that previous needDrain will not be reset to false.
+  if (!ret) state.needDrain = true;
+
+  if (state.writing || state.corked) {
+    var last = state.lastBufferedRequest;
+    state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
+    if (last) {
+      last.next = state.lastBufferedRequest;
+    } else {
+      state.bufferedRequest = state.lastBufferedRequest;
+    }
+    state.bufferedRequestCount += 1;
+  } else {
+    doWrite(stream, state, false, len, chunk, encoding, cb);
+  }
+
+  return ret;
+}
+
+function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+  state.writelen = len;
+  state.writecb = cb;
+  state.writing = true;
+  state.sync = true;
+  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
+  state.sync = false;
+}
+
+function onwriteError(stream, state, sync, er, cb) {
+  --state.pendingcb;
+  if (sync) processNextTick(cb, er);else cb(er);
+
+  stream._writableState.errorEmitted = true;
+  stream.emit('error', er);
+}
+
+function onwriteStateUpdate(state) {
+  state.writing = false;
+  state.writecb = null;
+  state.length -= state.writelen;
+  state.writelen = 0;
+}
+
+function onwrite(stream, er) {
+  var state = stream._writableState;
+  var sync = state.sync;
+  var cb = state.writecb;
+
+  onwriteStateUpdate(state);
+
+  if (er) onwriteError(stream, state, sync, er, cb);else {
+    // Check if we're actually ready to finish, but don't emit yet
+    var finished = needFinish(state);
+
+    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
+      clearBuffer(stream, state);
+    }
+
+    if (sync) {
+      /*<replacement>*/
+      asyncWrite(afterWrite, stream, state, finished, cb);
+      /*</replacement>*/
+    } else {
+        afterWrite(stream, state, finished, cb);
+      }
+  }
+}
+
+function afterWrite(stream, state, finished, cb) {
+  if (!finished) onwriteDrain(stream, state);
+  state.pendingcb--;
+  cb();
+  finishMaybe(stream, state);
+}
+
+// Must force callback to be called on nextTick, so that we don't
+// emit 'drain' before the write() consumer gets the 'false' return
+// value, and has a chance to attach a 'drain' listener.
+function onwriteDrain(stream, state) {
+  if (state.length === 0 && state.needDrain) {
+    state.needDrain = false;
+    stream.emit('drain');
+  }
+}
+
+// if there's something in the buffer waiting, then process it
+function clearBuffer(stream, state) {
+  state.bufferProcessing = true;
+  var entry = state.bufferedRequest;
+
+  if (stream._writev && entry && entry.next) {
+    // Fast case, write everything using _writev()
+    var l = state.bufferedRequestCount;
+    var buffer = new Array(l);
+    var holder = state.corkedRequestsFree;
+    holder.entry = entry;
+
+    var count = 0;
+    while (entry) {
+      buffer[count] = entry;
+      entry = entry.next;
+      count += 1;
+    }
+
+    doWrite(stream, state, true, state.length, buffer, '', holder.finish);
+
+    // doWrite is almost always async, defer these to save a bit of time
+    // as the hot path ends with doWrite
+    state.pendingcb++;
+    state.lastBufferedRequest = null;
+    if (holder.next) {
+      state.corkedRequestsFree = holder.next;
+      holder.next = null;
+    } else {
+      state.corkedRequestsFree = new CorkedRequest(state);
+    }
+  } else {
+    // Slow case, write chunks one-by-one
+    while (entry) {
+      var chunk = entry.chunk;
+      var encoding = entry.encoding;
+      var cb = entry.callback;
+      var len = state.objectMode ? 1 : chunk.length;
+
+      doWrite(stream, state, false, len, chunk, encoding, cb);
+      entry = entry.next;
+      // if we didn't call the onwrite immediately, then
+      // it means that we need to wait until it does.
+      // also, that means that the chunk and cb are currently
+      // being processed, so move the buffer counter past them.
+      if (state.writing) {
+        break;
+      }
+    }
+
+    if (entry === null) state.lastBufferedRequest = null;
+  }
+
+  state.bufferedRequestCount = 0;
+  state.bufferedRequest = entry;
+  state.bufferProcessing = false;
+}
+
+Writable.prototype._write = function (chunk, encoding, cb) {
+  cb(new Error('_write() is not implemented'));
+};
+
+Writable.prototype._writev = null;
+
+Writable.prototype.end = function (chunk, encoding, cb) {
+  var state = this._writableState;
+
+  if (typeof chunk === 'function') {
+    cb = chunk;
+    chunk = null;
+    encoding = null;
+  } else if (typeof encoding === 'function') {
+    cb = encoding;
+    encoding = null;
+  }
+
+  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
+
+  // .end() fully uncorks
+  if (state.corked) {
+    state.corked = 1;
+    this.uncork();
+  }
+
+  // ignore unnecessary end() calls.
+  if (!state.ending && !state.finished) endWritable(this, state, cb);
+};
+
+function needFinish(state) {
+  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
+}
+
+function prefinish(stream, state) {
+  if (!state.prefinished) {
+    state.prefinished = true;
+    stream.emit('prefinish');
+  }
+}
+
+function finishMaybe(stream, state) {
+  var need = needFinish(state);
+  if (need) {
+    if (state.pendingcb === 0) {
+      prefinish(stream, state);
+      state.finished = true;
+      stream.emit('finish');
+    } else {
+      prefinish(stream, state);
+    }
+  }
+  return need;
+}
+
+function endWritable(stream, state, cb) {
+  state.ending = true;
+  finishMaybe(stream, state);
+  if (cb) {
+    if (state.finished) processNextTick(cb);else stream.once('finish', cb);
+  }
+  state.ended = true;
+  stream.writable = false;
+}
+
+// It seems a linked list but it is not
+// there will be only 2 of these for each stream
+function CorkedRequest(state) {
+  var _this = this;
+
+  this.next = null;
+  this.entry = null;
+
+  this.finish = function (err) {
+    var entry = _this.entry;
+    _this.entry = null;
+    while (entry) {
+      var cb = entry.callback;
+      state.pendingcb--;
+      cb(err);
+      entry = entry.next;
+    }
+    if (state.corkedRequestsFree) {
+      state.corkedRequestsFree.next = _this;
+    } else {
+      state.corkedRequestsFree = _this;
+    }
+  };
+}
+}).call(this,require('_process'))
+},{"./_stream_duplex":21,"_process":19,"buffer":4,"buffer-shims":3,"core-util-is":5,"events":8,"inherits":15,"process-nextick-args":18,"util-deprecate":33}],26:[function(require,module,exports){
+'use strict';
+
+var Buffer = require('buffer').Buffer;
+/*<replacement>*/
+var bufferShim = require('buffer-shims');
+/*</replacement>*/
+
+module.exports = BufferList;
+
+function BufferList() {
+  this.head = null;
+  this.tail = null;
+  this.length = 0;
+}
+
+BufferList.prototype.push = function (v) {
+  var entry = { data: v, next: null };
+  if (this.length > 0) this.tail.next = entry;else this.head = entry;
+  this.tail = entry;
+  ++this.length;
+};
+
+BufferList.prototype.unshift = function (v) {
+  var entry = { data: v, next: this.head };
+  if (this.length === 0) this.tail = entry;
+  this.head = entry;
+  ++this.length;
+};
+
+BufferList.prototype.shift = function () {
+  if (this.length === 0) return;
+  var ret = this.head.data;
+  if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
+  --this.length;
+  return ret;
+};
+
+BufferList.prototype.clear = function () {
+  this.head = this.tail = null;
+  this.length = 0;
+};
+
+BufferList.prototype.join = function (s) {
+  if (this.length === 0) return '';
+  var p = this.head;
+  var ret = '' + p.data;
+  while (p = p.next) {
+    ret += s + p.data;
+  }return ret;
+};
+
+BufferList.prototype.concat = function (n) {
+  if (this.length === 0) return bufferShim.alloc(0);
+  if (this.length === 1) return this.head.data;
+  var ret = bufferShim.allocUnsafe(n >>> 0);
+  var p = this.head;
+  var i = 0;
+  while (p) {
+    p.data.copy(ret, i);
+    i += p.data.length;
+    p = p.next;
+  }
+  return ret;
+};
+},{"buffer":4,"buffer-shims":3}],27:[function(require,module,exports){
+module.exports = require("./lib/_stream_passthrough.js")
+
+},{"./lib/_stream_passthrough.js":22}],28:[function(require,module,exports){
+(function (process){
+var Stream = (function (){
+  try {
+    return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
+  } catch(_){}
+}());
+exports = module.exports = require('./lib/_stream_readable.js');
+exports.Stream = Stream || exports;
+exports.Readable = exports;
+exports.Writable = require('./lib/_stream_writable.js');
+exports.Duplex = require('./lib/_stream_duplex.js');
+exports.Transform = require('./lib/_stream_transform.js');
+exports.PassThrough = require('./lib/_stream_passthrough.js');
+
+if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
+  module.exports = Stream;
+}
+
+}).call(this,require('_process'))
+},{"./lib/_stream_duplex.js":21,"./lib/_stream_passthrough.js":22,"./lib/_stream_readable.js":23,"./lib/_stream_transform.js":24,"./lib/_stream_writable.js":25,"_process":19}],29:[function(require,module,exports){
+module.exports = require("./lib/_stream_transform.js")
+
+},{"./lib/_stream_transform.js":24}],30:[function(require,module,exports){
+module.exports = require("./lib/_stream_writable.js")
+
+},{"./lib/_stream_writable.js":25}],31:[function(require,module,exports){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+module.exports = Stream;
+
+var EE = require('events').EventEmitter;
+var inherits = require('inherits');
+
+inherits(Stream, EE);
+Stream.Readable = require('readable-stream/readable.js');
+Stream.Writable = require('readable-stream/writable.js');
+Stream.Duplex = require('readable-stream/duplex.js');
+Stream.Transform = require('readable-stream/transform.js');
+Stream.PassThrough = require('readable-stream/passthrough.js');
+
+// Backwards-compat with node 0.4.x
+Stream.Stream = Stream;
+
+
+
+// old-style streams.  Note that the pipe method (the only relevant
+// part of this class) is overridden in the Readable class.
+
+function Stream() {
+  EE.call(this);
+}
+
+Stream.prototype.pipe = function(dest, options) {
+  var source = this;
+
+  function ondata(chunk) {
+    if (dest.writable) {
+      if (false === dest.write(chunk) && source.pause) {
+        source.pause();
+      }
+    }
+  }
+
+  source.on('data', ondata);
+
+  function ondrain() {
+    if (source.readable && source.resume) {
+      source.resume();
+    }
+  }
+
+  dest.on('drain', ondrain);
+
+  // If the 'end' option is not supplied, dest.end() will be called when
+  // source gets the 'end' or 'close' events.  Only dest.end() once.
+  if (!dest._isStdio && (!options || options.end !== false)) {
+    source.on('end', onend);
+    source.on('close', onclose);
+  }
+
+  var didOnEnd = false;
+  function onend() {
+    if (didOnEnd) return;
+    didOnEnd = true;
+
+    dest.end();
+  }
+
+
+  function onclose() {
+    if (didOnEnd) return;
+    didOnEnd = true;
+
+    if (typeof dest.destroy === 'function') dest.destroy();
+  }
+
+  // don't leave dangling pipes when there are errors.
+  function onerror(er) {
+    cleanup();
+    if (EE.listenerCount(this, 'error') === 0) {
+      throw er; // Unhandled stream error in pipe.
+    }
+  }
+
+  source.on('error', onerror);
+  dest.on('error', onerror);
+
+  // remove all the event listeners that were added.
+  function cleanup() {
+    source.removeListener('data', ondata);
+    dest.removeListener('drain', ondrain);
+
+    source.removeListener('end', onend);
+    source.removeListener('close', onclose);
+
+    source.removeListener('error', onerror);
+    dest.removeListener('error', onerror);
+
+    source.removeListener('end', cleanup);
+    source.removeListener('close', cleanup);
+
+    dest.removeListener('close', cleanup);
+  }
+
+  source.on('end', cleanup);
+  source.on('close', cleanup);
+
+  dest.on('close', cleanup);
+
+  dest.emit('pipe', source);
+
+  // Allow for unix-like usage: A.pipe(B).pipe(C)
+  return dest;
+};
+
+},{"events":8,"inherits":15,"readable-stream/duplex.js":20,"readable-stream/passthrough.js":27,"readable-stream/readable.js":28,"readable-stream/transform.js":29,"readable-stream/writable.js":30}],32:[function(require,module,exports){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+var Buffer = require('buffer').Buffer;
+
+var isBufferEncoding = Buffer.isEncoding
+  || function(encoding) {
+       switch (encoding && encoding.toLowerCase()) {
+         case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
+         default: return false;
+       }
+     }
+
+
+function assertEncoding(encoding) {
+  if (encoding && !isBufferEncoding(encoding)) {
+    throw new Error('Unknown encoding: ' + encoding);
+  }
+}
+
+// StringDecoder provides an interface for efficiently splitting a series of
+// buffers into a series of JS strings without breaking apart multi-byte
+// characters. CESU-8 is handled as part of the UTF-8 encoding.
+//
+// @TODO Handling all encodings inside a single object makes it very difficult
+// to reason about this code, so it should be split up in the future.
+// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
+// points as used by CESU-8.
+var StringDecoder = exports.StringDecoder = function(encoding) {
+  this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
+  assertEncoding(encoding);
+  switch (this.encoding) {
+    case 'utf8':
+      // CESU-8 represents each of Surrogate Pair by 3-bytes
+      this.surrogateSize = 3;
+      break;
+    case 'ucs2':
+    case 'utf16le':
+      // UTF-16 represents each of Surrogate Pair by 2-bytes
+      this.surrogateSize = 2;
+      this.detectIncompleteChar = utf16DetectIncompleteChar;
+      break;
+    case 'base64':
+      // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
+      this.surrogateSize = 3;
+      this.detectIncompleteChar = base64DetectIncompleteChar;
+      break;
+    default:
+      this.write = passThroughWrite;
+      return;
+  }
+
+  // Enough space to store all bytes of a single character. UTF-8 needs 4
+  // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
+  this.charBuffer = new Buffer(6);
+  // Number of bytes received for the current incomplete multi-byte character.
+  this.charReceived = 0;
+  // Number of bytes expected for the current incomplete multi-byte character.
+  this.charLength = 0;
+};
+
+
+// write decodes the given buffer and returns it as JS string that is
+// guaranteed to not contain any partial multi-byte characters. Any partial
+// character found at the end of the buffer is buffered up, and will be
+// returned when calling write again with the remaining bytes.
+//
+// Note: Converting a Buffer containing an orphan surrogate to a String
+// currently works, but converting a String to a Buffer (via `new Buffer`, or
+// Buffer#write) will replace incomplete surrogates with the unicode
+// replacement character. See https://codereview.chromium.org/121173009/ .
+StringDecoder.prototype.write = function(buffer) {
+  var charStr = '';
+  // if our last write ended with an incomplete multibyte character
+  while (this.charLength) {
+    // determine how many remaining bytes this buffer has to offer for this char
+    var available = (buffer.length >= this.charLength - this.charReceived) ?
+        this.charLength - this.charReceived :
+        buffer.length;
+
+    // add the new bytes to the char buffer
+    buffer.copy(this.charBuffer, this.charReceived, 0, available);
+    this.charReceived += available;
+
+    if (this.charReceived < this.charLength) {
+      // still not enough chars in this buffer? wait for more ...
+      return '';
+    }
+
+    // remove bytes belonging to the current character from the buffer
+    buffer = buffer.slice(available, buffer.length);
+
+    // get the character that was split
+    charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
+
+    // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
+    var charCode = charStr.charCodeAt(charStr.length - 1);
+    if (charCode >= 0xD800 && charCode <= 0xDBFF) {
+      this.charLength += this.surrogateSize;
+      charStr = '';
+      continue;
+    }
+    this.charReceived = this.charLength = 0;
+
+    // if there are no more bytes in this buffer, just emit our char
+    if (buffer.length === 0) {
+      return charStr;
+    }
+    break;
+  }
+
+  // determine and set charLength / charReceived
+  this.detectIncompleteChar(buffer);
+
+  var end = buffer.length;
+  if (this.charLength) {
+    // buffer the incomplete character bytes we got
+    buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
+    end -= this.charReceived;
+  }
+
+  charStr += buffer.toString(this.encoding, 0, end);
+
+  var end = charStr.length - 1;
+  var charCode = charStr.charCodeAt(end);
+  // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
+  if (charCode >= 0xD800 && charCode <= 0xDBFF) {
+    var size = this.surrogateSize;
+    this.charLength += size;
+    this.charReceived += size;
+    this.charBuffer.copy(this.charBuffer, size, 0, size);
+    buffer.copy(this.charBuffer, 0, 0, size);
+    return charStr.substring(0, end);
+  }
+
+  // or just emit the charStr
+  return charStr;
+};
+
+// detectIncompleteChar determines if there is an incomplete UTF-8 character at
+// the end of the given buffer. If so, it sets this.charLength to the byte
+// length that character, and sets this.charReceived to the number of bytes
+// that are available for this character.
+StringDecoder.prototype.detectIncompleteChar = function(buffer) {
+  // determine how many bytes we have to check at the end of this buffer
+  var i = (buffer.length >= 3) ? 3 : buffer.length;
+
+  // Figure out if one of the last i bytes of our buffer announces an
+  // incomplete char.
+  for (; i > 0; i--) {
+    var c = buffer[buffer.length - i];
+
+    // See http://en.wikipedia.org/wiki/UTF-8#Description
+
+    // 110XXXXX
+    if (i == 1 && c >> 5 == 0x06) {
+      this.charLength = 2;
+      break;
+    }
+
+    // 1110XXXX
+    if (i <= 2 && c >> 4 == 0x0E) {
+      this.charLength = 3;
+      break;
+    }
+
+    // 11110XXX
+    if (i <= 3 && c >> 3 == 0x1E) {
+      this.charLength = 4;
+      break;
+    }
+  }
+  this.charReceived = i;
+};
+
+StringDecoder.prototype.end = function(buffer) {
+  var res = '';
+  if (buffer && buffer.length)
+    res = this.write(buffer);
+
+  if (this.charReceived) {
+    var cr = this.charReceived;
+    var buf = this.charBuffer;
+    var enc = this.encoding;
+    res += buf.slice(0, cr).toString(enc);
+  }
+
+  return res;
+};
+
+function passThroughWrite(buffer) {
+  return buffer.toString(this.encoding);
+}
+
+function utf16DetectIncompleteChar(buffer) {
+  this.charReceived = buffer.length % 2;
+  this.charLength = this.charReceived ? 2 : 0;
+}
+
+function base64DetectIncompleteChar(buffer) {
+  this.charReceived = buffer.length % 3;
+  this.charLength = this.charReceived ? 3 : 0;
+}
+
+},{"buffer":4}],33:[function(require,module,exports){
+(function (global){
+
+/**
+ * Module exports.
+ */
+
+module.exports = deprecate;
+
+/**
+ * Mark that a method should not be used.
+ * Returns a modified function which warns once by default.
+ *
+ * If `localStorage.noDeprecation = true` is set, then it is a no-op.
+ *
+ * If `localStorage.throwDeprecation = true` is set, then deprecated functions
+ * will throw an Error when invoked.
+ *
+ * If `localStorage.traceDeprecation = true` is set, then deprecated functions
+ * will invoke `console.trace()` instead of `console.error()`.
+ *
+ * @param {Function} fn - the function to deprecate
+ * @param {String} msg - the string to print to the console when `fn` is invoked
+ * @returns {Function} a new "deprecated" version of `fn`
+ * @api public
+ */
+
+function deprecate (fn, msg) {
+  if (config('noDeprecation')) {
+    return fn;
+  }
+
+  var warned = false;
+  function deprecated() {
+    if (!warned) {
+      if (config('throwDeprecation')) {
+        throw new Error(msg);
+      } else if (config('traceDeprecation')) {
+        console.trace(msg);
+      } else {
+        console.warn(msg);
+      }
+      warned = true;
+    }
+    return fn.apply(this, arguments);
+  }
+
+  return deprecated;
+}
+
+/**
+ * Checks `localStorage` for boolean values for the given `name`.
+ *
+ * @param {String} name
+ * @returns {Boolean}
+ * @api private
+ */
+
+function config (name) {
+  // accessing global.localStorage can trigger a DOMException in sandboxed iframes
+  try {
+    if (!global.localStorage) return false;
+  } catch (_) {
+    return false;
+  }
+  var val = global.localStorage[name];
+  if (null == val) return false;
+  return String(val).toLowerCase() === 'true';
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],34:[function(require,module,exports){
+arguments[4][15][0].apply(exports,arguments)
+},{"dup":15}],35:[function(require,module,exports){
+module.exports = function isBuffer(arg) {
+  return arg && typeof arg === 'object'
+    && typeof arg.copy === 'function'
+    && typeof arg.fill === 'function'
+    && typeof arg.readUInt8 === 'function';
+}
+},{}],36:[function(require,module,exports){
+(function (process,global){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+var formatRegExp = /%[sdj%]/g;
+exports.format = function(f) {
+  if (!isString(f)) {
+    var objects = [];
+    for (var i = 0; i < arguments.length; i++) {
+      objects.push(inspect(arguments[i]));
+    }
+    return objects.join(' ');
+  }
+
+  var i = 1;
+  var args = arguments;
+  var len = args.length;
+  var str = String(f).replace(formatRegExp, function(x) {
+    if (x === '%%') return '%';
+    if (i >= len) return x;
+    switch (x) {
+      case '%s': return String(args[i++]);
+      case '%d': return Number(args[i++]);
+      case '%j':
+        try {
+          return JSON.stringify(args[i++]);
+        } catch (_) {
+          return '[Circular]';
+        }
+      default:
+        return x;
+    }
+  });
+  for (var x = args[i]; i < len; x = args[++i]) {
+    if (isNull(x) || !isObject(x)) {
+      str += ' ' + x;
+    } else {
+      str += ' ' + inspect(x);
+    }
+  }
+  return str;
+};
+
+
+// Mark that a method should not be used.
+// Returns a modified function which warns once by default.
+// If --no-deprecation is set, then it is a no-op.
+exports.deprecate = function(fn, msg) {
+  // Allow for deprecating things in the process of starting up.
+  if (isUndefined(global.process)) {
+    return function() {
+      return exports.deprecate(fn, msg).apply(this, arguments);
+    };
+  }
+
+  if (process.noDeprecation === true) {
+    return fn;
+  }
+
+  var warned = false;
+  function deprecated() {
+    if (!warned) {
+      if (process.throwDeprecation) {
+        throw new Error(msg);
+      } else if (process.traceDeprecation) {
+        console.trace(msg);
+      } else {
+        console.error(msg);
+      }
+      warned = true;
+    }
+    return fn.apply(this, arguments);
+  }
+
+  return deprecated;
+};
+
+
+var debugs = {};
+var debugEnviron;
+exports.debuglog = function(set) {
+  if (isUndefined(debugEnviron))
+    debugEnviron = process.env.NODE_DEBUG || '';
+  set = set.toUpperCase();
+  if (!debugs[set]) {
+    if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
+      var pid = process.pid;
+      debugs[set] = function() {
+        var msg = exports.format.apply(exports, arguments);
+        console.error('%s %d: %s', set, pid, msg);
+      };
+    } else {
+      debugs[set] = function() {};
+    }
+  }
+  return debugs[set];
+};
+
+
+/**
+ * Echos the value of a value. Trys to print the value out
+ * in the best way possible given the different types.
+ *
+ * @param {Object} obj The object to print out.
+ * @param {Object} opts Optional options object that alters the output.
+ */
+/* legacy: obj, showHidden, depth, colors*/
+function inspect(obj, opts) {
+  // default options
+  var ctx = {
+    seen: [],
+    stylize: stylizeNoColor
+  };
+  // legacy...
+  if (arguments.length >= 3) ctx.depth = arguments[2];
+  if (arguments.length >= 4) ctx.colors = arguments[3];
+  if (isBoolean(opts)) {
+    // legacy...
+    ctx.showHidden = opts;
+  } else if (opts) {
+    // got an "options" object
+    exports._extend(ctx, opts);
+  }
+  // set default options
+  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
+  if (isUndefined(ctx.depth)) ctx.depth = 2;
+  if (isUndefined(ctx.colors)) ctx.colors = false;
+  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
+  if (ctx.colors) ctx.stylize = stylizeWithColor;
+  return formatValue(ctx, obj, ctx.depth);
+}
+exports.inspect = inspect;
+
+
+// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
+inspect.colors = {
+  'bold' : [1, 22],
+  'italic' : [3, 23],
+  'underline' : [4, 24],
+  'inverse' : [7, 27],
+  'white' : [37, 39],
+  'grey' : [90, 39],
+  'black' : [30, 39],
+  'blue' : [34, 39],
+  'cyan' : [36, 39],
+  'green' : [32, 39],
+  'magenta' : [35, 39],
+  'red' : [31, 39],
+  'yellow' : [33, 39]
+};
+
+// Don't use 'blue' not visible on cmd.exe
+inspect.styles = {
+  'special': 'cyan',
+  'number': 'yellow',
+  'boolean': 'yellow',
+  'undefined': 'grey',
+  'null': 'bold',
+  'string': 'green',
+  'date': 'magenta',
+  // "name": intentionally not styling
+  'regexp': 'red'
+};
+
+
+function stylizeWithColor(str, styleType) {
+  var style = inspect.styles[styleType];
+
+  if (style) {
+    return '\u001b[' + inspect.colors[style][0] + 'm' + str +
+           '\u001b[' + inspect.colors[style][1] + 'm';
+  } else {
+    return str;
+  }
+}
+
+
+function stylizeNoColor(str, styleType) {
+  return str;
+}
+
+
+function arrayToHash(array) {
+  var hash = {};
+
+  array.forEach(function(val, idx) {
+    hash[val] = true;
+  });
+
+  return hash;
+}
+
+
+function formatValue(ctx, value, recurseTimes) {
+  // Provide a hook for user-specified inspect functions.
+  // Check that value is an object with an inspect function on it
+  if (ctx.customInspect &&
+      value &&
+      isFunction(value.inspect) &&
+      // Filter out the util module, it's inspect function is special
+      value.inspect !== exports.inspect &&
+      // Also filter out any prototype objects using the circular check.
+      !(value.constructor && value.constructor.prototype === value)) {
+    var ret = value.inspect(recurseTimes, ctx);
+    if (!isString(ret)) {
+      ret = formatValue(ctx, ret, recurseTimes);
+    }
+    return ret;
+  }
+
+  // Primitive types cannot have properties
+  var primitive = formatPrimitive(ctx, value);
+  if (primitive) {
+    return primitive;
+  }
+
+  // Look up the keys of the object.
+  var keys = Object.keys(value);
+  var visibleKeys = arrayToHash(keys);
+
+  if (ctx.showHidden) {
+    keys = Object.getOwnPropertyNames(value);
+  }
+
+  // IE doesn't make error fields non-enumerable
+  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
+  if (isError(value)
+      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
+    return formatError(value);
+  }
+
+  // Some type of object without properties can be shortcutted.
+  if (keys.length === 0) {
+    if (isFunction(value)) {
+      var name = value.name ? ': ' + value.name : '';
+      return ctx.stylize('[Function' + name + ']', 'special');
+    }
+    if (isRegExp(value)) {
+      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+    }
+    if (isDate(value)) {
+      return ctx.stylize(Date.prototype.toString.call(value), 'date');
+    }
+    if (isError(value)) {
+      return formatError(value);
+    }
+  }
+
+  var base = '', array = false, braces = ['{', '}'];
+
+  // Make Array say that they are Array
+  if (isArray(value)) {
+    array = true;
+    braces = ['[', ']'];
+  }
+
+  // Make functions say that they are functions
+  if (isFunction(value)) {
+    var n = value.name ? ': ' + value.name : '';
+    base = ' [Function' + n + ']';
+  }
+
+  // Make RegExps say that they are RegExps
+  if (isRegExp(value)) {
+    base = ' ' + RegExp.prototype.toString.call(value);
+  }
+
+  // Make dates with properties first say the date
+  if (isDate(value)) {
+    base = ' ' + Date.prototype.toUTCString.call(value);
+  }
+
+  // Make error with message first say the error
+  if (isError(value)) {
+    base = ' ' + formatError(value);
+  }
+
+  if (keys.length === 0 && (!array || value.length == 0)) {
+    return braces[0] + base + braces[1];
+  }
+
+  if (recurseTimes < 0) {
+    if (isRegExp(value)) {
+      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+    } else {
+      return ctx.stylize('[Object]', 'special');
+    }
+  }
+
+  ctx.seen.push(value);
+
+  var output;
+  if (array) {
+    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
+  } else {
+    output = keys.map(function(key) {
+      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
+    });
+  }
+
+  ctx.seen.pop();
+
+  return reduceToSingleString(output, base, braces);
+}
+
+
+function formatPrimitive(ctx, value) {
+  if (isUndefined(value))
+    return ctx.stylize('undefined', 'undefined');
+  if (isString(value)) {
+    var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+                                             .replace(/'/g, "\\'")
+                                             .replace(/\\"/g, '"') + '\'';
+    return ctx.stylize(simple, 'string');
+  }
+  if (isNumber(value))
+    return ctx.stylize('' + value, 'number');
+  if (isBoolean(value))
+    return ctx.stylize('' + value, 'boolean');
+  // For some reason typeof null is "object", so special case here.
+  if (isNull(value))
+    return ctx.stylize('null', 'null');
+}
+
+
+function formatError(value) {
+  return '[' + Error.prototype.toString.call(value) + ']';
+}
+
+
+function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
+  var output = [];
+  for (var i = 0, l = value.length; i < l; ++i) {
+    if (hasOwnProperty(value, String(i))) {
+      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+          String(i), true));
+    } else {
+      output.push('');
+    }
+  }
+  keys.forEach(function(key) {
+    if (!key.match(/^\d+$/)) {
+      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+          key, true));
+    }
+  });
+  return output;
+}
+
+
+function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
+  var name, str, desc;
+  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
+  if (desc.get) {
+    if (desc.set) {
+      str = ctx.stylize('[Getter/Setter]', 'special');
+    } else {
+      str = ctx.stylize('[Getter]', 'special');
+    }
+  } else {
+    if (desc.set) {
+      str = ctx.stylize('[Setter]', 'special');
+    }
+  }
+  if (!hasOwnProperty(visibleKeys, key)) {
+    name = '[' + key + ']';
+  }
+  if (!str) {
+    if (ctx.seen.indexOf(desc.value) < 0) {
+      if (isNull(recurseTimes)) {
+        str = formatValue(ctx, desc.value, null);
+      } else {
+        str = formatValue(ctx, desc.value, recurseTimes - 1);
+      }
+      if (str.indexOf('\n') > -1) {
+        if (array) {
+          str = str.split('\n').map(function(line) {
+            return '  ' + line;
+          }).join('\n').substr(2);
+        } else {
+          str = '\n' + str.split('\n').map(function(line) {
+            return '   ' + line;
+          }).join('\n');
+        }
+      }
+    } else {
+      str = ctx.stylize('[Circular]', 'special');
+    }
+  }
+  if (isUndefined(name)) {
+    if (array && key.match(/^\d+$/)) {
+      return str;
+    }
+    name = JSON.stringify('' + key);
+    if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+      name = name.substr(1, name.length - 2);
+      name = ctx.stylize(name, 'name');
+    } else {
+      name = name.replace(/'/g, "\\'")
+                 .replace(/\\"/g, '"')
+                 .replace(/(^"|"$)/g, "'");
+      name = ctx.stylize(name, 'string');
+    }
+  }
+
+  return name + ': ' + str;
+}
+
+
+function reduceToSingleString(output, base, braces) {
+  var numLinesEst = 0;
+  var length = output.reduce(function(prev, cur) {
+    numLinesEst++;
+    if (cur.indexOf('\n') >= 0) numLinesEst++;
+    return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
+  }, 0);
+
+  if (length > 60) {
+    return braces[0] +
+           (base === '' ? '' : base + '\n ') +
+           ' ' +
+           output.join(',\n  ') +
+           ' ' +
+           braces[1];
+  }
+
+  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+}
+
+
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
+function isArray(ar) {
+  return Array.isArray(ar);
+}
+exports.isArray = isArray;
+
+function isBoolean(arg) {
+  return typeof arg === 'boolean';
+}
+exports.isBoolean = isBoolean;
+
+function isNull(arg) {
+  return arg === null;
+}
+exports.isNull = isNull;
+
+function isNullOrUndefined(arg) {
+  return arg == null;
+}
+exports.isNullOrUndefined = isNullOrUndefined;
+
+function isNumber(arg) {
+  return typeof arg === 'number';
+}
+exports.isNumber = isNumber;
+
+function isString(arg) {
+  return typeof arg === 'string';
+}
+exports.isString = isString;
+
+function isSymbol(arg) {
+  return typeof arg === 'symbol';
+}
+exports.isSymbol = isSymbol;
+
+function isUndefined(arg) {
+  return arg === void 0;
+}
+exports.isUndefined = isUndefined;
+
+function isRegExp(re) {
+  return isObject(re) && objectToString(re) === '[object RegExp]';
+}
+exports.isRegExp = isRegExp;
+
+function isObject(arg) {
+  return typeof arg === 'object' && arg !== null;
+}
+exports.isObject = isObject;
+
+function isDate(d) {
+  return isObject(d) && objectToString(d) === '[object Date]';
+}
+exports.isDate = isDate;
+
+function isError(e) {
+  return isObject(e) &&
+      (objectToString(e) === '[object Error]' || e instanceof Error);
+}
+exports.isError = isError;
+
+function isFunction(arg) {
+  return typeof arg === 'function';
+}
+exports.isFunction = isFunction;
+
+function isPrimitive(arg) {
+  return arg === null ||
+         typeof arg === 'boolean' ||
+         typeof arg === 'number' ||
+         typeof arg === 'string' ||
+         typeof arg === 'symbol' ||  // ES6 symbol
+         typeof arg === 'undefined';
+}
+exports.isPrimitive = isPrimitive;
+
+exports.isBuffer = require('./support/isBuffer');
+
+function objectToString(o) {
+  return Object.prototype.toString.call(o);
+}
+
+
+function pad(n) {
+  return n < 10 ? '0' + n.toString(10) : n.toString(10);
+}
+
+
+var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
+              'Oct', 'Nov', 'Dec'];
+
+// 26 Feb 16:19:34
+function timestamp() {
+  var d = new Date();
+  var time = [pad(d.getHours()),
+              pad(d.getMinutes()),
+              pad(d.getSeconds())].join(':');
+  return [d.getDate(), months[d.getMonth()], time].join(' ');
+}
+
+
+// log is just a thin wrapper to console.log that prepends a timestamp
+exports.log = function() {
+  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
+};
+
+
+/**
+ * Inherit the prototype methods from one constructor into another.
+ *
+ * The Function.prototype.inherits from lang.js rewritten as a standalone
+ * function (not on Function.prototype). NOTE: If this file is to be loaded
+ * during bootstrapping this function needs to be rewritten using some native
+ * functions as prototype setup using normal JavaScript does not work as
+ * expected during bootstrapping (see mirror.js in r114903).
+ *
+ * @param {function} ctor Constructor function which needs to inherit the
+ *     prototype.
+ * @param {function} superCtor Constructor function to inherit prototype from.
+ */
+exports.inherits = require('inherits');
+
+exports._extend = function(origin, add) {
+  // Don't do anything if add isn't an object
+  if (!add || !isObject(add)) return origin;
+
+  var keys = Object.keys(add);
+  var i = keys.length;
+  while (i--) {
+    origin[keys[i]] = add[keys[i]];
+  }
+  return origin;
+};
+
+function hasOwnProperty(obj, prop) {
+  return Object.prototype.hasOwnProperty.call(obj, prop);
+}
+
+}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"./support/isBuffer":35,"_process":19,"inherits":34}],"agentmodel":[function(require,module,exports){
+(function() {
+  var AgentModel;
+
+  module.exports = AgentModel = (function() {
+    var mergeObjectInto;
+
+    function AgentModel() {
+      this.turtles = {};
+      this.patches = {};
+      this.links = {};
+      this.observer = {};
+      this.world = {};
+      this.drawingEvents = [];
+    }
+
+    AgentModel.prototype.updates = function(modelUpdates) {
+      var i, len, u;
+      for (i = 0, len = modelUpdates.length; i < len; i++) {
+        u = modelUpdates[i];
+        this.update(u);
+      }
+    };
+
+    AgentModel.prototype.update = function(arg) {
+      var coll, drawingEvents, i, id, len, linkBundle, links, observer, patchBundle, patches, ref, ref1, turtleBundle, turtles, typeCanDie, updates, varUpdates, world;
+      links = arg.links, observer = arg.observer, patches = arg.patches, turtles = arg.turtles, world = arg.world, drawingEvents = arg.drawingEvents;
+      turtleBundle = {
+        updates: turtles,
+        coll: this.turtles,
+        typeCanDie: true
+      };
+      patchBundle = {
+        updates: patches,
+        coll: this.patches,
+        typeCanDie: false
+      };
+      linkBundle = {
+        updates: links,
+        coll: this.links,
+        typeCanDie: true
+      };
+      ref = [turtleBundle, patchBundle, linkBundle];
+      for (i = 0, len = ref.length; i < len; i++) {
+        ref1 = ref[i], coll = ref1.coll, typeCanDie = ref1.typeCanDie, updates = ref1.updates;
+        for (id in updates) {
+          varUpdates = updates[id];
+          if (varUpdates != null) {
+            if (typeCanDie && varUpdates.WHO === -1) {
+              delete coll[id];
+            } else {
+              mergeObjectInto(varUpdates, this._itemById(coll, id));
+            }
+          }
+        }
+      }
+      if ((observer != null ? observer[0] : void 0) != null) {
+        mergeObjectInto(observer[0], this.observer);
+      }
+      if ((world != null ? world[0] : void 0) != null) {
+        mergeObjectInto(world[0], this.world);
+      }
+      if (drawingEvents != null) {
+        this.drawingEvents = this.drawingEvents.concat(drawingEvents);
+      }
+    };
+
+    AgentModel.prototype._itemById = function(coll, id) {
+      if (coll[id] == null) {
+        coll[id] = {};
+      }
+      return coll[id];
+    };
+
+    mergeObjectInto = function(updatedObject, targetObject) {
+      var value, variable;
+      for (variable in updatedObject) {
+        value = updatedObject[variable];
+        targetObject[variable.toLowerCase()] = value;
+      }
+    };
+
+    return AgentModel;
+
+  })();
+
+}).call(this);
+
+},{}],"bootstrap":[function(require,module,exports){
+
+/*
+  `Workspace` is needed to do anything.  If you want the core of Tortoise, do `require('engine/workspace')`.
+  If you want the peripheral stuff (i.e. because you're a compiler or test infrastructure),
+  the other things you might want ought to get initialized by RequireJS here. --JAB (5/7/14)
+ */
+
+(function() {
+  require('./agentmodel');
+
+  require('./engine/workspace');
+
+  require('./engine/prim/prims');
+
+  require('./engine/prim/tasks');
+
+  require('./extensions/all');
+
+  require('./util/notimplemented');
+
+  module.exports = function() {};
+
+}).call(this);
+
+},{"./agentmodel":"agentmodel","./engine/prim/prims":"engine/prim/prims","./engine/prim/tasks":"engine/prim/tasks","./engine/workspace":"engine/workspace","./extensions/all":"extensions/all","./util/notimplemented":"util/notimplemented"}],"brazier/array":[function(require,module,exports){
+(function() {
+  var None, Something, arrayOps, eq, isArray, maybe, ref;
+
+  eq = require('./equals').eq;
+
+  ref = require('./maybe'), maybe = ref.maybe, None = ref.None, Something = ref.Something;
+
+  isArray = require('./type').isArray;
+
+  arrayOps = {
+    all: function(f) {
+      return function(arr) {
+        var j, len, x;
+        for (j = 0, len = arr.length; j < len; j++) {
+          x = arr[j];
+          if (!f(x)) {
+            return false;
+          }
+        }
+        return true;
+      };
+    },
+    concat: function(xs) {
+      return function(ys) {
+        return xs.concat(ys);
+      };
+    },
+    contains: function(x) {
+      return function(arr) {
+        var item, j, len;
+        for (j = 0, len = arr.length; j < len; j++) {
+          item = arr[j];
+          if (eq(x)(item)) {
+            return true;
+          }
+        }
+        return false;
+      };
+    },
+    countBy: function(f) {
+      return function(arr) {
+        var acc, j, key, len, ref1, value, x;
+        acc = {};
+        for (j = 0, len = arr.length; j < len; j++) {
+          x = arr[j];
+          key = f(x);
+          value = (ref1 = acc[key]) != null ? ref1 : 0;
+          acc[key] = value + 1;
+        }
+        return acc;
+      };
+    },
+    difference: function(xs) {
+      return function(arr) {
+        var acc, badBoys, j, len, x;
+        acc = [];
+        badBoys = arrayOps.unique(arr);
+        for (j = 0, len = xs.length; j < len; j++) {
+          x = xs[j];
+          if (!arrayOps.contains(x)(badBoys)) {
+            acc.push(x);
+          }
+        }
+        return acc;
+      };
+    },
+    exists: function(f) {
+      return function(arr) {
+        var j, len, x;
+        for (j = 0, len = arr.length; j < len; j++) {
+          x = arr[j];
+          if (f(x)) {
+            return true;
+          }
+        }
+        return false;
+      };
+    },
+    filter: function(f) {
+      return function(arr) {
+        var j, len, results, x;
+        results = [];
+        for (j = 0, len = arr.length; j < len; j++) {
+          x = arr[j];
+          if (f(x)) {
+            results.push(x);
+          }
+        }
+        return results;
+      };
+    },
+    find: function(f) {
+      return function(arr) {
+        var j, len, x;
+        for (j = 0, len = arr.length; j < len; j++) {
+          x = arr[j];
+          if (f(x)) {
+            return Something(x);
+          }
+        }
+        return None;
+      };
+    },
+    findIndex: function(f) {
+      return function(arr) {
+        var i, j, len, x;
+        for (i = j = 0, len = arr.length; j < len; i = ++j) {
+          x = arr[i];
+          if (f(x)) {
+            return Something(i);
+          }
+        }
+        return None;
+      };
+    },
+    flatMap: function(f) {
+      return function(arr) {
+        var arrs, ref1, x;
+        arrs = (function() {
+          var j, len, results;
+          results = [];
+          for (j = 0, len = arr.length; j < len; j++) {
+            x = arr[j];
+            results.push(f(x));
+          }
+          return results;
+        })();
+        return (ref1 = []).concat.apply(ref1, arrs);
+      };
+    },
+    flattenDeep: function(arr) {
+      var acc, j, len, x;
+      acc = [];
+      for (j = 0, len = arr.length; j < len; j++) {
+        x = arr[j];
+        if (isArray(x)) {
+          acc = acc.concat(arrayOps.flattenDeep(x));
+        } else {
+          acc.push(x);
+        }
+      }
+      return acc;
+    },
+    foldl: function(f) {
+      return function(acc) {
+        return function(arr) {
+          var j, len, out, x;
+          out = acc;
+          for (j = 0, len = arr.length; j < len; j++) {
+            x = arr[j];
+            out = f(out, x);
+          }
+          return out;
+        };
+      };
+    },
+    forEach: function(f) {
+      return function(arr) {
+        var j, len, x;
+        for (j = 0, len = arr.length; j < len; j++) {
+          x = arr[j];
+          f(x);
+        }
+      };
+    },
+    head: function(arr) {
+      return arrayOps.item(0)(arr);
+    },
+    isEmpty: function(arr) {
+      return arr.length === 0;
+    },
+    item: function(index) {
+      return function(xs) {
+        if ((0 <= index && index < xs.length)) {
+          return Something(xs[index]);
+        } else {
+          return None;
+        }
+      };
+    },
+    last: function(arr) {
+      return arr[arr.length - 1];
+    },
+    length: function(arr) {
+      return arr.length;
+    },
+    map: function(f) {
+      return function(arr) {
+        var j, len, results, x;
+        results = [];
+        for (j = 0, len = arr.length; j < len; j++) {
+          x = arr[j];
+          results.push(f(x));
+        }
+        return results;
+      };
+    },
+    maxBy: function(f) {
+      return function(arr) {
+        var j, len, maxX, maxY, x, y;
+        maxX = void 0;
+        maxY = -Infinity;
+        for (j = 0, len = arr.length; j < len; j++) {
+          x = arr[j];
+          y = f(x);
+          if (y > maxY) {
+            maxX = x;
+            maxY = y;
+          }
+        }
+        return maybe(maxX);
+      };
+    },
+    reverse: function(xs) {
+      return xs.slice(0).reverse();
+    },
+    singleton: function(x) {
+      return [x];
+    },
+    sortBy: function(f) {
+      return function(arr) {
+        var g;
+        g = function(x, y) {
+          var fx, fy;
+          fx = f(x);
+          fy = f(y);
+          if (fx < fy) {
+            return -1;
+          } else if (fx > fy) {
+            return 1;
+          } else {
+            return 0;
+          }
+        };
+        return arr.slice(0).sort(g);
+      };
+    },
+    sortedIndexBy: function(f) {
+      return function(arr) {
+        return function(x) {
+          var i, item, j, len, y;
+          y = f(x);
+          for (i = j = 0, len = arr.length; j < len; i = ++j) {
+            item = arr[i];
+            if (y <= f(item)) {
+              return i;
+            }
+          }
+          return arr.length;
+        };
+      };
+    },
+    tail: function(arr) {
+      return arr.slice(1);
+    },
+    toObject: function(arr) {
+      var a, b, j, len, out, ref1;
+      out = {};
+      for (j = 0, len = arr.length; j < len; j++) {
+        ref1 = arr[j], a = ref1[0], b = ref1[1];
+        out[a] = b;
+      }
+      return out;
+    },
+    unique: function(arr) {
+      var acc, j, len, x;
+      acc = [];
+      for (j = 0, len = arr.length; j < len; j++) {
+        x = arr[j];
+        if (!arrayOps.contains(x)(acc)) {
+          acc.push(x);
+        }
+      }
+      return acc;
+    },
+    uniqueBy: function(f) {
+      return function(arr) {
+        var acc, j, len, seen, x, y;
+        acc = [];
+        seen = [];
+        for (j = 0, len = arr.length; j < len; j++) {
+          x = arr[j];
+          y = f(x);
+          if (!arrayOps.contains(y)(seen)) {
+            seen.push(y);
+            acc.push(x);
+          }
+        }
+        return acc;
+      };
+    },
+    zip: function(xs) {
+      return function(arr) {
+        var i, j, length, out, ref1;
+        out = [];
+        length = Math.min(xs.length, arr.length);
+        for (i = j = 0, ref1 = length; 0 <= ref1 ? j < ref1 : j > ref1; i = 0 <= ref1 ? ++j : --j) {
+          out.push([xs[i], arr[i]]);
+        }
+        return out;
+      };
+    }
+  };
+
+  module.exports = arrayOps;
+
+}).call(this);
+
+},{"./equals":"brazier/equals","./maybe":"brazier/maybe","./type":"brazier/type"}],"brazier/equals":[function(require,module,exports){
+(function() {
+  var arrayEquals, booleanEquals, eq, isArray, isBoolean, isNumber, isObject, isString, numberEquals, objectEquals, ref, stringEquals;
+
+  ref = require('./type'), isArray = ref.isArray, isBoolean = ref.isBoolean, isNumber = ref.isNumber, isObject = ref.isObject, isString = ref.isString;
+
+  arrayEquals = function(x) {
+    return function(y) {
+      var helper;
+      helper = function(a, b) {
+        var index, item, j, len;
+        for (index = j = 0, len = a.length; j < len; index = ++j) {
+          item = a[index];
+          if (!eq(item)(b[index])) {
+            return false;
+          }
+        }
+        return true;
+      };
+      return (x === y) || (x.length === y.length && helper(x, y));
+    };
+  };
+
+  booleanEquals = function(x) {
+    return function(y) {
+      return x === y;
+    };
+  };
+
+  eq = function(x) {
+    return function(y) {
+      return (x === y) || (x === void 0 && y === void 0) || (x === null && y === null) || (isNumber(x) && isNumber(y) && ((isNaN(x) && isNaN(y)) || numberEquals(x)(y))) || (isBoolean(x) && isBoolean(y) && booleanEquals(x)(y)) || (isString(x) && isString(y) && stringEquals(x)(y)) || (isObject(x) && isObject(y) && objectEquals(x)(y)) || (isArray(x) && isArray(y) && arrayEquals(x)(y));
+    };
+  };
+
+  numberEquals = function(x) {
+    return function(y) {
+      return x === y;
+    };
+  };
+
+  objectEquals = function(x) {
+    return function(y) {
+      var helper, xKeys;
+      xKeys = Object.keys(x);
+      helper = function(a, b) {
+        var i, j, key, ref1;
+        for (i = j = 0, ref1 = xKeys.length; 0 <= ref1 ? j < ref1 : j > ref1; i = 0 <= ref1 ? ++j : --j) {
+          key = xKeys[i];
+          if (!eq(x[key])(y[key])) {
+            return false;
+          }
+        }
+        return true;
+      };
+      return (x === y) || (xKeys.length === Object.keys(y).length && helper(x, y));
+    };
+  };
+
+  stringEquals = function(x) {
+    return function(y) {
+      return x === y;
+    };
+  };
+
+  module.exports = {
+    arrayEquals: arrayEquals,
+    booleanEquals: booleanEquals,
+    eq: eq,
+    numberEquals: numberEquals,
+    objectEquals: objectEquals,
+    stringEquals: stringEquals
+  };
+
+}).call(this);
+
+},{"./type":"brazier/type"}],"brazier/function":[function(require,module,exports){
+(function() {
+  var slice = [].slice;
+
+  module.exports = {
+    apply: function(f) {
+      return function(x) {
+        return f(x);
+      };
+    },
+    constantly: function(x) {
+      return function() {
+        return x;
+      };
+    },
+    curry: function(f) {
+      var argsToArray, curryMaster;
+      argsToArray = function(args) {
+        return Array.prototype.slice.call(args, 0);
+      };
+      curryMaster = function() {
+        var argsThusFar;
+        argsThusFar = argsToArray(arguments);
+        if (argsThusFar.length >= f.length) {
+          return f.apply(null, argsThusFar);
+        } else {
+          return function() {
+            var nextTierArgs;
+            nextTierArgs = argsToArray(arguments);
+            return curryMaster.apply(null, argsThusFar.concat(nextTierArgs));
+          };
+        }
+      };
+      return curryMaster;
+    },
+    flip: function(f) {
+      return function(x) {
+        return function(y) {
+          return f(y)(x);
+        };
+      };
+    },
+    id: function(x) {
+      return x;
+    },
+    pipeline: function() {
+      var functions;
+      functions = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+      return function() {
+        var args, f, fs, h, i, len, out;
+        args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+        h = functions[0], fs = 2 <= functions.length ? slice.call(functions, 1) : [];
+        out = h.apply(null, args);
+        for (i = 0, len = fs.length; i < len; i++) {
+          f = fs[i];
+          out = f(out);
+        }
+        return out;
+      };
+    },
+    tee: function(f) {
+      return function(g) {
+        return function(x) {
+          return [f(x), g(x)];
+        };
+      };
+    },
+    uncurry: function(f) {
+      return function() {
+        var args;
+        args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+        return args.reduce((function(acc, arg) {
+          return acc(arg);
+        }), f);
+      };
+    }
+  };
+
+}).call(this);
+
+},{}],"brazier/maybe":[function(require,module,exports){
+(function() {
+  var maybeOps;
+
+  maybeOps = {
+    None: {},
+    Something: function(x) {
+      return {
+        _type: "something",
+        _value: x
+      };
+    },
+    filter: function(f) {
+      return function(maybe) {
+        return maybeOps.flatMap(function(x) {
+          if (f(x)) {
+            return maybeOps.Something(x);
+          } else {
+            return maybeOps.None;
+          }
+        })(maybe);
+      };
+    },
+    flatMap: function(f) {
+      return function(maybe) {
+        return maybeOps.fold(function() {
+          return maybeOps.None;
+        })(f)(maybe);
+      };
+    },
+    fold: function(ifNone) {
+      return function(ifSomething) {
+        return function(maybe) {
+          if (maybeOps.isSomething(maybe)) {
+            return ifSomething(maybe._value);
+          } else {
+            return ifNone();
+          }
+        };
+      };
+    },
+    isSomething: function(arg) {
+      var _type;
+      _type = arg._type;
+      return _type === "something";
+    },
+    map: function(f) {
+      return function(maybe) {
+        return maybeOps.fold(function() {
+          return maybeOps.None;
+        })(function(x) {
+          return maybeOps.Something(f(x));
+        })(maybe);
+      };
+    },
+    maybe: function(x) {
+      if (x != null) {
+        return maybeOps.Something(x);
+      } else {
+        return maybeOps.None;
+      }
+    },
+    toArray: function(maybe) {
+      return maybeOps.fold(function() {
+        return [];
+      })(function(x) {
+        return [x];
+      })(maybe);
+    }
+  };
+
+  module.exports = maybeOps;
+
+}).call(this);
+
+},{}],"brazier/number":[function(require,module,exports){
+(function() {
+  module.exports = {
+    multiply: function(x) {
+      return function(y) {
+        return x * y;
+      };
+    },
+    plus: function(x) {
+      return function(y) {
+        return x + y;
+      };
+    },
+    rangeTo: function(start) {
+      return function(end) {
+        var i, results;
+        if (start <= end) {
+          return (function() {
+            results = [];
+            for (var i = start; start <= end ? i <= end : i >= end; start <= end ? i++ : i--){ results.push(i); }
+            return results;
+          }).apply(this);
+        } else {
+          return [];
+        }
+      };
+    },
+    rangeUntil: function(start) {
+      return function(end) {
+        var i, results;
+        if (start < end) {
+          return (function() {
+            results = [];
+            for (var i = start; start <= end ? i < end : i > end; start <= end ? i++ : i--){ results.push(i); }
+            return results;
+          }).apply(this);
+        } else {
+          return [];
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{}],"brazier/object":[function(require,module,exports){
+(function() {
+  var None, Something, ref;
+
+  ref = require('./maybe'), None = ref.None, Something = ref.Something;
+
+  module.exports = {
+    clone: function(obj) {
+      var acc, i, j, key, keys, ref1;
+      acc = {};
+      keys = Object.keys(obj);
+      for (i = j = 0, ref1 = keys.length; 0 <= ref1 ? j < ref1 : j > ref1; i = 0 <= ref1 ? ++j : --j) {
+        key = keys[i];
+        acc[key] = obj[key];
+      }
+      return acc;
+    },
+    keys: function(obj) {
+      return Object.keys(obj);
+    },
+    lookup: function(key) {
+      return function(obj) {
+        if (obj.hasOwnProperty(key)) {
+          return Something(obj[key]);
+        } else {
+          return None;
+        }
+      };
+    },
+    pairs: function(obj) {
+      var i, j, key, keys, ref1, results;
+      keys = Object.keys(obj);
+      results = [];
+      for (i = j = 0, ref1 = keys.length; 0 <= ref1 ? j < ref1 : j > ref1; i = 0 <= ref1 ? ++j : --j) {
+        key = keys[i];
+        results.push([key, obj[key]]);
+      }
+      return results;
+    },
+    values: function(obj) {
+      var i, j, keys, ref1, results;
+      keys = Object.keys(obj);
+      results = [];
+      for (i = j = 0, ref1 = keys.length; 0 <= ref1 ? j < ref1 : j > ref1; i = 0 <= ref1 ? ++j : --j) {
+        results.push(obj[keys[i]]);
+      }
+      return results;
+    }
+  };
+
+}).call(this);
+
+},{"./maybe":"brazier/maybe"}],"brazier/type":[function(require,module,exports){
+(function() {
+  module.exports = {
+    isArray: function(x) {
+      return Array.isArray(x);
+    },
+    isBoolean: function(x) {
+      return typeof x === "boolean";
+    },
+    isFunction: function(x) {
+      return typeof x === "function";
+    },
+    isNumber: function(x) {
+      return typeof x === "number" && !isNaN(x);
+    },
+    isObject: function(x) {
+      return typeof x === "object" && x !== null && !Array.isArray(x);
+    },
+    isString: function(x) {
+      return typeof x === "string";
+    }
+  };
+
+}).call(this);
+
+},{}],"engine/core/abstractagentset":[function(require,module,exports){
+(function() {
+  var AbstractAgentSet, Death, Iterator, NLType, Shufflerator, foldl, keys, map, pipeline, projectionSort, ref, stableSort;
+
+  projectionSort = require('./projectionsort');
+
+  NLType = require('./typechecker');
+
+  Iterator = require('util/iterator');
+
+  Shufflerator = require('util/shufflerator');
+
+  stableSort = require('util/stablesort');
+
+  ref = require('brazierjs/array'), foldl = ref.foldl, map = ref.map;
+
+  pipeline = require('brazierjs/function').pipeline;
+
+  keys = require('brazierjs/object').keys;
+
+  Death = require('util/exception').DeathInterrupt;
+
+  module.exports = AbstractAgentSet = (function() {
+    function AbstractAgentSet(_agentArr, _world, _agentTypeName, _specialName) {
+      this._agentArr = _agentArr;
+      this._world = _world;
+      this._agentTypeName = _agentTypeName;
+      this._specialName = _specialName;
+    }
+
+    AbstractAgentSet.prototype.agentFilter = function(f) {
+      return this.filter(Iterator.withBoolCheck(this._world.selfManager.askAgent(f)));
+    };
+
+    AbstractAgentSet.prototype.agentAll = function(f) {
+      return this.iterator().all(this._world.selfManager.askAgent(f));
+    };
+
+    AbstractAgentSet.prototype.ask = function(f, shouldShuffle) {
+      var base, iter;
+      iter = shouldShuffle ? this.shufflerator() : this.iterator();
+      iter.forEach(this._world.selfManager.askAgent(f));
+      if (typeof (base = this._world.selfManager.self()).isDead === "function" ? base.isDead() : void 0) {
+        throw new Death;
+      }
+    };
+
+    AbstractAgentSet.prototype.atPoints = function(points) {
+      var getPatchAt, getSelf;
+      getSelf = (function(_this) {
+        return function() {
+          return _this._world.selfManager.self();
+        };
+      })(this);
+      getPatchAt = (function(_this) {
+        return function(x, y) {
+          return _this._world.getPatchAt(x, y);
+        };
+      })(this);
+      return require('./agentset/atpoints')(this._world.dump, getSelf, getPatchAt).call(this, points);
+    };
+
+    AbstractAgentSet.prototype.contains = function(item) {
+      return this.iterator().contains(item);
+    };
+
+    AbstractAgentSet.prototype.copyWithNewAgents = function(agents) {
+      return this._generateFrom(agents);
+    };
+
+    AbstractAgentSet.prototype.exists = function(pred) {
+      return this.iterator().exists(pred);
+    };
+
+    AbstractAgentSet.prototype.filter = function(pred) {
+      return this._generateFrom(this.iterator().filter(pred));
+    };
+
+    AbstractAgentSet.prototype.forEach = function(f) {
+      this.iterator().forEach(f);
+    };
+
+    AbstractAgentSet.prototype.getSpecialName = function() {
+      return this._specialName;
+    };
+
+    AbstractAgentSet.prototype.isEmpty = function() {
+      return this.size() === 0;
+    };
+
+    AbstractAgentSet.prototype.iterator = function() {
+      return new Iterator(this._agentArr);
+    };
+
+    AbstractAgentSet.prototype.maxesBy = function(f) {
+      return this.copyWithNewAgents(this._findMaxesBy(f));
+    };
+
+    AbstractAgentSet.prototype.maxNOf = function(n, f) {
+      if (n > this.size()) {
+        throw new Error("Requested " + n + " random agents from a set of only " + (this.size()) + " agents.");
+      }
+      if (n < 0) {
+        throw new Error("First input to MAX-N-OF can't be negative.");
+      }
+      return this._findBestNOf(n, f, function(x, y) {
+        if (x === y) {
+          return 0;
+        } else if (x > y) {
+          return -1;
+        } else {
+          return 1;
+        }
+      });
+    };
+
+    AbstractAgentSet.prototype.maxOneOf = function(f) {
+      return this._randomOneOf(this._findMaxesBy(f));
+    };
+
+    AbstractAgentSet.prototype.minNOf = function(n, f) {
+      if (n > this.size()) {
+        throw new Error("Requested " + n + " random agents from a set of only " + (this.size()) + " agents.");
+      }
+      if (n < 0) {
+        throw new Error("First input to MIN-N-OF can't be negative.");
+      }
+      return this._findBestNOf(n, f, function(x, y) {
+        if (x === y) {
+          return 0;
+        } else if (x < y) {
+          return -1;
+        } else {
+          return 1;
+        }
+      });
+    };
+
+    AbstractAgentSet.prototype.minOneOf = function(f) {
+      return this._randomOneOf(this._findMinsBy(f));
+    };
+
+    AbstractAgentSet.prototype.minsBy = function(f) {
+      return this.copyWithNewAgents(this._findMinsBy(f));
+    };
+
+    AbstractAgentSet.prototype.projectionBy = function(f) {
+      return this.shufflerator().map(this._world.selfManager.askAgent(f));
+    };
+
+    AbstractAgentSet.prototype.shuffled = function() {
+      return this.copyWithNewAgents(this.shufflerator().toArray());
+    };
+
+    AbstractAgentSet.prototype.shufflerator = function() {
+      return new Shufflerator(this.toArray(), (function(agent) {
+        return (agent != null ? agent.id : void 0) >= 0;
+      }), this._world.rng.nextInt);
+    };
+
+    AbstractAgentSet.prototype.size = function() {
+      return this.toArray().length;
+    };
+
+    AbstractAgentSet.prototype.sort = function() {
+      if (this.isEmpty()) {
+        return this.toArray();
+      } else {
+        return stableSort(this.toArray())(function(x, y) {
+          return x.compare(y).toInt;
+        });
+      }
+    };
+
+    AbstractAgentSet.prototype.sortOn = function(f) {
+      return projectionSort(this.shufflerator().toArray())(f);
+    };
+
+    AbstractAgentSet.prototype.toArray = function() {
+      this._agentArr = this.iterator().toArray();
+      return this._agentArr.slice(0);
+    };
+
+    AbstractAgentSet.prototype.toString = function() {
+      var ref1, ref2;
+      return (ref1 = (ref2 = this._specialName) != null ? ref2.toLowerCase() : void 0) != null ? ref1 : "(agentset, " + (this.size()) + " " + this._agentTypeName + ")";
+    };
+
+    AbstractAgentSet.prototype._findBestNOf = function(n, f, cStyleComparator) {
+      var appendAgent, ask, best, collectWinners, groupByValue, ref1, valueToAgentsMap;
+      ask = this._world.selfManager.askAgent(f);
+      groupByValue = function(acc, agent) {
+        var entry, result;
+        result = ask(agent);
+        if (NLType(result).isNumber()) {
+          entry = acc[result];
+          if (entry != null) {
+            entry.push(agent);
+          } else {
+            acc[result] = [agent];
+          }
+        }
+        return acc;
+      };
+      appendAgent = function(arg, agent) {
+        var numAdded, winners;
+        winners = arg[0], numAdded = arg[1];
+        if (numAdded < n) {
+          winners.push(agent);
+          return [winners, numAdded + 1];
+        } else {
+          return [winners, numAdded];
+        }
+      };
+      collectWinners = function(arg, agents) {
+        var numAdded, winners;
+        winners = arg[0], numAdded = arg[1];
+        if (numAdded < n) {
+          return foldl(appendAgent)([winners, numAdded])(agents);
+        } else {
+          return [winners, numAdded];
+        }
+      };
+      valueToAgentsMap = foldl(groupByValue)({})(this.shufflerator().toArray());
+      ref1 = pipeline(keys, map(parseFloat), (function(x) {
+        return x.sort(cStyleComparator);
+      }), map(function(value) {
+        return valueToAgentsMap[value];
+      }), foldl(collectWinners)([[], 0]))(valueToAgentsMap), best = ref1[0], ref1[1];
+      return this._generateFrom(best);
+    };
+
+    AbstractAgentSet.prototype._randomOneOf = function(agents) {
+      if (agents.length === 0) {
+        return Nobody;
+      } else {
+        return agents[this._world.rng.nextInt(agents.length)];
+      }
+    };
+
+    AbstractAgentSet.prototype._findBestOf = function(worstPossible, findIsBetter, f) {
+      var foldFunc, ref1, winners;
+      foldFunc = (function(_this) {
+        return function(arg, agent) {
+          var currentBest, currentWinners, result;
+          currentBest = arg[0], currentWinners = arg[1];
+          result = _this._world.selfManager.askAgent(f)(agent);
+          if (result === currentBest) {
+            currentWinners.push(agent);
+            return [currentBest, currentWinners];
+          } else if (NLType(result).isNumber() && findIsBetter(result, currentBest)) {
+            return [result, [agent]];
+          } else {
+            return [currentBest, currentWinners];
+          }
+        };
+      })(this);
+      ref1 = foldl(foldFunc)([worstPossible, []])(this.toArray()), ref1[0], winners = ref1[1];
+      return winners;
+    };
+
+    AbstractAgentSet.prototype._findMaxesBy = function(f) {
+      return this._findBestOf(-Infinity, (function(result, currentBest) {
+        return result > currentBest;
+      }), f);
+    };
+
+    AbstractAgentSet.prototype._findMinsBy = function(f) {
+      return this._findBestOf(Infinity, (function(result, currentBest) {
+        return result < currentBest;
+      }), f);
+    };
+
+    AbstractAgentSet.prototype._generateFrom = function(newAgentArr) {
+      return new this.constructor(newAgentArr, this._world);
+    };
+
+    AbstractAgentSet.prototype._optimalOtherWith = function(f) {
+      var filterer, self;
+      self = this._world.selfManager.self();
+      filterer = function(x) {
+        var y;
+        if (x !== self) {
+          return y = Iterator.boolOrError(x, x.projectionBy(f));
+        } else {
+          return false;
+        }
+      };
+      return this.copyWithNewAgents(this.iterator().filter(filterer));
+    };
+
+    AbstractAgentSet.prototype._optimalOneOfWith = function(f) {
+      var finder;
+      finder = function(x) {
+        var y;
+        return y = Iterator.boolOrError(x, x.projectionBy(f));
+      };
+      return this.shufflerator().find(finder, Nobody);
+    };
+
+    return AbstractAgentSet;
+
+  })();
+
+}).call(this);
+
+},{"./agentset/atpoints":"engine/core/agentset/atpoints","./projectionsort":"engine/core/projectionsort","./typechecker":"engine/core/typechecker","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/object":"brazier/object","util/exception":"util/exception","util/iterator":"util/iterator","util/shufflerator":"util/shufflerator","util/stablesort":"util/stablesort"}],"engine/core/agentset/atpoints":[function(require,module,exports){
+(function() {
+  var NLType, filter, flatMap, genPatchGrabber, getPatchesAtPoints, map, pipeline, ref, unique;
+
+  NLType = require('../typechecker');
+
+  ref = require('brazierjs/array'), filter = ref.filter, flatMap = ref.flatMap, map = ref.map, unique = ref.unique;
+
+  pipeline = require('brazierjs/function').pipeline;
+
+  genPatchGrabber = function(self, worldPatchAt) {
+    if (self === 0) {
+      return worldPatchAt;
+    } else if (NLType(self).isTurtle() || NLType(self).isPatch()) {
+      return self.patchAt;
+    } else {
+      return function() {
+        return Nobody;
+      };
+    }
+  };
+
+  getPatchesAtPoints = function(dump, patchAt, points) {
+    var f;
+    f = function(point) {
+      if (NLType(point).isList() && point.length === 2 && NLType(point[0]).isNumber() && NLType(point[1]).isNumber()) {
+        return patchAt.apply(null, point);
+      } else {
+        throw new Error("Invalid list of points: " + (dump(points)));
+      }
+    };
+    return pipeline(map(f), filter(function(x) {
+      return x !== Nobody;
+    }))(points);
+  };
+
+  module.exports = function(dump, getSelf, getPatchAt) {
+    return function(points) {
+      var breedName, copyThatFloppy, filterContaining, newAgents, patchAt, patches, turtlesOnPatches, upperBreedName;
+      filterContaining = filter((function(_this) {
+        return function(x) {
+          return _this.contains(x);
+        };
+      })(this));
+      breedName = this.getSpecialName();
+      patchAt = genPatchGrabber(getSelf(), getPatchAt);
+      patches = getPatchesAtPoints(dump, patchAt, points);
+      newAgents = NLType(this).isPatchSet() ? breedName === "patches" ? patches : filterContaining(patches) : NLType(this).isTurtleSet() ? (turtlesOnPatches = pipeline(flatMap(function(p) {
+        return p.turtlesHere().toArray();
+      }), unique)(patches), breedName === "turtles" ? turtlesOnPatches : breedName != null ? (upperBreedName = breedName.toUpperCase(), filter(function(x) {
+        return upperBreedName === x.getBreedName();
+      })(turtlesOnPatches)) : filterContaining(turtlesOnPatches)) : [];
+      copyThatFloppy = (function(_this) {
+        return function(x) {
+          return _this.copyWithNewAgents.call(_this, x);
+        };
+      })(this);
+      return pipeline(unique, copyThatFloppy)(newAgents);
+    };
+  };
+
+}).call(this);
+
+},{"../typechecker":"engine/core/typechecker","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function"}],"engine/core/agenttoint":[function(require,module,exports){
+(function() {
+  var NLType;
+
+  NLType = require('./typechecker');
+
+  module.exports = function(agent) {
+    var type;
+    type = NLType(agent);
+    if (type.isTurtle()) {
+      return 1;
+    } else if (type.isPatch()) {
+      return 2;
+    } else if (type.isLink()) {
+      return 3;
+    } else {
+      return 0;
+    }
+  };
+
+}).call(this);
+
+},{"./typechecker":"engine/core/typechecker"}],"engine/core/breedmanager":[function(require,module,exports){
+(function() {
+  var Breed, BreedManager, count, foldl, getNextOrdinal, isEmpty, last, map, pipeline, ref, sortedIndexBy, toObject, values;
+
+  ref = require('brazierjs/array'), foldl = ref.foldl, isEmpty = ref.isEmpty, last = ref.last, map = ref.map, sortedIndexBy = ref.sortedIndexBy, toObject = ref.toObject;
+
+  pipeline = require('brazierjs/function').pipeline;
+
+  values = require('brazierjs/object').values;
+
+  count = 0;
+
+  getNextOrdinal = function() {
+    return count++;
+  };
+
+  Breed = (function() {
+    Breed.prototype.ordinal = void 0;
+
+    function Breed(name1, singular, _manager, varNames, _isDirectedLinkBreed, _shape, members) {
+      this.name = name1;
+      this.singular = singular;
+      this._manager = _manager;
+      this.varNames = varNames != null ? varNames : [];
+      this._isDirectedLinkBreed = _isDirectedLinkBreed;
+      this._shape = _shape != null ? _shape : void 0;
+      this.members = members != null ? members : [];
+      this.ordinal = getNextOrdinal();
+    }
+
+    Breed.prototype.getShape = function() {
+      var ref1;
+      return (ref1 = this._shape) != null ? ref1 : (this.isLinky() ? this._manager.links()._shape : this._manager.turtles()._shape);
+    };
+
+    Breed.prototype.setShape = function(newShape) {
+      this._shape = newShape;
+    };
+
+    Breed.prototype.add = function(newAgent) {
+      var howManyToThrowOut, whatToInsert;
+      if (isEmpty(this.members) || last(this.members).id < newAgent.id) {
+        this.members.push(newAgent);
+      } else {
+        this.members.splice(this._getAgentIndex(newAgent), howManyToThrowOut = 0, whatToInsert = newAgent);
+      }
+    };
+
+    Breed.prototype.contains = function(agent) {
+      return this.members[this._getAgentIndex(agent)] === agent;
+    };
+
+    Breed.prototype.remove = function(agent) {
+      var howManyToThrowOut;
+      this.members.splice(this._getAgentIndex(agent), howManyToThrowOut = 1);
+    };
+
+    Breed.prototype.isLinky = function() {
+      return this._isDirectedLinkBreed != null;
+    };
+
+    Breed.prototype.isUndirected = function() {
+      return this._isDirectedLinkBreed === false;
+    };
+
+    Breed.prototype.isDirected = function() {
+      return this._isDirectedLinkBreed === true;
+    };
+
+    Breed.prototype._getAgentIndex = function(agent) {
+      return sortedIndexBy(function(a) {
+        return a.id;
+      })(this.members)(agent);
+    };
+
+    return Breed;
+
+  })();
+
+  module.exports = BreedManager = (function() {
+    BreedManager.prototype._breeds = void 0;
+
+    BreedManager.prototype._singularBreeds = void 0;
+
+    function BreedManager(breedObjs, turtlesOwns, linksOwns) {
+      var defaultBreeds;
+      if (turtlesOwns == null) {
+        turtlesOwns = [];
+      }
+      if (linksOwns == null) {
+        linksOwns = [];
+      }
+      defaultBreeds = {
+        TURTLES: new Breed("TURTLES", "turtle", this, turtlesOwns, void 0, "default"),
+        LINKS: new Breed("LINKS", "link", this, linksOwns, false, "default")
+      };
+      this._breeds = foldl((function(_this) {
+        return function(acc, breedObj) {
+          var ref1, trueName, trueSingular, trueVarNames;
+          trueName = breedObj.name.toUpperCase();
+          trueSingular = breedObj.singular.toLowerCase();
+          trueVarNames = (ref1 = breedObj.varNames) != null ? ref1 : [];
+          acc[trueName] = new Breed(trueName, trueSingular, _this, trueVarNames, breedObj.isDirected);
+          return acc;
+        };
+      })(this))(defaultBreeds)(breedObjs);
+      this._singularBreeds = pipeline(values, map(function(b) {
+        return [b.singular, b];
+      }), toObject)(this._breeds);
+    }
+
+    BreedManager.prototype.breeds = function() {
+      return this._breeds;
+    };
+
+    BreedManager.prototype.orderedBreeds = function() {
+      if (this._orderedBreeds == null) {
+        this._orderedBreeds = Object.getOwnPropertyNames(this._breeds).sort((function(_this) {
+          return function(a, b) {
+            return _this._breeds[a].ordinal - _this._breeds[b].ordinal;
+          };
+        })(this));
+      }
+      return this._orderedBreeds;
+    };
+
+    BreedManager.prototype.orderedLinkBreeds = function() {
+      if (this._orderedLinkBreeds == null) {
+        this._orderedLinkBreeds = this.orderedBreeds().filter((function(_this) {
+          return function(b) {
+            return _this._breeds[b].isLinky();
+          };
+        })(this));
+      }
+      return this._orderedLinkBreeds;
+    };
+
+    BreedManager.prototype.orderedTurtleBreeds = function() {
+      if (this._orderedTurtleBreeds == null) {
+        this._orderedTurtleBreeds = this.orderedBreeds().filter((function(_this) {
+          return function(b) {
+            return !_this._breeds[b].isLinky();
+          };
+        })(this));
+      }
+      return this._orderedTurtleBreeds;
+    };
+
+    BreedManager.prototype.get = function(name) {
+      return this._breeds[name.toUpperCase()];
+    };
+
+    BreedManager.prototype.getSingular = function(name) {
+      return this._singularBreeds[name.toLowerCase()];
+    };
+
+    BreedManager.prototype.setDefaultShape = function(breedName, shape) {
+      this.get(breedName).setShape(shape.toLowerCase());
+    };
+
+    BreedManager.prototype.setUnbreededLinksUndirected = function() {
+      this.links()._isDirectedLinkBreed = false;
+    };
+
+    BreedManager.prototype.setUnbreededLinksDirected = function() {
+      this.links()._isDirectedLinkBreed = true;
+    };
+
+    BreedManager.prototype.turtles = function() {
+      return this.get("TURTLES");
+    };
+
+    BreedManager.prototype.links = function() {
+      return this.get("LINKS");
+    };
+
+    return BreedManager;
+
+  })();
+
+}).call(this);
+
+},{"brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/object":"brazier/object"}],"engine/core/colormodel":[function(require,module,exports){
+(function() {
+  var BaseColors, BaseRGBs, ColorMax, JSType, NLMath, NamesToIndicesMap, RGBCache, RGBMap, StrictMath, attenuate, attenuateRGB, componentsToKey, foldl, keyToComponents, map, pairs, pipeline, rangeUntil, ref, ref1;
+
+  NLMath = require('util/nlmath');
+
+  JSType = require('util/typechecker');
+
+  StrictMath = require('shim/strictmath');
+
+  ref = require('brazierjs/array'), foldl = ref.foldl, map = ref.map;
+
+  pipeline = require('brazierjs/function').pipeline;
+
+  rangeUntil = require('brazierjs/number').rangeUntil;
+
+  pairs = require('brazierjs/object').pairs;
+
+  attenuate = function(lowerBound, upperBound) {
+    return function(x) {
+      if (x < lowerBound) {
+        return lowerBound;
+      } else if (x > upperBound) {
+        return upperBound;
+      } else {
+        return x;
+      }
+    };
+  };
+
+  attenuateRGB = attenuate(0, 255);
+
+  componentsToKey = function(r, g, b) {
+    return r + "_" + g + "_" + b;
+  };
+
+  keyToComponents = function(key) {
+    return key.split('_').map(parseFloat);
+  };
+
+  ColorMax = 140;
+
+  BaseColors = map(function(n) {
+    return (n * 10) + 5;
+  })(rangeUntil(0)(ColorMax / 10));
+
+  NamesToIndicesMap = (function() {
+    var color, i, j, len, ref1, temp;
+    temp = {};
+    ref1 = ['gray', 'red', 'orange', 'brown', 'yellow', 'green', 'lime', 'turqoise', 'cyan', 'sky', 'blue', 'violet', 'magenta', 'pink', 'black', 'white'];
+    for (i = j = 0, len = ref1.length; j < len; i = ++j) {
+      color = ref1[i];
+      temp[color] = i;
+    }
+    return temp;
+  })();
+
+  BaseRGBs = [[140, 140, 140], [215, 48, 39], [241, 105, 19], [156, 109, 70], [237, 237, 47], [87, 176, 58], [42, 209, 57], [27, 158, 119], [82, 196, 196], [43, 140, 190], [50, 92, 168], [123, 78, 163], [166, 25, 105], [224, 126, 149], [0, 0, 0], [255, 255, 255]];
+
+  ref1 = (function() {
+    var baseIndex, clamp, colorTimesTen, finalRGB, rgb, rgbCache, rgbMap, step;
+    rgbMap = {};
+    rgbCache = (function() {
+      var j, ref1, results;
+      results = [];
+      for (colorTimesTen = j = 0, ref1 = ColorMax * 10; 0 <= ref1 ? j < ref1 : j > ref1; colorTimesTen = 0 <= ref1 ? ++j : --j) {
+        finalRGB = colorTimesTen === 0 ? [0, 0, 0] : colorTimesTen === 99 ? [255, 255, 255] : (baseIndex = StrictMath.floor(colorTimesTen / 100), rgb = BaseRGBs[baseIndex], step = (colorTimesTen % 100 - 50) / 50.48 + 0.012, clamp = step <= 0 ? function(x) {
+          return x;
+        } : function(x) {
+          return 0xFF - x;
+        }, rgb.map(function(x) {
+          return x + StrictMath.truncate(clamp(x) * step);
+        }));
+        rgbMap[componentsToKey.apply(null, finalRGB)] = colorTimesTen / 10;
+        results.push(finalRGB);
+      }
+      return results;
+    })();
+    return [rgbCache, rgbMap];
+  })(), RGBCache = ref1[0], RGBMap = ref1[1];
+
+  module.exports = {
+    COLOR_MAX: ColorMax,
+    BASE_COLORS: BaseColors,
+    areRelatedByShade: function(color1, color2) {
+      return this._colorIntegral(color1) === this._colorIntegral(color2);
+    },
+    colorToRGB: function(color) {
+      var type;
+      type = JSType(color);
+      if (type.isNumber()) {
+        return RGBCache[StrictMath.floor(this.wrapColor(color) * 10)];
+      } else if (type.isArray()) {
+        return color.map(StrictMath.round);
+      } else if (type.isString()) {
+        return this._nameToRGB(color);
+      } else {
+        throw new Error("Unrecognized color format: " + color);
+      }
+    },
+    colorToHSB: function(color) {
+      var b, g, r, ref2, type;
+      type = JSType(color);
+      ref2 = (function() {
+        if (type.isNumber()) {
+          return this.colorToRGB(color);
+        } else if (type.isArray()) {
+          return color;
+        } else {
+          throw new Error("Unrecognized color format: " + color);
+        }
+      }).call(this), r = ref2[0], g = ref2[1], b = ref2[2];
+      return this.rgbToHSB(r, g, b);
+    },
+    genRGBFromComponents: function(r, g, b) {
+      return [r, g, b].map(attenuateRGB);
+    },
+    hsbToRGB: function(rawH, rawS, rawB) {
+      var b, f, h, i, p, q, rgb, s, t;
+      h = attenuate(0, 360)(rawH) / 360;
+      s = attenuate(0, 100)(rawS) / 100;
+      b = attenuate(0, 100)(rawB) / 100;
+      i = StrictMath.floor(h * 6);
+      f = h * 6 - i;
+      p = b * (1 - s);
+      q = b * (1 - f * s);
+      t = b * (1 - (1 - f) * s);
+      rgb = (function() {
+        switch (i % 6) {
+          case 0:
+            return [b, t, p];
+          case 1:
+            return [q, b, p];
+          case 2:
+            return [p, b, t];
+          case 3:
+            return [p, q, b];
+          case 4:
+            return [t, p, b];
+          case 5:
+            return [b, p, q];
+        }
+      })();
+      return rgb.map(function(x) {
+        return StrictMath.round(x * 255);
+      });
+    },
+    nearestColorNumberOfHSB: function(h, s, b) {
+      return this.nearestColorNumberOfRGB.apply(this, this.hsbToRGB(h, s, b));
+    },
+    nearestColorNumberOfRGB: function(r, g, b) {
+      var blue, colorNumber, green, red, ref2;
+      red = attenuateRGB(r);
+      green = attenuateRGB(g);
+      blue = attenuateRGB(b);
+      colorNumber = (ref2 = RGBMap[componentsToKey(red, green, blue)]) != null ? ref2 : this._estimateColorNumber(red, green, blue);
+      return NLMath.validateNumber(colorNumber);
+    },
+    nthColor: function(n) {
+      var index;
+      index = n % BaseColors.length;
+      return BaseColors[index];
+    },
+    randomColor: function(nextInt) {
+      var index;
+      index = nextInt(BaseColors.length);
+      return BaseColors[index];
+    },
+    rgbToHSB: function(rawR, rawG, rawB) {
+      var b, brightness, difference, g, hue, max, min, r, saturation;
+      r = attenuateRGB(rawR);
+      g = attenuateRGB(rawG);
+      b = attenuateRGB(rawB);
+      max = NLMath.max(r, g, b);
+      min = NLMath.min(r, g, b);
+      difference = max - min;
+      hue = (function() {
+        switch (max) {
+          case min:
+            return 0;
+          case r:
+            return ((g - b) + difference * (g < b ? 6 : 0)) / (6 * difference);
+          case g:
+            return ((b - r) + difference * 2) / (6 * difference);
+          case b:
+            return ((r - g) + difference * 4) / (6 * difference);
+        }
+      })();
+      saturation = max === 0 ? 0 : difference / max;
+      brightness = max / 255;
+      return [hue * 360, saturation * 100, brightness * 100].map(function(x) {
+        return NLMath.precision(x, 3);
+      });
+    },
+    wrapColor: function(color) {
+      var modColor;
+      if (JSType(color).isArray()) {
+        return color;
+      } else {
+        modColor = color % ColorMax;
+        if (modColor >= 0) {
+          return modColor;
+        } else {
+          return ColorMax + modColor;
+        }
+      }
+    },
+    scaleColor: function(color, number, min, max) {
+      var finalPercent, percent, percent10, tempmax, tempval;
+      percent = min > max ? number < max ? 1.0 : number > min ? 0.0 : (tempval = min - number, tempmax = min - max, tempval / tempmax) : number > max ? 1.0 : number < min ? 0.0 : (tempval = number - min, tempmax = max - min, tempval / tempmax);
+      percent10 = percent * 10;
+      finalPercent = percent10 >= 9.9999 ? 9.9999 : percent10 < 0 ? 0 : percent10;
+      return this._colorIntegral(color) * 10 + finalPercent;
+    },
+    _colorIntegral: function(color) {
+      return StrictMath.floor(this.wrapColor(color) / 10);
+    },
+    _nameToRGB: function(name) {
+      return BaseRGBs[NamesToIndicesMap[name]];
+    },
+    _estimateColorNumber: function(r, g, b) {
+      var f;
+      f = (function(_this) {
+        return function(acc, arg) {
+          var cb, cg, cr, dist, k, ref2, v;
+          k = arg[0], v = arg[1];
+          ref2 = keyToComponents(k), cr = ref2[0], cg = ref2[1], cb = ref2[2];
+          dist = _this._colorDistance(r, g, b, cr, cg, cb);
+          if (dist < acc[1]) {
+            return [v, dist];
+          } else {
+            return acc;
+          }
+        };
+      })(this);
+      return pipeline(pairs, foldl(f)([0, Number.MAX_VALUE]))(RGBMap)[0];
+    },
+    _colorDistance: function(r1, g1, b1, r2, g2, b2) {
+      var bDiff, gDiff, rDiff, rMean;
+      rMean = r1 + r2 / 2;
+      rDiff = r1 - r2;
+      gDiff = g1 - g2;
+      bDiff = b1 - b2;
+      return (((512 + rMean) * rDiff * rDiff) >> 8) + 4 * gDiff * gDiff + (((767 - rMean) * bDiff * bDiff) >> 8);
+    }
+  };
+
+}).call(this);
+
+},{"brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/number":"brazier/number","brazierjs/object":"brazier/object","shim/strictmath":"shim/strictmath","util/nlmath":"util/nlmath","util/typechecker":"util/typechecker"}],"engine/core/link/linkvariables":[function(require,module,exports){
+(function() {
+  var ColorModel, ImmutableVariableSpec, MutableVariableSpec, NLType, Setters, VariableSpecs, ref, setBreed, setColor, setEnd1, setEnd2, setIsHidden, setLabel, setLabelColor, setShape, setThickness, setTieMode;
+
+  ColorModel = require('engine/core/colormodel');
+
+  NLType = require('../typechecker');
+
+  ref = require('../structure/variablespec'), ImmutableVariableSpec = ref.ImmutableVariableSpec, MutableVariableSpec = ref.MutableVariableSpec;
+
+  setShape = function(shape) {
+    this._shape = shape.toLowerCase();
+    this._genVarUpdate("shape");
+  };
+
+  setBreed = function(breed) {
+    var newNames, oldNames, ref1, ref2, ref3, specialName, trueBreed, type;
+    type = NLType(breed);
+    trueBreed = (function() {
+      if (type.isString()) {
+        return this.world.breedManager.get(breed);
+      } else if (type.isAgentSet()) {
+        specialName = breed.getSpecialName();
+        if ((specialName != null) && this.world.breedManager.get(specialName).isLinky()) {
+          return this.world.breedManager.get(specialName);
+        } else {
+          throw new Error("You can't set BREED to a non-link-breed agentset.");
+        }
+      } else {
+        return breed;
+      }
+    }).call(this);
+    this.world.linkManager.trackBreedChange(this, trueBreed, (ref1 = (ref2 = this._breed) != null ? ref2.name : void 0) != null ? ref1 : "");
+    if (this._breed !== trueBreed) {
+      trueBreed.add(this);
+      if ((ref3 = this._breed) != null) {
+        ref3.remove(this);
+      }
+      newNames = this._varNamesForBreed(trueBreed);
+      oldNames = this._varNamesForBreed(this._breed);
+      this._varManager.refineBy(oldNames, newNames);
+    }
+    this._breed = trueBreed;
+    this._genVarUpdate("breed");
+    setShape.call(this, trueBreed.getShape());
+    this._refreshName();
+    if (!this.world.breedManager.links().contains(this)) {
+      this.world.breedManager.links().add(this);
+    }
+  };
+
+  setColor = function(color) {
+    this._color = ColorModel.wrapColor(color);
+    this._genVarUpdate("color");
+  };
+
+  setEnd1 = function(turtle) {
+    this.end1 = turtle;
+    this._genVarUpdate("end1");
+  };
+
+  setEnd2 = function(turtle) {
+    this.end2 = turtle;
+    this._genVarUpdate("end2");
+  };
+
+  setIsHidden = function(isHidden) {
+    this._isHidden = isHidden;
+    this._genVarUpdate("hidden?");
+  };
+
+  setLabel = function(label) {
+    this._label = label;
+    this._genVarUpdate("label");
+  };
+
+  setLabelColor = function(color) {
+    this._labelcolor = ColorModel.wrapColor(color);
+    this._genVarUpdate("label-color");
+  };
+
+  setThickness = function(thickness) {
+    this._thickness = thickness;
+    this._genVarUpdate("thickness");
+  };
+
+  setTieMode = function(mode) {
+    this.tiemode = mode;
+    this._genVarUpdate("tie-mode");
+  };
+
+  Setters = {
+    setBreed: setBreed,
+    setColor: setColor,
+    setEnd1: setEnd1,
+    setEnd2: setEnd2,
+    setIsHidden: setIsHidden,
+    setLabel: setLabel,
+    setLabelColor: setLabelColor,
+    setShape: setShape,
+    setThickness: setThickness,
+    setTieMode: setTieMode
+  };
+
+  VariableSpecs = [
+    new MutableVariableSpec('breed', (function() {
+      return this._getLinksByBreedName(this._breed.name);
+    }), setBreed), new MutableVariableSpec('color', (function() {
+      return this._color;
+    }), setColor), new MutableVariableSpec('end1', (function() {
+      return this.end1;
+    }), setEnd1), new MutableVariableSpec('end2', (function() {
+      return this.end2;
+    }), setEnd2), new MutableVariableSpec('hidden?', (function() {
+      return this._isHidden;
+    }), setIsHidden), new MutableVariableSpec('label', (function() {
+      return this._label;
+    }), setLabel), new MutableVariableSpec('label-color', (function() {
+      return this._labelcolor;
+    }), setLabelColor), new MutableVariableSpec('shape', (function() {
+      return this._shape;
+    }), setShape), new MutableVariableSpec('thickness', (function() {
+      return this._thickness;
+    }), setThickness), new MutableVariableSpec('tie-mode', (function() {
+      return this.tiemode;
+    }), setTieMode)
+  ];
+
+  module.exports = {
+    Setters: Setters,
+    VariableSpecs: VariableSpecs
+  };
+
+}).call(this);
+
+},{"../structure/variablespec":"engine/core/structure/variablespec","../typechecker":"engine/core/typechecker","engine/core/colormodel":"engine/core/colormodel"}],"engine/core/linkset":[function(require,module,exports){
+(function() {
+  var AbstractAgentSet, DeadSkippingIterator, JSType, LinkSet,
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  AbstractAgentSet = require('./abstractagentset');
+
+  DeadSkippingIterator = require('./structure/deadskippingiterator');
+
+  JSType = require('util/typechecker');
+
+  module.exports = LinkSet = (function(superClass) {
+    extend(LinkSet, superClass);
+
+    function LinkSet(_agents, world, specialName) {
+      this._agents = _agents;
+      LinkSet.__super__.constructor.call(this, this._unwrap(this._agents), world, "links", specialName);
+    }
+
+    LinkSet.prototype.iterator = function() {
+      return new DeadSkippingIterator(this._unwrap(this._agents));
+    };
+
+    LinkSet.prototype._unwrap = function(agents) {
+      if (JSType(agents).isFunction()) {
+        return agents();
+      } else {
+        return agents.slice(0);
+      }
+    };
+
+    return LinkSet;
+
+  })(AbstractAgentSet);
+
+}).call(this);
+
+},{"./abstractagentset":"engine/core/abstractagentset","./structure/deadskippingiterator":"engine/core/structure/deadskippingiterator","util/typechecker":"util/typechecker"}],"engine/core/link":[function(require,module,exports){
+(function() {
+  var AbstractAgentSet, AgentException, ColorModel, Death, EQ, ExtraVariableSpec, GT, LT, Link, Setters, Stamp, StampErase, StampMode, TurtleSet, VariableManager, VariableSpecs, linkCompare, ref, ref1, ref2;
+
+  AbstractAgentSet = require('./abstractagentset');
+
+  ColorModel = require('./colormodel');
+
+  linkCompare = require('./structure/linkcompare');
+
+  VariableManager = require('./structure/variablemanager');
+
+  TurtleSet = require('./turtleset');
+
+  ref = require('util/comparator'), EQ = ref.EQUALS, GT = ref.GREATER_THAN, LT = ref.LESS_THAN;
+
+  ref1 = require('util/exception'), AgentException = ref1.AgentException, Death = ref1.DeathInterrupt;
+
+  ref2 = require('./link/linkvariables'), Setters = ref2.Setters, VariableSpecs = ref2.VariableSpecs;
+
+  ExtraVariableSpec = require('./structure/variablespec').ExtraVariableSpec;
+
+  StampMode = (function() {
+    function StampMode(name1) {
+      this.name = name1;
+    }
+
+    return StampMode;
+
+  })();
+
+  Stamp = new StampMode("normal");
+
+  StampErase = new StampMode("erase");
+
+  module.exports = Link = (function() {
+    Link.prototype._breed = void 0;
+
+    Link.prototype._name = void 0;
+
+    Link.prototype._updateVarsByName = void 0;
+
+    Link.prototype._varManager = void 0;
+
+    function Link(id, isDirected, end1, end2, world, genUpdate, _registerDeath, _registerRemoval, _registerLinkStamp, _getLinksByBreedName, breed, _color, _isHidden, _label, _labelcolor, _shape, _thickness, tiemode) {
+      var varNames;
+      this.id = id;
+      this.isDirected = isDirected;
+      this.end1 = end1;
+      this.end2 = end2;
+      this.world = world;
+      this._registerDeath = _registerDeath;
+      this._registerRemoval = _registerRemoval;
+      this._registerLinkStamp = _registerLinkStamp;
+      this._getLinksByBreedName = _getLinksByBreedName;
+      if (breed == null) {
+        breed = this.world.breedManager.links();
+      }
+      this._color = _color != null ? _color : 5;
+      this._isHidden = _isHidden != null ? _isHidden : false;
+      this._label = _label != null ? _label : "";
+      this._labelcolor = _labelcolor != null ? _labelcolor : 9.9;
+      this._shape = _shape != null ? _shape : "default";
+      this._thickness = _thickness != null ? _thickness : 0;
+      this.tiemode = tiemode != null ? tiemode : "none";
+      this._updateVarsByName = genUpdate(this);
+      varNames = this._varNamesForBreed(breed);
+      this._varManager = this._genVarManager(varNames);
+      Setters.setBreed.call(this, breed);
+      this.end1.linkManager.add(this);
+      this.end2.linkManager.add(this);
+      this.updateEndRelatedVars();
+      this._updateVarsByName("directed?");
+    }
+
+    Link.prototype.getBreedName = function() {
+      return this._breed.name;
+    };
+
+    Link.prototype.getBreedNameSingular = function() {
+      return this._breed.singular;
+    };
+
+    Link.prototype.getBreedOrdinal = function() {
+      return this._breed.ordinal;
+    };
+
+    Link.prototype.getName = function() {
+      return this._name;
+    };
+
+    Link.prototype.getVariable = function(varName) {
+      return this._varManager[varName];
+    };
+
+    Link.prototype.setVariable = function(varName, value) {
+      this._varManager[varName] = value;
+    };
+
+    Link.prototype.die = function() {
+      this._breed.remove(this);
+      if (!this.isDead()) {
+        this.end1.linkManager.remove(this);
+        this.end2.linkManager.remove(this);
+        this._registerRemoval(this);
+        this._seppuku();
+        this.id = -1;
+      }
+      throw new Death("Call only from inside an askAgent block");
+    };
+
+    Link.prototype.stamp = function() {
+      this._drawStamp(Stamp);
+    };
+
+    Link.prototype.stampErase = function() {
+      this._drawStamp(StampErase);
+    };
+
+    Link.prototype.bothEnds = function() {
+      return new TurtleSet([this.end1, this.end2], this.world);
+    };
+
+    Link.prototype.otherEnd = function() {
+      if (this.end1 === this.world.selfManager.myself()) {
+        return this.end2;
+      } else {
+        return this.end1;
+      }
+    };
+
+    Link.prototype.tie = function() {
+      Setters.setTieMode.call(this, "fixed");
+    };
+
+    Link.prototype.untie = function() {
+      Setters.setTieMode.call(this, "none");
+    };
+
+    Link.prototype.updateEndRelatedVars = function() {
+      this._updateVarsByName("heading", "size", "midpointx", "midpointy");
+    };
+
+    Link.prototype.toString = function() {
+      if (!this.isDead()) {
+        return "(" + (this.getName()) + ")";
+      } else {
+        return "nobody";
+      }
+    };
+
+    Link.prototype.getCoords = function() {
+      return [this.getMidpointX(), this.getMidpointY()];
+    };
+
+    Link.prototype.getHeading = function() {
+      var error, error1;
+      try {
+        return this.world.topology.towards(this.end1.xcor, this.end1.ycor, this.end2.xcor, this.end2.ycor);
+      } catch (error1) {
+        error = error1;
+        if (error instanceof AgentException) {
+          throw new Error("there is no heading of a link whose endpoints are in the same position");
+        } else {
+          throw error;
+        }
+      }
+    };
+
+    Link.prototype.getMidpointX = function() {
+      return this.world.topology.midpointx(this.end1.xcor, this.end2.xcor);
+    };
+
+    Link.prototype.getMidpointY = function() {
+      return this.world.topology.midpointy(this.end1.ycor, this.end2.ycor);
+    };
+
+    Link.prototype.getSize = function() {
+      return this.world.topology.distanceXY(this.end1.xcor, this.end1.ycor, this.end2.xcor, this.end2.ycor);
+    };
+
+    Link.prototype.isBreed = function(breedName) {
+      return this._breed.name.toUpperCase() === breedName.toUpperCase();
+    };
+
+    Link.prototype.isDead = function() {
+      return this.id === -1;
+    };
+
+    Link.prototype.ask = function(f) {
+      var base;
+      this.world.selfManager.askAgent(f)(this);
+      if (typeof (base = this.world.selfManager.self()).isDead === "function" ? base.isDead() : void 0) {
+        throw new Death;
+      }
+    };
+
+    Link.prototype.projectionBy = function(f) {
+      if (!this.isDead()) {
+        return this.world.selfManager.askAgent(f)(this);
+      } else {
+        throw new Error("That " + this._breed.singular + " is dead.");
+      }
+    };
+
+    Link.prototype.compare = function(x) {
+      switch (linkCompare(this, x)) {
+        case -1:
+          return LT;
+        case 0:
+          return EQ;
+        case 1:
+          return GT;
+        default:
+          throw new Error("Comparison should only yield an integer within the interval [-1,1]");
+      }
+    };
+
+    Link.prototype.varNames = function() {
+      return this._varManager.names();
+    };
+
+    Link.prototype._drawStamp = function(mode) {
+      var color, e1x, e1y, e2x, e2y, error, midX, midY, ref3, ref4, stampHeading;
+      ref3 = this.end1, e1x = ref3.xcor, e1y = ref3.ycor;
+      ref4 = this.end2, e2x = ref4.xcor, e2y = ref4.ycor;
+      stampHeading = (function() {
+        var error1;
+        try {
+          return this.world.topology.towards(e1x, e1y, e2x, e2y);
+        } catch (error1) {
+          error = error1;
+          if (error instanceof AgentException) {
+            return 0;
+          } else {
+            throw error;
+          }
+        }
+      }).call(this);
+      color = ColorModel.colorToRGB(this._color);
+      midX = this.getMidpointX();
+      midY = this.getMidpointY();
+      this._registerLinkStamp(e1x, e1y, e2x, e2y, midX, midY, stampHeading, color, this._shape, this._thickness, this.isDirected, this.getSize(), this._isHidden, mode.name);
+    };
+
+    Link.prototype._refreshName = function() {
+      this._name = this._breed.singular + " " + this.end1.id + " " + this.end2.id;
+    };
+
+    Link.prototype._varNamesForBreed = function(breed) {
+      var linksBreed;
+      linksBreed = this.world.breedManager.links();
+      if (breed === linksBreed || (breed == null)) {
+        return linksBreed.varNames;
+      } else {
+        return linksBreed.varNames.concat(breed.varNames);
+      }
+    };
+
+    Link.prototype._seppuku = function() {
+      this._registerDeath(this.id);
+    };
+
+    Link.prototype._genVarManager = function(extraVarNames) {
+      var allSpecs, extraSpecs;
+      extraSpecs = extraVarNames.map(function(name) {
+        return new ExtraVariableSpec(name);
+      });
+      allSpecs = VariableSpecs.concat(extraSpecs);
+      return new VariableManager(this, allSpecs);
+    };
+
+    Link.prototype._genVarUpdate = function(varName) {
+      this._updateVarsByName(varName);
+    };
+
+    return Link;
+
+  })();
+
+}).call(this);
+
+},{"./abstractagentset":"engine/core/abstractagentset","./colormodel":"engine/core/colormodel","./link/linkvariables":"engine/core/link/linkvariables","./structure/linkcompare":"engine/core/structure/linkcompare","./structure/variablemanager":"engine/core/structure/variablemanager","./structure/variablespec":"engine/core/structure/variablespec","./turtleset":"engine/core/turtleset","util/comparator":"util/comparator","util/exception":"util/exception"}],"engine/core/observer":[function(require,module,exports){
+(function() {
+  var ExtraVariableSpec, Follow, NLType, Observe, Observer, Ride, VariableManager, Watch, agentToInt, difference, forEach, perspectiveFromNum, perspectiveFromString, perspectiveToNum, perspectiveToString, ref;
+
+  Observe = {};
+
+  Ride = {};
+
+  Follow = {};
+
+  Watch = {};
+
+  agentToInt = require('./agenttoint');
+
+  NLType = require('./typechecker');
+
+  VariableManager = require('./structure/variablemanager');
+
+  ref = require('brazierjs/array'), difference = ref.difference, forEach = ref.forEach;
+
+  ExtraVariableSpec = require('./structure/variablespec').ExtraVariableSpec;
+
+  perspectiveFromNum = function(num) {
+    switch (num) {
+      case 0:
+        return Observe;
+      case 1:
+        return Ride;
+      case 2:
+        return Follow;
+      case 3:
+        return Watch;
+      default:
+        throw new Error("Invalid perspective number: " + num);
+    }
+  };
+
+  perspectiveToNum = function(p) {
+    switch (p) {
+      case Observe:
+        return 0;
+      case Ride:
+        return 1;
+      case Follow:
+        return 2;
+      case Watch:
+        return 3;
+      default:
+        throw new Error("Invalid perspective: " + p);
+    }
+  };
+
+  perspectiveFromString = function(str) {
+    switch (str) {
+      case 'observe':
+        return Observe;
+      case 'ride':
+        return Ride;
+      case 'follow':
+        return Follow;
+      case 'watch':
+        return Watch;
+      default:
+        throw new Error("Invalid perspective string: " + str);
+    }
+  };
+
+  perspectiveToString = function(p) {
+    switch (p) {
+      case Observe:
+        return 'observe';
+      case Ride:
+        return 'ride';
+      case Follow:
+        return 'follow';
+      case Watch:
+        return 'watch';
+      default:
+        throw new Error("Invalid perspective: " + p);
+    }
+  };
+
+  module.exports.Perspective = {
+    Observe: Observe,
+    Ride: Ride,
+    Follow: Follow,
+    Watch: Watch,
+    perspectiveFromNum: perspectiveFromNum,
+    perspectiveToNum: perspectiveToNum,
+    perspectiveFromString: perspectiveFromString,
+    perspectiveToString: perspectiveToString
+  };
+
+  module.exports.Observer = Observer = (function() {
+    Observer.prototype.id = 0;
+
+    Observer.prototype._varManager = void 0;
+
+    Observer.prototype._perspective = void 0;
+
+    Observer.prototype._targetAgent = void 0;
+
+    Observer.prototype._codeGlobalNames = void 0;
+
+    Observer.prototype._updateVarsByName = void 0;
+
+    function Observer(genUpdate, _globalNames, _interfaceGlobalNames) {
+      var globalSpecs;
+      this._globalNames = _globalNames;
+      this._interfaceGlobalNames = _interfaceGlobalNames;
+      this._updateVarsByName = genUpdate(this);
+      this.resetPerspective();
+      globalSpecs = this._globalNames.map(function(name) {
+        return new ExtraVariableSpec(name);
+      });
+      this._varManager = new VariableManager(this, globalSpecs);
+      this._codeGlobalNames = difference(this._globalNames)(this._interfaceGlobalNames);
+    }
+
+    Observer.prototype.clearCodeGlobals = function() {
+      forEach((function(_this) {
+        return function(name) {
+          _this._varManager[name] = 0;
+        };
+      })(this))(this._codeGlobalNames);
+    };
+
+    Observer.prototype.follow = function(turtle) {
+      this._perspective = Follow;
+      this._targetAgent = turtle;
+      this._updatePerspective();
+    };
+
+    Observer.prototype.getGlobal = function(varName) {
+      return this._varManager[varName];
+    };
+
+    Observer.prototype.getVariable = function(varName) {
+      return this.getGlobal(varName);
+    };
+
+    Observer.prototype.getPerspective = function() {
+      return this._perspective;
+    };
+
+    Observer.prototype.setPerspective = function(perspective, subject) {
+      this._perspective = perspective;
+      this._targetAgent = subject;
+      this._updatePerspective();
+    };
+
+    Observer.prototype.resetPerspective = function() {
+      this._perspective = Observe;
+      this._targetAgent = null;
+      this._updatePerspective();
+    };
+
+    Observer.prototype.ride = function(turtle) {
+      this._perspective = Ride;
+      this._targetAgent = turtle;
+      this._updatePerspective();
+    };
+
+    Observer.prototype.setGlobal = function(varName, value) {
+      this._varManager[varName] = value;
+    };
+
+    Observer.prototype.setVariable = function(varName, value) {
+      this.setGlobal(varName, value);
+    };
+
+    Observer.prototype.subject = function() {
+      var ref1;
+      return (ref1 = this._targetAgent) != null ? ref1 : Nobody;
+    };
+
+    Observer.prototype.unfocus = function(turtle) {
+      if (this._targetAgent === turtle) {
+        this.resetPerspective();
+      }
+    };
+
+    Observer.prototype.varNames = function() {
+      return this._varManager.names();
+    };
+
+    Observer.prototype.watch = function(agent) {
+      var type;
+      type = NLType(agent);
+      this._perspective = Watch;
+      this._targetAgent = type.isTurtle() || type.isPatch() ? agent : Nobody;
+      this._updatePerspective();
+    };
+
+    Observer.prototype._updatePerspective = function() {
+      this._updateVarsByName("perspective", "targetAgent");
+    };
+
+    Observer.prototype._getTargetAgentUpdate = function() {
+      if (this._targetAgent != null) {
+        return [agentToInt(this._targetAgent), this._targetAgent.id];
+      } else {
+        return null;
+      }
+    };
+
+    return Observer;
+
+  })();
+
+}).call(this);
+
+},{"./agenttoint":"engine/core/agenttoint","./structure/variablemanager":"engine/core/structure/variablemanager","./structure/variablespec":"engine/core/structure/variablespec","./typechecker":"engine/core/typechecker","brazierjs/array":"brazier/array"}],"engine/core/patch/patchvariables":[function(require,module,exports){
+(function() {
+  var ColorModel, ImmutableVariableSpec, MutableVariableSpec, Setters, VariableSpecs, ref, setPcolor, setPlabel, setPlabelColor;
+
+  ColorModel = require('engine/core/colormodel');
+
+  ref = require('../structure/variablespec'), ImmutableVariableSpec = ref.ImmutableVariableSpec, MutableVariableSpec = ref.MutableVariableSpec;
+
+  setPcolor = function(color) {
+    var wrappedColor;
+    wrappedColor = ColorModel.wrapColor(color);
+    if (this._pcolor !== wrappedColor) {
+      this._pcolor = wrappedColor;
+      this._genVarUpdate("pcolor");
+      if (wrappedColor !== 0) {
+        this._declareNonBlackPatch();
+      }
+    }
+  };
+
+  setPlabel = function(label) {
+    var isEmpty, wasEmpty;
+    wasEmpty = this._plabel === "";
+    isEmpty = label === "";
+    this._plabel = label;
+    this._genVarUpdate("plabel");
+    if (isEmpty && !wasEmpty) {
+      this._decrementPatchLabelCount();
+    } else if (!isEmpty && wasEmpty) {
+      this._incrementPatchLabelCount();
+    }
+  };
+
+  setPlabelColor = function(color) {
+    this._plabelcolor = ColorModel.wrapColor(color);
+    this._genVarUpdate("plabel-color");
+  };
+
+  Setters = {
+    setPcolor: setPcolor,
+    setPlabel: setPlabel,
+    setPlabelColor: setPlabelColor
+  };
+
+  VariableSpecs = [
+    new ImmutableVariableSpec('pxcor', function() {
+      return this.pxcor;
+    }), new ImmutableVariableSpec('pycor', function() {
+      return this.pycor;
+    }), new MutableVariableSpec('pcolor', (function() {
+      return this._pcolor;
+    }), setPcolor), new MutableVariableSpec('plabel', (function() {
+      return this._plabel;
+    }), setPlabel), new MutableVariableSpec('plabel-color', (function() {
+      return this._plabelcolor;
+    }), setPlabelColor)
+  ];
+
+  module.exports = {
+    Setters: Setters,
+    VariableSpecs: VariableSpecs
+  };
+
+}).call(this);
+
+},{"../structure/variablespec":"engine/core/structure/variablespec","engine/core/colormodel":"engine/core/colormodel"}],"engine/core/patchset":[function(require,module,exports){
+(function() {
+  var AbstractAgentSet, Iterator, PatchSet,
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  AbstractAgentSet = require('./abstractagentset');
+
+  Iterator = require('util/iterator');
+
+  module.exports = PatchSet = (function(superClass) {
+    extend(PatchSet, superClass);
+
+    function PatchSet(agents, world, specialName) {
+      PatchSet.__super__.constructor.call(this, agents, world, "patches", specialName);
+    }
+
+    return PatchSet;
+
+  })(AbstractAgentSet);
+
+}).call(this);
+
+},{"./abstractagentset":"engine/core/abstractagentset","util/iterator":"util/iterator"}],"engine/core/patch":[function(require,module,exports){
+(function() {
+  var Comparator, Death, ExtraVariableSpec, Patch, Setters, TopologyInterrupt, TurtleSet, VariableManager, VariableSpecs, filter, foldl, ref, ref1, ref2,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  TurtleSet = require('./turtleset');
+
+  VariableManager = require('./structure/variablemanager');
+
+  Comparator = require('util/comparator');
+
+  ref = require('brazierjs/array'), filter = ref.filter, foldl = ref.foldl;
+
+  ref1 = require('util/exception'), Death = ref1.DeathInterrupt, TopologyInterrupt = ref1.TopologyInterrupt;
+
+  ref2 = require('./patch/patchvariables'), Setters = ref2.Setters, VariableSpecs = ref2.VariableSpecs;
+
+  ExtraVariableSpec = require('./structure/variablespec').ExtraVariableSpec;
+
+  module.exports = Patch = (function() {
+    Patch.prototype._turtles = void 0;
+
+    Patch.prototype._varManager = void 0;
+
+    function Patch(id, pxcor, pycor, world, _genUpdate, _declareNonBlackPatch, _decrementPatchLabelCount, _incrementPatchLabelCount, _pcolor, _plabel, _plabelcolor) {
+      this.id = id;
+      this.pxcor = pxcor;
+      this.pycor = pycor;
+      this.world = world;
+      this._genUpdate = _genUpdate;
+      this._declareNonBlackPatch = _declareNonBlackPatch;
+      this._decrementPatchLabelCount = _decrementPatchLabelCount;
+      this._incrementPatchLabelCount = _incrementPatchLabelCount;
+      this._pcolor = _pcolor != null ? _pcolor : 0.0;
+      this._plabel = _plabel != null ? _plabel : "";
+      this._plabelcolor = _plabelcolor != null ? _plabelcolor : 9.9;
+      this.patchAt = bind(this.patchAt, this);
+      this._turtles = [];
+      this._varManager = this._genVarManager(this.world.patchesOwnNames);
+    }
+
+    Patch.prototype.getName = function() {
+      return "patch " + this.pxcor + " " + this.pycor;
+    };
+
+    Patch.prototype.getVariable = function(varName) {
+      return this._varManager[varName];
+    };
+
+    Patch.prototype.setVariable = function(varName, value) {
+      this._varManager[varName] = value;
+    };
+
+    Patch.prototype.getPatchVariable = function(varName) {
+      return this._varManager[varName];
+    };
+
+    Patch.prototype.setPatchVariable = function(varName, value) {
+      this._varManager[varName] = value;
+    };
+
+    Patch.prototype.untrackTurtle = function(turtle) {
+      this._turtles.splice(this._turtles.indexOf(turtle, 0), 1);
+    };
+
+    Patch.prototype.trackTurtle = function(turtle) {
+      this._turtles.push(turtle);
+    };
+
+    Patch.prototype.getCoords = function() {
+      return [this.pxcor, this.pycor];
+    };
+
+    Patch.prototype.distance = function(agent) {
+      return this.world.topology.distance(this.pxcor, this.pycor, agent);
+    };
+
+    Patch.prototype.distanceXY = function(x, y) {
+      return this.world.topology.distanceXY(this.pxcor, this.pycor, x, y);
+    };
+
+    Patch.prototype.towardsXY = function(x, y) {
+      return this.world.topology.towards(this.pxcor, this.pycor, x, y);
+    };
+
+    Patch.prototype.turtlesHere = function() {
+      return new TurtleSet(this._turtles.slice(0), this.world);
+    };
+
+    Patch.prototype.ask = function(f) {
+      var base;
+      this.world.selfManager.askAgent(f)(this);
+      if (typeof (base = this.world.selfManager.self()).isDead === "function" ? base.isDead() : void 0) {
+        throw new Death;
+      }
+    };
+
+    Patch.prototype.projectionBy = function(f) {
+      return this.world.selfManager.askAgent(f)(this);
+    };
+
+    Patch.prototype.getNeighbors = function() {
+      return this.world.getNeighbors(this.pxcor, this.pycor);
+    };
+
+    Patch.prototype.getNeighbors4 = function() {
+      return this.world.getNeighbors4(this.pxcor, this.pycor);
+    };
+
+    Patch.prototype.sprout = function(n, breedName) {
+      return this.world.turtleManager.createTurtles(n, breedName, this.pxcor, this.pycor);
+    };
+
+    Patch.prototype.breedHere = function(breedName) {
+      return new TurtleSet(this.breedHereArray(breedName), this.world);
+    };
+
+    Patch.prototype.breedHereArray = function(breedName) {
+      return filter(function(turtle) {
+        return turtle.getBreedName() === breedName;
+      })(this._turtles);
+    };
+
+    Patch.prototype.turtlesAt = function(dx, dy) {
+      return this.patchAt(dx, dy).turtlesHere();
+    };
+
+    Patch.prototype.breedAt = function(breedName, dx, dy) {
+      return this.patchAt(dx, dy).breedHere(breedName);
+    };
+
+    Patch.prototype.patchAt = function(dx, dy) {
+      return this.patchAtCoords(this.pxcor + dx, this.pycor + dy);
+    };
+
+    Patch.prototype.patchAtCoords = function(x, y) {
+      return this.world.patchAtCoords(x, y);
+    };
+
+    Patch.prototype.patchAtHeadingAndDistance = function(angle, distance) {
+      return this.world.patchAtHeadingAndDistanceFrom(angle, distance, this.pxcor, this.pycor);
+    };
+
+    Patch.prototype.watchMe = function() {
+      this.world.observer.watch(this);
+    };
+
+    Patch.prototype.inRadius = function(agents, radius) {
+      return this.world.topology.inRadius(this.pxcor, this.pycor, agents, radius);
+    };
+
+    Patch.prototype.compare = function(x) {
+      return Comparator.numericCompare(this.id, x.id);
+    };
+
+    Patch.prototype.isDead = function() {
+      return false;
+    };
+
+    Patch.prototype.toString = function() {
+      return "(" + (this.getName()) + ")";
+    };
+
+    Patch.prototype.reset = function() {
+      this._varManager = this._genVarManager(this.world.patchesOwnNames);
+      Setters.setPcolor.call(this, 0);
+      Setters.setPlabel.call(this, '');
+      Setters.setPlabelColor.call(this, 9.9);
+    };
+
+    Patch.prototype.varNames = function() {
+      return this._varManager.names();
+    };
+
+    Patch.prototype._genVarManager = function(extraVarNames) {
+      var allSpecs, extraSpecs;
+      extraSpecs = extraVarNames.map(function(name) {
+        return new ExtraVariableSpec(name);
+      });
+      allSpecs = VariableSpecs.concat(extraSpecs);
+      return new VariableManager(this, allSpecs);
+    };
+
+    Patch.prototype._genVarUpdate = function(varName) {
+      this._genUpdate(this)(varName);
+    };
+
+    Patch.prototype._neighborSum = function(nbs, varName) {
+      var f;
+      f = function(acc, neighbor) {
+        var x;
+        x = neighbor.getVariable(varName);
+        if (NLType(x).isNumber()) {
+          return acc + x;
+        } else {
+          throw new Exception("noSumOfListWithNonNumbers, " + x);
+        }
+      };
+      return foldl(f)(0)(nbs.iterator().toArray());
+    };
+
+    Patch.prototype._optimalNSum = function(varName) {
+      return this._neighborSum(this.getNeighbors(), varName);
+    };
+
+    Patch.prototype._optimalNSum4 = function(varName) {
+      return this._neighborSum(this.getNeighbors4(), varName);
+    };
+
+    return Patch;
+
+  })();
+
+}).call(this);
+
+},{"./patch/patchvariables":"engine/core/patch/patchvariables","./structure/variablemanager":"engine/core/structure/variablemanager","./structure/variablespec":"engine/core/structure/variablespec","./turtleset":"engine/core/turtleset","brazierjs/array":"brazier/array","util/comparator":"util/comparator","util/exception":"util/exception"}],"engine/core/projectionsort":[function(require,module,exports){
+(function() {
+  var AgentKey, Comparator, NLType, NumberKey, OtherKey, StringKey, filter, foldl, initializeDictionary, isEmpty, map, pairs, pipeline, ref, stableSort;
+
+  NLType = require('./typechecker');
+
+  Comparator = require('util/comparator');
+
+  stableSort = require('util/stablesort');
+
+  ref = require('brazierjs/array'), filter = ref.filter, foldl = ref.foldl, isEmpty = ref.isEmpty, map = ref.map;
+
+  pipeline = require('brazierjs/function').pipeline;
+
+  pairs = require('brazierjs/object').pairs;
+
+  NumberKey = "number";
+
+  StringKey = "string";
+
+  AgentKey = "agent";
+
+  OtherKey = "other";
+
+  initializeDictionary = function(keys, generator) {
+    var f;
+    f = function(acc, key) {
+      acc[key] = generator(key);
+      return acc;
+    };
+    return foldl(f)({})(keys);
+  };
+
+  module.exports = function(agents) {
+    return function(f) {
+      var agentValuePairs, baseAcc, first, mapBuildFunc, ref1, sortingFunc, typeName, typeNameToPairsMap, typesInMap;
+      if (agents.length < 2) {
+        return agents;
+      } else {
+        mapBuildFunc = function(acc, agent) {
+          var key, pair, type, value;
+          value = agent.projectionBy(f);
+          pair = [agent, value];
+          type = NLType(value);
+          key = type.isNumber() ? NumberKey : type.isString() ? StringKey : type.isAgent() ? AgentKey : OtherKey;
+          acc[key].push(pair);
+          return acc;
+        };
+        first = function(arg) {
+          var _, x;
+          x = arg[0], _ = arg[1];
+          return x;
+        };
+        baseAcc = initializeDictionary([NumberKey, StringKey, AgentKey, OtherKey], function() {
+          return [];
+        });
+        typeNameToPairsMap = foldl(mapBuildFunc)(baseAcc)(agents);
+        typesInMap = pipeline(pairs, filter(function(arg) {
+          var _, x;
+          _ = arg[0], x = arg[1];
+          return !isEmpty(x);
+        }), map(first))(typeNameToPairsMap);
+        ref1 = (function() {
+          switch (typesInMap.join(" ")) {
+            case NumberKey:
+              return [
+                NumberKey, function(arg, arg1) {
+                  var n1, n2;
+                  arg[0], n1 = arg[1];
+                  arg1[0], n2 = arg1[1];
+                  return Comparator.numericCompare(n1, n2).toInt;
+                }
+              ];
+            case StringKey:
+              return [
+                StringKey, function(arg, arg1) {
+                  var s1, s2;
+                  arg[0], s1 = arg[1];
+                  arg1[0], s2 = arg1[1];
+                  return Comparator.stringCompare(s1, s2).toInt;
+                }
+              ];
+            case AgentKey:
+              return [
+                AgentKey, function(arg, arg1) {
+                  var a1, a2;
+                  arg[0], a1 = arg[1];
+                  arg1[0], a2 = arg1[1];
+                  return a1.compare(a2).toInt;
+                }
+              ];
+            default:
+              throw new Error("SORT-ON works on numbers, strings, or agents of the same type.");
+          }
+        })(), typeName = ref1[0], sortingFunc = ref1[1];
+        agentValuePairs = typeNameToPairsMap[typeName];
+        return map(first)(stableSort(agentValuePairs)(sortingFunc));
+      }
+    };
+  };
+
+}).call(this);
+
+},{"./typechecker":"engine/core/typechecker","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/object":"brazier/object","util/comparator":"util/comparator","util/stablesort":"util/stablesort"}],"engine/core/structure/builtins":[function(require,module,exports){
+(function() {
+  module.exports = {
+    turtleBuiltins: ["who", "color", "heading", "xcor", "ycor", "shape", "label", "label-color", "breed", "hidden?", "size", "pen-size", "pen-mode"],
+    patchBuiltins: ["pxcor", "pycor", "pcolor", "plabel", "plabel-color"],
+    linkBuiltins: ["end1", "end2", "color", "label", "label-color", "hidden?", "breed", "thickness", "shape", "tie-mode"],
+    linkExtras: ["heading", "size", "lcolor", "llabel", "llabelcolor", "lhidden", "lbreed", "lshape", "midpointx", "midpointy"]
+  };
+
+}).call(this);
+
+},{}],"engine/core/structure/deadskippingiterator":[function(require,module,exports){
+(function() {
+  var DeadSkippingIterator, Iterator,
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  Iterator = require('util/iterator');
+
+  module.exports = DeadSkippingIterator = (function(superClass) {
+    extend(DeadSkippingIterator, superClass);
+
+    DeadSkippingIterator.prototype._i = void 0;
+
+    function DeadSkippingIterator(items) {
+      DeadSkippingIterator.__super__.constructor.call(this, items);
+      this._i = 0;
+    }
+
+    DeadSkippingIterator.prototype.all = function(f) {
+      var i, len, ref, x;
+      ref = this._items;
+      for (i = 0, len = ref.length; i < len; i++) {
+        x = ref[i];
+        if (!x.isDead()) {
+          if (!f(x)) {
+            return false;
+          }
+        }
+      }
+      return true;
+    };
+
+    DeadSkippingIterator.prototype.contains = function(x) {
+      var i, len, ref, y;
+      ref = this._items;
+      for (i = 0, len = ref.length; i < len; i++) {
+        y = ref[i];
+        if (!x.isDead()) {
+          if (x === y) {
+            return true;
+          }
+        }
+      }
+      return false;
+    };
+
+    DeadSkippingIterator.prototype.exists = function(f) {
+      var i, len, ref, x;
+      ref = this._items;
+      for (i = 0, len = ref.length; i < len; i++) {
+        x = ref[i];
+        if (!x.isDead()) {
+          if (f(x)) {
+            return true;
+          }
+        }
+      }
+      return false;
+    };
+
+    DeadSkippingIterator.prototype.filter = function(f) {
+      var i, len, ref, results, x;
+      ref = this._items;
+      results = [];
+      for (i = 0, len = ref.length; i < len; i++) {
+        x = ref[i];
+        if ((!x.isDead()) && f(x)) {
+          results.push(x);
+        }
+      }
+      return results;
+    };
+
+    DeadSkippingIterator.prototype.map = function(f) {
+      var acc;
+      acc = [];
+      while (this._hasNext()) {
+        acc.push(f(this._next()));
+      }
+      return acc;
+    };
+
+    DeadSkippingIterator.prototype.forEach = function(f) {
+      while (this._hasNext()) {
+        f(this._next());
+      }
+    };
+
+    DeadSkippingIterator.prototype.toArray = function() {
+      var acc;
+      acc = [];
+      while (this._hasNext()) {
+        acc.push(this._next());
+      }
+      return acc;
+    };
+
+    DeadSkippingIterator.prototype._hasNext = function() {
+      this._skipToNext();
+      return this._isntEmpty();
+    };
+
+    DeadSkippingIterator.prototype._next = function() {
+      this._skipToNext();
+      return this._items[this._i++];
+    };
+
+    DeadSkippingIterator.prototype._skipToNext = function() {
+      while (this._isntEmpty() && this._items[this._i].isDead()) {
+        this._i++;
+      }
+    };
+
+    DeadSkippingIterator.prototype._isntEmpty = function() {
+      return this._i < this._items.length;
+    };
+
+    return DeadSkippingIterator;
+
+  })(Iterator);
+
+}).call(this);
+
+},{"util/iterator":"util/iterator"}],"engine/core/structure/linkcompare":[function(require,module,exports){
+(function() {
+  module.exports = function(a, b) {
+    if (a === b) {
+      return 0;
+    } else if (a.isDead() && b.isDead()) {
+      return 0;
+    } else if (a.end1.id < b.end1.id) {
+      return -1;
+    } else if (a.end1.id > b.end1.id) {
+      return 1;
+    } else if (a.end2.id < b.end2.id) {
+      return -1;
+    } else if (a.end2.id > b.end2.id) {
+      return 1;
+    } else if (a.getBreedName() === b.getBreedName()) {
+      return 0;
+    } else if (a.getBreedName() === "LINKS") {
+      return -1;
+    } else if (b.getBreedName() === "LINKS") {
+      return 1;
+    } else if (a.getBreedOrdinal() < b.getBreedOrdinal()) {
+      return -1;
+    } else if (a.getBreedOrdinal() > b.getBreedOrdinal()) {
+      return 1;
+    } else {
+      return 0;
+    }
+  };
+
+}).call(this);
+
+},{}],"engine/core/structure/penmanager":[function(require,module,exports){
+(function() {
+  var Down, Erase, PenManager, PenStatus, Up;
+
+  PenStatus = (function() {
+    function PenStatus(_name) {
+      this._name = _name;
+    }
+
+    PenStatus.prototype.toString = function() {
+      return this._name;
+    };
+
+    return PenStatus;
+
+  })();
+
+  Up = new PenStatus("up");
+
+  Down = new PenStatus("down");
+
+  Erase = new PenStatus("erase");
+
+  PenManager = (function() {
+    function PenManager(_updateFunc, _size, _status) {
+      this._updateFunc = _updateFunc;
+      this._size = _size != null ? _size : 1.0;
+      this._status = _status != null ? _status : Up;
+    }
+
+    PenManager.prototype.getSize = function() {
+      return this._size;
+    };
+
+    PenManager.prototype.getMode = function() {
+      return this._status;
+    };
+
+    PenManager.prototype.setPenMode = function(position) {
+      if (position === Up.toString()) {
+        this.raisePen();
+      } else if (position === Erase.toString()) {
+        this.useEraser();
+      } else {
+        this.lowerPen();
+      }
+    };
+
+    PenManager.prototype.raisePen = function() {
+      this._updateStatus(Up);
+    };
+
+    PenManager.prototype.lowerPen = function() {
+      this._updateStatus(Down);
+    };
+
+    PenManager.prototype.useEraser = function() {
+      this._updateStatus(Erase);
+    };
+
+    PenManager.prototype.setSize = function(size) {
+      this._updateSize(size);
+    };
+
+    PenManager.prototype.clone = function(updateFunc) {
+      return new PenManager(updateFunc, this._size, this._status);
+    };
+
+    PenManager.prototype._updateSize = function(newSize) {
+      this._size = newSize;
+      this._updateFunc("pen-size");
+    };
+
+    PenManager.prototype._updateStatus = function(newStatus) {
+      this._status = newStatus;
+      this._updateFunc("pen-mode");
+    };
+
+    return PenManager;
+
+  })();
+
+  module.exports = {
+    PenManager: PenManager,
+    PenStatus: {
+      Up: Up,
+      Down: Down,
+      Erase: Erase
+    }
+  };
+
+}).call(this);
+
+},{}],"engine/core/structure/selfmanager":[function(require,module,exports){
+(function() {
+  var DeathInterrupt, SelfManager, ignorantly, ignoring, ref,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  ref = require('util/exception'), DeathInterrupt = ref.DeathInterrupt, ignoring = ref.ignoring;
+
+  ignorantly = ignoring(DeathInterrupt);
+
+  module.exports = SelfManager = (function() {
+    SelfManager.prototype._self = void 0;
+
+    SelfManager.prototype._myself = void 0;
+
+    function SelfManager() {
+      this.askAgent = bind(this.askAgent, this);
+      this.self = bind(this.self, this);
+      this._self = 0;
+      this._myself = 0;
+    }
+
+    SelfManager.prototype.self = function() {
+      return this._self;
+    };
+
+    SelfManager.prototype.myself = function() {
+      if (this._myself !== 0) {
+        return this._myself;
+      } else {
+        throw new Error("There is no agent for MYSELF to refer to.");
+      }
+    };
+
+    SelfManager.prototype.askAgent = function(f) {
+      var at;
+      at = this;
+      return function(agent) {
+        var oldAgent, oldMyself;
+        oldMyself = at._myself;
+        oldAgent = at._self;
+        at._myself = at._self;
+        at._self = agent;
+        try {
+          return ignorantly(f);
+        } finally {
+          at._self = oldAgent;
+          at._myself = oldMyself;
+        }
+      };
+    };
+
+    return SelfManager;
+
+  })();
+
+}).call(this);
+
+},{"util/exception":"util/exception"}],"engine/core/structure/variablemanager":[function(require,module,exports){
+(function() {
+  var ExtraVariableSpec, ImmutableVariableSpec, MutableVariableSpec, VariableManager, difference, ref;
+
+  difference = require('brazierjs/array').difference;
+
+  ref = require('./variablespec'), ExtraVariableSpec = ref.ExtraVariableSpec, ImmutableVariableSpec = ref.ImmutableVariableSpec, MutableVariableSpec = ref.MutableVariableSpec;
+
+  module.exports = VariableManager = (function() {
+    VariableManager.prototype._names = void 0;
+
+    function VariableManager(agent, varSpecs) {
+      var name;
+      this.agent = agent;
+      this._addVarsBySpec(varSpecs);
+      this._names = (function() {
+        var i, len, results;
+        results = [];
+        for (i = 0, len = varSpecs.length; i < len; i++) {
+          name = varSpecs[i].name;
+          results.push(name);
+        }
+        return results;
+      })();
+    }
+
+    VariableManager.prototype.names = function() {
+      return this._names;
+    };
+
+    VariableManager.prototype.refineBy = function(oldNames, newNames) {
+      var freshNames, i, invalidatedSetter, len, name, obsoletedNames, specs;
+      invalidatedSetter = function(name) {
+        return function(value) {
+          throw new Error(name + " is no longer a valid variable.");
+        };
+      };
+      obsoletedNames = difference(oldNames)(newNames);
+      freshNames = difference(newNames)(oldNames);
+      specs = freshNames.map(function(name) {
+        return new ExtraVariableSpec(name);
+      });
+      for (i = 0, len = obsoletedNames.length; i < len; i++) {
+        name = obsoletedNames[i];
+        this._defineProperty(name, {
+          get: void 0,
+          set: invalidatedSetter(name),
+          configurable: true
+        });
+      }
+      this._addVarsBySpec(specs);
+      this._names = difference(this._names)(obsoletedNames).concat(freshNames);
+    };
+
+    VariableManager.prototype._addVarsBySpec = function(varSpecs) {
+      var get, i, len, obj, set, spec;
+      for (i = 0, len = varSpecs.length; i < len; i++) {
+        spec = varSpecs[i];
+        obj = (function() {
+          if (spec instanceof ExtraVariableSpec) {
+            return {
+              configurable: true,
+              value: 0,
+              writable: true
+            };
+          } else if (spec instanceof MutableVariableSpec) {
+            get = (function(spec) {
+              return function() {
+                return spec.get.call(this.agent);
+              };
+            })(spec);
+            set = (function(spec) {
+              return function(x) {
+                return spec.set.call(this.agent, x);
+              };
+            })(spec);
+            return {
+              configurable: true,
+              get: get,
+              set: set
+            };
+          } else if (spec instanceof ImmutableVariableSpec) {
+            return {
+              value: spec.get.call(this.agent),
+              writable: false
+            };
+          } else {
+            throw new Error("Non-exhaustive spec type match: " + (typeof spec) + "!");
+          }
+        }).call(this);
+        this._defineProperty(spec.name, obj);
+      }
+    };
+
+    VariableManager.prototype._defineProperty = function(propName, config) {
+      Object.defineProperty(this, propName, config);
+    };
+
+    return VariableManager;
+
+  })();
+
+}).call(this);
+
+},{"./variablespec":"engine/core/structure/variablespec","brazierjs/array":"brazier/array"}],"engine/core/structure/variablespec":[function(require,module,exports){
+(function() {
+  var ExtraVariableSpec, ImmutableVariableSpec, MutableVariableSpec, VariableSpec,
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  VariableSpec = (function() {
+    function VariableSpec(name1) {
+      this.name = name1;
+    }
+
+    return VariableSpec;
+
+  })();
+
+  ExtraVariableSpec = (function(superClass) {
+    extend(ExtraVariableSpec, superClass);
+
+    function ExtraVariableSpec() {
+      return ExtraVariableSpec.__super__.constructor.apply(this, arguments);
+    }
+
+    return ExtraVariableSpec;
+
+  })(VariableSpec);
+
+  ImmutableVariableSpec = (function(superClass) {
+    extend(ImmutableVariableSpec, superClass);
+
+    function ImmutableVariableSpec(name, get) {
+      this.get = get;
+      ImmutableVariableSpec.__super__.constructor.call(this, name);
+    }
+
+    return ImmutableVariableSpec;
+
+  })(VariableSpec);
+
+  MutableVariableSpec = (function(superClass) {
+    extend(MutableVariableSpec, superClass);
+
+    function MutableVariableSpec(name, get, set) {
+      this.get = get;
+      this.set = set;
+      MutableVariableSpec.__super__.constructor.call(this, name);
+    }
+
+    return MutableVariableSpec;
+
+  })(VariableSpec);
+
+  module.exports = {
+    ExtraVariableSpec: ExtraVariableSpec,
+    ImmutableVariableSpec: ImmutableVariableSpec,
+    MutableVariableSpec: MutableVariableSpec,
+    VariableSpec: VariableSpec
+  };
+
+}).call(this);
+
+},{}],"engine/core/topology/box":[function(require,module,exports){
+(function() {
+  var Box, Topology,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  Topology = require('./topology');
+
+  module.exports = Box = (function(superClass) {
+    extend(Box, superClass);
+
+    function Box() {
+      this._shortestY = bind(this._shortestY, this);
+      this._shortestX = bind(this._shortestX, this);
+      return Box.__super__.constructor.apply(this, arguments);
+    }
+
+    Box.prototype._wrapInX = false;
+
+    Box.prototype._wrapInY = false;
+
+    Box.prototype.wrapX = function(pos) {
+      return this._wrapXCautiously(pos);
+    };
+
+    Box.prototype.wrapY = function(pos) {
+      return this._wrapYCautiously(pos);
+    };
+
+    Box.prototype._getPatchNorth = function(pxcor, pycor) {
+      return (pycor !== this.maxPycor) && this._getPatchAt(pxcor, pycor + 1);
+    };
+
+    Box.prototype._getPatchSouth = function(pxcor, pycor) {
+      return (pycor !== this.minPycor) && this._getPatchAt(pxcor, pycor - 1);
+    };
+
+    Box.prototype._getPatchEast = function(pxcor, pycor) {
+      return (pxcor !== this.maxPxcor) && this._getPatchAt(pxcor + 1, pycor);
+    };
+
+    Box.prototype._getPatchWest = function(pxcor, pycor) {
+      return (pxcor !== this.minPxcor) && this._getPatchAt(pxcor - 1, pycor);
+    };
+
+    Box.prototype._getPatchNorthWest = function(pxcor, pycor) {
+      return (pycor !== this.maxPycor) && (pxcor !== this.minPxcor) && this._getPatchAt(pxcor - 1, pycor + 1);
+    };
+
+    Box.prototype._getPatchSouthWest = function(pxcor, pycor) {
+      return (pycor !== this.minPycor) && (pxcor !== this.minPxcor) && this._getPatchAt(pxcor - 1, pycor - 1);
+    };
+
+    Box.prototype._getPatchSouthEast = function(pxcor, pycor) {
+      return (pycor !== this.minPycor) && (pxcor !== this.maxPxcor) && this._getPatchAt(pxcor + 1, pycor - 1);
+    };
+
+    Box.prototype._getPatchNorthEast = function(pxcor, pycor) {
+      return (pycor !== this.maxPycor) && (pxcor !== this.maxPxcor) && this._getPatchAt(pxcor + 1, pycor + 1);
+    };
+
+    Box.prototype._refineScratchPads = function(yy, xx, scratch, scratch2, coefficient) {
+      var diffuseVal, i, j, ref, ref1, x, y;
+      for (y = i = 0, ref = yy; 0 <= ref ? i < ref : i > ref; y = 0 <= ref ? ++i : --i) {
+        for (x = j = 0, ref1 = xx; 0 <= ref1 ? j < ref1 : j > ref1; x = 0 <= ref1 ? ++j : --j) {
+          diffuseVal = (scratch[x][y] / 8) * coefficient;
+          if ((0 < y && y < yy - 1) && (0 < x && x < xx - 1)) {
+            scratch2[x][y] += scratch[x][y] - (8 * diffuseVal);
+            scratch2[x - 1][y - 1] += diffuseVal;
+            scratch2[x - 1][y] += diffuseVal;
+            scratch2[x - 1][y + 1] += diffuseVal;
+            scratch2[x][y + 1] += diffuseVal;
+            scratch2[x][y - 1] += diffuseVal;
+            scratch2[x + 1][y - 1] += diffuseVal;
+            scratch2[x + 1][y] += diffuseVal;
+            scratch2[x + 1][y + 1] += diffuseVal;
+          } else if ((0 < y && y < yy - 1)) {
+            if (x === 0) {
+              scratch2[x][y] += scratch[x][y] - (5 * diffuseVal);
+              scratch2[x][y + 1] += diffuseVal;
+              scratch2[x][y - 1] += diffuseVal;
+              scratch2[x + 1][y - 1] += diffuseVal;
+              scratch2[x + 1][y] += diffuseVal;
+              scratch2[x + 1][y + 1] += diffuseVal;
+            } else {
+              scratch2[x][y] += scratch[x][y] - (5 * diffuseVal);
+              scratch2[x][y + 1] += diffuseVal;
+              scratch2[x][y - 1] += diffuseVal;
+              scratch2[x - 1][y - 1] += diffuseVal;
+              scratch2[x - 1][y] += diffuseVal;
+              scratch2[x - 1][y + 1] += diffuseVal;
+            }
+          } else if ((0 < x && x < xx - 1)) {
+            if (y === 0) {
+              scratch2[x][y] += scratch[x][y] - (5 * diffuseVal);
+              scratch2[x - 1][y] += diffuseVal;
+              scratch2[x - 1][y + 1] += diffuseVal;
+              scratch2[x][y + 1] += diffuseVal;
+              scratch2[x + 1][y] += diffuseVal;
+              scratch2[x + 1][y + 1] += diffuseVal;
+            } else {
+              scratch2[x][y] += scratch[x][y] - (5 * diffuseVal);
+              scratch2[x - 1][y] += diffuseVal;
+              scratch2[x - 1][y - 1] += diffuseVal;
+              scratch2[x][y - 1] += diffuseVal;
+              scratch2[x + 1][y] += diffuseVal;
+              scratch2[x + 1][y - 1] += diffuseVal;
+            }
+          } else if (x === 0) {
+            if (y === 0) {
+              scratch2[x][y] += scratch[x][y] - (3 * diffuseVal);
+              scratch2[x][y + 1] += diffuseVal;
+              scratch2[x + 1][y] += diffuseVal;
+              scratch2[x + 1][y + 1] += diffuseVal;
+            } else {
+              scratch2[x][y] += scratch[x][y] - (3 * diffuseVal);
+              scratch2[x][y - 1] += diffuseVal;
+              scratch2[x + 1][y] += diffuseVal;
+              scratch2[x + 1][y - 1] += diffuseVal;
+            }
+          } else if (y === 0) {
+            scratch2[x][y] += scratch[x][y] - (3 * diffuseVal);
+            scratch2[x][y + 1] += diffuseVal;
+            scratch2[x - 1][y] += diffuseVal;
+            scratch2[x - 1][y + 1] += diffuseVal;
+          } else {
+            scratch2[x][y] += scratch[x][y] - (3 * diffuseVal);
+            scratch2[x][y - 1] += diffuseVal;
+            scratch2[x - 1][y] += diffuseVal;
+            scratch2[x - 1][y - 1] += diffuseVal;
+          }
+        }
+      }
+    };
+
+    Box.prototype._refineScratchPads4 = function(yy, xx, scratch, scratch2, coefficient) {
+      var diffuseVal, i, j, ref, ref1, x, y;
+      for (y = i = 0, ref = yy; 0 <= ref ? i < ref : i > ref; y = 0 <= ref ? ++i : --i) {
+        for (x = j = 0, ref1 = xx; 0 <= ref1 ? j < ref1 : j > ref1; x = 0 <= ref1 ? ++j : --j) {
+          diffuseVal = (scratch[x][y] / 4) * coefficient;
+          if ((0 < y && y < yy - 1) && (0 < x && x < xx - 1)) {
+            scratch2[x][y] += scratch[x][y] - (4 * diffuseVal);
+            scratch2[x - 1][y] += diffuseVal;
+            scratch2[x][y + 1] += diffuseVal;
+            scratch2[x][y - 1] += diffuseVal;
+            scratch2[x + 1][y] += diffuseVal;
+          } else if ((0 < y && y < yy - 1)) {
+            if (x === 0) {
+              scratch2[x][y] += scratch[x][y] - (3 * diffuseVal);
+              scratch2[x][y + 1] += diffuseVal;
+              scratch2[x][y - 1] += diffuseVal;
+              scratch2[x + 1][y] += diffuseVal;
+            } else {
+              scratch2[x][y] += scratch[x][y] - (3 * diffuseVal);
+              scratch2[x][y + 1] += diffuseVal;
+              scratch2[x][y - 1] += diffuseVal;
+              scratch2[x - 1][y] += diffuseVal;
+            }
+          } else if ((0 < x && x < xx - 1)) {
+            if (y === 0) {
+              scratch2[x][y] += scratch[x][y] - (3 * diffuseVal);
+              scratch2[x - 1][y] += diffuseVal;
+              scratch2[x][y + 1] += diffuseVal;
+              scratch2[x + 1][y] += diffuseVal;
+            } else {
+              scratch2[x][y] += scratch[x][y] - (3 * diffuseVal);
+              scratch2[x - 1][y] += diffuseVal;
+              scratch2[x][y - 1] += diffuseVal;
+              scratch2[x + 1][y] += diffuseVal;
+            }
+          } else if (x === 0) {
+            if (y === 0) {
+              scratch2[x][y] += scratch[x][y] - (2 * diffuseVal);
+              scratch2[x][y + 1] += diffuseVal;
+              scratch2[x + 1][y] += diffuseVal;
+            } else {
+              scratch2[x][y] += scratch[x][y] - (2 * diffuseVal);
+              scratch2[x][y - 1] += diffuseVal;
+              scratch2[x + 1][y] += diffuseVal;
+            }
+          } else if (y === 0) {
+            scratch2[x][y] += scratch[x][y] - (2 * diffuseVal);
+            scratch2[x][y + 1] += diffuseVal;
+            scratch2[x - 1][y] += diffuseVal;
+          } else {
+            scratch2[x][y] += scratch[x][y] - (2 * diffuseVal);
+            scratch2[x][y - 1] += diffuseVal;
+            scratch2[x - 1][y] += diffuseVal;
+          }
+        }
+      }
+    };
+
+    Box.prototype._shortestX = function(x1, x2) {
+      return this._shortestNotWrapped(x1, x2);
+    };
+
+    Box.prototype._shortestY = function(y1, y2) {
+      return this._shortestNotWrapped(y1, y2);
+    };
+
+    return Box;
+
+  })(Topology);
+
+}).call(this);
+
+},{"./topology":"engine/core/topology/topology"}],"engine/core/topology/factory":[function(require,module,exports){
+(function() {
+  var Box, HorizCylinder, Torus, VertCylinder;
+
+  Box = require('./box');
+
+  HorizCylinder = require('./horizcylinder');
+
+  Torus = require('./torus');
+
+  VertCylinder = require('./vertcylinder');
+
+  module.exports = function(wrapsInX, wrapsInY, minX, maxX, minY, maxY, getPatchesFunc, getPatchAtFunc) {
+    var TopoClass;
+    TopoClass = wrapsInX && wrapsInY ? Torus : wrapsInX ? VertCylinder : wrapsInY ? HorizCylinder : Box;
+    return new TopoClass(minX, maxX, minY, maxY, getPatchesFunc, getPatchAtFunc);
+  };
+
+}).call(this);
+
+},{"./box":"engine/core/topology/box","./horizcylinder":"engine/core/topology/horizcylinder","./torus":"engine/core/topology/torus","./vertcylinder":"engine/core/topology/vertcylinder"}],"engine/core/topology/horizcylinder":[function(require,module,exports){
+(function() {
+  var HorizCylinder, Topology,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  Topology = require('./topology');
+
+  module.exports = HorizCylinder = (function(superClass) {
+    extend(HorizCylinder, superClass);
+
+    function HorizCylinder() {
+      this._shortestY = bind(this._shortestY, this);
+      this._shortestX = bind(this._shortestX, this);
+      return HorizCylinder.__super__.constructor.apply(this, arguments);
+    }
+
+    HorizCylinder.prototype._wrapInX = false;
+
+    HorizCylinder.prototype._wrapInY = true;
+
+    HorizCylinder.prototype.wrapX = function(pos) {
+      return this._wrapXCautiously(pos);
+    };
+
+    HorizCylinder.prototype.wrapY = function(pos) {
+      return this._wrapYLeniently(pos);
+    };
+
+    HorizCylinder.prototype._getPatchEast = function(pxcor, pycor) {
+      return (pxcor !== this.maxPxcor) && this._getPatchAt(pxcor + 1, pycor);
+    };
+
+    HorizCylinder.prototype._getPatchWest = function(pxcor, pycor) {
+      return (pxcor !== this.minPxcor) && this._getPatchAt(pxcor - 1, pycor);
+    };
+
+    HorizCylinder.prototype._getPatchNorth = function(pxcor, pycor) {
+      if (pycor === this.maxPycor) {
+        return this._getPatchAt(pxcor, this.minPycor);
+      } else {
+        return this._getPatchAt(pxcor, pycor + 1);
+      }
+    };
+
+    HorizCylinder.prototype._getPatchSouth = function(pxcor, pycor) {
+      if (pycor === this.minPycor) {
+        return this._getPatchAt(pxcor, this.maxPycor);
+      } else {
+        return this._getPatchAt(pxcor, pycor - 1);
+      }
+    };
+
+    HorizCylinder.prototype._getPatchNorthWest = function(pxcor, pycor) {
+      if (pxcor === this.minPxcor) {
+        return false;
+      } else if (pycor === this.maxPycor) {
+        return this._getPatchAt(pxcor - 1, this.minPycor);
+      } else {
+        return this._getPatchAt(pxcor - 1, pycor + 1);
+      }
+    };
+
+    HorizCylinder.prototype._getPatchSouthWest = function(pxcor, pycor) {
+      if (pxcor === this.minPxcor) {
+        return false;
+      } else if (pycor === this.minPycor) {
+        return this._getPatchAt(pxcor - 1, this.maxPycor);
+      } else {
+        return this._getPatchAt(pxcor - 1, pycor - 1);
+      }
+    };
+
+    HorizCylinder.prototype._getPatchSouthEast = function(pxcor, pycor) {
+      if (pxcor === this.maxPxcor) {
+        return false;
+      } else if (pycor === this.minPycor) {
+        return this._getPatchAt(pxcor + 1, this.maxPycor);
+      } else {
+        return this._getPatchAt(pxcor + 1, pycor - 1);
+      }
+    };
+
+    HorizCylinder.prototype._getPatchNorthEast = function(pxcor, pycor) {
+      if (pxcor === this.maxPxcor) {
+        return false;
+      } else if (pycor === this.maxPycor) {
+        return this._getPatchAt(pxcor + 1, this.minPycor);
+      } else {
+        return this._getPatchAt(pxcor + 1, pycor + 1);
+      }
+    };
+
+    HorizCylinder.prototype._refineScratchPads = function(yy, xx, scratch, scratch2, coefficient) {
+      var diffuseVal, i, j, ref, ref1, ref2, ref3, x, y;
+      for (y = i = ref = yy, ref1 = yy * 2; ref <= ref1 ? i < ref1 : i > ref1; y = ref <= ref1 ? ++i : --i) {
+        for (x = j = ref2 = xx, ref3 = xx * 2; ref2 <= ref3 ? j < ref3 : j > ref3; x = ref2 <= ref3 ? ++j : --j) {
+          diffuseVal = (scratch[x - xx][y - yy] / 8) * coefficient;
+          if ((xx < x && x < (xx * 2) - 1)) {
+            scratch2[x - xx][y - yy] += scratch[x - xx][y - yy] - (8 * diffuseVal);
+            scratch2[(x - 1) % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x - 1) % xx][y % yy] += diffuseVal;
+            scratch2[(x - 1) % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[x % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[x % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][y % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][(y + 1) % yy] += diffuseVal;
+          } else if (x === xx) {
+            scratch2[x - xx][y - yy] += scratch[x - xx][y - yy] - (5 * diffuseVal);
+            scratch2[x % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[x % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][y % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][(y + 1) % yy] += diffuseVal;
+          } else {
+            scratch2[x - xx][y - yy] += scratch[x - xx][y - yy] - (5 * diffuseVal);
+            scratch2[x % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[x % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x - 1) % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x - 1) % xx][y % yy] += diffuseVal;
+            scratch2[(x - 1) % xx][(y + 1) % yy] += diffuseVal;
+          }
+        }
+      }
+    };
+
+    HorizCylinder.prototype._refineScratchPads4 = function(yy, xx, scratch, scratch2, coefficient) {
+      var diffuseVal, i, j, ref, ref1, ref2, ref3, x, y;
+      for (y = i = ref = yy, ref1 = yy * 2; ref <= ref1 ? i < ref1 : i > ref1; y = ref <= ref1 ? ++i : --i) {
+        for (x = j = ref2 = xx, ref3 = xx * 2; ref2 <= ref3 ? j < ref3 : j > ref3; x = ref2 <= ref3 ? ++j : --j) {
+          diffuseVal = (scratch[x - xx][y - yy] / 4) * coefficient;
+          if ((xx < x && x < (xx * 2) - 1)) {
+            scratch2[x - xx][y - yy] += scratch[x - xx][y - yy] - (4 * diffuseVal);
+            scratch2[(x - 1) % xx][y % yy] += diffuseVal;
+            scratch2[x % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[x % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][y % yy] += diffuseVal;
+          } else if (x === xx) {
+            scratch2[x - xx][y - yy] += scratch[x - xx][y - yy] - (3 * diffuseVal);
+            scratch2[x % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[x % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][y % yy] += diffuseVal;
+          } else {
+            scratch2[x - xx][y - yy] += scratch[x - xx][y - yy] - (3 * diffuseVal);
+            scratch2[x % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[x % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x - 1) % xx][y % yy] += diffuseVal;
+          }
+        }
+      }
+    };
+
+    HorizCylinder.prototype._shortestX = function(x1, x2) {
+      return this._shortestNotWrapped(x1, x2);
+    };
+
+    HorizCylinder.prototype._shortestY = function(y1, y2) {
+      return this._shortestYWrapped(y1, y2);
+    };
+
+    return HorizCylinder;
+
+  })(Topology);
+
+}).call(this);
+
+},{"./topology":"engine/core/topology/topology"}],"engine/core/topology/incone":[function(require,module,exports){
+(function() {
+  var NLMath, NLType, findCircleBounds;
+
+  NLMath = require('util/nlmath');
+
+  NLType = require('../typechecker');
+
+  findCircleBounds = function(wrapsInDim, worldSpan, distance, minDim, maxDim, currentDim) {
+    var diff, dist, halfSpan, max, min;
+    dist = NLMath.ceil(distance);
+    if (wrapsInDim) {
+      halfSpan = worldSpan / 2;
+      if (dist < halfSpan) {
+        return [-dist, dist];
+      } else {
+        return [-NLMath.ceil(halfSpan - 1), NLMath.floor(halfSpan)];
+      }
+    } else {
+      diff = minDim - currentDim;
+      min = NLMath.abs(diff) < dist ? diff : -dist;
+      max = NLMath.min(maxDim - currentDim, dist);
+      return [min, max];
+    }
+  };
+
+  module.exports = function(x, y, turtleHeading, agents, distance, angle) {
+    var dx, dxMax, dxMin, dy, dyMax, dyMin, findWrapCount, goodTurtles, i, isInSector, isInWrappableSector, isPatchSet, isTurtleSet, j, patch, patchIsGood, patchIsGood_, pxcor, pycor, ref, ref1, ref2, ref3, ref4, ref5, ref6, result, turtleIsGood, turtleIsGood_, wrapCountInX, wrapCountInY;
+    findWrapCount = function(wrapsInDim, dimSize) {
+      if (wrapsInDim) {
+        return NLMath.ceil(distance / dimSize);
+      } else {
+        return 0;
+      }
+    };
+    isInSector = (function(_this) {
+      return function(ax, ay, cx, cy, radius, heading) {
+        var isTheSameSpot, isWithinArc, isWithinRange;
+        isWithinArc = function() {
+          var diff, half, theta;
+          theta = _this._towardsNotWrapped(cx, cy, ax, ay);
+          diff = NLMath.abs(theta - heading);
+          half = angle / 2;
+          return (diff <= half) || ((360 - diff) <= half);
+        };
+        isWithinRange = function() {
+          return NLMath.distance4_2D(cx, cy, ax, ay) <= radius;
+        };
+        isTheSameSpot = ax === cx && ay === cy;
+        return isTheSameSpot || (isWithinRange() && isWithinArc());
+      };
+    })(this);
+    isInWrappableSector = (function(_this) {
+      return function(agentX, agentY, xBound, yBound) {
+        var i, j, ref, ref1, ref2, ref3, xWrapCoefficient, yWrapCoefficient;
+        for (xWrapCoefficient = i = ref = -xBound, ref1 = xBound; ref <= ref1 ? i <= ref1 : i >= ref1; xWrapCoefficient = ref <= ref1 ? ++i : --i) {
+          for (yWrapCoefficient = j = ref2 = -yBound, ref3 = yBound; ref2 <= ref3 ? j <= ref3 : j >= ref3; yWrapCoefficient = ref2 <= ref3 ? ++j : --j) {
+            if (isInSector(agentX + _this.width * xWrapCoefficient, agentY + _this.height * yWrapCoefficient, x, y, distance, turtleHeading)) {
+              return true;
+            }
+          }
+        }
+        return false;
+      };
+    })(this);
+    patchIsGood = (function(_this) {
+      return function(wrapCountInX, wrapCountInY) {
+        return function(patch) {
+          var isPlausible;
+          isPlausible = agents.getSpecialName() === "patches" || agents.contains(patch);
+          return isPlausible && isInWrappableSector(patch.pxcor, patch.pycor, wrapCountInX, wrapCountInY);
+        };
+      };
+    })(this);
+    turtleIsGood = (function(_this) {
+      return function(wrapCountInX, wrapCountInY) {
+        return function(turtle) {
+          var breedName, isPlausible;
+          breedName = agents.getSpecialName();
+          isPlausible = breedName === "turtles" || ((breedName != null) && breedName === turtle.getBreedName()) || ((breedName == null) && agents.contains(turtle));
+          return isPlausible && isInWrappableSector(turtle.xcor, turtle.ycor, wrapCountInX, wrapCountInY);
+        };
+      };
+    })(this);
+    ref = this._getPatchAt(x, y), pxcor = ref.pxcor, pycor = ref.pycor;
+    wrapCountInX = findWrapCount(this._wrapInX, this.width);
+    wrapCountInY = findWrapCount(this._wrapInY, this.height);
+    patchIsGood_ = patchIsGood(wrapCountInX, wrapCountInY);
+    turtleIsGood_ = turtleIsGood(wrapCountInX, wrapCountInY);
+    ref1 = findCircleBounds(this._wrapInX, this.width, distance, this.minPxcor, this.maxPxcor, pxcor), dxMin = ref1[0], dxMax = ref1[1];
+    ref2 = findCircleBounds(this._wrapInY, this.height, distance, this.minPycor, this.maxPycor, pycor), dyMin = ref2[0], dyMax = ref2[1];
+    isPatchSet = NLType(agents).isPatchSet();
+    isTurtleSet = NLType(agents).isTurtleSet();
+    result = [];
+    for (dy = i = ref3 = dyMin, ref4 = dyMax; ref3 <= ref4 ? i <= ref4 : i >= ref4; dy = ref3 <= ref4 ? ++i : --i) {
+      for (dx = j = ref5 = dxMin, ref6 = dxMax; ref5 <= ref6 ? j <= ref6 : j >= ref6; dx = ref5 <= ref6 ? ++j : --j) {
+        patch = this._getPatchAt(pxcor + dx, pycor + dy);
+        if (!NLType(patch).isNobody()) {
+          if (isPatchSet && patchIsGood_(patch)) {
+            result.push(patch);
+          } else if (isTurtleSet && NLMath.distance2_2D(dx, dy) <= distance + 1.415) {
+            goodTurtles = patch.turtlesHere().toArray().filter((function(_this) {
+              return function(turtle) {
+                return turtleIsGood_(turtle);
+              };
+            })(this));
+            result = result.concat(goodTurtles);
+          }
+        }
+      }
+    }
+    return agents.copyWithNewAgents(result);
+  };
+
+}).call(this);
+
+},{"../typechecker":"engine/core/typechecker","util/nlmath":"util/nlmath"}],"engine/core/topology/topology":[function(require,module,exports){
+(function() {
+  var AgentException, StrictMath, Topology, TopologyInterrupt, abstractMethod, filter, inCone, pipeline, ref, ref1, unique,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  inCone = require('./incone');
+
+  Topology = require('./topology');
+
+  StrictMath = require('shim/strictmath');
+
+  abstractMethod = require('util/abstractmethoderror');
+
+  ref = require('brazierjs/array'), filter = ref.filter, unique = ref.unique;
+
+  pipeline = require('brazierjs/function').pipeline;
+
+  ref1 = require('util/exception'), AgentException = ref1.AgentException, TopologyInterrupt = ref1.TopologyInterrupt;
+
+  module.exports = Topology = (function() {
+    Topology.prototype._wrapInX = void 0;
+
+    Topology.prototype._wrapInY = void 0;
+
+    Topology.prototype.height = void 0;
+
+    Topology.prototype.width = void 0;
+
+    Topology.prototype._neighborCache = void 0;
+
+    Topology.prototype._neighbor4Cache = void 0;
+
+    function Topology(minPxcor, maxPxcor, minPycor, maxPycor, _getPatches, _getPatchAt) {
+      this.minPxcor = minPxcor;
+      this.maxPxcor = maxPxcor;
+      this.minPycor = minPycor;
+      this.maxPycor = maxPycor;
+      this._getPatches = _getPatches;
+      this._getPatchAt = _getPatchAt;
+      this._shortestY = bind(this._shortestY, this);
+      this._shortestX = bind(this._shortestX, this);
+      this.height = 1 + this.maxPycor - this.minPycor;
+      this.width = 1 + this.maxPxcor - this.minPxcor;
+      this._neighborCache = {};
+      this._neighbor4Cache = {};
+    }
+
+    Topology.prototype.diffuse = function(varName, coefficient) {
+      this._sloppyDiffuse(varName, coefficient);
+    };
+
+    Topology.prototype.diffuse4 = function(varName, coefficient) {
+      this._sloppyDiffuse4(varName, coefficient);
+    };
+
+    Topology.prototype.getNeighbors = function(pxcor, pycor) {
+      var key;
+      key = "(" + pxcor + ", " + pycor + ")";
+      if (this._neighborCache.hasOwnProperty(key)) {
+        return this._neighborCache[key];
+      } else {
+        return this._neighborCache[key] = this._filterNeighbors(this._getNeighbors(pxcor, pycor));
+      }
+    };
+
+    Topology.prototype.getNeighbors4 = function(pxcor, pycor) {
+      var key;
+      key = "(" + pxcor + ", " + pycor + ")";
+      if (this._neighbor4Cache.hasOwnProperty(key)) {
+        return this._neighbor4Cache[key];
+      } else {
+        return this._neighbor4Cache[key] = this._filterNeighbors(this._getNeighbors4(pxcor, pycor));
+      }
+    };
+
+    Topology.prototype._filterNeighbors = function(neighbors) {
+      return pipeline(filter(function(patch) {
+        return patch !== false;
+      }), unique)(neighbors);
+    };
+
+    Topology.prototype.distanceXY = function(x1, y1, x2, y2) {
+      var a2, b2;
+      a2 = StrictMath.pow(this._shortestX(x1, x2), 2);
+      b2 = StrictMath.pow(this._shortestY(y1, y2), 2);
+      return StrictMath.sqrt(a2 + b2);
+    };
+
+    Topology.prototype.distance = function(x1, y1, agent) {
+      var ref2, x2, y2;
+      ref2 = agent.getCoords(), x2 = ref2[0], y2 = ref2[1];
+      return this.distanceXY(x1, y1, x2, y2);
+    };
+
+    Topology.prototype.distanceToLine = function(x1, y1, x2, y2, xcor, ycor) {
+      var closestPoint, closestX, closestY, isInBounds, ref2, wrappedX1, wrappedX2, wrappedXcor, wrappedY1, wrappedY2, wrappedYcor, xDiff, yDiff;
+      closestPoint = function(x1, y1, x2, y2, xDiff, yDiff) {
+        var u, x, y;
+        u = ((x1 - x2) * xDiff + (y1 - y2) * yDiff) / (xDiff * xDiff + yDiff * yDiff);
+        x = x2 + u * xDiff;
+        y = y2 + u * yDiff;
+        return {
+          x: x,
+          y: y
+        };
+      };
+      isInBounds = function(x1, y1, x2, y2, pointX, pointY) {
+        var bottom, left, ref2, ref3, right, top;
+        ref2 = y1 > y2 ? [y2, y1] : [y1, y2], bottom = ref2[0], top = ref2[1];
+        ref3 = x1 > x2 ? [x2, x1] : [x1, x2], left = ref3[0], right = ref3[1];
+        return pointX <= right && pointX >= left && pointY <= top && pointY >= bottom;
+      };
+      wrappedX1 = this.wrapX(x1);
+      wrappedX2 = this.wrapX(x2);
+      wrappedXcor = this.wrapX(xcor);
+      wrappedY1 = this.wrapY(y1);
+      wrappedY2 = this.wrapY(y2);
+      wrappedYcor = this.wrapY(ycor);
+      xDiff = wrappedX2 - wrappedX1;
+      yDiff = wrappedY2 - wrappedY1;
+      ref2 = closestPoint(wrappedXcor, wrappedYcor, wrappedX1, wrappedY1, xDiff, yDiff), closestX = ref2.x, closestY = ref2.y;
+      if (isInBounds(wrappedX1, wrappedY1, wrappedX2, wrappedY2, closestX, closestY)) {
+        return this.distanceXY(closestX, closestY, wrappedXcor, wrappedYcor);
+      } else {
+        return Math.min(this.distanceXY(x1, y1, xcor, ycor), this.distanceXY(x2, y2, xcor, ycor));
+      }
+    };
+
+    Topology.prototype.towards = function(x1, y1, x2, y2) {
+      return this._towards(x1, y1, x2, y2, this._shortestX, this._shortestY);
+    };
+
+    Topology.prototype.midpointx = function(x1, x2) {
+      var pos;
+      pos = (x1 + (x1 + this._shortestX(x1, x2))) / 2;
+      return this._wrap(pos, this.minPxcor - 0.5, this.maxPxcor + 0.5);
+    };
+
+    Topology.prototype.midpointy = function(y1, y2) {
+      var pos;
+      pos = (y1 + (y1 + this._shortestY(y1, y2))) / 2;
+      return this._wrap(pos, this.minPycor - 0.5, this.maxPycor + 0.5);
+    };
+
+    Topology.prototype.inCone = function(x, y, heading, agents, distance, angle) {
+      return inCone.call(this, x, y, heading, agents, distance, angle);
+    };
+
+    Topology.prototype.inRadius = function(x, y, agents, radius) {
+      return agents.filter((function(_this) {
+        return function(agent) {
+          var ref2, xcor, ycor;
+          ref2 = agent.getCoords(), xcor = ref2[0], ycor = ref2[1];
+          return _this.distanceXY(xcor, ycor, x, y) <= radius;
+        };
+      })(this));
+    };
+
+    Topology.prototype._getNeighbors = function(pxcor, pycor) {
+      if (pxcor === this.maxPxcor && pxcor === this.minPxcor) {
+        if (pycor === this.maxPycor && pycor === this.minPycor) {
+          return [];
+        } else {
+          return [this._getPatchNorth(pxcor, pycor), this._getPatchSouth(pxcor, pycor)];
+        }
+      } else if (pycor === this.maxPycor && pycor === this.minPycor) {
+        return [this._getPatchEast(pxcor, pycor), this._getPatchWest(pxcor, pycor)];
+      } else {
+        return [this._getPatchNorth(pxcor, pycor), this._getPatchEast(pxcor, pycor), this._getPatchSouth(pxcor, pycor), this._getPatchWest(pxcor, pycor), this._getPatchNorthEast(pxcor, pycor), this._getPatchSouthEast(pxcor, pycor), this._getPatchSouthWest(pxcor, pycor), this._getPatchNorthWest(pxcor, pycor)];
+      }
+    };
+
+    Topology.prototype._getNeighbors4 = function(pxcor, pycor) {
+      if (pxcor === this.maxPxcor && pxcor === this.minPxcor) {
+        if (pycor === this.maxPycor && pycor === this.minPycor) {
+          return [];
+        } else {
+          return [this._getPatchNorth(pxcor, pycor), this._getPatchSouth(pxcor, pycor)];
+        }
+      } else if (pycor === this.maxPycor && pycor === this.minPycor) {
+        return [this._getPatchEast(pxcor, pycor), this._getPatchWest(pxcor, pycor)];
+      } else {
+        return [this._getPatchNorth(pxcor, pycor), this._getPatchEast(pxcor, pycor), this._getPatchSouth(pxcor, pycor), this._getPatchWest(pxcor, pycor)];
+      }
+    };
+
+    Topology.prototype._refineScratchPads = function(yy, xx, scratch, scratch2, coefficient) {};
+
+    Topology.prototype._refineScratchPads4 = function(yy, xx, scratch, scratch2, coefficient) {};
+
+    Topology.prototype._shortestNotWrapped = function(cor1, cor2) {
+      return StrictMath.abs(cor1 - cor2) * (cor1 > cor2 ? -1 : 1);
+    };
+
+    Topology.prototype._shortestWrapped = function(cor1, cor2, limit) {
+      var absDist;
+      absDist = StrictMath.abs(cor1 - cor2);
+      if (absDist > limit / 2) {
+        return (limit - absDist) * (cor2 > cor1 ? -1 : 1);
+      } else {
+        return this._shortestNotWrapped(cor1, cor2);
+      }
+    };
+
+    Topology.prototype._shortestXWrapped = function(cor1, cor2) {
+      return this._shortestWrapped(cor1, cor2, this.width);
+    };
+
+    Topology.prototype._shortestYWrapped = function(cor1, cor2) {
+      return this._shortestWrapped(cor1, cor2, this.height);
+    };
+
+    Topology.prototype._sloppyDiffuse = function(varName, coefficient) {
+      var mapAll, scratch, scratch2, xx, yy;
+      yy = this.height;
+      xx = this.width;
+      mapAll = function(f) {
+        var i, ref2, results, x, y;
+        results = [];
+        for (x = i = 0, ref2 = xx; 0 <= ref2 ? i < ref2 : i > ref2; x = 0 <= ref2 ? ++i : --i) {
+          results.push((function() {
+            var j, ref3, results1;
+            results1 = [];
+            for (y = j = 0, ref3 = yy; 0 <= ref3 ? j < ref3 : j > ref3; y = 0 <= ref3 ? ++j : --j) {
+              results1.push(f(x, y));
+            }
+            return results1;
+          })());
+        }
+        return results;
+      };
+      scratch = mapAll((function(_this) {
+        return function(x, y) {
+          return _this._getPatchAt(x + _this.minPxcor, y + _this.minPycor).getVariable(varName);
+        };
+      })(this));
+      scratch2 = mapAll(function() {
+        return 0;
+      });
+      this._refineScratchPads(yy, xx, scratch, scratch2, coefficient);
+      mapAll((function(_this) {
+        return function(x, y) {
+          return _this._getPatchAt(x + _this.minPxcor, y + _this.minPycor).setVariable(varName, scratch2[x][y]);
+        };
+      })(this));
+    };
+
+    Topology.prototype._sloppyDiffuse4 = function(varName, coefficient) {
+      var mapAll, scratch, scratch2, xx, yy;
+      yy = this.height;
+      xx = this.width;
+      mapAll = function(f) {
+        var i, ref2, results, x, y;
+        results = [];
+        for (x = i = 0, ref2 = xx; 0 <= ref2 ? i < ref2 : i > ref2; x = 0 <= ref2 ? ++i : --i) {
+          results.push((function() {
+            var j, ref3, results1;
+            results1 = [];
+            for (y = j = 0, ref3 = yy; 0 <= ref3 ? j < ref3 : j > ref3; y = 0 <= ref3 ? ++j : --j) {
+              results1.push(f(x, y));
+            }
+            return results1;
+          })());
+        }
+        return results;
+      };
+      scratch = mapAll((function(_this) {
+        return function(x, y) {
+          return _this._getPatchAt(x + _this.minPxcor, y + _this.minPycor).getVariable(varName);
+        };
+      })(this));
+      scratch2 = mapAll(function() {
+        return 0;
+      });
+      this._refineScratchPads4(yy, xx, scratch, scratch2, coefficient);
+      mapAll((function(_this) {
+        return function(x, y) {
+          return _this._getPatchAt(x + _this.minPxcor, y + _this.minPycor).setVariable(varName, scratch2[x][y]);
+        };
+      })(this));
+    };
+
+    Topology.prototype._towards = function(x1, y1, x2, y2, findXDist, findYDist) {
+      var dx, dy;
+      if ((x1 !== x2) || (y1 !== y2)) {
+        dx = findXDist(x1, x2);
+        dy = findYDist(y1, y2);
+        if (dx === 0) {
+          if (dy >= 0) {
+            return 0;
+          } else {
+            return 180;
+          }
+        } else if (dy === 0) {
+          if (dx >= 0) {
+            return 90;
+          } else {
+            return 270;
+          }
+        } else {
+          return (270 + StrictMath.toDegrees(StrictMath.PI() + StrictMath.atan2(-dy, dx))) % 360;
+        }
+      } else {
+        throw new AgentException("No heading is defined from a point (" + x1 + "," + x2 + ") to that same point.");
+      }
+    };
+
+    Topology.prototype._towardsNotWrapped = function(x1, y1, x2, y2) {
+      return this._towards(x1, y1, x2, y2, this._shortestNotWrapped, this._shortestNotWrapped);
+    };
+
+    Topology.prototype._wrap = function(pos, min, max) {
+      var result;
+      if (pos >= max) {
+        return min + ((pos - max) % (max - min));
+      } else if (pos < min) {
+        result = max - ((min - pos) % (max - min));
+        if (result < max) {
+          return result;
+        } else {
+          return min;
+        }
+      } else {
+        return pos;
+      }
+    };
+
+    Topology.prototype._wrapXCautiously = function(pos) {
+      return this._wrapCautiously(this.minPxcor, this.maxPxcor, pos);
+    };
+
+    Topology.prototype._wrapXLeniently = function(pos) {
+      return this._wrapLeniently(this.minPxcor, this.maxPxcor, pos);
+    };
+
+    Topology.prototype._wrapYCautiously = function(pos) {
+      return this._wrapCautiously(this.minPycor, this.maxPycor, pos);
+    };
+
+    Topology.prototype._wrapYLeniently = function(pos) {
+      return this._wrapLeniently(this.minPycor, this.maxPycor, pos);
+    };
+
+    Topology.prototype._wrapCautiously = function(minCor, maxCor, pos) {
+      var max, min;
+      min = minCor - 0.5;
+      max = maxCor + 0.5;
+      if ((min <= pos && pos < max)) {
+        return pos;
+      } else {
+        throw new TopologyInterrupt("Cannot move turtle beyond the world's edge.");
+      }
+    };
+
+    Topology.prototype._wrapLeniently = function(minCor, maxCor, pos) {
+      return this._wrap(pos, minCor - 0.5, maxCor + 0.5);
+    };
+
+    Topology.prototype.wrapX = function(pos) {
+      return abstractMethod('Topology.wrapX');
+    };
+
+    Topology.prototype.wrapY = function(pos) {
+      return abstractMethod('Topology.wrapY');
+    };
+
+    Topology.prototype._shortestX = function(x1, x2) {
+      return abstractMethod('Topology._shortestX');
+    };
+
+    Topology.prototype._shortestY = function(y1, y2) {
+      return abstractMethod('Topology._shortestY');
+    };
+
+    Topology.prototype._getPatchNorth = function(x, y) {
+      return abstractMethod('Topology._getPatchNorth');
+    };
+
+    Topology.prototype._getPatchEast = function(x, y) {
+      return abstractMethod('Topology._getPatchEast');
+    };
+
+    Topology.prototype._getPatchSouth = function(x, y) {
+      return abstractMethod('Topology._getPatchSouth');
+    };
+
+    Topology.prototype._getPatchWest = function(x, y) {
+      return abstractMethod('Topology._getPatchWest');
+    };
+
+    Topology.prototype._getPatchNorthEast = function(x, y) {
+      return abstractMethod('Topology._getPatchNorthEast');
+    };
+
+    Topology.prototype._getPatchSouthEast = function(x, y) {
+      return abstractMethod('Topology._getPatchSouthEast');
+    };
+
+    Topology.prototype._getPatchSouthWest = function(x, y) {
+      return abstractMethod('Topology._getPatchSouthWest');
+    };
+
+    Topology.prototype._getPatchNorthWest = function(x, y) {
+      return abstractMethod('Topology._getPatchNorthWest');
+    };
+
+    return Topology;
+
+  })();
+
+}).call(this);
+
+},{"./incone":"engine/core/topology/incone","./topology":"engine/core/topology/topology","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","shim/strictmath":"shim/strictmath","util/abstractmethoderror":"util/abstractmethoderror","util/exception":"util/exception"}],"engine/core/topology/torus":[function(require,module,exports){
+(function() {
+  var Topology, Torus, add, foldl, map, pipeline, rangeUntil, ref,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  Topology = require('./topology');
+
+  ref = require('brazierjs/array'), foldl = ref.foldl, map = ref.map;
+
+  pipeline = require('brazierjs/function').pipeline;
+
+  rangeUntil = require('brazierjs/number').rangeUntil;
+
+  add = function(a, b) {
+    return a + b;
+  };
+
+  module.exports = Torus = (function(superClass) {
+    extend(Torus, superClass);
+
+    function Torus() {
+      this._shortestY = bind(this._shortestY, this);
+      this._shortestX = bind(this._shortestX, this);
+      return Torus.__super__.constructor.apply(this, arguments);
+    }
+
+    Torus.prototype._wrapInX = true;
+
+    Torus.prototype._wrapInY = true;
+
+    Torus.prototype.wrapX = function(pos) {
+      return this._wrapXLeniently(pos);
+    };
+
+    Torus.prototype.wrapY = function(pos) {
+      return this._wrapYLeniently(pos);
+    };
+
+    Torus.prototype.diffuse = function(varName, coefficient) {
+      var getScratch, scratch;
+      scratch = map(function() {
+        return [];
+      })(rangeUntil(0)(this.width));
+      getScratch = (function(_this) {
+        return function(nb) {
+          return scratch[nb.pxcor - _this.minPxcor][nb.pycor - _this.minPycor];
+        };
+      })(this);
+      this._getPatches().forEach((function(_this) {
+        return function(patch) {
+          scratch[patch.pxcor - _this.minPxcor][patch.pycor - _this.minPycor] = patch.getVariable(varName);
+        };
+      })(this));
+      this._getPatches().forEach((function(_this) {
+        return function(patch) {
+          var diffusalSum, orderedNeighbors, pxcor, pycor;
+          pxcor = patch.pxcor;
+          pycor = patch.pycor;
+          orderedNeighbors = [_this._getPatchSouthWest(pxcor, pycor), _this._getPatchWest(pxcor, pycor), _this._getPatchNorthWest(pxcor, pycor), _this._getPatchSouth(pxcor, pycor), _this._getPatchNorth(pxcor, pycor), _this._getPatchSouthEast(pxcor, pycor), _this._getPatchEast(pxcor, pycor), _this._getPatchNorthEast(pxcor, pycor)];
+          diffusalSum = pipeline(map(getScratch), foldl(add)(0))(orderedNeighbors);
+          patch.setVariable(varName, patch.getVariable(varName) * (1.0 - coefficient) + (diffusalSum / 8) * coefficient);
+        };
+      })(this));
+    };
+
+    Torus.prototype.diffuse4 = function(varName, coefficient) {
+      var getScratch, scratch;
+      scratch = map(function() {
+        return [];
+      })(rangeUntil(0)(this.width));
+      getScratch = (function(_this) {
+        return function(nb) {
+          return scratch[nb.pxcor - _this.minPxcor][nb.pycor - _this.minPycor];
+        };
+      })(this);
+      this._getPatches().forEach((function(_this) {
+        return function(patch) {
+          scratch[patch.pxcor - _this.minPxcor][patch.pycor - _this.minPycor] = patch.getVariable(varName);
+        };
+      })(this));
+      this._getPatches().forEach((function(_this) {
+        return function(patch) {
+          var diffusalSum, orderedNeighbors, pxcor, pycor;
+          pxcor = patch.pxcor;
+          pycor = patch.pycor;
+          orderedNeighbors = [_this._getPatchWest(pxcor, pycor), _this._getPatchNorth(pxcor, pycor), _this._getPatchEast(pxcor, pycor), _this._getPatchSouth(pxcor, pycor)];
+          diffusalSum = pipeline(map(getScratch), foldl(add)(0))(orderedNeighbors);
+          patch.setVariable(varName, patch.getVariable(varName) * (1.0 - coefficient) + (diffusalSum / 4) * coefficient);
+        };
+      })(this));
+    };
+
+    Torus.prototype._getPatchNorth = function(pxcor, pycor) {
+      if (pycor === this.maxPycor) {
+        return this._getPatchAt(pxcor, this.minPycor);
+      } else {
+        return this._getPatchAt(pxcor, pycor + 1);
+      }
+    };
+
+    Torus.prototype._getPatchSouth = function(pxcor, pycor) {
+      if (pycor === this.minPycor) {
+        return this._getPatchAt(pxcor, this.maxPycor);
+      } else {
+        return this._getPatchAt(pxcor, pycor - 1);
+      }
+    };
+
+    Torus.prototype._getPatchEast = function(pxcor, pycor) {
+      if (pxcor === this.maxPxcor) {
+        return this._getPatchAt(this.minPxcor, pycor);
+      } else {
+        return this._getPatchAt(pxcor + 1, pycor);
+      }
+    };
+
+    Torus.prototype._getPatchWest = function(pxcor, pycor) {
+      if (pxcor === this.minPxcor) {
+        return this._getPatchAt(this.maxPxcor, pycor);
+      } else {
+        return this._getPatchAt(pxcor - 1, pycor);
+      }
+    };
+
+    Torus.prototype._getPatchNorthWest = function(pxcor, pycor) {
+      if (pycor === this.maxPycor) {
+        if (pxcor === this.minPxcor) {
+          return this._getPatchAt(this.maxPxcor, this.minPycor);
+        } else {
+          return this._getPatchAt(pxcor - 1, this.minPycor);
+        }
+      } else if (pxcor === this.minPxcor) {
+        return this._getPatchAt(this.maxPxcor, pycor + 1);
+      } else {
+        return this._getPatchAt(pxcor - 1, pycor + 1);
+      }
+    };
+
+    Torus.prototype._getPatchSouthWest = function(pxcor, pycor) {
+      if (pycor === this.minPycor) {
+        if (pxcor === this.minPxcor) {
+          return this._getPatchAt(this.maxPxcor, this.maxPycor);
+        } else {
+          return this._getPatchAt(pxcor - 1, this.maxPycor);
+        }
+      } else if (pxcor === this.minPxcor) {
+        return this._getPatchAt(this.maxPxcor, pycor - 1);
+      } else {
+        return this._getPatchAt(pxcor - 1, pycor - 1);
+      }
+    };
+
+    Torus.prototype._getPatchSouthEast = function(pxcor, pycor) {
+      if (pycor === this.minPycor) {
+        if (pxcor === this.maxPxcor) {
+          return this._getPatchAt(this.minPxcor, this.maxPycor);
+        } else {
+          return this._getPatchAt(pxcor + 1, this.maxPycor);
+        }
+      } else if (pxcor === this.maxPxcor) {
+        return this._getPatchAt(this.minPxcor, pycor - 1);
+      } else {
+        return this._getPatchAt(pxcor + 1, pycor - 1);
+      }
+    };
+
+    Torus.prototype._getPatchNorthEast = function(pxcor, pycor) {
+      if (pycor === this.maxPycor) {
+        if (pxcor === this.maxPxcor) {
+          return this._getPatchAt(this.minPxcor, this.minPycor);
+        } else {
+          return this._getPatchAt(pxcor + 1, this.minPycor);
+        }
+      } else if (pxcor === this.maxPxcor) {
+        return this._getPatchAt(this.minPxcor, pycor + 1);
+      } else {
+        return this._getPatchAt(pxcor + 1, pycor + 1);
+      }
+    };
+
+    Torus.prototype._shortestX = function(x1, x2) {
+      return this._shortestXWrapped(x1, x2);
+    };
+
+    Torus.prototype._shortestY = function(y1, y2) {
+      return this._shortestYWrapped(y1, y2);
+    };
+
+    return Torus;
+
+  })(Topology);
+
+}).call(this);
+
+},{"./topology":"engine/core/topology/topology","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/number":"brazier/number"}],"engine/core/topology/vertcylinder":[function(require,module,exports){
+(function() {
+  var Topology, VertCylinder,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  Topology = require('./topology');
+
+  module.exports = VertCylinder = (function(superClass) {
+    extend(VertCylinder, superClass);
+
+    function VertCylinder() {
+      this._shortestY = bind(this._shortestY, this);
+      this._shortestX = bind(this._shortestX, this);
+      return VertCylinder.__super__.constructor.apply(this, arguments);
+    }
+
+    VertCylinder.prototype._wrapInX = true;
+
+    VertCylinder.prototype._wrapInY = false;
+
+    VertCylinder.prototype.wrapX = function(pos) {
+      return this._wrapXLeniently(pos);
+    };
+
+    VertCylinder.prototype.wrapY = function(pos) {
+      return this._wrapYCautiously(pos);
+    };
+
+    VertCylinder.prototype._getPatchNorth = function(pxcor, pycor) {
+      return (pycor !== this.maxPycor) && this._getPatchAt(pxcor, pycor + 1);
+    };
+
+    VertCylinder.prototype._getPatchSouth = function(pxcor, pycor) {
+      return (pycor !== this.minPycor) && this._getPatchAt(pxcor, pycor - 1);
+    };
+
+    VertCylinder.prototype._getPatchEast = function(pxcor, pycor) {
+      if (pxcor === this.maxPxcor) {
+        return this._getPatchAt(this.minPxcor, pycor);
+      } else {
+        return this._getPatchAt(pxcor + 1, pycor);
+      }
+    };
+
+    VertCylinder.prototype._getPatchWest = function(pxcor, pycor) {
+      if (pxcor === this.minPxcor) {
+        return this._getPatchAt(this.maxPxcor, pycor);
+      } else {
+        return this._getPatchAt(pxcor - 1, pycor);
+      }
+    };
+
+    VertCylinder.prototype._getPatchNorthWest = function(pxcor, pycor) {
+      if (pycor === this.maxPycor) {
+        return false;
+      } else if (pxcor === this.minPxcor) {
+        return this._getPatchAt(this.maxPxcor, pycor + 1);
+      } else {
+        return this._getPatchAt(pxcor - 1, pycor + 1);
+      }
+    };
+
+    VertCylinder.prototype._getPatchSouthWest = function(pxcor, pycor) {
+      if (pycor === this.minPycor) {
+        return false;
+      } else if (pxcor === this.minPxcor) {
+        return this._getPatchAt(this.maxPxcor, pycor - 1);
+      } else {
+        return this._getPatchAt(pxcor - 1, pycor - 1);
+      }
+    };
+
+    VertCylinder.prototype._getPatchSouthEast = function(pxcor, pycor) {
+      if (pycor === this.minPycor) {
+        return false;
+      } else if (pxcor === this.maxPxcor) {
+        return this._getPatchAt(this.minPxcor, pycor - 1);
+      } else {
+        return this._getPatchAt(pxcor + 1, pycor - 1);
+      }
+    };
+
+    VertCylinder.prototype._getPatchNorthEast = function(pxcor, pycor) {
+      if (pycor === this.maxPycor) {
+        return false;
+      } else if (pxcor === this.maxPxcor) {
+        return this._getPatchAt(this.minPxcor, pycor + 1);
+      } else {
+        return this._getPatchAt(pxcor + 1, pycor + 1);
+      }
+    };
+
+    VertCylinder.prototype._refineScratchPads = function(yy, xx, scratch, scratch2, coefficient) {
+      var diffuseVal, i, j, ref, ref1, ref2, ref3, x, y;
+      for (y = i = ref = yy, ref1 = yy * 2; ref <= ref1 ? i < ref1 : i > ref1; y = ref <= ref1 ? ++i : --i) {
+        for (x = j = ref2 = xx, ref3 = xx * 2; ref2 <= ref3 ? j < ref3 : j > ref3; x = ref2 <= ref3 ? ++j : --j) {
+          diffuseVal = (scratch[x - xx][y - yy] / 8) * coefficient;
+          if ((yy < y && y < (yy * 2) - 1)) {
+            scratch2[x - xx][y - yy] += scratch[x - xx][y - yy] - (8 * diffuseVal);
+            scratch2[(x - 1) % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x - 1) % xx][y % yy] += diffuseVal;
+            scratch2[(x - 1) % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[x % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[x % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][y % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][(y + 1) % yy] += diffuseVal;
+          } else if (y === yy) {
+            scratch2[x - xx][y - yy] += scratch[x - xx][y - yy] - (5 * diffuseVal);
+            scratch2[(x - 1) % xx][y % yy] += diffuseVal;
+            scratch2[(x - 1) % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[x % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][y % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][(y + 1) % yy] += diffuseVal;
+          } else {
+            scratch2[x - xx][y - yy] += scratch[x - xx][y - yy] - (5 * diffuseVal);
+            scratch2[(x - 1) % xx][y % yy] += diffuseVal;
+            scratch2[(x - 1) % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[x % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][y % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][(y - 1) % yy] += diffuseVal;
+          }
+        }
+      }
+    };
+
+    VertCylinder.prototype._refineScratchPads4 = function(yy, xx, scratch, scratch2, coefficient) {
+      var diffuseVal, i, j, ref, ref1, ref2, ref3, x, y;
+      for (y = i = ref = yy, ref1 = yy * 2; ref <= ref1 ? i < ref1 : i > ref1; y = ref <= ref1 ? ++i : --i) {
+        for (x = j = ref2 = xx, ref3 = xx * 2; ref2 <= ref3 ? j < ref3 : j > ref3; x = ref2 <= ref3 ? ++j : --j) {
+          diffuseVal = (scratch[x - xx][y - yy] / 4) * coefficient;
+          if ((yy < y && y < (yy * 2) - 1)) {
+            scratch2[x - xx][y - yy] += scratch[x - xx][y - yy] - (4 * diffuseVal);
+            scratch2[(x - 1) % xx][y % yy] += diffuseVal;
+            scratch2[x % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[x % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][y % yy] += diffuseVal;
+          } else if (y === yy) {
+            scratch2[x - xx][y - yy] += scratch[x - xx][y - yy] - (3 * diffuseVal);
+            scratch2[(x - 1) % xx][y % yy] += diffuseVal;
+            scratch2[x % xx][(y + 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][y % yy] += diffuseVal;
+          } else {
+            scratch2[x - xx][y - yy] += scratch[x - xx][y - yy] - (3 * diffuseVal);
+            scratch2[(x - 1) % xx][y % yy] += diffuseVal;
+            scratch2[x % xx][(y - 1) % yy] += diffuseVal;
+            scratch2[(x + 1) % xx][y % yy] += diffuseVal;
+          }
+        }
+      }
+    };
+
+    VertCylinder.prototype._shortestX = function(x1, x2) {
+      return this._shortestXWrapped(x1, x2);
+    };
+
+    VertCylinder.prototype._shortestY = function(y1, y2) {
+      return this._shortestNotWrapped(y1, y2);
+    };
+
+    return VertCylinder;
+
+  })(Topology);
+
+}).call(this);
+
+},{"./topology":"engine/core/topology/topology"}],"engine/core/turtle/makepenlines":[function(require,module,exports){
+(function() {
+  var NLMath, Trail, distanceFromLegs, lazyWrapValue, makePenLines, makePenLinesHelper, makeTrails;
+
+  NLMath = require('util/nlmath');
+
+  Trail = (function() {
+    function Trail(x1, y1, x2, y2, dist) {
+      this.x1 = x1;
+      this.y1 = y1;
+      this.x2 = x2;
+      this.y2 = y2;
+      this.dist = dist;
+    }
+
+    return Trail;
+
+  })();
+
+  lazyWrapValue = function(min, max) {
+    return function(value) {
+      if (value <= min) {
+        return max;
+      } else if (value >= max) {
+        return min;
+      } else {
+        return value;
+      }
+    };
+  };
+
+  distanceFromLegs = function(l1, l2) {
+    var square;
+    square = function(x) {
+      return NLMath.pow(x, 2);
+    };
+    return NLMath.sqrt(square(l1) + square(l2));
+  };
+
+  makeTrails = function(heading, minX, maxX, minY, maxY) {
+    return function(x, y, jumpDist) {
+      var baseTrails, dx, dy, interceptX, interceptY, makeTrailComponent, rawX, rawY, tan, xInterceptTrails, xcomp, yInterceptTrails, ycomp;
+      xcomp = NLMath.squash(NLMath.sin(heading));
+      ycomp = NLMath.squash(NLMath.cos(heading));
+      tan = NLMath.squash(NLMath.tan(heading));
+      rawX = x + xcomp * jumpDist;
+      rawY = y + ycomp * jumpDist;
+      baseTrails = [new Trail(x, y, rawX, rawY, jumpDist < 0 ? jumpDist * -1 : jumpDist)];
+      makeTrailComponent = function(endX, endY, dx, dy) {
+        return [new Trail(x, y, endX, endY, distanceFromLegs(dx, dy))];
+      };
+      yInterceptTrails = rawX > maxX ? (dx = maxX - x, dy = dx / tan, interceptY = y + dy, makeTrailComponent(maxX, interceptY, dx, dy)) : rawX < minX ? (dx = x - minX, dy = dx / tan, interceptY = y - dy, makeTrailComponent(minX, interceptY, dx, dy)) : [];
+      xInterceptTrails = rawY > maxY ? (dy = maxY - y, dx = dy * tan, interceptX = x + dx, makeTrailComponent(interceptX, maxY, dx, dy)) : rawY < minY ? (dy = y - minY, dx = dy * tan, interceptX = x - dx, makeTrailComponent(interceptX, minY, dx, dy)) : [];
+      return baseTrails.concat(xInterceptTrails, yInterceptTrails);
+    };
+  };
+
+  makePenLines = function(x, y, heading, jumpDist, minX, maxX, minY, maxY) {
+    var lazyWrapX, lazyWrapY, makeTrailsBy;
+    makeTrailsBy = makeTrails(heading, minX, maxX, minY, maxY);
+    lazyWrapX = lazyWrapValue(minX, maxX);
+    lazyWrapY = lazyWrapValue(minY, maxY);
+    return makePenLinesHelper(makeTrailsBy, lazyWrapX, lazyWrapY)(x, y, jumpDist, []);
+  };
+
+  makePenLinesHelper = function(makeTrailsBy, lazyWrapX, lazyWrapY) {
+    var inner;
+    inner = function(x, y, jumpDist, acc) {
+      var newAcc, newX, newY, nextJumpDist, trail, trails;
+      trails = makeTrailsBy(x, y, jumpDist);
+      trail = trails.sort(function(arg, arg1) {
+        var distA, distB;
+        distA = arg.dist;
+        distB = arg1.dist;
+        if (distA < distB) {
+          return -1;
+        } else if (distA === distB) {
+          return 0;
+        } else {
+          return 1;
+        }
+      })[0];
+      newAcc = acc.concat([trail]);
+      nextJumpDist = jumpDist >= 0 ? jumpDist - trail.dist : jumpDist + trail.dist;
+      if (nextJumpDist === 0) {
+        return newAcc;
+      } else {
+        newX = lazyWrapX(trail.x2);
+        newY = lazyWrapY(trail.y2);
+        return inner(newX, newY, nextJumpDist, newAcc);
+      }
+    };
+    return inner;
+  };
+
+  module.exports = makePenLines;
+
+}).call(this);
+
+},{"util/nlmath":"util/nlmath"}],"engine/core/turtle/turtlevariables":[function(require,module,exports){
+(function() {
+  var ColorModel, ImmutableVariableSpec, MutableVariableSpec, NLMath, NLType, Setters, StrictMath, TopologyInterrupt, VariableSpecs, _handleTiesForHeadingChange, clone, getBreed, ignorantly, ignoring, ref, ref1, setBreed, setBreedShape, setColor, setHeading, setIsHidden, setLabel, setLabelColor, setShape, setSize, setXcor, setYcor;
+
+  ColorModel = require('engine/core/colormodel');
+
+  NLType = require('../typechecker');
+
+  StrictMath = require('shim/strictmath');
+
+  NLMath = require('util/nlmath');
+
+  clone = require('brazierjs/object').clone;
+
+  ref = require('../structure/variablespec'), ImmutableVariableSpec = ref.ImmutableVariableSpec, MutableVariableSpec = ref.MutableVariableSpec;
+
+  ref1 = require('util/exception'), ignoring = ref1.ignoring, TopologyInterrupt = ref1.TopologyInterrupt;
+
+
+  /*
+   "Jason, this is craziness!", you say.  "Not quite," I say.  It _is_ kind of lame, but changing turtle members
+   needs to be controlled, so that all changes cause updates to be triggered.  And since the `VariableManager` needs
+   to know how to set all of the variables, we may as well declare the code for that in a place where it can be
+   easily reused. --JAB (6/2/14, 8/28/15)
+   */
+
+  ignorantly = ignoring(TopologyInterrupt);
+
+  setXcor = function(newX, seenTurtlesSet) {
+    var dx, f, oldX, originPatch;
+    if (seenTurtlesSet == null) {
+      seenTurtlesSet = {};
+    }
+    originPatch = this.getPatchHere();
+    oldX = this.xcor;
+    this.xcor = this.world.topology.wrapX(newX);
+    this._updateVarsByName("xcor");
+    this._drawLine(oldX, this.ycor, newX, this.ycor);
+    if (originPatch !== this.getPatchHere()) {
+      originPatch.untrackTurtle(this);
+      this.getPatchHere().trackTurtle(this);
+    }
+    this.linkManager._refresh();
+    dx = newX - oldX;
+    f = (function(_this) {
+      return function(seenTurtles) {
+        return function(turtle) {
+          return ignorantly(function() {
+            return setXcor.call(turtle, turtle.xcor + dx, seenTurtles);
+          });
+        };
+      };
+    })(this);
+    this._withEachTiedTurtle(f, seenTurtlesSet);
+  };
+
+  setYcor = function(newY, seenTurtlesSet) {
+    var dy, f, oldY, originPatch;
+    if (seenTurtlesSet == null) {
+      seenTurtlesSet = {};
+    }
+    originPatch = this.getPatchHere();
+    oldY = this.ycor;
+    this.ycor = this.world.topology.wrapY(newY);
+    this._updateVarsByName("ycor");
+    this._drawLine(this.xcor, oldY, this.xcor, newY);
+    if (originPatch !== this.getPatchHere()) {
+      originPatch.untrackTurtle(this);
+      this.getPatchHere().trackTurtle(this);
+    }
+    this.linkManager._refresh();
+    dy = newY - oldY;
+    f = (function(_this) {
+      return function(seenTurtles) {
+        return function(turtle) {
+          return ignorantly(function() {
+            return setYcor.call(turtle, turtle.ycor + dy, seenTurtles);
+          });
+        };
+      };
+    })(this);
+    this._withEachTiedTurtle(f, seenTurtlesSet);
+  };
+
+  setBreedShape = function(shape) {
+    this._breedShape = shape.toLowerCase();
+    if (this._givenShape == null) {
+      this._genVarUpdate("shape");
+    }
+  };
+
+  setBreed = function(breed) {
+    var newNames, oldNames, ref2, specialName, trueBreed, type;
+    type = NLType(breed);
+    trueBreed = (function() {
+      if (type.isString()) {
+        return this.world.breedManager.get(breed);
+      } else if (type.isAgentSet()) {
+        specialName = breed.getSpecialName();
+        if ((specialName != null) && !this.world.breedManager.get(specialName).isLinky()) {
+          return this.world.breedManager.get(specialName);
+        } else {
+          throw new Error("You can't set BREED to a non-breed agentset.");
+        }
+      } else {
+        return breed;
+      }
+    }).call(this);
+    if ((this._breed != null) && this._breed !== trueBreed) {
+      this._givenShape = void 0;
+    }
+    if (this._breed !== trueBreed) {
+      trueBreed.add(this);
+      if ((ref2 = this._breed) != null) {
+        ref2.remove(this);
+      }
+      newNames = this._varNamesForBreed(trueBreed);
+      oldNames = this._varNamesForBreed(this._breed);
+      this._varManager.refineBy(oldNames, newNames);
+    }
+    this._breed = trueBreed;
+    this._genVarUpdate("breed");
+    setBreedShape.call(this, trueBreed.getShape());
+    this._refreshName();
+    if (!this.world.breedManager.turtles().contains(this)) {
+      this.world.breedManager.turtles().add(this);
+    }
+  };
+
+  setColor = function(color) {
+    this._color = ColorModel.wrapColor(color);
+    this._genVarUpdate("color");
+  };
+
+  setHeading = function(heading, seenTurtlesSet) {
+    var dh, oldHeading;
+    if (seenTurtlesSet == null) {
+      seenTurtlesSet = {};
+    }
+    oldHeading = this._heading;
+    this._heading = NLMath.normalizeHeading(heading);
+    this._genVarUpdate("heading");
+    dh = NLMath.subtractHeadings(this._heading, oldHeading);
+    _handleTiesForHeadingChange.call(this, seenTurtlesSet, dh);
+  };
+
+  setIsHidden = function(isHidden) {
+    this._hidden = isHidden;
+    this._genVarUpdate("hidden?");
+  };
+
+  setLabel = function(label) {
+    this._label = label;
+    this._genVarUpdate("label");
+  };
+
+  setLabelColor = function(color) {
+    this._labelcolor = ColorModel.wrapColor(color);
+    this._genVarUpdate("label-color");
+  };
+
+  setShape = function(shape) {
+    this._givenShape = shape.toLowerCase();
+    this._genVarUpdate("shape");
+  };
+
+  setSize = function(size) {
+    this._size = size;
+    this._genVarUpdate("size");
+  };
+
+  _handleTiesForHeadingChange = function(seenTurtlesSet, dh) {
+    var filteredPairs, ref2, turtleModePairs, x, y;
+    ref2 = this.getCoords(), x = ref2[0], y = ref2[1];
+    turtleModePairs = this.linkManager.myOutLinks("LINKS").toArray().map((function(_this) {
+      return function(arg) {
+        var end1, end2, tiemode;
+        end1 = arg.end1, end2 = arg.end2, tiemode = arg.tiemode;
+        return [(end1 === _this ? end2 : end1), tiemode];
+      };
+    })(this));
+    seenTurtlesSet[this.id] = true;
+    filteredPairs = turtleModePairs.filter(function(arg) {
+      var id, mode, ref3, result;
+      (ref3 = arg[0], id = ref3.id), mode = arg[1];
+      result = (seenTurtlesSet[id] == null) && mode !== "none";
+      seenTurtlesSet[id] = true;
+      return result;
+    });
+    filteredPairs.forEach((function(_this) {
+      return function(arg) {
+        var ex, mode, newX, newY, r, theta, turtle, wentBoom;
+        turtle = arg[0], mode = arg[1];
+        wentBoom = (function() {
+          var error;
+          try {
+            r = this.distance(turtle);
+            if (r !== 0) {
+              theta = this.towards(turtle) + dh;
+              newX = x + r * NLMath.squash(NLMath.sin(theta));
+              newY = y + r * NLMath.squash(NLMath.cos(theta));
+              turtle.setXY(newX, newY, clone(seenTurtlesSet));
+            }
+            return false;
+          } catch (error) {
+            ex = error;
+            if (ex instanceof TopologyInterrupt) {
+              return true;
+            } else {
+              throw ex;
+            }
+          }
+        }).call(_this);
+        if (mode === "fixed" && !wentBoom) {
+          return turtle.right(dh, clone(seenTurtlesSet));
+        }
+      };
+    })(this));
+  };
+
+  Setters = {
+    setXcor: setXcor,
+    setYcor: setYcor,
+    setBreed: setBreed,
+    setColor: setColor,
+    setHeading: setHeading,
+    setIsHidden: setIsHidden,
+    setLabel: setLabel,
+    setLabelColor: setLabelColor,
+    setShape: setShape,
+    setSize: setSize
+  };
+
+  getBreed = (function() {
+    return this.world.turtleManager.turtlesOfBreed(this._breed.name);
+  });
+
+  VariableSpecs = [
+    new ImmutableVariableSpec('who', function() {
+      return this.id;
+    }), new MutableVariableSpec('breed', getBreed, setBreed), new MutableVariableSpec('color', (function() {
+      return this._color;
+    }), setColor), new MutableVariableSpec('heading', (function() {
+      return this._heading;
+    }), setHeading), new MutableVariableSpec('hidden?', (function() {
+      return this._hidden;
+    }), setIsHidden), new MutableVariableSpec('label', (function() {
+      return this._label;
+    }), setLabel), new MutableVariableSpec('label-color', (function() {
+      return this._labelcolor;
+    }), setLabelColor), new MutableVariableSpec('pen-mode', (function() {
+      return this.penManager.getMode().toString();
+    }), (function(x) {
+      return this.penManager.setPenMode(x);
+    })), new MutableVariableSpec('pen-size', (function() {
+      return this.penManager.getSize();
+    }), (function(x) {
+      return this.penManager.setSize(x);
+    })), new MutableVariableSpec('shape', (function() {
+      return this._getShape();
+    }), setShape), new MutableVariableSpec('size', (function() {
+      return this._size;
+    }), setSize), new MutableVariableSpec('xcor', (function() {
+      return this.xcor;
+    }), setXcor), new MutableVariableSpec('ycor', (function() {
+      return this.ycor;
+    }), setYcor)
+  ];
+
+  module.exports = {
+    Setters: Setters,
+    VariableSpecs: VariableSpecs
+  };
+
+}).call(this);
+
+},{"../structure/variablespec":"engine/core/structure/variablespec","../typechecker":"engine/core/typechecker","brazierjs/object":"brazier/object","engine/core/colormodel":"engine/core/colormodel","shim/strictmath":"shim/strictmath","util/exception":"util/exception","util/nlmath":"util/nlmath"}],"engine/core/turtlelinkmanager":[function(require,module,exports){
+(function() {
+  var All, DeathInterrupt, In, LinkManager, LinkSet, Out, TurtleSet, filter, flatMap, ignorantly, ignoring, linkBreedMatches, map, otherEnd, pipeline, ref, ref1, unique;
+
+  LinkSet = require('./linkset');
+
+  TurtleSet = require('./turtleset');
+
+  ref = require('brazierjs/array'), filter = ref.filter, flatMap = ref.flatMap, map = ref.map, unique = ref.unique;
+
+  pipeline = require('brazierjs/function').pipeline;
+
+  ref1 = require('util/exception'), DeathInterrupt = ref1.DeathInterrupt, ignoring = ref1.ignoring;
+
+  ignorantly = ignoring(DeathInterrupt);
+
+  All = {};
+
+  In = {};
+
+  Out = {};
+
+  otherEnd = function(sourceID) {
+    return function(arg) {
+      var end1, end2;
+      end1 = arg.end1, end2 = arg.end2;
+      if (end1.id === sourceID) {
+        return end2;
+      } else {
+        return end1;
+      }
+    };
+  };
+
+  linkBreedMatches = function(breedName) {
+    return function(directedness) {
+      return function(ownerID) {
+        return function(link) {
+          return (breedName === "LINKS" || breedName === link.getBreedName()) && ((directedness === All) || (!link.isDirected) || (directedness === In && link.end2.id === ownerID) || (directedness === Out && link.end1.id === ownerID));
+        };
+      };
+    };
+  };
+
+  module.exports = LinkManager = (function() {
+    LinkManager._links = void 0;
+
+    function LinkManager(_ownerID, _world) {
+      this._ownerID = _ownerID;
+      this._world = _world;
+      this.clear();
+    }
+
+    LinkManager.prototype.add = function(link) {
+      this._links.push(link);
+    };
+
+    LinkManager.prototype.clear = function() {
+      var oldLinks, ref2;
+      oldLinks = (ref2 = this._links) != null ? ref2 : [];
+      this._links = [];
+      oldLinks.forEach(function(link) {
+        return ignorantly((function(_this) {
+          return function() {
+            return link.die();
+          };
+        })(this));
+      });
+    };
+
+    LinkManager.prototype.inLinkFrom = function(breedName, otherTurtle) {
+      return this._findLink(otherTurtle, breedName, In);
+    };
+
+    LinkManager.prototype.inLinkNeighbors = function(breedName) {
+      return this._neighbors(breedName, In);
+    };
+
+    LinkManager.prototype.isInLinkNeighbor = function(breedName, turtle) {
+      return this.inLinkFrom(breedName, turtle) !== Nobody;
+    };
+
+    LinkManager.prototype.isLinkNeighbor = function(breedName, turtle) {
+      return this.isOutLinkNeighbor(breedName, turtle) || this.isInLinkNeighbor(breedName, turtle);
+    };
+
+    LinkManager.prototype.isOutLinkNeighbor = function(breedName, turtle) {
+      return this.outLinkTo(breedName, turtle) !== Nobody;
+    };
+
+    LinkManager.prototype.linkWith = function(breedName, otherTurtle) {
+      return this._findLink(otherTurtle, breedName, All);
+    };
+
+    LinkManager.prototype.linkNeighbors = function(breedName) {
+      return this._neighbors(breedName, All);
+    };
+
+    LinkManager.prototype.myInLinks = function(breedName) {
+      return new LinkSet(this._links.filter(linkBreedMatches(breedName)(In)(this._ownerID)), this._world);
+    };
+
+    LinkManager.prototype.myLinks = function(breedName) {
+      return new LinkSet(this._links.filter(linkBreedMatches(breedName)(All)(this._ownerID)), this._world);
+    };
+
+    LinkManager.prototype.myOutLinks = function(breedName) {
+      return new LinkSet(this._links.filter(linkBreedMatches(breedName)(Out)(this._ownerID)), this._world);
+    };
+
+    LinkManager.prototype.outLinkNeighbors = function(breedName) {
+      return this._neighbors(breedName, Out);
+    };
+
+    LinkManager.prototype.outLinkTo = function(breedName, otherTurtle) {
+      return this._findLink(otherTurtle, breedName, Out);
+    };
+
+    LinkManager.prototype.remove = function(link) {
+      this._links.splice(this._links.indexOf(link), 1);
+    };
+
+    LinkManager.prototype._findLink = function(otherTurtle, breedName, directedness) {
+      var linkDoesMatch, links;
+      linkDoesMatch = (function(_this) {
+        return function(l) {
+          return otherEnd(_this._ownerID)(l) === otherTurtle && linkBreedMatches(breedName)(directedness)(_this._ownerID)(l);
+        };
+      })(this);
+      links = this._links.filter(linkDoesMatch);
+      if (links.length === 0) {
+        return Nobody;
+      } else if (links.length === 1) {
+        return links[0];
+      } else {
+        return links[this._world.rng.nextInt(links.length)];
+      }
+    };
+
+    LinkManager.prototype.neighborsIn = function(linkSet) {
+      var collectOtherEnd;
+      collectOtherEnd = (function(_this) {
+        return function(arg) {
+          var end1, end2, isEnd1, isEnd2;
+          end1 = arg.end1, end2 = arg.end2;
+          isEnd1 = end1.id === _this._ownerID;
+          isEnd2 = end2.id === _this._ownerID;
+          if (isEnd1 && (!isEnd2)) {
+            return [end2];
+          } else if (isEnd2 && (!isEnd1)) {
+            return [end1];
+          } else {
+            return [];
+          }
+        };
+      })(this);
+      return pipeline(flatMap(collectOtherEnd), unique)(linkSet.toArray());
+    };
+
+    LinkManager.prototype._neighbors = function(breedName, directedness) {
+      return pipeline(filter(linkBreedMatches(breedName)(directedness)(this._ownerID)), map(otherEnd(this._ownerID)), unique, ((function(_this) {
+        return function(turtles) {
+          return new TurtleSet(turtles, _this._world);
+        };
+      })(this)))(this._links);
+    };
+
+    LinkManager.prototype._refresh = function() {
+      this._links.forEach(function(link) {
+        link.updateEndRelatedVars();
+      });
+    };
+
+    return LinkManager;
+
+  })();
+
+}).call(this);
+
+},{"./linkset":"engine/core/linkset","./turtleset":"engine/core/turtleset","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","util/exception":"util/exception"}],"engine/core/turtleset":[function(require,module,exports){
+(function() {
+  var AbstractAgentSet, DeadSkippingIterator, TurtleSet,
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  AbstractAgentSet = require('./abstractagentset');
+
+  DeadSkippingIterator = require('./structure/deadskippingiterator');
+
+  module.exports = TurtleSet = (function(superClass) {
+    extend(TurtleSet, superClass);
+
+    function TurtleSet(_agents, world, specialName) {
+      this._agents = _agents;
+      TurtleSet.__super__.constructor.call(this, this._agents, world, "turtles", specialName);
+    }
+
+    TurtleSet.prototype.iterator = function() {
+      return new DeadSkippingIterator(this._agents);
+    };
+
+    return TurtleSet;
+
+  })(AbstractAgentSet);
+
+}).call(this);
+
+},{"./abstractagentset":"engine/core/abstractagentset","./structure/deadskippingiterator":"engine/core/structure/deadskippingiterator"}],"engine/core/turtle":[function(require,module,exports){
+(function() {
+  var AbstractAgentSet, ColorModel, Comparator, Death, Down, Erase, ExtraVariableSpec, NLMath, NLType, PenManager, Setters, Stamp, StampErase, StampMode, TopologyInterrupt, Turtle, TurtleLinkManager, TurtleSet, VariableManager, VariableSpecs, foldl, forEach, ignorantly, ignoring, makePenLines, map, rangeUntil, ref, ref1, ref2, ref3, ref4, uniqueBy,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  AbstractAgentSet = require('./abstractagentset');
+
+  ColorModel = require('engine/core/colormodel');
+
+  TurtleLinkManager = require('./turtlelinkmanager');
+
+  TurtleSet = require('./turtleset');
+
+  NLType = require('./typechecker');
+
+  VariableManager = require('./structure/variablemanager');
+
+  makePenLines = require('./turtle/makepenlines');
+
+  Comparator = require('util/comparator');
+
+  NLMath = require('util/nlmath');
+
+  ref = require('brazierjs/array'), foldl = ref.foldl, forEach = ref.forEach, map = ref.map, uniqueBy = ref.uniqueBy;
+
+  rangeUntil = require('brazierjs/number').rangeUntil;
+
+  ref1 = require('./structure/penmanager'), PenManager = ref1.PenManager, (ref2 = ref1.PenStatus, Down = ref2.Down, Erase = ref2.Erase);
+
+  ExtraVariableSpec = require('./structure/variablespec').ExtraVariableSpec;
+
+  ref3 = require('util/exception'), Death = ref3.DeathInterrupt, ignoring = ref3.ignoring, TopologyInterrupt = ref3.TopologyInterrupt;
+
+  ref4 = require('./turtle/turtlevariables'), Setters = ref4.Setters, VariableSpecs = ref4.VariableSpecs;
+
+  ignorantly = ignoring(TopologyInterrupt);
+
+  StampMode = (function() {
+    function StampMode(name1) {
+      this.name = name1;
+    }
+
+    return StampMode;
+
+  })();
+
+  Stamp = new StampMode("normal");
+
+  StampErase = new StampMode("erase");
+
+  module.exports = Turtle = (function() {
+    Turtle.prototype._breed = void 0;
+
+    Turtle.prototype._breedShape = void 0;
+
+    Turtle.prototype._name = void 0;
+
+    Turtle.prototype._updateVarsByName = void 0;
+
+    Turtle.prototype._varManager = void 0;
+
+    Turtle.prototype.linkManager = void 0;
+
+    function Turtle(world, id1, _genUpdate, _registerLineDraw, _registerTurtleStamp, _registerDeath, _createTurtle, _removeTurtle, _color, _heading, xcor1, ycor1, breed, _label, _labelcolor, _hidden, _size, _givenShape, genPenManager) {
+      var varNames;
+      this.world = world;
+      this.id = id1;
+      this._genUpdate = _genUpdate;
+      this._registerLineDraw = _registerLineDraw;
+      this._registerTurtleStamp = _registerTurtleStamp;
+      this._registerDeath = _registerDeath;
+      this._createTurtle = _createTurtle;
+      this._removeTurtle = _removeTurtle;
+      this._color = _color != null ? _color : 0;
+      this._heading = _heading != null ? _heading : 0;
+      this.xcor = xcor1 != null ? xcor1 : 0;
+      this.ycor = ycor1 != null ? ycor1 : 0;
+      if (breed == null) {
+        breed = this.world.breedManager.turtles();
+      }
+      this._label = _label != null ? _label : "";
+      this._labelcolor = _labelcolor != null ? _labelcolor : 9.9;
+      this._hidden = _hidden != null ? _hidden : false;
+      this._size = _size != null ? _size : 1.0;
+      this._givenShape = _givenShape;
+      if (genPenManager == null) {
+        genPenManager = (function(_this) {
+          return function(self) {
+            return new PenManager(_this._genUpdate(self));
+          };
+        })(this);
+      }
+      this.patchAt = bind(this.patchAt, this);
+      this._updateVarsByName = this._genUpdate(this);
+      this.penManager = genPenManager(this);
+      this.linkManager = new TurtleLinkManager(this.id, this.world);
+      varNames = this._varNamesForBreed(breed);
+      this._varManager = this._genVarManager(varNames);
+      Setters.setBreed.call(this, breed);
+      if (this._givenShape != null) {
+        Setters.setShape.call(this, this._givenShape);
+      }
+      this.getPatchHere().trackTurtle(this);
+    }
+
+    Turtle.prototype.getBreedName = function() {
+      return this._breed.name;
+    };
+
+    Turtle.prototype.getBreedNameSingular = function() {
+      return this._breed.singular;
+    };
+
+    Turtle.prototype.getName = function() {
+      return this._name;
+    };
+
+    Turtle.prototype.canMove = function(distance) {
+      return this.patchAhead(distance) !== Nobody;
+    };
+
+    Turtle.prototype.distance = function(agent) {
+      return this.world.topology.distance(this.xcor, this.ycor, agent);
+    };
+
+    Turtle.prototype.distanceXY = function(x, y) {
+      return this.world.topology.distanceXY(this.xcor, this.ycor, x, y);
+    };
+
+    Turtle.prototype.getCoords = function() {
+      return [this.xcor, this.ycor];
+    };
+
+    Turtle.prototype.towards = function(agent) {
+      var ref5, x, y;
+      ref5 = agent.getCoords(), x = ref5[0], y = ref5[1];
+      return this.towardsXY(x, y);
+    };
+
+    Turtle.prototype.towardsXY = function(x, y) {
+      return this.world.topology.towards(this.xcor, this.ycor, x, y);
+    };
+
+    Turtle.prototype.faceXY = function(x, y) {
+      if (x !== this.xcor || y !== this.ycor) {
+        Setters.setHeading.call(this, this.world.topology.towards(this.xcor, this.ycor, x, y));
+      }
+    };
+
+    Turtle.prototype.face = function(agent) {
+      var ref5, x, y;
+      ref5 = agent.getCoords(), x = ref5[0], y = ref5[1];
+      this.faceXY(x, y);
+    };
+
+    Turtle.prototype.inCone = function(agents, distance, angle) {
+      if (distance < 0) {
+        throw new Error("IN-CONE cannot take a negative radius.");
+      } else if (angle < 0) {
+        throw new Error("IN-CONE cannot take a negative angle.");
+      } else if (angle > 360) {
+        throw new Error("IN-CONE cannot take an angle greater than 360.");
+      } else {
+        return this.world.topology.inCone(this.xcor, this.ycor, NLMath.normalizeHeading(this._heading), agents, distance, angle);
+      }
+    };
+
+    Turtle.prototype.inRadius = function(agents, radius) {
+      return this.world.topology.inRadius(this.xcor, this.ycor, agents, radius);
+    };
+
+    Turtle.prototype.patchAt = function(dx, dy) {
+      return this.world.patchAtCoords(this.xcor + dx, this.ycor + dy);
+    };
+
+    Turtle.prototype.turtlesAt = function(dx, dy) {
+      return this.getPatchHere().turtlesAt(dx, dy);
+    };
+
+    Turtle.prototype.breedAt = function(breedName, dx, dy) {
+      return this.getPatchHere().breedAt(breedName, dx, dy);
+    };
+
+    Turtle.prototype.otherEnd = function() {
+      if (this === this.world.selfManager.myself().end1) {
+        return this.world.selfManager.myself().end2;
+      } else {
+        return this.world.selfManager.myself().end1;
+      }
+    };
+
+    Turtle.prototype.patchAtHeadingAndDistance = function(angle, distance) {
+      return this.world.patchAtHeadingAndDistanceFrom(angle, distance, this.xcor, this.ycor);
+    };
+
+    Turtle.prototype.patchRightAndAhead = function(angle, distance) {
+      return this.patchAtHeadingAndDistance(this._heading + angle, distance);
+    };
+
+    Turtle.prototype.patchLeftAndAhead = function(angle, distance) {
+      return this.patchRightAndAhead(-angle, distance);
+    };
+
+    Turtle.prototype.patchAhead = function(distance) {
+      return this.patchRightAndAhead(0, distance);
+    };
+
+    Turtle.prototype.ask = function(f) {
+      var base;
+      this.world.selfManager.askAgent(f)(this);
+      if (typeof (base = this.world.selfManager.self()).isDead === "function" ? base.isDead() : void 0) {
+        throw new Death;
+      }
+    };
+
+    Turtle.prototype.projectionBy = function(f) {
+      if (!this.isDead()) {
+        return this.world.selfManager.askAgent(f)(this);
+      } else {
+        throw new Error("That " + this._breed.singular + " is dead.");
+      }
+    };
+
+    Turtle.prototype.fd = function(distance) {
+      var increment, remaining;
+      increment = distance > 0 ? 1 : -1;
+      remaining = distance;
+      if (distance > 0) {
+        while (remaining >= increment && this.jumpIfAble(increment)) {
+          remaining -= increment;
+        }
+      } else if (distance < 0) {
+        while (remaining <= increment && this.jumpIfAble(increment)) {
+          remaining -= increment;
+        }
+      }
+      if (remaining !== 0) {
+        this.jumpIfAble(remaining);
+      }
+    };
+
+    Turtle.prototype._optimalFdOne = function() {
+      this.jumpIfAble(1);
+    };
+
+    Turtle.prototype._optimalFdLessThan1 = function(distance) {
+      this.jumpIfAble(distance);
+    };
+
+    Turtle.prototype._optimalNSum = function(varName) {
+      return this.getPatchHere()._optimalNSum(varName);
+    };
+
+    Turtle.prototype._optimalNSum4 = function(varName) {
+      return this.getPatchHere()._optimalNSum4(varName);
+    };
+
+    Turtle.prototype.jumpIfAble = function(distance) {
+      var canMove;
+      canMove = this.canMove(distance);
+      if (canMove) {
+        this._jump(distance);
+      }
+      return canMove;
+    };
+
+    Turtle.prototype._jump = function(distance) {
+      this._drawJumpLine(this.xcor, this.ycor, distance);
+      this._setXandY(this.xcor + distance * this.dx(), this.ycor + distance * this.dy());
+    };
+
+    Turtle.prototype.dx = function() {
+      return NLMath.squash(NLMath.sin(this._heading));
+    };
+
+    Turtle.prototype.dy = function() {
+      return NLMath.squash(NLMath.cos(this._heading));
+    };
+
+    Turtle.prototype.right = function(angle, seenTurtlesSet) {
+      var newHeading;
+      if (seenTurtlesSet == null) {
+        seenTurtlesSet = {};
+      }
+      newHeading = this._heading + angle;
+      Setters.setHeading.call(this, newHeading, seenTurtlesSet);
+    };
+
+    Turtle.prototype.setXY = function(x, y, seenTurtlesSet) {
+      var error, error1, origXcor, origYcor;
+      if (seenTurtlesSet == null) {
+        seenTurtlesSet = {};
+      }
+      origXcor = this.xcor;
+      origYcor = this.ycor;
+      try {
+        this._setXandY(x, y, seenTurtlesSet);
+        this._drawLine(origXcor, origYcor, x, y);
+      } catch (error1) {
+        error = error1;
+        this._setXandY(origXcor, origYcor, seenTurtlesSet);
+        if (error instanceof TopologyInterrupt) {
+          throw new TopologyInterrupt("The point [ " + x + " , " + y + " ] is outside of the boundaries of the world and wrapping is not permitted in one or both directions.");
+        } else {
+          throw error;
+        }
+      }
+    };
+
+    Turtle.prototype.goHome = function() {
+      this.setXY(0, 0);
+    };
+
+    Turtle.prototype.hideTurtle = function(shouldHide) {
+      Setters.setIsHidden.call(this, shouldHide);
+    };
+
+    Turtle.prototype.isBreed = function(breedName) {
+      return this._breed.name.toUpperCase() === breedName.toUpperCase();
+    };
+
+    Turtle.prototype.isDead = function() {
+      return this.id === -1;
+    };
+
+    Turtle.prototype.die = function() {
+      this._breed.remove(this);
+      if (!this.isDead()) {
+        this._removeTurtle(this.id);
+        this._seppuku();
+        this.linkManager.clear();
+        this.id = -1;
+        this.getPatchHere().untrackTurtle(this);
+        this.world.observer.unfocus(this);
+      }
+      throw new Death("Call only from inside an askAgent block");
+    };
+
+    Turtle.prototype.getVariable = function(varName) {
+      return this._varManager[varName];
+    };
+
+    Turtle.prototype.setVariable = function(varName, value) {
+      this._varManager[varName] = value;
+    };
+
+    Turtle.prototype.getPatchHere = function() {
+      return this.world.getPatchAt(this.xcor, this.ycor);
+    };
+
+    Turtle.prototype.getPatchVariable = function(varName) {
+      return this.getPatchHere().getVariable(varName);
+    };
+
+    Turtle.prototype.setPatchVariable = function(varName, value) {
+      this.getPatchHere().setVariable(varName, value);
+    };
+
+    Turtle.prototype.getNeighbors = function() {
+      return this.getPatchHere().getNeighbors();
+    };
+
+    Turtle.prototype.getNeighbors4 = function() {
+      return this.getPatchHere().getNeighbors4();
+    };
+
+    Turtle.prototype.turtlesHere = function() {
+      return this.getPatchHere().turtlesHere();
+    };
+
+    Turtle.prototype.breedHere = function(breedName) {
+      return this.getPatchHere().breedHere(breedName);
+    };
+
+    Turtle.prototype.hatch = function(n, breedName) {
+      var breed, isNameValid, newTurtles, num;
+      num = n >= 0 ? n : 0;
+      isNameValid = (breedName != null) && breedName !== "";
+      breed = isNameValid ? this.world.breedManager.get(breedName) : this._breed;
+      newTurtles = map((function(_this) {
+        return function() {
+          return _this._makeTurtleCopy(breed);
+        };
+      })(this))(rangeUntil(0)(num));
+      return new TurtleSet(newTurtles, this.world);
+    };
+
+    Turtle.prototype._makeTurtleCopy = function(breed) {
+      var shape, turtle, varNames;
+      shape = breed === this._breed ? this._givenShape : void 0;
+      turtle = this._createTurtle(this._color, this._heading, this.xcor, this.ycor, breed, this._label, this._labelcolor, this._hidden, this._size, shape, (function(_this) {
+        return function(self) {
+          return _this.penManager.clone(_this._genUpdate(self));
+        };
+      })(this));
+      varNames = this._varNamesForBreed(breed);
+      forEach((function(_this) {
+        return function(varName) {
+          var ref5;
+          turtle.setVariable(varName, (ref5 = _this.getVariable(varName)) != null ? ref5 : 0);
+        };
+      })(this))(varNames);
+      return turtle;
+    };
+
+    Turtle.prototype._varNamesForBreed = function(breed) {
+      var turtlesBreed;
+      turtlesBreed = this.world.breedManager.turtles();
+      if (breed === turtlesBreed || (breed == null)) {
+        return turtlesBreed.varNames;
+      } else {
+        return turtlesBreed.varNames.concat(breed.varNames);
+      }
+    };
+
+    Turtle.prototype.moveTo = function(agent) {
+      var ref5, x, y;
+      ref5 = agent.getCoords(), x = ref5[0], y = ref5[1];
+      this.setXY(x, y);
+    };
+
+    Turtle.prototype.followMe = function() {
+      this.world.observer.follow(this);
+    };
+
+    Turtle.prototype.rideMe = function() {
+      this.world.observer.ride(this);
+    };
+
+    Turtle.prototype.watchMe = function() {
+      this.world.observer.watch(this);
+    };
+
+    Turtle.prototype.stamp = function() {
+      this._drawStamp(Stamp);
+    };
+
+    Turtle.prototype.stampErase = function() {
+      this._drawStamp(StampErase);
+    };
+
+    Turtle.prototype.compare = function(x) {
+      if (NLType(x).isTurtle()) {
+        return Comparator.numericCompare(this.id, x.id);
+      } else {
+        return Comparator.NOT_EQUALS;
+      }
+    };
+
+    Turtle.prototype.toString = function() {
+      if (!this.isDead()) {
+        return "(" + (this.getName()) + ")";
+      } else {
+        return "nobody";
+      }
+    };
+
+    Turtle.prototype.varNames = function() {
+      return this._varManager.names();
+    };
+
+    Turtle.prototype._drawStamp = function(mode) {
+      this._registerTurtleStamp(this.xcor, this.ycor, this._size, this._heading, ColorModel.colorToRGB(this._color), this._getShape(), mode.name);
+    };
+
+    Turtle.prototype._drawLine = function(oldX, oldY, newX, newY) {
+      var penMode, wrappedX, wrappedY;
+      penMode = this.penManager.getMode();
+      if ((penMode === Down || penMode === Erase) && (oldX !== newX || oldY !== newY)) {
+        wrappedX = this.world.topology.wrapX(newX);
+        wrappedY = this.world.topology.wrapY(newY);
+        this._registerLineDraw(oldX, oldY, wrappedX, wrappedY, ColorModel.colorToRGB(this._color), this.penManager.getSize(), this.penManager.getMode().toString());
+      }
+    };
+
+    Turtle.prototype._drawJumpLine = function(x, y, dist) {
+      var color, lines, maxPxcor, maxPycor, minPxcor, minPycor, mode, penMode, ref5, size;
+      penMode = this.penManager.getMode();
+      if (penMode === Down || penMode === Erase) {
+        color = ColorModel.colorToRGB(this._color);
+        size = this.penManager.getSize();
+        mode = this.penManager.getMode().toString();
+        ref5 = this.world.topology, minPxcor = ref5.minPxcor, maxPxcor = ref5.maxPxcor, minPycor = ref5.minPycor, maxPycor = ref5.maxPycor;
+        lines = makePenLines(x, y, NLMath.normalizeHeading(this._heading), dist, minPxcor - 0.5, maxPxcor + 0.5, minPycor - 0.5, maxPycor + 0.5);
+        forEach((function(_this) {
+          return function(arg) {
+            var x1, x2, y1, y2;
+            x1 = arg.x1, y1 = arg.y1, x2 = arg.x2, y2 = arg.y2;
+            _this._registerLineDraw(x1, y1, x2, y2, color, size, mode);
+          };
+        })(this))(lines);
+      }
+    };
+
+    Turtle.prototype._getShape = function() {
+      var ref5;
+      return (ref5 = this._givenShape) != null ? ref5 : this._breedShape;
+    };
+
+    Turtle.prototype._linkBreedMatches = function(breedName) {
+      return function(link) {
+        return breedName === "LINKS" || breedName === link.getBreedName();
+      };
+    };
+
+    Turtle.prototype._seppuku = function() {
+      this._registerDeath(this.id);
+    };
+
+    Turtle.prototype._tiedTurtlesRaw = function() {
+      var f, fixeds, links, others, ref5;
+      links = this.linkManager.myOutLinks("LINKS").toArray().filter(function(l) {
+        return l.tiemode !== "none";
+      });
+      f = (function(_this) {
+        return function(arg, arg1) {
+          var end1, end2, fixeds, others, tiemode, turtle;
+          fixeds = arg[0], others = arg[1];
+          end1 = arg1.end1, end2 = arg1.end2, tiemode = arg1.tiemode;
+          turtle = end1 === _this ? end2 : end1;
+          if (tiemode === "fixed") {
+            return [fixeds.concat([turtle]), others];
+          } else {
+            return [fixeds, others.concat([turtle])];
+          }
+        };
+      })(this);
+      ref5 = foldl(f)([[], []])(links), fixeds = ref5[0], others = ref5[1];
+      return {
+        fixeds: fixeds,
+        others: others
+      };
+    };
+
+    Turtle.prototype._tiedTurtles = function() {
+      var fixeds, others, ref5;
+      ref5 = this._tiedTurtlesRaw(), fixeds = ref5.fixeds, others = ref5.others;
+      return this._uniqueTurtles(fixeds.concat(others));
+    };
+
+    Turtle.prototype._fixedTiedTurtles = function() {
+      return this._uniqueTurtles(this._tiedTurtlesRaw().fixeds);
+    };
+
+    Turtle.prototype._uniqueTurtles = function(turtles) {
+      return uniqueBy(function(t) {
+        return t.id;
+      })(turtles);
+    };
+
+    Turtle.prototype._genVarManager = function(extraVarNames) {
+      var allSpecs, extraSpecs;
+      extraSpecs = extraVarNames.map(function(name) {
+        return new ExtraVariableSpec(name);
+      });
+      allSpecs = VariableSpecs.concat(extraSpecs);
+      return new VariableManager(this, allSpecs);
+    };
+
+    Turtle.prototype._genVarUpdate = function(varName) {
+      this._updateVarsByName(varName);
+    };
+
+    Turtle.prototype._refreshName = function() {
+      this._name = this._breed.singular + " " + this.id;
+    };
+
+    Turtle.prototype._setXandY = function(newX, newY, seenTurtlesSet) {
+      var dx, dy, f, oldX, oldY, originPatch, xcor, ycor;
+      if (seenTurtlesSet == null) {
+        seenTurtlesSet = {};
+      }
+      originPatch = this.getPatchHere();
+      oldX = this.xcor;
+      oldY = this.ycor;
+      xcor = this.world.topology.wrapX(newX);
+      ycor = this.world.topology.wrapY(newY);
+      this.xcor = xcor;
+      this.ycor = ycor;
+      this._updateVarsByName("xcor", "ycor");
+      if (originPatch !== this.getPatchHere()) {
+        originPatch.untrackTurtle(this);
+        this.getPatchHere().trackTurtle(this);
+      }
+      this.linkManager._refresh();
+      dx = newX - oldX;
+      dy = newY - oldY;
+      f = (function(_this) {
+        return function(seenTurtles) {
+          return function(turtle) {
+            return ignorantly(function() {
+              return turtle._setXandY(turtle.xcor + dx, turtle.ycor + dy, seenTurtles);
+            });
+          };
+        };
+      })(this);
+      this._withEachTiedTurtle(f, seenTurtlesSet);
+    };
+
+    Turtle.prototype._withEachTiedTurtle = function(f, seenTurtlesSet) {
+      var turtles;
+      seenTurtlesSet[this.id] = true;
+      turtles = this._tiedTurtles().filter(function(arg) {
+        var id;
+        id = arg.id;
+        return seenTurtlesSet[id] == null;
+      });
+      turtles.forEach(function(arg) {
+        var id;
+        id = arg.id;
+        return seenTurtlesSet[id] = true;
+      });
+      turtles.forEach(f(seenTurtlesSet));
+    };
+
+    return Turtle;
+
+  })();
+
+}).call(this);
+
+},{"./abstractagentset":"engine/core/abstractagentset","./structure/penmanager":"engine/core/structure/penmanager","./structure/variablemanager":"engine/core/structure/variablemanager","./structure/variablespec":"engine/core/structure/variablespec","./turtle/makepenlines":"engine/core/turtle/makepenlines","./turtle/turtlevariables":"engine/core/turtle/turtlevariables","./turtlelinkmanager":"engine/core/turtlelinkmanager","./turtleset":"engine/core/turtleset","./typechecker":"engine/core/typechecker","brazierjs/array":"brazier/array","brazierjs/number":"brazier/number","engine/core/colormodel":"engine/core/colormodel","util/comparator":"util/comparator","util/exception":"util/exception","util/nlmath":"util/nlmath"}],"engine/core/typechecker":[function(require,module,exports){
+(function() {
+  var AbstractAgentSet, JSType, Link, LinkSet, NLType, Patch, PatchSet, Turtle, TurtleSet;
+
+  NLType = (function() {
+    function NLType(_x) {
+      this._x = _x;
+    }
+
+    return NLType;
+
+  })();
+
+  module.exports = function(x) {
+    return new NLType(x);
+  };
+
+  AbstractAgentSet = require('./abstractagentset');
+
+  Link = require('./link');
+
+  LinkSet = require('./linkset');
+
+  Patch = require('./patch');
+
+  PatchSet = require('./patchset');
+
+  Turtle = require('./turtle');
+
+  TurtleSet = require('./turtleset');
+
+  JSType = require('util/typechecker');
+
+  NLType.prototype.isAgent = function() {
+    return this.isTurtle() || this.isPatch() || this.isLink();
+  };
+
+  NLType.prototype.isAgentSet = function() {
+    return this._x instanceof AbstractAgentSet;
+  };
+
+  NLType.prototype.isBoolean = function() {
+    return JSType(this._x).isBoolean();
+  };
+
+  NLType.prototype.isBreed = function(breedName) {
+    var base, base1;
+    return !(typeof (base = this._x).isDead === "function" ? base.isDead() : void 0) && (typeof (base1 = this._x).isBreed === "function" ? base1.isBreed(breedName) : void 0) === true;
+  };
+
+  NLType.prototype.isBreedSet = function(breedName) {
+    return this.isAgentSet() && (this._x.getSpecialName() != null) && this._x.getSpecialName() === breedName;
+  };
+
+  NLType.prototype.isCommandLambda = function() {
+    return JSType(this._x).isFunction() && !this._x.isReporter;
+  };
+
+  NLType.prototype.isDirectedLink = function() {
+    return this.isLink() && this._x.isDirected;
+  };
+
+  NLType.prototype.isLinkSet = function() {
+    return this._x instanceof LinkSet;
+  };
+
+  NLType.prototype.isLink = function() {
+    return this._x instanceof Link;
+  };
+
+  NLType.prototype.isList = function() {
+    return JSType(this._x).isArray();
+  };
+
+  NLType.prototype.isNobody = function() {
+    return this._x === Nobody;
+  };
+
+  NLType.prototype.isNumber = function() {
+    return JSType(this._x).isNumber();
+  };
+
+  NLType.prototype.isPatchSet = function() {
+    return this._x instanceof PatchSet;
+  };
+
+  NLType.prototype.isPatch = function() {
+    return this._x instanceof Patch;
+  };
+
+  NLType.prototype.isReporterLambda = function() {
+    return JSType(this._x).isFunction() && this._x.isReporter;
+  };
+
+  NLType.prototype.isString = function() {
+    return JSType(this._x).isString();
+  };
+
+  NLType.prototype.isTurtleSet = function() {
+    return this._x instanceof TurtleSet;
+  };
+
+  NLType.prototype.isTurtle = function() {
+    return this._x instanceof Turtle;
+  };
+
+  NLType.prototype.isUndirectedLink = function() {
+    return this.isLink() && !this._x.isDirected;
+  };
+
+  NLType.prototype.isValidAgent = function() {
+    return this.isValidTurtle() || this.isPatch() || this.isValidLink();
+  };
+
+  NLType.prototype.isValidDirectedLink = function() {
+    return this.isDirectedLink() && !this._x.isDead();
+  };
+
+  NLType.prototype.isValidLink = function() {
+    return this.isLink() && !this._x.isDead();
+  };
+
+  NLType.prototype.isValidTurtle = function() {
+    return this.isTurtle() && !this._x.isDead();
+  };
+
+  NLType.prototype.isValidUndirectedLink = function() {
+    return this.isUndirectedLink() && !this._x.isDead();
+  };
+
+}).call(this);
+
+},{"./abstractagentset":"engine/core/abstractagentset","./link":"engine/core/link","./linkset":"engine/core/linkset","./patch":"engine/core/patch","./patchset":"engine/core/patchset","./turtle":"engine/core/turtle","./turtleset":"engine/core/turtleset","util/typechecker":"util/typechecker"}],"engine/core/world/export":[function(require,module,exports){
+(function() {
+  var AgentReference, BreedNamePair, BreedReference, ExportAllPlotsData, ExportPlotData, ExportWorldData, ExportedAgent, ExportedAgentSet, ExportedColorNum, ExportedCommandLambda, ExportedExtension, ExportedGlobals, ExportedLink, ExportedLinkSet, ExportedPatch, ExportedPatchSet, ExportedPen, ExportedPlot, ExportedPlotManager, ExportedPoint, ExportedRGB, ExportedRGBA, ExportedReporterLambda, ExportedTurtle, ExportedTurtleSet, LinkReference, Metadata, NLType, NobodyReference, PatchReference, TurtleReference, difference, displayModeToString, exportAgent, exportAgentReference, exportBreedReference, exportColor, exportGlobals, exportLinkReference, exportMetadata, exportMiniGlobals, exportPatchReference, exportPlot, exportPlotManager, exportTurtleReference, exportWildcardVar, find, fold, id, isEmpty, linkBuiltins, patchBuiltins, penModeToBool, perspectiveToString, ref, ref1, ref2, ref3, ref4, ref5, ref6, tee, toObject, turtleBuiltins, version,
+    slice = [].slice;
+
+  version = require('meta').version;
+
+  ref = require('serialize/exportstructures'), AgentReference = ref.AgentReference, BreedNamePair = ref.BreedNamePair, BreedReference = ref.BreedReference, ExportAllPlotsData = ref.ExportAllPlotsData, ExportedAgent = ref.ExportedAgent, ExportedAgentSet = ref.ExportedAgentSet, ExportedColorNum = ref.ExportedColorNum, ExportedCommandLambda = ref.ExportedCommandLambda, ExportedExtension = ref.ExportedExtension, ExportedGlobals = ref.ExportedGlobals, ExportedLink = ref.ExportedLink, ExportedLinkSet = ref.ExportedLinkSet, ExportedPatch = ref.ExportedPatch, ExportedPatchSet = ref.ExportedPatchSet, ExportedPen = ref.ExportedPen, ExportedPlot = ref.ExportedPlot, ExportedPlotManager = ref.ExportedPlotManager, ExportedPoint = ref.ExportedPoint, ExportedReporterLambda = ref.ExportedReporterLambda, ExportedRGB = ref.ExportedRGB, ExportedRGBA = ref.ExportedRGBA, ExportedTurtle = ref.ExportedTurtle, ExportedTurtleSet = ref.ExportedTurtleSet, ExportPlotData = ref.ExportPlotData, ExportWorldData = ref.ExportWorldData, LinkReference = ref.LinkReference, Metadata = ref.Metadata, NobodyReference = ref.NobodyReference, PatchReference = ref.PatchReference, TurtleReference = ref.TurtleReference;
+
+  perspectiveToString = require('../observer').Perspective.perspectiveToString;
+
+  ref1 = require('../structure/builtins'), linkBuiltins = ref1.linkBuiltins, patchBuiltins = ref1.patchBuiltins, turtleBuiltins = ref1.turtleBuiltins;
+
+  ref2 = require('engine/plot/pen'), (ref3 = ref2.DisplayMode, displayModeToString = ref3.displayModeToString), (ref4 = ref2.PenMode, penModeToBool = ref4.penModeToBool);
+
+  ref5 = require('brazierjs/array'), difference = ref5.difference, find = ref5.find, isEmpty = ref5.isEmpty, toObject = ref5.toObject;
+
+  ref6 = require('brazierjs/function'), id = ref6.id, tee = ref6.tee;
+
+  fold = require('brazierjs/maybe').fold;
+
+  NLType = require('../typechecker');
+
+  exportColor = function(color) {
+    var a, b, g, r;
+    if (NLType(color).isNumber()) {
+      return new ExportedColorNum(color);
+    } else if (NLType(color).isList()) {
+      r = color[0], g = color[1], b = color[2], a = color[3];
+      if (a != null) {
+        return new ExportedRGBA(r, g, b, a);
+      } else {
+        return new ExportedRGB(r, g, b);
+      }
+    } else {
+      throw new Error("Unrecognized color format: " + (JSON.stringify(color)));
+    }
+  };
+
+  exportBreedReference = function(breedName) {
+    return new BreedReference(breedName.toLowerCase());
+  };
+
+  exportPatchReference = function(patch) {
+    return new PatchReference(patch.pxcor, patch.pycor);
+  };
+
+  exportTurtleReference = function(turtle) {
+    var breed;
+    breed = new BreedNamePair(turtle.getBreedNameSingular(), turtle.getBreedName().toLowerCase());
+    return new TurtleReference(breed, turtle.id);
+  };
+
+  exportLinkReference = function(link) {
+    var breed;
+    breed = new BreedNamePair(link.getBreedNameSingular(), link.getBreedName().toLowerCase());
+    return new LinkReference(breed, link.end1.id, link.end2.id);
+  };
+
+  exportAgentReference = function(agent) {
+    var type;
+    type = NLType(agent);
+    if (type.isNobody() || agent.isDead()) {
+      return NobodyReference;
+    } else if (type.isLink()) {
+      return exportLinkReference(agent);
+    } else if (type.isPatch()) {
+      return exportPatchReference(agent);
+    } else if (type.isTurtle()) {
+      return exportTurtleReference(agent);
+    } else {
+      throw new Error("Cannot make agent reference out of: " + (JSON.stringify(agent)));
+    }
+  };
+
+  exportWildcardVar = function(agent) {
+    return function(varName) {
+      var exportWildcardValue;
+      exportWildcardValue = function(value) {
+        var type;
+        type = NLType(value);
+        if (type.isAgent() || type.isNobody()) {
+          return exportAgentReference(value);
+        } else if ((typeof value.getSpecialName === "function" ? value.getSpecialName() : void 0) != null) {
+          return new BreedReference(value.getSpecialName().toLowerCase());
+        } else if (type.isLinkSet()) {
+          return new ExportedLinkSet(value.toArray().map(exportLinkReference));
+        } else if (type.isPatchSet()) {
+          return new ExportedPatchSet(value.toArray().map(exportPatchReference));
+        } else if (type.isTurtleSet()) {
+          return new ExportedTurtleSet(value.toArray().map(exportTurtleReference));
+        } else if (type.isCommandLambda()) {
+          return new ExportedCommandLambda(value.nlogoBody);
+        } else if (type.isReporterLambda()) {
+          return new ExportedReporterLambda(value.nlogoBody);
+        } else if (type.isList()) {
+          return value.map(exportWildcardValue);
+        } else {
+          return value;
+        }
+      };
+      return exportWildcardValue(agent.getVariable(varName));
+    };
+  };
+
+  exportMetadata = function() {
+    return new Metadata(version, '[IMPLEMENT .NLOGO]', new Date());
+  };
+
+  exportAgent = function(clazz, builtInsMappings) {
+    return function(agent) {
+      var builtInsNames, builtInsValues, extras, extrasNames;
+      builtInsValues = builtInsMappings.map(function(arg) {
+        var f, name;
+        name = arg[0], f = arg[1];
+        return f(agent.getVariable(name));
+      });
+      builtInsNames = builtInsMappings.map(function(arg) {
+        var name;
+        name = arg[0];
+        return name;
+      });
+      extrasNames = difference(agent.varNames())(builtInsNames);
+      extras = toObject(extrasNames.map(tee(id)(exportWildcardVar(agent))));
+      return (function(func, args, ctor) {
+        ctor.prototype = func.prototype;
+        var child = new ctor, result = func.apply(child, args);
+        return Object(result) === result ? result : child;
+      })(clazz, slice.call(builtInsValues).concat([extras]), function(){});
+    };
+  };
+
+  exportPlot = function(plot) {
+    var currentPenNameOrNull, exportPen, isAutoplotting, isLegendOpen, name, pens, xMax, xMin, yMax, yMin;
+    exportPen = function(pen) {
+      var color, exportPoint, interval, isPenDown, mode, name, points, x;
+      exportPoint = function(arg) {
+        var color, penMode, x, y;
+        x = arg.x, y = arg.y, penMode = arg.penMode, color = arg.color;
+        return new ExportedPoint(x, y, penModeToBool(penMode), color);
+      };
+      color = pen.getColor();
+      interval = pen.getInterval();
+      isPenDown = penModeToBool(pen.getPenMode());
+      mode = displayModeToString(pen.getDisplayMode());
+      name = pen.name;
+      points = pen.getPoints().map(exportPoint);
+      x = pen.getPenX();
+      return new ExportedPen(color, interval, isPenDown, mode, name, points, x);
+    };
+    currentPenNameOrNull = fold(function() {
+      return null;
+    })(function(cp) {
+      return cp.name;
+    })(plot.getCurrentPenMaybe());
+    isAutoplotting = plot.isAutoplotting;
+    isLegendOpen = plot.isLegendEnabled;
+    name = plot.name;
+    pens = plot.getPens().map(exportPen);
+    xMax = plot.xMax;
+    xMin = plot.xMin;
+    yMax = plot.yMax;
+    yMin = plot.yMin;
+    return new ExportedPlot(currentPenNameOrNull, isAutoplotting, isLegendOpen, name, pens, xMax, xMin, yMax, yMin);
+  };
+
+  exportPlotManager = function() {
+    var currentPlotNameOrNull, plots;
+    currentPlotNameOrNull = fold(function() {
+      return null;
+    })(function(cp) {
+      return cp.name;
+    })(this._plotManager.getCurrentPlotMaybe());
+    plots = this._plotManager.getPlots().map(exportPlot);
+    return new ExportedPlotManager(currentPlotNameOrNull, plots);
+  };
+
+  exportMiniGlobals = function() {
+    return toObject(this.observer.varNames().sort().map(tee(id)(exportWildcardVar(this.observer))));
+  };
+
+  exportGlobals = function() {
+    var codeGlobals, linkDirectedness, maxPxcor, maxPycor, minPxcor, minPycor, nextWhoNumber, noUnbreededLinks, perspective, subject, ticks;
+    noUnbreededLinks = isEmpty(this.links().toArray().filter(function(l) {
+      return l.getBreedName().toUpperCase() === "LINKS";
+    }));
+    linkDirectedness = noUnbreededLinks ? 'neither' : this.breedManager.links().isDirected() ? 'directed' : 'undirected';
+    maxPxcor = this.topology.maxPxcor;
+    maxPycor = this.topology.maxPycor;
+    minPxcor = this.topology.minPxcor;
+    minPycor = this.topology.minPycor;
+    nextWhoNumber = this.turtleManager.peekNextID();
+    perspective = perspectiveToString(this.observer.getPerspective());
+    subject = exportAgentReference(this.observer.subject());
+    ticks = this.ticker.ticksAreStarted() ? this.ticker.tickCount() : -1;
+    codeGlobals = exportMiniGlobals.call(this);
+    return new ExportedGlobals(linkDirectedness, maxPxcor, maxPycor, minPxcor, minPycor, nextWhoNumber, perspective, subject, ticks, codeGlobals);
+  };
+
+  module.exports.exportAllPlots = function() {
+    var metadata, miniGlobals, plots;
+    metadata = exportMetadata.call(this);
+    miniGlobals = exportMiniGlobals.call(this);
+    plots = this._plotManager.getPlots().map(exportPlot);
+    return new ExportAllPlotsData(metadata, miniGlobals, plots);
+  };
+
+  module.exports.exportPlot = function(plotName) {
+    var desiredPlotMaybe, metadata, miniGlobals, plot;
+    desiredPlotMaybe = find(function(x) {
+      return x.name === plotName;
+    })(this._plotManager.getPlots());
+    metadata = exportMetadata.call(this);
+    miniGlobals = exportMiniGlobals.call(this);
+    plot = fold(function() {
+      throw new Error("no such plot: \"" + plotName + "\"");
+    })(desiredPlotMaybe);
+    return new ExportPlotData(metadata, miniGlobals, plot);
+  };
+
+  module.exports.exportWorld = function() {
+    var extensions, globals, linkMapper, links, makeMappings, metadata, output, patchMapper, patches, plotManager, randomState, turtleMapper, turtles;
+    makeMappings = function(builtins) {
+      return function(mapper) {
+        return builtins.map(tee(id)(mapper));
+      };
+    };
+    patchMapper = function(varName) {
+      switch (varName) {
+        case "pcolor":
+        case "plabel-color":
+          return function(color) {
+            return exportColor(color);
+          };
+        default:
+          return id;
+      }
+    };
+    turtleMapper = function(varName) {
+      switch (varName) {
+        case "breed":
+          return function(breed) {
+            return exportBreedReference(breed.toString());
+          };
+        case "color":
+        case "label-color":
+          return function(color) {
+            return exportColor(color);
+          };
+        default:
+          return id;
+      }
+    };
+    linkMapper = function(varName) {
+      switch (varName) {
+        case "breed":
+          return function(breed) {
+            return exportBreedReference(breed.toString());
+          };
+        case "color":
+        case "label-color":
+          return function(color) {
+            return exportColor(color);
+          };
+        case "end1":
+        case "end2":
+          return function(end) {
+            return exportTurtleReference(end);
+          };
+        default:
+          return id;
+      }
+    };
+    metadata = exportMetadata.call(this);
+    randomState = this.rng.exportState();
+    globals = exportGlobals.call(this, false);
+    patches = this.patches().toArray().map(exportAgent(ExportedPatch, makeMappings(patchBuiltins)(patchMapper)));
+    turtles = this.turtleManager.turtles().toArray().map(exportAgent(ExportedTurtle, makeMappings(turtleBuiltins)(turtleMapper)));
+    links = this.linkManager.links().toArray().map(exportAgent(ExportedLink, makeMappings(linkBuiltins)(linkMapper)));
+    output = this._getOutput();
+    plotManager = exportPlotManager.call(this);
+    extensions = [];
+    return new ExportWorldData(metadata, randomState, globals, patches, turtles, links, output, plotManager, extensions);
+  };
+
+}).call(this);
+
+},{"../observer":"engine/core/observer","../structure/builtins":"engine/core/structure/builtins","../typechecker":"engine/core/typechecker","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/maybe":"brazier/maybe","engine/plot/pen":"engine/plot/pen","meta":"meta","serialize/exportstructures":"serialize/exportstructures"}],"engine/core/world/idmanager":[function(require,module,exports){
+(function() {
+  var IDManager;
+
+  module.exports = IDManager = (function() {
+    IDManager.prototype._count = void 0;
+
+    function IDManager() {
+      this.reset();
+    }
+
+    IDManager.prototype.getCount = function() {
+      return this._count;
+    };
+
+    IDManager.prototype.reset = function() {
+      this._count = 0;
+    };
+
+    IDManager.prototype.next = function() {
+      return this._count++;
+    };
+
+    IDManager.prototype.setCount = function(_count) {
+      this._count = _count;
+    };
+
+    IDManager.prototype.suspendDuring = function(f) {
+      var oldCount;
+      oldCount = this._count;
+      f();
+      this._count = oldCount;
+    };
+
+    return IDManager;
+
+  })();
+
+}).call(this);
+
+},{}],"engine/core/world/import":[function(require,module,exports){
+(function() {
+  var BreedReference, ExportedColorNum, ExportedCommandLambda, ExportedLinkSet, ExportedPatchSet, ExportedRGB, ExportedRGBA, ExportedReporterLambda, ExportedTurtleSet, LinkReference, LinkSet, NobodyReference, PatchReference, PatchSet, TurtleReference, TurtleSet, perspectiveFromString, ref, reifyExported,
+    indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+  LinkSet = require('../linkset');
+
+  PatchSet = require('../patchset');
+
+  TurtleSet = require('../turtleset');
+
+  perspectiveFromString = require('../observer').Perspective.perspectiveFromString;
+
+  ref = require('serialize/exportstructures'), BreedReference = ref.BreedReference, ExportedColorNum = ref.ExportedColorNum, ExportedCommandLambda = ref.ExportedCommandLambda, ExportedLinkSet = ref.ExportedLinkSet, ExportedPatchSet = ref.ExportedPatchSet, ExportedRGB = ref.ExportedRGB, ExportedRGBA = ref.ExportedRGBA, ExportedReporterLambda = ref.ExportedReporterLambda, ExportedTurtleSet = ref.ExportedTurtleSet, LinkReference = ref.LinkReference, NobodyReference = ref.NobodyReference, PatchReference = ref.PatchReference, TurtleReference = ref.TurtleReference;
+
+  reifyExported = function(getTurtle, getPatch, getLink, getAllPatches, getBreed, world) {
+    var helper;
+    return helper = function(x) {
+      var fn, links, patches, turtles, type;
+      type = NLType(x);
+      if (type.isList()) {
+        return x.map(helper);
+      } else if (type.isBoolean() || type.isNumber() || type.isString()) {
+        return x;
+      } else if (x === NobodyReference) {
+        return Nobody;
+      } else if (x instanceof BreedReference) {
+        switch (x.breedName) {
+          case "PATCHES":
+            return getAllPatches();
+          default:
+            return getBreed(x.breedName);
+        }
+      } else if (x instanceof LinkReference) {
+        return getLink(x.id1, x.id2, x.breed.plural);
+      } else if (x instanceof PatchReference) {
+        return getPatch(x.pxcor, x.pycor);
+      } else if (x instanceof TurtleReference) {
+        return getTurtle(x.id);
+      } else if (x instanceof ExportedLinkSet) {
+        links = x.references.map(function(arg) {
+          var id1, id2, plural, ref1;
+          id1 = arg.id1, id2 = arg.id2, (ref1 = arg.breed, plural = ref1.plural);
+          return getLink(id1, id2, plural);
+        });
+        return new LinkSet(links, world);
+      } else if (x instanceof ExportedPatchSet) {
+        patches = x.references.map(function(arg) {
+          var pxcor, pycor;
+          pxcor = arg.pxcor, pycor = arg.pycor;
+          return getPatch(pxcor, pycor);
+        });
+        return new PatchSet(patches, world);
+      } else if (x instanceof ExportedTurtleSet) {
+        turtles = x.references.map(function(arg) {
+          var id;
+          id = arg.id;
+          return getTurtle(id);
+        });
+        return new TurtleSet(turtles, world);
+      } else if (x instanceof ExportedCommandLambda) {
+        fn = (function() {
+          throw new Error("Importing and then running lambdas is not supported!");
+        });
+        fn.isReporter = false;
+        fn.nlogoBody = x.source;
+        return fn;
+      } else if (x instanceof ExportedReporterLambda) {
+        fn = (function() {
+          throw new Error("Importing and then running lambdas is not supported!");
+        });
+        fn.isReporter = true;
+        fn.nlogoBody = x.source;
+        return fn;
+      } else {
+        throw new Error("Unknown item for reification: " + (JSON.stringify(x)));
+      }
+    };
+  };
+
+  module.exports.importWorld = function(arg) {
+    var codeGlobals, directedLinks, extractColor, linkFinishFs, links, maxPxcor, maxPycor, minPxcor, minPycor, nextWhoNumber, output, patchFinishFs, patches, perspective, plotManager, randomState, ref1, reify, subject, ticks, trueSubject, turtleFinishFs, turtles, value, varName;
+    (ref1 = arg.globals, directedLinks = ref1.linkDirectedness, maxPxcor = ref1.maxPxcor, maxPycor = ref1.maxPycor, minPxcor = ref1.minPxcor, minPycor = ref1.minPycor, nextWhoNumber = ref1.nextWhoNumber, perspective = ref1.perspective, subject = ref1.subject, ticks = ref1.ticks, codeGlobals = ref1.codeGlobals), links = arg.links, patches = arg.patches, plotManager = arg.plotManager, randomState = arg.randomState, turtles = arg.turtles, output = arg.output;
+    reify = reifyExported(this.turtleManager.getTurtle.bind(this.turtleManager), this.getPatchAt.bind(this), this.linkManager.getLink.bind(this.linkManager), this.patches.bind(this), this.breedManager.get.bind(this.breedManager), this);
+    this.clearAll();
+    if (directedLinks === "DIRECTED") {
+      this._setUnbreededLinksDirected();
+    } else {
+      this._setUnbreededLinksUndirected();
+    }
+    this._resizeHelper(minPxcor, maxPxcor, minPycor, maxPycor, this.topology._wrapInX, this.topology._wrapInY);
+    extractColor = function(color) {
+      if (color instanceof ExportedColorNum) {
+        return color.value;
+      } else if (color instanceof ExportedRGB) {
+        return [color.r, color.g, color.b];
+      } else if (color instanceof ExportedRGBA) {
+        return [color.r, color.g, color.b, color.a];
+      } else {
+        throw new Error("Unknown color: " + (JSON.stringify(color)));
+      }
+    };
+    patchFinishFs = patches.map((function(_this) {
+      return function(arg1) {
+        var patch, patchesOwns, pcolor, plabel, plabelColor, pxcor, pycor;
+        pxcor = arg1.pxcor, pycor = arg1.pycor, pcolor = arg1.pcolor, plabel = arg1.plabel, plabelColor = arg1.plabelColor, patchesOwns = arg1.patchesOwns;
+        patch = _this.patchAtCoords(pxcor, pycor);
+        patch.setVariable('pcolor', extractColor(pcolor));
+        patch.setVariable('plabel-color', extractColor(plabelColor));
+        return function() {
+          var results, value, varName;
+          patch.setVariable('plabel', reify(plabel));
+          results = [];
+          for (varName in patchesOwns) {
+            value = patchesOwns[varName];
+            if (indexOf.call(patch.varNames(), varName) >= 0) {
+              results.push(patch.setVariable(varName, reify(value)));
+            }
+          }
+          return results;
+        };
+      };
+    })(this));
+    turtleFinishFs = turtles.map((function(_this) {
+      return function(arg1) {
+        var args, breedName, breedsOwns, color, heading, isHidden, label, labelColor, newTurtle, penMode, penSize, realBreed, ref2, ref3, ref4, shape, size, who, xcor, ycor;
+        who = arg1.who, color = arg1.color, heading = arg1.heading, xcor = arg1.xcor, ycor = arg1.ycor, shape = arg1.shape, label = arg1.label, labelColor = arg1.labelColor, (ref2 = arg1.breed, breedName = ref2.breedName), isHidden = arg1.isHidden, size = arg1.size, penSize = arg1.penSize, penMode = arg1.penMode, breedsOwns = arg1.breedsOwns;
+        realBreed = (ref3 = _this.breedManager.get(breedName)) != null ? ref3 : _this.breedManager.turtles();
+        args = [who, extractColor(color), heading, xcor, ycor, realBreed, "", extractColor(labelColor), isHidden, size, shape];
+        newTurtle = (ref4 = _this.turtleManager)._createTurtle.apply(ref4, args);
+        newTurtle.penManager.setPenMode(penMode);
+        newTurtle.penManager.setSize(penSize);
+        return function() {
+          var results, value, varName;
+          newTurtle.setVariable('label', reify(label));
+          results = [];
+          for (varName in breedsOwns) {
+            value = breedsOwns[varName];
+            if (indexOf.call(newTurtle.varNames(), varName) >= 0) {
+              results.push(newTurtle.setVariable(varName, reify(value)));
+            }
+          }
+          return results;
+        };
+      };
+    })(this));
+    this.turtleManager._idManager.setCount(nextWhoNumber);
+    linkFinishFs = links.map((function(_this) {
+      return function(arg1) {
+        var breedName, breedsOwns, color, end1, end2, isHidden, label, labelColor, newLink, realBreed, realEnd1, realEnd2, ref2, ref3, shape, thickness, tieMode;
+        (ref2 = arg1.breed, breedName = ref2.breedName), end1 = arg1.end1, end2 = arg1.end2, color = arg1.color, isHidden = arg1.isHidden, label = arg1.label, labelColor = arg1.labelColor, shape = arg1.shape, thickness = arg1.thickness, tieMode = arg1.tieMode, breedsOwns = arg1.breedsOwns;
+        realEnd1 = _this.turtleManager.getTurtleOfBreed(end1.breed.plural, end1.id);
+        realEnd2 = _this.turtleManager.getTurtleOfBreed(end2.breed.plural, end2.id);
+        realBreed = (ref3 = _this.breedManager.get(breedName)) != null ? ref3 : _this.breedManager.links();
+        newLink = _this.linkManager._createLink(realBreed.isDirected(), realEnd1, realEnd2, realBreed.name);
+        newLink.setVariable('color', extractColor(color));
+        newLink.setVariable('hidden?', isHidden);
+        newLink.setVariable('label-color', extractColor(labelColor));
+        newLink.setVariable('shape', shape);
+        newLink.setVariable('thickness', thickness);
+        newLink.setVariable('tie-mode', tieMode);
+        return function() {
+          var results, value, varName;
+          newLink.setVariable('label', reify(label));
+          results = [];
+          for (varName in breedsOwns) {
+            value = breedsOwns[varName];
+            if (indexOf.call(newLink.varNames(), varName) >= 0) {
+              results.push(newLink.setVariable(varName, reify(value)));
+            }
+          }
+          return results;
+        };
+      };
+    })(this));
+    [].concat(patchFinishFs, turtleFinishFs, linkFinishFs).forEach(function(f) {
+      return f();
+    });
+    for (varName in codeGlobals) {
+      value = codeGlobals[varName];
+      if (indexOf.call(this.observer.varNames(), varName) >= 0) {
+        this.observer.setGlobal(varName, reify(value));
+      }
+    }
+    trueSubject = reify(subject);
+    if (trueSubject !== Nobody) {
+      this.observer.setPerspective(perspectiveFromString(perspective), trueSubject);
+    }
+    this._plotManager.importState(plotManager);
+    this.ticker.importTicks(ticks);
+    this.rng.importState(randomState);
+    if (output != null) {
+      this._setOutput(output);
+    }
+  };
+
+}).call(this);
+
+},{"../linkset":"engine/core/linkset","../observer":"engine/core/observer","../patchset":"engine/core/patchset","../turtleset":"engine/core/turtleset","serialize/exportstructures":"serialize/exportstructures"}],"engine/core/world/linkmanager":[function(require,module,exports){
+(function() {
+  var Builtins, IDManager, Link, LinkManager, LinkSet, SortedLinks, contains, exists, filter, isEmpty, map, pairs, pipeline, ref, ref1, stableSort, values,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  Link = require('../link');
+
+  LinkSet = require('../linkset');
+
+  Builtins = require('../structure/builtins');
+
+  IDManager = require('./idmanager');
+
+  SortedLinks = require('./sortedlinks');
+
+  stableSort = require('util/stablesort');
+
+  ref = require('brazierjs/array'), contains = ref.contains, exists = ref.exists, filter = ref.filter, isEmpty = ref.isEmpty, map = ref.map;
+
+  pipeline = require('brazierjs/function').pipeline;
+
+  ref1 = require('brazierjs/object'), pairs = ref1.pairs, values = ref1.values;
+
+  module.exports = LinkManager = (function() {
+    LinkManager.prototype._linkArrCache = void 0;
+
+    LinkManager.prototype._links = void 0;
+
+    LinkManager.prototype._linksFrom = void 0;
+
+    LinkManager.prototype._idManager = void 0;
+
+    LinkManager.prototype._linksTo = void 0;
+
+    function LinkManager(_world, _breedManager, _updater, _notifyIsDirected, _notifyIsUndirected) {
+      this._world = _world;
+      this._breedManager = _breedManager;
+      this._updater = _updater;
+      this._notifyIsDirected = _notifyIsDirected;
+      this._notifyIsUndirected = _notifyIsUndirected;
+      this._createLinksBy = bind(this._createLinksBy, this);
+      this._removeLink = bind(this._removeLink, this);
+      this.linksOfBreed = bind(this.linksOfBreed, this);
+      this.clear();
+    }
+
+    LinkManager.prototype.clear = function() {
+      this._linkArrCache = void 0;
+      this._links = new SortedLinks;
+      this._linksFrom = {};
+      this._idManager = new IDManager;
+      return this._linksTo = {};
+    };
+
+    LinkManager.prototype.createDirectedLink = function(from, to, breedName) {
+      if (breedName.toUpperCase() === "LINKS") {
+        this._notifyIsDirected();
+      }
+      return this._createLink(true, from, to, breedName);
+    };
+
+    LinkManager.prototype.createDirectedLinks = function(source, others, breedName) {
+      if (breedName.toUpperCase() === "LINKS") {
+        this._notifyIsDirected();
+      }
+      return this._createLinksBy((function(_this) {
+        return function(turtle) {
+          return _this._createLink(true, source, turtle, breedName);
+        };
+      })(this))(others);
+    };
+
+    LinkManager.prototype.createReverseDirectedLinks = function(source, others, breedName) {
+      if (breedName.toUpperCase() === "LINKS") {
+        this._notifyIsDirected();
+      }
+      return this._createLinksBy((function(_this) {
+        return function(turtle) {
+          return _this._createLink(true, turtle, source, breedName);
+        };
+      })(this))(others);
+    };
+
+    LinkManager.prototype.createUndirectedLink = function(source, other, breedName) {
+      return this._createLink(false, source, other, breedName);
+    };
+
+    LinkManager.prototype.createUndirectedLinks = function(source, others, breedName) {
+      return this._createLinksBy((function(_this) {
+        return function(turtle) {
+          return _this._createLink(false, source, turtle, breedName);
+        };
+      })(this))(others);
+    };
+
+    LinkManager.prototype.getLink = function(fromId, toId, breedName) {
+      var findFunc, isDirected, ref2;
+      if (breedName == null) {
+        breedName = "LINKS";
+      }
+      isDirected = this._breedManager.get(breedName).isDirected();
+      findFunc = function(link) {
+        return link.getBreedName().toLowerCase() === breedName.toLowerCase() && ((link.end1.id === fromId && link.end2.id === toId) || (!isDirected && link.end1.id === toId && link.end2.id === fromId));
+      };
+      return (ref2 = this._links.find(findFunc)) != null ? ref2 : Nobody;
+    };
+
+    LinkManager.prototype.importState = function(linkState) {
+      linkState.forEach((function(_this) {
+        return function(arg) {
+          var breed, color, end1, end2, isHidden, labelColor, newLink, shape, thickness, tieMode;
+          breed = arg.breed, end1 = arg.end1, end2 = arg.end2, color = arg.color, isHidden = arg.isHidden, labelColor = arg.labelColor, shape = arg.shape, thickness = arg.thickness, tieMode = arg.tieMode;
+          newLink = _this._createLink(breed.isDirected(), end1, end2, breed.name);
+          newLink.setVariable('color', color);
+          newLink.setVariable('hidden?', isHidden);
+          newLink.setVariable('label-color', labelColor);
+          newLink.setVariable('shape', shape);
+          newLink.setVariable('thickness', thickness);
+          newLink.setVariable('tie-mode', tieMode);
+        };
+      })(this));
+    };
+
+    LinkManager.prototype.links = function() {
+      var thunk;
+      thunk = ((function(_this) {
+        return function() {
+          return _this._linkArray();
+        };
+      })(this));
+      return new LinkSet(thunk, this._world, "links");
+    };
+
+    LinkManager.prototype.linksOfBreed = function(breedName) {
+      var thunk;
+      thunk = ((function(_this) {
+        return function() {
+          return stableSort(_this._breedManager.get(breedName).members)(function(x, y) {
+            return x.compare(y).toInt;
+          });
+        };
+      })(this));
+      return new LinkSet(thunk, this._world, breedName);
+    };
+
+    LinkManager.prototype._linkArray = function() {
+      if (this._linkArrCache == null) {
+        this._linkArrCache = this._links.toArray();
+      }
+      return this._linkArrCache;
+    };
+
+    LinkManager.prototype.trackBreedChange = function(link, breed, oldBreedName) {
+      var end1, end2, existingLink, isDirected;
+      end1 = link.end1, end2 = link.end2, isDirected = link.isDirected;
+      this._errorIfBreedIsIncompatible(breed.name);
+      existingLink = this.getLink(end1.id, end2.id, breed.name);
+      if (existingLink !== link && existingLink !== Nobody) {
+        throw new Error("there is already a " + (breed.singular.toUpperCase()) + " with endpoints " + (end1.getName()) + " and " + (end2.getName()));
+      } else {
+        this._removeFromSets(end1.id, end2.id, isDirected, oldBreedName);
+        this._insertIntoSets(end1.id, end2.id, isDirected, breed.name);
+      }
+    };
+
+    LinkManager.prototype._removeLink = function(link) {
+      var l;
+      l = this._links.find(function(arg) {
+        var id;
+        id = arg.id;
+        return id === link.id;
+      });
+      this._links = this._links.remove(l);
+      this._linkArrCache = void 0;
+      if (this._links.isEmpty()) {
+        this._notifyIsUndirected();
+      }
+      this._removeFromSets(link.end1.id, link.end2.id, link.isDirected, link.getBreedName());
+    };
+
+    LinkManager.prototype._createLink = function(isDirected, from, to, breedName) {
+      var breed, end1, end2, link, ref2;
+      ref2 = from.id < to.id || isDirected ? [from, to] : [to, from], end1 = ref2[0], end2 = ref2[1];
+      if (!this._linkExists(end1.id, end2.id, isDirected, breedName)) {
+        breed = this._breedManager.get(breedName);
+        link = new Link(this._idManager.next(), isDirected, end1, end2, this._world, this._updater.updated, this._updater.registerDeadLink, this._removeLink, this._updater.registerLinkStamp, this.linksOfBreed, breed);
+        this._updater.updated(link).apply(null, Builtins.linkBuiltins);
+        this._updater.updated(link).apply(null, Builtins.linkExtras);
+        this._links.insert(link);
+        this._linkArrCache = void 0;
+        return link;
+      } else {
+        return Nobody;
+      }
+    };
+
+    LinkManager.prototype._createLinksBy = function(mkLink) {
+      return (function(_this) {
+        return function(turtles) {
+          var isLink, links;
+          isLink = function(other) {
+            return other !== Nobody;
+          };
+          links = pipeline(map(mkLink), filter(isLink))(turtles.toArray());
+          return new LinkSet(links, _this._world);
+        };
+      })(this);
+    };
+
+    LinkManager.prototype._errorIfBreedIsIncompatible = function(breedName) {
+      if ((breedName === "LINKS" && this._hasBreededs()) || (breedName !== "LINKS" && this._hasUnbreededs())) {
+        throw new Error("You cannot have both breeded and unbreeded links in the same world.");
+      }
+    };
+
+    LinkManager.prototype._hasBreededs = function() {
+      var allPairs;
+      allPairs = pairs(this._linksTo).concat(pairs(this._linksFrom));
+      return exists(function(arg) {
+        var key, value;
+        key = arg[0], value = arg[1];
+        return key !== "LINKS" && exists(function(x) {
+          return !isEmpty(x);
+        })(values(value));
+      })(allPairs);
+    };
+
+    LinkManager.prototype._hasUnbreededs = function() {
+      var hasUnbreededs;
+      hasUnbreededs = function(bin) {
+        var ref2;
+        return exists(function(x) {
+          return !isEmpty(x);
+        })(values((ref2 = bin["LINKS"]) != null ? ref2 : {}));
+      };
+      return hasUnbreededs(this._linksFrom) || hasUnbreededs(this._linksTo);
+    };
+
+    LinkManager.prototype._insertIntoSets = function(fromID, toID, isDirected, breedName) {
+      var insertIntoSet;
+      insertIntoSet = function(set, id1, id2) {
+        var neighbors;
+        if (set[breedName] == null) {
+          set[breedName] = {};
+        }
+        neighbors = set[breedName][id1];
+        if (neighbors != null) {
+          return neighbors.push(id2);
+        } else {
+          return set[breedName][id1] = [id2];
+        }
+      };
+      insertIntoSet(this._linksFrom, fromID, toID);
+      if (!isDirected) {
+        insertIntoSet(this._linksTo, toID, fromID);
+      }
+    };
+
+    LinkManager.prototype._linkExists = function(id1, id2, isDirected, breedName) {
+      var ref2, ref3, ref4, ref5, weCanHaz;
+      weCanHaz = pipeline(values, contains(id2));
+      return weCanHaz((ref2 = (ref3 = this._linksFrom[breedName]) != null ? ref3[id1] : void 0) != null ? ref2 : {}) || (!isDirected && weCanHaz((ref4 = (ref5 = this._linksTo[breedName]) != null ? ref5[id1] : void 0) != null ? ref4 : {}));
+    };
+
+    LinkManager.prototype._removeFromSets = function(fromID, toID, isDirected, breedName) {
+      var remove;
+      remove = function(set, id1, id2) {
+        if ((set != null ? set[id1] : void 0) != null) {
+          return set[id1] = filter(function(x) {
+            return x !== id2;
+          })(set[id1]);
+        }
+      };
+      remove(this._linksFrom[breedName], fromID, toID);
+      if (!isDirected) {
+        remove(this._linksTo[breedName], toID, fromID);
+      }
+    };
+
+    return LinkManager;
+
+  })();
+
+}).call(this);
+
+},{"../link":"engine/core/link","../linkset":"engine/core/linkset","../structure/builtins":"engine/core/structure/builtins","./idmanager":"engine/core/world/idmanager","./sortedlinks":"engine/core/world/sortedlinks","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/object":"brazier/object","util/stablesort":"util/stablesort"}],"engine/core/world/sortedlinks":[function(require,module,exports){
+(function() {
+  var Mori, SortedLinks, linkCompare;
+
+  linkCompare = require('../structure/linkcompare');
+
+  Mori = require('mori');
+
+  module.exports = SortedLinks = (function() {
+    SortedLinks._links = void 0;
+
+    function SortedLinks() {
+      this._links = Mori.sortedSetBy(linkCompare);
+    }
+
+    SortedLinks.prototype.insert = function(link) {
+      this._links = Mori.conj(this._links, link);
+      return this;
+    };
+
+    SortedLinks.prototype.remove = function(link) {
+      this._links = Mori.disj(this._links, link);
+      return this;
+    };
+
+    SortedLinks.prototype.find = function(pred) {
+      return Mori.first(Mori.filter(pred, this._links));
+    };
+
+    SortedLinks.prototype.isEmpty = function() {
+      return Mori.isEmpty(this._links);
+    };
+
+    SortedLinks.prototype.toArray = function() {
+      return Mori.toJs(this._links);
+    };
+
+    return SortedLinks;
+
+  })();
+
+}).call(this);
+
+},{"../structure/linkcompare":"engine/core/structure/linkcompare","mori":"mori"}],"engine/core/world/ticker":[function(require,module,exports){
+(function() {
+  var EvilSentinel, Exception, Ticker;
+
+  Exception = require('util/exception');
+
+  EvilSentinel = -1;
+
+  module.exports = Ticker = (function() {
+    Ticker.prototype._count = void 0;
+
+    function Ticker(_onReset, _onTick, _updateFunc) {
+      this._onReset = _onReset;
+      this._onTick = _onTick;
+      this._updateFunc = _updateFunc;
+      this._count = EvilSentinel;
+    }
+
+    Ticker.prototype.reset = function() {
+      this._updateTicks(function() {
+        return 0;
+      });
+      this._onReset();
+      this._onTick();
+    };
+
+    Ticker.prototype.clear = function() {
+      this._updateTicks(function() {
+        return EvilSentinel;
+      });
+    };
+
+    Ticker.prototype.importTicks = function(numTicks) {
+      this._updateTicks(function() {
+        return numTicks;
+      });
+    };
+
+    Ticker.prototype.tick = function() {
+      if (this.ticksAreStarted()) {
+        this._updateTicks(function(counter) {
+          return counter + 1;
+        });
+      } else {
+        throw new Error("The tick counter has not been started yet. Use RESET-TICKS.");
+      }
+      this._onTick();
+    };
+
+    Ticker.prototype.tickAdvance = function(n) {
+      if (n < 0) {
+        throw new Error("Cannot advance the tick counter by a negative amount.");
+      } else if (this.ticksAreStarted()) {
+        return this._updateTicks(function(counter) {
+          return counter + n;
+        });
+      } else {
+        throw new Error("The tick counter has not been started yet. Use RESET-TICKS.");
+      }
+    };
+
+    Ticker.prototype.ticksAreStarted = function() {
+      return this._count !== EvilSentinel;
+    };
+
+    Ticker.prototype.tickCount = function() {
+      if (this.ticksAreStarted()) {
+        return this._count;
+      } else {
+        throw new Error("The tick counter has not been started yet. Use RESET-TICKS.");
+      }
+    };
+
+    Ticker.prototype._updateTicks = function(updateCountFunc) {
+      this._count = updateCountFunc(this._count);
+      this._updateFunc("ticks");
+    };
+
+    return Ticker;
+
+  })();
+
+}).call(this);
+
+},{"util/exception":"util/exception"}],"engine/core/world/turtlemanager":[function(require,module,exports){
+(function() {
+  var Builtins, ColorModel, DeathInterrupt, IDManager, Turtle, TurtleManager, TurtleSet, ignorantly, ignoring, map, rangeUntil, ref,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  ColorModel = require('engine/core/colormodel');
+
+  Turtle = require('../turtle');
+
+  TurtleSet = require('../turtleset');
+
+  Builtins = require('../structure/builtins');
+
+  IDManager = require('./idmanager');
+
+  map = require('brazierjs/array').map;
+
+  rangeUntil = require('brazierjs/number').rangeUntil;
+
+  ref = require('util/exception'), DeathInterrupt = ref.DeathInterrupt, ignoring = ref.ignoring;
+
+  ignorantly = ignoring(DeathInterrupt);
+
+  module.exports = TurtleManager = (function() {
+    TurtleManager.prototype._idManager = void 0;
+
+    TurtleManager.prototype._turtles = void 0;
+
+    TurtleManager.prototype._turtlesById = void 0;
+
+    function TurtleManager(_world, _breedManager, _updater, _nextInt) {
+      this._world = _world;
+      this._breedManager = _breedManager;
+      this._updater = _updater;
+      this._nextInt = _nextInt;
+      this._removeTurtle = bind(this._removeTurtle, this);
+      this._createNewTurtle = bind(this._createNewTurtle, this);
+      this.turtlesOfBreed = bind(this.turtlesOfBreed, this);
+      this._idManager = new IDManager;
+      this._turtles = [];
+      this._turtlesById = {};
+    }
+
+    TurtleManager.prototype.clearTurtles = function() {
+      this.turtles().forEach(function(turtle) {
+        return ignorantly((function(_this) {
+          return function() {
+            return turtle.die();
+          };
+        })(this));
+      });
+      this._idManager.reset();
+    };
+
+    TurtleManager.prototype.createOrderedTurtles = function(n, breedName) {
+      var num, turtles;
+      num = n >= 0 ? n : 0;
+      turtles = map((function(_this) {
+        return function(index) {
+          var color, heading;
+          color = ColorModel.nthColor(index);
+          heading = (360 * index) / num;
+          return _this._createNewTurtle(color, heading, 0, 0, _this._breedManager.get(breedName));
+        };
+      })(this))(rangeUntil(0)(num));
+      return new TurtleSet(turtles, this._world);
+    };
+
+    TurtleManager.prototype.createTurtles = function(n, breedName, xcor, ycor) {
+      var num, turtles;
+      if (xcor == null) {
+        xcor = 0;
+      }
+      if (ycor == null) {
+        ycor = 0;
+      }
+      num = n >= 0 ? n : 0;
+      turtles = map((function(_this) {
+        return function() {
+          var color, heading;
+          color = ColorModel.randomColor(_this._nextInt);
+          heading = _this._nextInt(360);
+          return _this._createNewTurtle(color, heading, xcor, ycor, _this._breedManager.get(breedName));
+        };
+      })(this))(rangeUntil(0)(num));
+      return new TurtleSet(turtles, this._world);
+    };
+
+    TurtleManager.prototype.getTurtle = function(id) {
+      var ref1;
+      return (ref1 = this._turtlesById[id]) != null ? ref1 : Nobody;
+    };
+
+    TurtleManager.prototype.getTurtleOfBreed = function(breedName, id) {
+      var turtle;
+      turtle = this.getTurtle(id);
+      if (turtle.getBreedName().toUpperCase() === breedName.toUpperCase()) {
+        return turtle;
+      } else {
+        return Nobody;
+      }
+    };
+
+    TurtleManager.prototype.importState = function(turtleState, nextIndex) {
+      turtleState.forEach((function(_this) {
+        return function(arg) {
+          var breed, color, heading, isHidden, labelColor, newTurtle, penMode, penSize, shape, size, who, xcor, ycor;
+          who = arg.who, color = arg.color, heading = arg.heading, xcor = arg.xcor, ycor = arg.ycor, shape = arg.shape, labelColor = arg.labelColor, breed = arg.breed, isHidden = arg.isHidden, size = arg.size, penSize = arg.penSize, penMode = arg.penMode;
+          newTurtle = _this._createTurtle(who, color, heading, xcor, ycor, breed, "", labelColor, isHidden, size, shape);
+          newTurtle.penManager.setPenMode(penMode);
+          return newTurtle.penManager.setSize(penSize);
+        };
+      })(this));
+      this._idManager.setCount(nextIndex);
+    };
+
+    TurtleManager.prototype.peekNextID = function() {
+      return this._idManager.getCount();
+    };
+
+    TurtleManager.prototype.turtles = function() {
+      return new TurtleSet(this._turtles, this._world, "turtles");
+    };
+
+    TurtleManager.prototype.turtlesOfBreed = function(breedName) {
+      var breed;
+      breed = this._breedManager.get(breedName);
+      return new TurtleSet(breed.members, this._world, breedName);
+    };
+
+    TurtleManager.prototype._clearTurtlesSuspended = function() {
+      this._idManager.suspendDuring((function(_this) {
+        return function() {
+          return _this.clearTurtles();
+        };
+      })(this));
+    };
+
+    TurtleManager.prototype._createNewTurtle = function(color, heading, xcor, ycor, breed, label, lcolor, isHidden, size, shape, genPenManager) {
+      return this._createTurtle(this._idManager.next(), color, heading, xcor, ycor, breed, label, lcolor, isHidden, size, shape, genPenManager);
+    };
+
+    TurtleManager.prototype._createTurtle = function(id, color, heading, xcor, ycor, breed, label, lcolor, isHidden, size, shape, genPenManager) {
+      var turtle;
+      turtle = new Turtle(this._world, id, this._updater.updated, this._updater.registerPenTrail, this._updater.registerTurtleStamp, this._updater.registerDeadTurtle, this._createNewTurtle, this._removeTurtle, color, heading, xcor, ycor, breed, label, lcolor, isHidden, size, shape, genPenManager);
+      this._updater.updated(turtle).apply(null, Builtins.turtleBuiltins);
+      this._turtles.push(turtle);
+      this._turtlesById[id] = turtle;
+      return turtle;
+    };
+
+    TurtleManager.prototype._removeTurtle = function(id) {
+      var turtle;
+      turtle = this._turtlesById[id];
+      this._turtles.splice(this._turtles.indexOf(turtle), 1);
+      delete this._turtlesById[id];
+    };
+
+    return TurtleManager;
+
+  })();
+
+}).call(this);
+
+},{"../structure/builtins":"engine/core/structure/builtins","../turtle":"engine/core/turtle","../turtleset":"engine/core/turtleset","./idmanager":"engine/core/world/idmanager","brazierjs/array":"brazier/array","brazierjs/number":"brazier/number","engine/core/colormodel":"engine/core/colormodel","util/exception":"util/exception"}],"engine/core/world":[function(require,module,exports){
+(function() {
+  var LinkManager, NLMath, Observer, Patch, PatchSet, Ticker, TopologyInterrupt, TurtleManager, World, exportAllPlots, exportPlot, exportWorld, filter, flatMap, importWorld, linkBuiltins, patchBuiltins, pipeline, ref, ref1, ref2, topologyFactory, turtleBuiltins, values, worldDataToCSV,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  Patch = require('./patch');
+
+  PatchSet = require('./patchset');
+
+  topologyFactory = require('./topology/factory');
+
+  LinkManager = require('./world/linkmanager');
+
+  Ticker = require('./world/ticker');
+
+  TurtleManager = require('./world/turtlemanager');
+
+  NLMath = require('util/nlmath');
+
+  ref = require('brazier/array'), filter = ref.filter, flatMap = ref.flatMap;
+
+  pipeline = require('brazier/function').pipeline;
+
+  values = require('brazier/object').values;
+
+  Observer = require('./observer').Observer;
+
+  ref1 = require('./structure/builtins'), linkBuiltins = ref1.linkBuiltins, patchBuiltins = ref1.patchBuiltins, turtleBuiltins = ref1.turtleBuiltins;
+
+  worldDataToCSV = require('serialize/exportcsv').worldDataToCSV;
+
+  TopologyInterrupt = require('util/exception').TopologyInterrupt;
+
+  ref2 = require('./world/export'), exportWorld = ref2.exportWorld, exportPlot = ref2.exportPlot, exportAllPlots = ref2.exportAllPlots;
+
+  importWorld = require('./world/import').importWorld;
+
+  module.exports = World = (function() {
+    World.prototype.id = 0;
+
+    World.prototype.breedManager = void 0;
+
+    World.prototype.linkManager = void 0;
+
+    World.prototype.observer = void 0;
+
+    World.prototype.rng = void 0;
+
+    World.prototype.selfManager = void 0;
+
+    World.prototype.ticker = void 0;
+
+    World.prototype.topology = void 0;
+
+    World.prototype.turtleManager = void 0;
+
+    World.prototype._patches = void 0;
+
+    World.prototype._plotManager = void 0;
+
+    World.prototype._updater = void 0;
+
+    World.prototype._outputClear = void 0;
+
+    World.prototype._patchesAllBlack = void 0;
+
+    World.prototype._patchesWithLabels = void 0;
+
+    function World(miniWorkspace, _config, _outputClear, _getOutput, _setOutput, dump, globalNames, interfaceGlobalNames, patchesOwnNames, minPxcor, maxPxcor, minPycor, maxPycor, patchSize, wrappingAllowedInX, wrappingAllowedInY, turtleShapeMap, linkShapeMap, onTickFunction) {
+      var onTick;
+      this._config = _config;
+      this._outputClear = _outputClear;
+      this._getOutput = _getOutput;
+      this._setOutput = _setOutput;
+      this.dump = dump;
+      this.patchesOwnNames = patchesOwnNames;
+      this.patchSize = patchSize;
+      this.turtleShapeMap = turtleShapeMap;
+      this.linkShapeMap = linkShapeMap;
+      this._declarePatchesNotAllBlack = bind(this._declarePatchesNotAllBlack, this);
+      this._setUnbreededLinksUndirected = bind(this._setUnbreededLinksUndirected, this);
+      this._setUnbreededLinksDirected = bind(this._setUnbreededLinksDirected, this);
+      this._decrementPatchLabelCount = bind(this._decrementPatchLabelCount, this);
+      this._incrementPatchLabelCount = bind(this._incrementPatchLabelCount, this);
+      this._thisWrapY = bind(this._thisWrapY, this);
+      this._thisWrapX = bind(this._thisWrapX, this);
+      this.getPatchAt = bind(this.getPatchAt, this);
+      this.patches = bind(this.patches, this);
+      this.selfManager = miniWorkspace.selfManager, this._updater = miniWorkspace.updater, this.rng = miniWorkspace.rng, this.breedManager = miniWorkspace.breedManager, this._plotManager = miniWorkspace.plotManager;
+      this._patchesAllBlack = true;
+      this._patchesWithLabels = 0;
+      this._updater.collectUpdates();
+      this._updater.registerWorldState({
+        worldWidth: maxPxcor - minPxcor + 1,
+        worldHeight: maxPycor - minPycor + 1,
+        minPxcor: minPxcor,
+        minPycor: minPycor,
+        maxPxcor: maxPxcor,
+        maxPycor: maxPycor,
+        linkBreeds: this.breedManager.orderedLinkBreeds(),
+        linkShapeList: this.linkShapeMap,
+        patchSize: this.patchSize,
+        patchesAllBlack: this._patchesAllBlack,
+        patchesWithLabels: this._patchesWithLabels,
+        ticks: -1,
+        turtleBreeds: this.breedManager.orderedTurtleBreeds(),
+        turtleShapeList: this.turtleShapeMap,
+        unbreededLinksAreDirected: false,
+        wrappingAllowedInX: wrappingAllowedInX,
+        wrappingAllowedInY: wrappingAllowedInY
+      });
+      onTick = (function(_this) {
+        return function() {
+          _this.rng.withAux(onTickFunction);
+          return _this._plotManager.updatePlots();
+        };
+      })(this);
+      this.linkManager = new LinkManager(this, this.breedManager, this._updater, this._setUnbreededLinksDirected, this._setUnbreededLinksUndirected);
+      this.observer = new Observer(this._updater.updated, globalNames, interfaceGlobalNames);
+      this.ticker = new Ticker(this._plotManager.setupPlots, onTick, this._updater.updated(this));
+      this.topology = null;
+      this.turtleManager = new TurtleManager(this, this.breedManager, this._updater, this.rng.nextInt);
+      this._patches = [];
+      this._resizeHelper(minPxcor, maxPxcor, minPycor, maxPycor, wrappingAllowedInX, wrappingAllowedInY);
+    }
+
+    World.prototype.links = function() {
+      return this.linkManager.links();
+    };
+
+    World.prototype.turtles = function() {
+      return this.turtleManager.turtles();
+    };
+
+    World.prototype.patches = function() {
+      return new PatchSet(this._patches, this, "patches");
+    };
+
+    World.prototype.resize = function(minPxcor, maxPxcor, minPycor, maxPycor, wrapsInX, wrapsInY) {
+      if (wrapsInX == null) {
+        wrapsInX = this.topology._wrapInX;
+      }
+      if (wrapsInY == null) {
+        wrapsInY = this.topology._wrapInY;
+      }
+      this._resizeHelper(minPxcor, maxPxcor, minPycor, maxPycor, wrapsInX, wrapsInY);
+      return this.clearDrawing();
+    };
+
+    World.prototype._resizeHelper = function(minPxcor, maxPxcor, minPycor, maxPycor, wrapsInX, wrapsInY) {
+      var ref3, ref4, ref5, ref6;
+      if (wrapsInX == null) {
+        wrapsInX = this.topology._wrapInX;
+      }
+      if (wrapsInY == null) {
+        wrapsInY = this.topology._wrapInY;
+      }
+      if (!((minPxcor <= 0 && 0 <= maxPxcor) && (minPycor <= 0 && 0 <= maxPycor))) {
+        throw new Error("You must include the point (0, 0) in the world.");
+      }
+      if (minPxcor !== ((ref3 = this.topology) != null ? ref3.minPxcor : void 0) || minPycor !== ((ref4 = this.topology) != null ? ref4.minPycor : void 0) || maxPxcor !== ((ref5 = this.topology) != null ? ref5.maxPxcor : void 0) || maxPycor !== ((ref6 = this.topology) != null ? ref6.maxPycor : void 0)) {
+        this._config.resizeWorld();
+        this.turtleManager._clearTurtlesSuspended();
+        this.changeTopology(wrapsInX, wrapsInY, minPxcor, maxPxcor, minPycor, maxPycor);
+        this._createPatches();
+        this._declarePatchesAllBlack();
+        this._resetPatchLabelCount();
+        this._updater.updated(this)("width", "height", "minPxcor", "minPycor", "maxPxcor", "maxPycor");
+      }
+    };
+
+    World.prototype.changeTopology = function(wrapsInX, wrapsInY, minX, maxX, minY, maxY) {
+      if (minX == null) {
+        minX = this.topology.minPxcor;
+      }
+      if (maxX == null) {
+        maxX = this.topology.maxPxcor;
+      }
+      if (minY == null) {
+        minY = this.topology.minPycor;
+      }
+      if (maxY == null) {
+        maxY = this.topology.maxPycor;
+      }
+      this.topology = topologyFactory(wrapsInX, wrapsInY, minX, maxX, minY, maxY, this.patches, this.getPatchAt);
+      this._updater.updated(this)("wrappingAllowedInX", "wrappingAllowedInY");
+    };
+
+    World.prototype.getPatchAt = function(x, y) {
+      var error, error1, index, roundedX, roundedY;
+      try {
+        roundedX = this._roundXCor(x);
+        roundedY = this._roundYCor(y);
+        index = (this.topology.maxPycor - roundedY) * this.topology.width + (roundedX - this.topology.minPxcor);
+        return this._patches[index];
+      } catch (error1) {
+        error = error1;
+        if (error instanceof TopologyInterrupt) {
+          return Nobody;
+        } else {
+          throw error;
+        }
+      }
+    };
+
+    World.prototype.patchAtCoords = function(x, y) {
+      var error, error1, newX, newY;
+      try {
+        newX = this.topology.wrapX(x);
+        newY = this.topology.wrapY(y);
+        return this.getPatchAt(newX, newY);
+      } catch (error1) {
+        error = error1;
+        if (error instanceof TopologyInterrupt) {
+          return Nobody;
+        } else {
+          throw error;
+        }
+      }
+    };
+
+    World.prototype.patchAtHeadingAndDistanceFrom = function(angle, distance, x, y) {
+      var heading, targetX, targetY;
+      heading = NLMath.normalizeHeading(angle);
+      targetX = x + distance * NLMath.squash(NLMath.sin(heading));
+      targetY = y + distance * NLMath.squash(NLMath.cos(heading));
+      return this.patchAtCoords(targetX, targetY);
+    };
+
+    World.prototype.setPatchSize = function(patchSize) {
+      this.patchSize = patchSize;
+      this._updater.updated(this)("patchSize");
+    };
+
+    World.prototype.clearAll = function() {
+      this.observer.clearCodeGlobals();
+      this.observer.resetPerspective();
+      this.turtleManager.clearTurtles();
+      this.clearPatches();
+      this.clearLinks();
+      this._declarePatchesAllBlack();
+      this._resetPatchLabelCount();
+      this.ticker.clear();
+      this._plotManager.clearAllPlots();
+      this._outputClear();
+      this.clearDrawing();
+    };
+
+    World.prototype.clearDrawing = function() {
+      this._updater.clearDrawing();
+    };
+
+    World.prototype.importDrawing = function(sourcePath) {
+      this._updater.importDrawing(sourcePath);
+    };
+
+    World.prototype.clearLinks = function() {
+      this.linkManager.clear();
+      this.turtles().ask((function() {
+        return SelfManager.self().linkManager.clear();
+      }), false);
+    };
+
+    World.prototype.clearPatches = function() {
+      this.patches().forEach(function(patch) {
+        patch.reset();
+      });
+      this._declarePatchesAllBlack();
+      this._resetPatchLabelCount();
+    };
+
+    World.prototype.exportState = function() {
+      return exportWorld.call(this);
+    };
+
+    World.prototype.exportAllPlotsCSV = function() {
+      return allPlotsDataToCSV(exportAllPlots.call(this));
+    };
+
+    World.prototype.exportPlotCSV = function(name) {
+      return plotDataToCSV(exportPlot.call(this, name));
+    };
+
+    World.prototype.exportCSV = function() {
+      var allLinksOwnsNames, allTurtlesOwnsNames, state, varNamesForBreedsMatching;
+      varNamesForBreedsMatching = (function(_this) {
+        return function(pred) {
+          return pipeline(values, filter(pred), flatMap(function(x) {
+            return x.varNames;
+          }))(_this.breedManager.breeds());
+        };
+      })(this);
+      allTurtlesOwnsNames = varNamesForBreedsMatching(function(breed) {
+        return !breed.isLinky();
+      });
+      allLinksOwnsNames = varNamesForBreedsMatching(function(breed) {
+        return breed.isLinky();
+      });
+      state = exportWorld.call(this);
+      return worldDataToCSV(allTurtlesOwnsNames, allLinksOwnsNames, patchBuiltins, turtleBuiltins, linkBuiltins)(state);
+    };
+
+    World.prototype.getNeighbors = function(pxcor, pycor) {
+      return new PatchSet(this.topology.getNeighbors(pxcor, pycor), this);
+    };
+
+    World.prototype.getNeighbors4 = function(pxcor, pycor) {
+      return new PatchSet(this.topology.getNeighbors4(pxcor, pycor), this);
+    };
+
+    World.prototype.importState = function() {
+      return importWorld.apply(this, arguments);
+    };
+
+    World.prototype._thisWrapX = function(x) {
+      return this.topology.wrapX(x);
+    };
+
+    World.prototype._thisWrapY = function(y) {
+      return this.topology.wrapY(y);
+    };
+
+    World.prototype._roundXCor = function(x) {
+      var wrappedX;
+      wrappedX = this._wrapC(x, this._thisWrapX);
+      return this._roundCoordinate(wrappedX);
+    };
+
+    World.prototype._roundYCor = function(y) {
+      var wrappedY;
+      wrappedY = this._wrapC(y, this._thisWrapY);
+      return this._roundCoordinate(wrappedY);
+    };
+
+    World.prototype._wrapC = function(c, wrapper) {
+      var error, error1, trueError, wrappedC;
+      wrappedC = void 0;
+      try {
+        wrappedC = wrapper(c);
+      } catch (error1) {
+        error = error1;
+        trueError = error instanceof TopologyInterrupt ? new TopologyInterrupt("Cannot access patches beyond the limits of current world.") : error;
+        throw trueError;
+      }
+      return wrappedC;
+    };
+
+    World.prototype._roundCoordinate = function(wrappedC) {
+      var fractional, integral;
+      if (wrappedC > 0) {
+        return (wrappedC + 0.5) | 0;
+      } else {
+        integral = wrappedC | 0;
+        fractional = integral - wrappedC;
+        if (fractional > 0.5) {
+          return integral - 1;
+        } else {
+          return integral;
+        }
+      }
+    };
+
+    World.prototype._createPatches = function() {
+      var i, id, len, nested, patch, ref3, ref4, x, y;
+      nested = (function() {
+        var i, ref3, ref4, results;
+        results = [];
+        for (y = i = ref3 = this.topology.maxPycor, ref4 = this.topology.minPycor; ref3 <= ref4 ? i <= ref4 : i >= ref4; y = ref3 <= ref4 ? ++i : --i) {
+          results.push((function() {
+            var j, ref5, ref6, results1;
+            results1 = [];
+            for (x = j = ref5 = this.topology.minPxcor, ref6 = this.topology.maxPxcor; ref5 <= ref6 ? j <= ref6 : j >= ref6; x = ref5 <= ref6 ? ++j : --j) {
+              id = (this.topology.width * (this.topology.maxPycor - y)) + x - this.topology.minPxcor;
+              results1.push(new Patch(id, x, y, this, this._updater.updated, this._declarePatchesNotAllBlack, this._decrementPatchLabelCount, this._incrementPatchLabelCount));
+            }
+            return results1;
+          }).call(this));
+        }
+        return results;
+      }).call(this);
+      this._patches = (ref3 = []).concat.apply(ref3, nested);
+      ref4 = this._patches;
+      for (i = 0, len = ref4.length; i < len; i++) {
+        patch = ref4[i];
+        this._updater.updated(patch)("pxcor", "pycor", "pcolor", "plabel", "plabel-color");
+      }
+    };
+
+    World.prototype._optimalPatchCol = function(xcor) {
+      var maxX, maxY, minX, minY, ref3;
+      ref3 = this.topology, maxX = ref3.maxPxcor, maxY = ref3.maxPycor, minX = ref3.minPxcor, minY = ref3.minPycor;
+      return this._optimalPatchSequence(xcor, minX, maxX, minY, maxY, (function(_this) {
+        return function(y) {
+          return _this.getPatchAt(xcor, y);
+        };
+      })(this));
+    };
+
+    World.prototype._optimalPatchRow = function(ycor) {
+      var maxX, maxY, minX, minY, ref3;
+      ref3 = this.topology, maxX = ref3.maxPxcor, maxY = ref3.maxPycor, minX = ref3.minPxcor, minY = ref3.minPycor;
+      return this._optimalPatchSequence(ycor, minY, maxY, minX, maxX, (function(_this) {
+        return function(x) {
+          return _this.getPatchAt(x, ycor);
+        };
+      })(this));
+    };
+
+    World.prototype._optimalPatchSequence = function(cor, boundaryMin, boundaryMax, seqStart, seqEnd, getPatch) {
+      var n, ref3, ret;
+      ret = (boundaryMin <= cor && cor <= boundaryMax) ? (ref3 = []).concat.apply(ref3, (function() {
+        var i, ref3, ref4, results;
+        results = [];
+        for (n = i = ref3 = seqStart, ref4 = seqEnd; ref3 <= ref4 ? i <= ref4 : i >= ref4; n = ref3 <= ref4 ? ++i : --i) {
+          results.push(getPatch(n));
+        }
+        return results;
+      })()) : [];
+      return new PatchSet(ret, this);
+    };
+
+    World.prototype._incrementPatchLabelCount = function() {
+      this._setPatchLabelCount(function(count) {
+        return count + 1;
+      });
+    };
+
+    World.prototype._decrementPatchLabelCount = function() {
+      this._setPatchLabelCount(function(count) {
+        return count - 1;
+      });
+    };
+
+    World.prototype._resetPatchLabelCount = function() {
+      this._setPatchLabelCount(function() {
+        return 0;
+      });
+    };
+
+    World.prototype._setPatchLabelCount = function(updateCountFunc) {
+      this._patchesWithLabels = updateCountFunc(this._patchesWithLabels);
+      this._updater.updated(this)("patchesWithLabels");
+    };
+
+    World.prototype._setUnbreededLinksDirected = function() {
+      this.breedManager.setUnbreededLinksDirected();
+      this._updater.updated(this)("unbreededLinksAreDirected");
+    };
+
+    World.prototype._setUnbreededLinksUndirected = function() {
+      this.breedManager.setUnbreededLinksUndirected();
+      this._updater.updated(this)("unbreededLinksAreDirected");
+    };
+
+    World.prototype._declarePatchesAllBlack = function() {
+      if (!this._patchesAllBlack) {
+        this._patchesAllBlack = true;
+        this._updater.updated(this)("patchesAllBlack");
+      }
+    };
+
+    World.prototype._declarePatchesNotAllBlack = function() {
+      if (this._patchesAllBlack) {
+        this._patchesAllBlack = false;
+        this._updater.updated(this)("patchesAllBlack");
+      }
+    };
+
+    return World;
+
+  })();
+
+}).call(this);
+
+},{"./observer":"engine/core/observer","./patch":"engine/core/patch","./patchset":"engine/core/patchset","./structure/builtins":"engine/core/structure/builtins","./topology/factory":"engine/core/topology/factory","./world/export":"engine/core/world/export","./world/import":"engine/core/world/import","./world/linkmanager":"engine/core/world/linkmanager","./world/ticker":"engine/core/world/ticker","./world/turtlemanager":"engine/core/world/turtlemanager","brazier/array":"brazier/array","brazier/function":"brazier/function","brazier/object":"brazier/object","serialize/exportcsv":"serialize/exportcsv","util/exception":"util/exception","util/nlmath":"util/nlmath"}],"engine/dump":[function(require,module,exports){
+(function() {
+  var NLType, Tasks, apply, dump, find, flip, fold, map, pipeline, ref, ref1;
+
+  NLType = require('./core/typechecker');
+
+  Tasks = require('./prim/tasks');
+
+  ref = require('brazierjs/array'), find = ref.find, map = ref.map;
+
+  ref1 = require('brazierjs/function'), apply = ref1.apply, flip = ref1.flip, pipeline = ref1.pipeline;
+
+  fold = require('brazierjs/maybe').fold;
+
+  dump = function(extensionDumpers) {
+    var helper;
+    helper = function(x, isReadable) {
+      var itemStr, type;
+      if (isReadable == null) {
+        isReadable = false;
+      }
+      type = NLType(x);
+      if (type.isList()) {
+        itemStr = map(function(y) {
+          return helper(y, isReadable);
+        })(x).join(" ");
+        return "[" + itemStr + "]";
+      } else if (type.isReporterLambda()) {
+        return "(anonymous reporter: " + x.nlogoBody + ")";
+      } else if (type.isCommandLambda()) {
+        return "(anonymous command: " + x.nlogoBody + ")";
+      } else if (type.isString()) {
+        if (isReadable) {
+          return '"' + x + '"';
+        } else {
+          return x;
+        }
+      } else if (type.isNumber()) {
+        return String(x).toUpperCase();
+      } else {
+        return pipeline(find(function(d) {
+          return d.canDump(x);
+        }), fold(function() {
+          return String;
+        })(function(d) {
+          return d.dump;
+        }), flip(apply)(x))(extensionDumpers);
+      }
+    };
+    return helper;
+  };
+
+  module.exports = dump;
+
+}).call(this);
+
+},{"./core/typechecker":"engine/core/typechecker","./prim/tasks":"engine/prim/tasks","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/maybe":"brazier/maybe"}],"engine/hasher":[function(require,module,exports){
+(function() {
+  var AbstractAgentSet, Hasher, Link, NLType, Turtle, foldl;
+
+  AbstractAgentSet = require('./core/abstractagentset');
+
+  Link = require('./core/link');
+
+  Turtle = require('./core/turtle');
+
+  NLType = require('./core/typechecker');
+
+  foldl = require('brazierjs/array').foldl;
+
+  Hasher = function(x) {
+    var f, type;
+    type = NLType(x);
+    if (type.isTurtle() || type.isLink()) {
+      return x.constructor.name + " | " + x.id;
+    } else if (x === Nobody) {
+      return "nobody: -1";
+    } else if (type.isList()) {
+      f = function(acc, x) {
+        return "31 *" + acc + (x != null ? Hasher(x) : "0");
+      };
+      return (foldl(f)(1)(x)).toString();
+    } else if (type.isAgentSet()) {
+      return (x.toString()) + " | " + (Hasher(x.toArray()));
+    } else {
+      return x.toString();
+    }
+  };
+
+  module.exports = Hasher;
+
+}).call(this);
+
+},{"./core/abstractagentset":"engine/core/abstractagentset","./core/link":"engine/core/link","./core/turtle":"engine/core/turtle","./core/typechecker":"engine/core/typechecker","brazierjs/array":"brazier/array"}],"engine/plot/pen":[function(require,module,exports){
+(function() {
+  var Bar, ColorModel, Counter, Down, Line, Pen, PlotPoint, Point, State, StrictMath, Up, countBy, displayModeFromNum, displayModeFromString, displayModeToNum, displayModeToString, filter, forEach, id, isNumber, map, pairs, pipeline, ref, ref1;
+
+  StrictMath = require('shim/strictmath');
+
+  ref = require('brazierjs/array'), countBy = ref.countBy, filter = ref.filter, forEach = ref.forEach, map = ref.map;
+
+  ref1 = require('brazierjs/function'), id = ref1.id, pipeline = ref1.pipeline;
+
+  pairs = require('brazierjs/object').pairs;
+
+  isNumber = require('brazierjs/type').isNumber;
+
+  ColorModel = require('engine/core/colormodel');
+
+  Up = {};
+
+  Down = {};
+
+  module.exports.PenMode = {
+    Up: Up,
+    Down: Down,
+    penModeToBool: function(penDown) {
+      if (penDown === Up) {
+        return false;
+      } else {
+        return true;
+      }
+    }
+  };
+
+  Line = {};
+
+  Bar = {};
+
+  Point = {};
+
+  displayModeFromNum = function(num) {
+    switch (num) {
+      case 0:
+        return Line;
+      case 1:
+        return Bar;
+      case 2:
+        return Point;
+      default:
+        throw new Error("Pen display mode expected `0` (line), `1` (bar), or `2` (point), but got `" + num + "`");
+    }
+  };
+
+  displayModeToNum = function(mode) {
+    switch (mode) {
+      case Line:
+        return 0;
+      case Bar:
+        return 1;
+      case Point:
+        return 2;
+      default:
+        throw new Error("Invalid display mode: " + mode);
+    }
+  };
+
+  displayModeFromString = function(num) {
+    switch (num) {
+      case 'line':
+        return Line;
+      case 'bar':
+        return Bar;
+      case 'point':
+        return Point;
+      default:
+        throw new Error("Pen display mode expected 'line', 'bar', or 'point', but got `" + num + "`");
+    }
+  };
+
+  displayModeToString = function(mode) {
+    switch (mode) {
+      case Line:
+        return 'line';
+      case Bar:
+        return 'bar';
+      case Point:
+        return 'point';
+      default:
+        throw new Error("Invalid display mode: " + mode);
+    }
+  };
+
+  module.exports.DisplayMode = {
+    Line: Line,
+    Bar: Bar,
+    Point: Point,
+    displayModeFromNum: displayModeFromNum,
+    displayModeFromString: displayModeFromString,
+    displayModeToNum: displayModeToNum,
+    displayModeToString: displayModeToString
+  };
+
+  PlotPoint = (function() {
+    function PlotPoint(x1, y1, penMode, color1) {
+      this.x = x1;
+      this.y = y1;
+      this.penMode = penMode;
+      this.color = color1;
+    }
+
+    return PlotPoint;
+
+  })();
+
+  Counter = (function() {
+    function Counter(_count, _atFirst) {
+      this._count = _count != null ? _count : 0;
+      this._atFirst = _atFirst != null ? _atFirst : true;
+    }
+
+    Counter.prototype.next = function(interval) {
+      if (this._atFirst) {
+        this._atFirst = false;
+        return 0;
+      } else {
+        return this._count += interval;
+      }
+    };
+
+    return Counter;
+
+  })();
+
+  module.exports.State = State = (function() {
+    State.prototype._counter = void 0;
+
+    function State(color1, interval1, displayMode, mode1) {
+      this.color = color1 != null ? color1 : 0;
+      this.interval = interval1 != null ? interval1 : 1;
+      this.displayMode = displayMode != null ? displayMode : Line;
+      this.mode = mode1 != null ? mode1 : Down;
+      this.resetCounter();
+    }
+
+    State.prototype.clone = function() {
+      return new State(this.color, this.interval, this.displayMode, this.mode);
+    };
+
+    State.prototype.leapCounterTo = function(x) {
+      this._counter = new Counter(x, false);
+    };
+
+    State.prototype.getPenX = function() {
+      return this._counter._count;
+    };
+
+    State.prototype.nextX = function() {
+      return this._counter.next(this.interval);
+    };
+
+    State.prototype.partiallyReset = function() {
+      return new State(this.color, this.interval, this.displayMode, Down);
+    };
+
+    State.prototype.resetCounter = function() {
+      this._counter = new Counter();
+    };
+
+    return State;
+
+  })();
+
+  module.exports.Pen = Pen = (function() {
+    Pen.prototype._bounds = void 0;
+
+    Pen.prototype._ops = void 0;
+
+    Pen.prototype._points = void 0;
+
+    Pen.prototype._state = void 0;
+
+    function Pen(name, genOps, isTemp, _defaultState, _setupThis, _updateThis) {
+      this.name = name;
+      this.isTemp = isTemp != null ? isTemp : false;
+      this._defaultState = _defaultState != null ? _defaultState : new State();
+      this._setupThis = _setupThis != null ? _setupThis : (function() {});
+      this._updateThis = _updateThis != null ? _updateThis : (function() {});
+      this._ops = genOps(this);
+      this.reset();
+    }
+
+    Pen.prototype.addValue = function(y) {
+      this._addPoint(this._state.nextX(), y);
+    };
+
+    Pen.prototype.addXY = function(x, y) {
+      this._addPoint(x, y);
+      this._state.leapCounterTo(x);
+    };
+
+    Pen.prototype.bounds = function() {
+      return this._bounds;
+    };
+
+    Pen.prototype.drawHistogramFrom = function(ys, xMin, xMax) {
+      var determineBucket, interval, isValid, plotBucket;
+      this.reset(true);
+      interval = this.getInterval();
+      isValid = (function(_this) {
+        return function(x) {
+          return ((xMin / interval) <= x && x <= (xMax / interval));
+        };
+      })(this);
+      determineBucket = function(x) {
+        return StrictMath.floor((x / interval) * (1 + 3.2e-15));
+      };
+      plotBucket = ((function(_this) {
+        return function(arg) {
+          var bucketNum, count;
+          bucketNum = arg[0], count = arg[1];
+          _this.addXY(Number(bucketNum) * interval, count);
+        };
+      })(this));
+      pipeline(filter(isNumber), map(determineBucket), filter(isValid), countBy(id), pairs, forEach(plotBucket))(ys);
+    };
+
+    Pen.prototype.getColor = function() {
+      return this._state.color;
+    };
+
+    Pen.prototype.getPenMode = function() {
+      return this._state.mode;
+    };
+
+    Pen.prototype.getDisplayMode = function() {
+      return this._state.displayMode;
+    };
+
+    Pen.prototype.getInterval = function() {
+      return this._state.interval;
+    };
+
+    Pen.prototype.getPenX = function() {
+      return this._state.getPenX();
+    };
+
+    Pen.prototype.getPoints = function() {
+      return this._points;
+    };
+
+    Pen.prototype.importState = function(arg) {
+      var interval, isPenDown, mode, penColor, penX, points, xs, ys;
+      penColor = arg.color, interval = arg.interval, mode = arg.mode, isPenDown = arg.isPenDown, points = arg.points, penX = arg.x;
+      points.forEach((function(_this) {
+        return function(arg1) {
+          var color, isPointVisible, x, y;
+          color = arg1.color, isPointVisible = arg1.isPenDown, x = arg1.x, y = arg1.y;
+          _this._points.push(new PlotPoint(x, y, (isPointVisible ? Down : Up), color));
+          _this._ops.addPoint(x, y);
+        };
+      })(this));
+      xs = this._points.map(function(p) {
+        return p.x;
+      });
+      ys = this._points.map(function(p) {
+        return p.y;
+      });
+      this._bounds = [Math.min.apply(Math, xs), Math.max.apply(Math, xs), Math.min.apply(Math, ys), Math.max.apply(Math, ys)];
+      if (isPenDown) {
+        this.lower();
+      } else {
+        this.raise();
+      }
+      this.setColor(penColor);
+      this.setInterval(interval);
+      this._state.leapCounterTo(penX);
+      this.updateDisplayMode(displayModeFromString(mode));
+    };
+
+    Pen.prototype.lower = function() {
+      this._state.mode = Down;
+    };
+
+    Pen.prototype.raise = function() {
+      this._state.mode = Up;
+    };
+
+    Pen.prototype.reset = function(isSoftResetting) {
+      if (isSoftResetting == null) {
+        isSoftResetting = false;
+      }
+      this._bounds = void 0;
+      this._state = (this._state != null) && (isSoftResetting || this.isTemp) ? this._state.partiallyReset() : this._defaultState.clone();
+      this._points = [];
+      this._ops.reset();
+      this._ops.updateMode(this._state.displayMode);
+    };
+
+    Pen.prototype.setColor = function(color) {
+      var trueColor;
+      trueColor = isNumber(color) ? color : ColorModel.nearestColorNumberOfRGB.apply(ColorModel, color);
+      this._state.color = trueColor;
+      this._ops.updateColor(trueColor);
+    };
+
+    Pen.prototype.setInterval = function(interval) {
+      this._state.interval = interval;
+    };
+
+    Pen.prototype.setup = function() {
+      this._setupThis();
+    };
+
+    Pen.prototype.update = function() {
+      this._updateThis();
+    };
+
+    Pen.prototype.updateDisplayMode = function(newMode) {
+      this._state.displayMode = newMode;
+      this._ops.updateMode(newMode);
+    };
+
+    Pen.prototype._addPoint = function(x, y) {
+      this._points.push(new PlotPoint(x, y, this._state.mode, this._state.color));
+      this._updateBounds(x, y);
+      this._ops.addPoint(x, y);
+    };
+
+    Pen.prototype._updateBounds = function(x, y) {
+      var maxX, maxY, minX, minY, ref2;
+      this._bounds = this._bounds != null ? ((ref2 = this._bounds, minX = ref2[0], maxX = ref2[1], minY = ref2[2], maxY = ref2[3], ref2), [Math.min(minX, x), Math.max(maxX, x), Math.min(minY, y), Math.max(maxY, y)]) : [x, x, y, y];
+    };
+
+    return Pen;
+
+  })();
+
+}).call(this);
+
+},{"brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/object":"brazier/object","brazierjs/type":"brazier/type","engine/core/colormodel":"engine/core/colormodel","shim/strictmath":"shim/strictmath"}],"engine/plot/plotmanager":[function(require,module,exports){
+(function() {
+  var PlotManager, displayModeFromNum, filter, flip, fold, forEach, isNumber, map, mapMaybe, maybe, pipeline, ref, ref1, ref2, toObject, values, zip,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  displayModeFromNum = require('./pen').DisplayMode.displayModeFromNum;
+
+  ref = require('brazierjs/array'), filter = ref.filter, forEach = ref.forEach, map = ref.map, toObject = ref.toObject, zip = ref.zip;
+
+  ref1 = require('brazierjs/function'), flip = ref1.flip, pipeline = ref1.pipeline;
+
+  ref2 = require('brazierjs/maybe'), fold = ref2.fold, mapMaybe = ref2.map, maybe = ref2.maybe;
+
+  values = require('brazierjs/object').values;
+
+  isNumber = require('brazierjs/type').isNumber;
+
+  module.exports = PlotManager = (function() {
+    PlotManager.prototype._currentPlotMaybe = void 0;
+
+    PlotManager.prototype._plotMap = void 0;
+
+    function PlotManager(plots) {
+      this.updatePlots = bind(this.updatePlots, this);
+      this.setupPlots = bind(this.setupPlots, this);
+      var toName;
+      toName = function(p) {
+        return p.name.toUpperCase();
+      };
+      this._currentPlotMaybe = maybe(plots[plots.length - 1]);
+      this._plotMap = pipeline(map(toName), flip(zip)(plots), toObject)(plots);
+    }
+
+    PlotManager.prototype.clearAllPlots = function() {
+      this._forAllPlots(function(plot) {
+        return plot.clear();
+      });
+    };
+
+    PlotManager.prototype.clearPlot = function() {
+      this._withPlot(function(plot) {
+        return plot.clear();
+      });
+    };
+
+    PlotManager.prototype.createTemporaryPen = function(name) {
+      this._withPlot(function(plot) {
+        return plot.createTemporaryPen(name);
+      });
+    };
+
+    PlotManager.prototype.disableAutoplotting = function() {
+      this._withPlot(function(plot) {
+        return plot.disableAutoplotting();
+      });
+    };
+
+    PlotManager.prototype.drawHistogramFrom = function(list) {
+      this._withPlot(function(plot) {
+        var numbers;
+        numbers = filter(isNumber)(list);
+        return plot.drawHistogramFrom(numbers);
+      });
+    };
+
+    PlotManager.prototype.enableAutoplotting = function() {
+      this._withPlot(function(plot) {
+        return plot.enableAutoplotting();
+      });
+    };
+
+    PlotManager.prototype.getCurrentPlotMaybe = function() {
+      return this._currentPlotMaybe;
+    };
+
+    PlotManager.prototype.getPlotName = function() {
+      return this._withPlot(function(plot) {
+        return plot.name;
+      });
+    };
+
+    PlotManager.prototype.getPlots = function() {
+      return values(this._plotMap);
+    };
+
+    PlotManager.prototype.getPlotXMax = function() {
+      return this._withPlot(function(plot) {
+        return plot.xMax;
+      });
+    };
+
+    PlotManager.prototype.getPlotXMin = function() {
+      return this._withPlot(function(plot) {
+        return plot.xMin;
+      });
+    };
+
+    PlotManager.prototype.getPlotYMax = function() {
+      return this._withPlot(function(plot) {
+        return plot.yMax;
+      });
+    };
+
+    PlotManager.prototype.getPlotYMin = function() {
+      return this._withPlot(function(plot) {
+        return plot.yMin;
+      });
+    };
+
+    PlotManager.prototype.hasPenWithName = function(name) {
+      return this._withPlot(function(plot) {
+        return plot.hasPenWithName(name);
+      });
+    };
+
+    PlotManager.prototype.importState = function(arg) {
+      var currentPlotNameOrNull, plots;
+      currentPlotNameOrNull = arg.currentPlotNameOrNull, plots = arg.plots;
+      plots.forEach((function(_this) {
+        return function(plot) {
+          return _this._plotMap[plot.name.toUpperCase()].importState(plot);
+        };
+      })(this));
+      this._currentPlotMaybe = mapMaybe((function(_this) {
+        return function(name) {
+          return _this._plotMap[name.toUpperCase()];
+        };
+      })(this))(maybe(currentPlotNameOrNull));
+    };
+
+    PlotManager.prototype.isAutoplotting = function() {
+      return this._withPlot(function(plot) {
+        return plot.isAutoplotting;
+      });
+    };
+
+    PlotManager.prototype.lowerPen = function() {
+      this._withPlot(function(plot) {
+        return plot.lowerPen();
+      });
+    };
+
+    PlotManager.prototype.plotPoint = function(x, y) {
+      this._withPlot(function(plot) {
+        return plot.plotPoint(x, y);
+      });
+    };
+
+    PlotManager.prototype.plotValue = function(value) {
+      this._withPlot(function(plot) {
+        return plot.plotValue(value);
+      });
+    };
+
+    PlotManager.prototype.raisePen = function() {
+      this._withPlot(function(plot) {
+        return plot.raisePen();
+      });
+    };
+
+    PlotManager.prototype.resetPen = function() {
+      this._withPlot(function(plot) {
+        return plot.resetPen();
+      });
+    };
+
+    PlotManager.prototype.setCurrentPen = function(name) {
+      this._withPlot(function(plot) {
+        return plot.setCurrentPen(name);
+      });
+    };
+
+    PlotManager.prototype.setCurrentPlot = function(name) {
+      var plot;
+      plot = this._plotMap[name.toUpperCase()];
+      if (plot != null) {
+        this._currentPlotMaybe = maybe(plot);
+      } else {
+        throw new Error("no such plot: \"" + name + "\"");
+      }
+    };
+
+    PlotManager.prototype.setHistogramBarCount = function(num) {
+      if (num > 0) {
+        this._withPlot(function(plot) {
+          return plot.setHistogramBarCount(num);
+        });
+      } else {
+        throw new Error("You cannot make a histogram with " + num + " bars.");
+      }
+    };
+
+    PlotManager.prototype.setPenColor = function(color) {
+      this._withPlot(function(plot) {
+        return plot.setPenColor(color);
+      });
+    };
+
+    PlotManager.prototype.setPenInterval = function(color) {
+      this._withPlot(function(plot) {
+        return plot.setPenInterval(color);
+      });
+    };
+
+    PlotManager.prototype.setPenMode = function(num) {
+      this._withPlot(function(plot) {
+        return plot.updateDisplayMode(displayModeFromNum(num));
+      });
+    };
+
+    PlotManager.prototype.setupPlots = function() {
+      this._forAllPlots(function(plot) {
+        return plot.setup();
+      });
+    };
+
+    PlotManager.prototype.setXRange = function(min, max) {
+      this._withPlot(function(plot) {
+        return plot.setXRange(min, max);
+      });
+    };
+
+    PlotManager.prototype.setYRange = function(min, max) {
+      this._withPlot(function(plot) {
+        return plot.setYRange(min, max);
+      });
+    };
+
+    PlotManager.prototype.updatePlots = function() {
+      this._forAllPlots(function(plot) {
+        return plot.update();
+      });
+    };
+
+    PlotManager.prototype.withTemporaryContext = function(plotName, penName) {
+      return (function(_this) {
+        return function(f) {
+          var oldPlotMaybe, result, tempPlotMaybe;
+          oldPlotMaybe = _this._currentPlotMaybe;
+          tempPlotMaybe = maybe(_this._plotMap[plotName.toUpperCase()]);
+          _this._currentPlotMaybe = tempPlotMaybe;
+          result = penName != null ? mapMaybe(function(tempPlot) {
+            return tempPlot.withTemporaryContext(penName)(f);
+          })(tempPlotMaybe) : f();
+          _this._currentPlotMaybe = oldPlotMaybe;
+          return result;
+        };
+      })(this);
+    };
+
+    PlotManager.prototype._forAllPlots = function(f) {
+      pipeline(values, forEach(f))(this._plotMap);
+    };
+
+    PlotManager.prototype._withPlot = function(f) {
+      var error;
+      error = new Error("There is no current plot. Please select a current plot using the set-current-plot command.");
+      return fold(function() {
+        throw error;
+      })(f)(this._currentPlotMaybe);
+    };
+
+    return PlotManager;
+
+  })();
+
+}).call(this);
+
+},{"./pen":"engine/plot/pen","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/maybe":"brazier/maybe","brazierjs/object":"brazier/object","brazierjs/type":"brazier/type"}],"engine/plot/plotops":[function(require,module,exports){
+(function() {
+  var ColorModel, PenOps, PlottingOps,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  ColorModel = require('../core/colormodel');
+
+  PenOps = (function() {
+    PenOps.prototype.addPoint = void 0;
+
+    PenOps.prototype.reset = void 0;
+
+    PenOps.prototype.updateMode = void 0;
+
+    PenOps.prototype.updateColor = void 0;
+
+    function PenOps(plottingOps, pen) {
+      this.addPoint = plottingOps.addPoint(pen);
+      this.reset = plottingOps.resetPen(pen);
+      this.updateMode = plottingOps.updatePenMode(pen);
+      this.updateColor = plottingOps.updatePenColor(pen);
+    }
+
+    return PenOps;
+
+  })();
+
+  module.exports = PlottingOps = (function() {
+    function PlottingOps(resize, reset, registerPen, resetPen, addPoint, updatePenMode, updatePenColor) {
+      this.resize = resize;
+      this.reset = reset;
+      this.registerPen = registerPen;
+      this.resetPen = resetPen;
+      this.addPoint = addPoint;
+      this.updatePenMode = updatePenMode;
+      this.updatePenColor = updatePenColor;
+      this.makePenOps = bind(this.makePenOps, this);
+    }
+
+    PlottingOps.prototype.colorToRGBString = function(color) {
+      var b, g, r, ref;
+      ref = ColorModel.colorToRGB(color), r = ref[0], g = ref[1], b = ref[2];
+      return "rgb(" + r + ", " + g + ", " + b + ")";
+    };
+
+    PlottingOps.prototype.makePenOps = function(pen) {
+      return new PenOps(this, pen);
+    };
+
+    return PlottingOps;
+
+  })();
+
+}).call(this);
+
+},{"../core/colormodel":"engine/core/colormodel"}],"engine/plot/plot":[function(require,module,exports){
+(function() {
+  var Pen, Plot, Stop, StrictMath, filter, flip, fold, forEach, id, isEmpty, isSomething, lookup, map, maxBy, maybe, pipeline, ref, ref1, ref2, ref3, toObject, values, zip;
+
+  Pen = require('./pen').Pen;
+
+  StrictMath = require('shim/strictmath');
+
+  ref = require('brazierjs/array'), filter = ref.filter, forEach = ref.forEach, isEmpty = ref.isEmpty, map = ref.map, maxBy = ref.maxBy, toObject = ref.toObject, zip = ref.zip;
+
+  ref1 = require('brazierjs/function'), flip = ref1.flip, id = ref1.id, pipeline = ref1.pipeline;
+
+  ref2 = require('brazierjs/maybe'), fold = ref2.fold, isSomething = ref2.isSomething, maybe = ref2.maybe;
+
+  ref3 = require('brazierjs/object'), lookup = ref3.lookup, values = ref3.values;
+
+  Stop = require('util/exception').StopInterrupt;
+
+  module.exports = Plot = (function() {
+    Plot.prototype._currentPenMaybe = void 0;
+
+    Plot.prototype._originalBounds = void 0;
+
+    Plot.prototype._penMap = void 0;
+
+    Plot.prototype.name = void 0;
+
+    function Plot(name1, pens, _ops, xLabel, yLabel, isLegendEnabled, isAutoplotting, xMin, xMax, yMin, yMax, _setupThis, _updateThis) {
+      var toName;
+      this.name = name1;
+      if (pens == null) {
+        pens = [];
+      }
+      this._ops = _ops;
+      this.xLabel = xLabel;
+      this.yLabel = yLabel;
+      this.isLegendEnabled = isLegendEnabled != null ? isLegendEnabled : true;
+      this.isAutoplotting = isAutoplotting != null ? isAutoplotting : true;
+      this.xMin = xMin != null ? xMin : 0;
+      this.xMax = xMax != null ? xMax : 10;
+      this.yMin = yMin != null ? yMin : 0;
+      this.yMax = yMax != null ? yMax : 10;
+      this._setupThis = _setupThis != null ? _setupThis : (function() {});
+      this._updateThis = _updateThis != null ? _updateThis : (function() {});
+      toName = function(p) {
+        return p.name.toUpperCase();
+      };
+      this._currentPenMaybe = maybe(pens[0]);
+      this._originalBounds = [this.xMin, this.xMax, this.yMin, this.yMax];
+      this._penMap = pipeline(map(toName), flip(zip)(pens), toObject)(pens);
+      this.clear();
+    }
+
+    Plot.prototype.clear = function() {
+      var deletePen, pens, ref4, resetPen;
+      ref4 = this._originalBounds, this.xMin = ref4[0], this.xMax = ref4[1], this.yMin = ref4[2], this.yMax = ref4[3];
+      this._ops.reset(this);
+      this._resize();
+      pens = this.getPens();
+      deletePen = ((function(_this) {
+        return function(x) {
+          delete _this._penMap[x.name.toUpperCase()];
+        };
+      })(this));
+      resetPen = ((function(_this) {
+        return function(pen) {
+          pen.reset();
+          _this._ops.registerPen(pen);
+        };
+      })(this));
+      pipeline(filter(function(x) {
+        return x.isTemp;
+      }), forEach(deletePen))(pens);
+      pipeline(filter(function(x) {
+        return !x.isTemp;
+      }), forEach(resetPen))(pens);
+      if (fold(function() {
+        return false;
+      })(function(cp) {
+        return cp.isTemp;
+      })(this._currentPenMaybe)) {
+        this._currentPenMaybe = maybe(isEmpty(pens) ? (this._penMap.DEFAULT = new Pen("DEFAULT", this._ops.makePenOps), this._penMap.DEFAULT) : pens[0]);
+      }
+    };
+
+    Plot.prototype.createTemporaryPen = function(name) {
+      this._currentPenMaybe = maybe(this._createAndReturnTemporaryPen(name));
+    };
+
+    Plot.prototype.disableAutoplotting = function() {
+      this.isAutoplotting = false;
+    };
+
+    Plot.prototype.drawHistogramFrom = function(list) {
+      this._withPen((function(_this) {
+        return function(pen) {
+          if (pen.getInterval() > 0) {
+            pen.drawHistogramFrom(list, _this.xMin, _this.xMax);
+            return _this._verifyHistogramSize(pen);
+          } else {
+            throw new Error("You cannot histogram with a plot-pen-interval of " + pen.interval + ".");
+          }
+        };
+      })(this));
+    };
+
+    Plot.prototype.enableAutoplotting = function() {
+      this.isAutoplotting = true;
+    };
+
+    Plot.prototype.getCurrentPenMaybe = function() {
+      return this._currentPenMaybe;
+    };
+
+    Plot.prototype.getPens = function() {
+      return values(this._penMap);
+    };
+
+    Plot.prototype.hasPenWithName = function(name) {
+      return pipeline(this._getPenMaybeByName.bind(this), isSomething)(name);
+    };
+
+    Plot.prototype.importState = function(arg) {
+      var currentPenNameOrNull, pens;
+      currentPenNameOrNull = arg.currentPenNameOrNull, this.isAutoplotting = arg.isAutoplotting, this.isLegendEnabled = arg.isLegendOpen, pens = arg.pens, this.xMax = arg.xMax, this.xMin = arg.xMin, this.yMax = arg.yMax, this.yMin = arg.yMin;
+      pens.forEach((function(_this) {
+        return function(pen) {
+          return _this._createAndReturnTemporaryPen(pen.name).importState(pen);
+        };
+      })(this));
+      this._currentPenMaybe = this._getPenMaybeByName(currentPenNameOrNull);
+      this._resize();
+    };
+
+    Plot.prototype.lowerPen = function() {
+      this._withPen(function(pen) {
+        return pen.lower();
+      });
+    };
+
+    Plot.prototype.plotPoint = function(x, y) {
+      this._withPen((function(_this) {
+        return function(pen) {
+          pen.addXY(x, y);
+          return _this._verifySize(pen);
+        };
+      })(this));
+    };
+
+    Plot.prototype.plotValue = function(value) {
+      this._withPen((function(_this) {
+        return function(pen) {
+          pen.addValue(value);
+          return _this._verifySize(pen);
+        };
+      })(this));
+    };
+
+    Plot.prototype.raisePen = function() {
+      this._withPen(function(pen) {
+        return pen.raise();
+      });
+    };
+
+    Plot.prototype.resetPen = function() {
+      this._withPen(function(pen) {
+        return pen.reset();
+      });
+    };
+
+    Plot.prototype.setCurrentPen = function(name) {
+      var penMaybe;
+      penMaybe = this._getPenMaybeByName(name);
+      if (isSomething(penMaybe)) {
+        this._currentPenMaybe = penMaybe;
+      } else {
+        throw new Error("There is no pen named \"" + name + "\" in the current plot");
+      }
+    };
+
+    Plot.prototype.setHistogramBarCount = function(num) {
+      this._withPen((function(_this) {
+        return function(pen) {
+          var interval;
+          if (num >= 1) {
+            interval = (_this.xMax - _this.xMin) / num;
+            return pen.setInterval(interval);
+          } else {
+            throw new Error("You cannot make a histogram with " + num + " bars.");
+          }
+        };
+      })(this));
+    };
+
+    Plot.prototype.setPenColor = function(color) {
+      this._withPen(function(pen) {
+        return pen.setColor(color);
+      });
+    };
+
+    Plot.prototype.setPenInterval = function(num) {
+      this._withPen(function(pen) {
+        return pen.setInterval(num);
+      });
+    };
+
+    Plot.prototype.setup = function() {
+      var setupResult;
+      setupResult = this._setupThis();
+      if (!(setupResult instanceof Stop)) {
+        this.getPens().forEach(function(pen) {
+          return pen.setup();
+        });
+      }
+    };
+
+    Plot.prototype.setXRange = function(min, max) {
+      if (min >= max) {
+        throw new Error("the minimum must be less than the maximum, but " + min + " is greater than or equal to " + max);
+      }
+      this.xMin = min;
+      this.xMax = max;
+      this._resize();
+    };
+
+    Plot.prototype.setYRange = function(min, max) {
+      if (min >= max) {
+        throw new Error("the minimum must be less than the maximum, but " + min + " is greater than or equal to " + max);
+      }
+      this.yMin = min;
+      this.yMax = max;
+      this._resize();
+    };
+
+    Plot.prototype.update = function() {
+      var updateResult;
+      updateResult = this._updateThis();
+      if (!(updateResult instanceof Stop)) {
+        this.getPens().forEach(function(pen) {
+          return pen.update();
+        });
+      }
+    };
+
+    Plot.prototype.updateDisplayMode = function(newMode) {
+      this._withPen(function(pen) {
+        return pen.updateDisplayMode(newMode);
+      });
+    };
+
+    Plot.prototype.withTemporaryContext = function(penName) {
+      return (function(_this) {
+        return function(f) {
+          var oldPenMaybe;
+          oldPenMaybe = _this._currentPenMaybe;
+          _this._currentPenMaybe = _this._getPenMaybeByName(penName);
+          f();
+          _this._currentPenMaybe = oldPenMaybe;
+        };
+      })(this);
+    };
+
+    Plot.prototype._createAndReturnTemporaryPen = function(name) {
+      var makeNew;
+      makeNew = (function(_this) {
+        return function() {
+          var pen;
+          pen = new Pen(name, _this._ops.makePenOps, true);
+          _this._penMap[pen.name.toUpperCase()] = pen;
+          _this._ops.registerPen(pen);
+          return pen;
+        };
+      })(this);
+      return pipeline(this._getPenMaybeByName.bind(this), fold(makeNew)(id))(name);
+    };
+
+    Plot.prototype._getPenMaybeByName = function(name) {
+      return lookup(name.toUpperCase())(this._penMap);
+    };
+
+    Plot.prototype._resize = function() {
+      return this._ops.resize(this.xMin, this.xMax, this.yMin, this.yMax);
+    };
+
+    Plot.prototype._verifyHistogramSize = function(pen) {
+      var isWithinBounds, penYMax;
+      isWithinBounds = (function(_this) {
+        return function(arg) {
+          var x;
+          x = arg.x;
+          return x >= _this.xMin && x <= _this.xMax;
+        };
+      })(this);
+      penYMax = pipeline(filter(isWithinBounds), map(function(p) {
+        return p.y;
+      }), maxBy(id), fold(function() {
+        return 0;
+      })(id))(pen.getPoints());
+      if (penYMax > this.yMax && this.isAutoplotting) {
+        this.yMax = penYMax;
+      }
+      this._resize();
+    };
+
+    Plot.prototype._verifySize = function(pen) {
+      var bounds, bumpMax, bumpMin, currentBounds, maxXs, maxYs, minXs, minYs, newXMax, newXMin, newYMax, newYMin, ref4, ref5;
+      if (pen.bounds() != null) {
+        bounds = pen.bounds();
+        currentBounds = [this.xMin, this.xMax, this.yMin, this.yMax];
+        ref4 = zip(bounds)(currentBounds), minXs = ref4[0], maxXs = ref4[1], minYs = ref4[2], maxYs = ref4[3];
+        bumpMin = function(arg, currentMax) {
+          var currentMin, expandedRange, newMin, newValue, range;
+          newMin = arg[0], currentMin = arg[1];
+          if (newMin < currentMin) {
+            range = currentMax - newMin;
+            expandedRange = range * 1.2;
+            newValue = currentMax - expandedRange;
+            return StrictMath.floor(newValue);
+          } else {
+            return currentMin;
+          }
+        };
+        bumpMax = function(arg, currentMin) {
+          var currentMax, expandedRange, newMax, newValue, range;
+          newMax = arg[0], currentMax = arg[1];
+          if (newMax > currentMax) {
+            range = newMax - currentMin;
+            expandedRange = range * 1.2;
+            newValue = currentMin + expandedRange;
+            return StrictMath.ceil(newValue);
+          } else {
+            return currentMax;
+          }
+        };
+        ref5 = [bumpMin(minXs, this.xMax), bumpMax(maxXs, this.xMin), bumpMin(minYs, this.yMax), bumpMax(maxYs, this.yMin)], newXMin = ref5[0], newXMax = ref5[1], newYMin = ref5[2], newYMax = ref5[3];
+        if (newXMin !== this.xMin || newXMax !== this.xMax || newYMin !== this.yMin || newYMax !== this.yMax) {
+          if (this.isAutoplotting) {
+            this.xMin = newXMin;
+            this.xMax = newXMax;
+            this.yMin = newYMin;
+            this.yMax = newYMax;
+          }
+          this._resize();
+        }
+      }
+    };
+
+    Plot.prototype._withPen = function(f) {
+      return fold(function() {
+        throw new Error("Plot '" + this.name + "' has no pens!");
+      })(f)(this._currentPenMaybe);
+    };
+
+    return Plot;
+
+  })();
+
+}).call(this);
+
+},{"./pen":"engine/plot/pen","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/maybe":"brazier/maybe","brazierjs/object":"brazier/object","shim/strictmath":"shim/strictmath","util/exception":"util/exception"}],"engine/prim/evalprims":[function(require,module,exports){
+(function() {
+  var EvalPrims, evalCache, globalEval, readFromString, scalaJSEvalCode;
+
+  globalEval = eval;
+
+  readFromString = function(str) {
+    var error, ex;
+    try {
+      return Converter.stringToJSValue(str);
+    } catch (error) {
+      ex = error;
+      throw new Error(ex.message);
+    }
+  };
+
+  evalCache = {};
+
+  scalaJSEvalCode = function(code, widgets, runString, isRunResult, procVars) {
+    var compileParams, fun, js, result, runFun, runKey, varNames, varString;
+    varNames = Object.keys(procVars).sort();
+    varString = varNames.join(' ');
+    runKey = varString + " => " + runString;
+    runFun = (evalCache[runKey] != null) ? evalCache[runKey] : (compileParams = {
+      code: code,
+      widgets: widgets,
+      commands: [],
+      reporters: [],
+      turtleShapes: [],
+      linkShapes: []
+    }, js = Converter.compileRunString(compileParams, runString, isRunResult, varString), fun = globalEval(js), evalCache[runKey] = fun, fun);
+    result = runFun(varNames.map((function(_this) {
+      return function(vn) {
+        return procVars[vn];
+      };
+    })(this)));
+    if (isRunResult) {
+      return result;
+    } else {
+
+    }
+  };
+
+  module.exports = EvalPrims = (function() {
+    function EvalPrims(code, widgets, readFromString1) {
+      this.readFromString = readFromString1 != null ? readFromString1 : readFromString;
+      this.runCode = function(runString, isRunResult, procVars) {
+        return scalaJSEvalCode(code, widgets, runString, isRunResult, procVars);
+      };
+    }
+
+    return EvalPrims;
+
+  })();
+
+}).call(this);
+
+},{}],"engine/prim/gamma":[function(require,module,exports){
+(function() {
+  var StrictMath, calcQ, calcQ0, calcT, calcVars, calcW, gdsFromAcceptanceRejection, gdsFromDoubleExponential;
+
+  StrictMath = require('shim/strictmath');
+
+  calcQ = function(t, s, ss, q0) {
+    var a1, a2, a3, a4, a5, a6, a7, a8, a9, v;
+    a1 = 0.333333333;
+    a2 = -0.249999949;
+    a3 = 0.199999867;
+    a4 = -0.166677482;
+    a5 = 0.142873973;
+    a6 = -0.124385581;
+    a7 = 0.110368310;
+    a8 = -0.112750886;
+    a9 = 0.104089866;
+    v = t / (s + s);
+    if (StrictMath.abs(v) > 0.25) {
+      return q0 - s * t + 0.25 * t * t + (ss + ss) * StrictMath.log(1 + v);
+    } else {
+      return q0 + 0.5 * t * t * ((((((((a9 * v + a8) * v + a7) * v + a6) * v + a5) * v + a4) * v + a3) * v + a2) * v + a1) * v;
+    }
+  };
+
+  calcQ0 = function(alpha) {
+    var q1, q2, q3, q4, q5, q6, q7, q8, q9, r;
+    q1 = 0.0416666664;
+    q2 = 0.0208333723;
+    q3 = 0.0079849875;
+    q4 = 0.0015746717;
+    q5 = -0.0003349403;
+    q6 = 0.0003340332;
+    q7 = 0.0006053049;
+    q8 = -0.0004701849;
+    q9 = 0.0001710320;
+    r = 1 / alpha;
+    return ((((((((q9 * r + q8) * r + q7) * r + q6) * r + q5) * r + q4) * r + q3) * r + q2) * r + q1) * r;
+  };
+
+  calcT = function(randomGenerator) {
+    var generateVs, ref, v1, v12;
+    generateVs = function() {
+      var v1, v12, v2;
+      v1 = 2 * randomGenerator.nextDouble() - 1;
+      v2 = 2 * randomGenerator.nextDouble() - 1;
+      v12 = v1 * v1 + v2 * v2;
+      if (v12 <= 1) {
+        return [v1, v12];
+      } else {
+        return generateVs();
+      }
+    };
+    ref = generateVs(), v1 = ref[0], v12 = ref[1];
+    return v1 * StrictMath.sqrt(-2 * StrictMath.log(v12) / v12);
+  };
+
+  calcVars = function(b, si, randomGenerator) {
+    var e, signU, t, u, uTemp;
+    e = -StrictMath.log(randomGenerator.nextDouble());
+    uTemp = randomGenerator.nextDouble();
+    u = uTemp + uTemp - 1;
+    signU = u > 0 ? 1 : -1;
+    t = b + (e * si) * signU;
+    if (t > -0.71874483771719) {
+      return [e, signU, u, t];
+    } else {
+      return calcVars(b, si, randomGenerator);
+    }
+  };
+
+  calcW = function(q) {
+    var e1, e2, e3, e4, e5, e6, e7;
+    e1 = 1.000000000;
+    e2 = 0.499999994;
+    e3 = 0.166666848;
+    e4 = 0.041664508;
+    e5 = 0.008345522;
+    e6 = 0.001353826;
+    e7 = 0.000247453;
+    if (q > 0.5) {
+      return StrictMath.exp(q) - 1.0;
+    } else {
+      return ((((((e7 * q + e6) * q + e5) * q + e4) * q + e3) * q + e2) * q + e1) * q;
+    }
+  };
+
+  gdsFromAcceptanceRejection = function(alpha, randomGenerator) {
+    var b, generateNumbersUntilHappy;
+    b = 1 + 0.36788794412 * alpha;
+    generateNumbersUntilHappy = function() {
+      var gdsHighP, gdsLowP, logRand, p;
+      p = b * randomGenerator.nextDouble();
+      logRand = StrictMath.log(randomGenerator.nextDouble());
+      gdsLowP = StrictMath.exp(StrictMath.log(p) / alpha);
+      gdsHighP = -StrictMath.log((b - p) / alpha);
+      if (p <= 1 && logRand <= -gdsLowP) {
+        return gdsLowP;
+      } else if (p > 1 && logRand <= ((alpha - 1) * StrictMath.log(gdsHighP))) {
+        return gdsHighP;
+      } else {
+        return generateNumbersUntilHappy();
+      }
+    };
+    return generateNumbersUntilHappy();
+  };
+
+  gdsFromDoubleExponential = function(b, si, c, s, ss, q0, randomGenerator) {
+    var tryAgain;
+    tryAgain = function() {
+      var e, q, ref, signU, t, u, x;
+      ref = calcVars(b, si, randomGenerator), e = ref[0], signU = ref[1], u = ref[2], t = ref[3];
+      q = calcQ(t, s, ss, q0);
+      if ((q > 0) && (c * u * signU <= calcW(q) * StrictMath.exp(e - 0.5 * t * t))) {
+        x = s + 0.5 * t;
+        return x * x;
+      } else {
+        return tryAgain();
+      }
+    };
+    return tryAgain();
+  };
+
+
+  /*
+  
+  Gamma Distribution - Acceptance Rejection combined with Acceptance Complement
+  
+  See: J.H. Ahrens, U. Dieter (1974): Computer methods for sampling from gamma, beta, Poisson and binomial distributions, Computing 12, 223-246.
+  See: J.H. Ahrens, U. Dieter (1982): Generating gamma variates by a modified rejection technique, Communications of the ACM 25, 47-54.
+   */
+
+  module.exports = function(randomGenerator, alpha, lambda) {
+    var b, c, d, gds, q0, ref, s, si, ss, t, u, x;
+    gds = alpha < 1 ? gdsFromAcceptanceRejection(alpha, randomGenerator) : (ss = alpha - 0.5, s = StrictMath.sqrt(ss), d = 5.656854249 - 12 * s, t = calcT(randomGenerator), x = s + 0.5 * t, t >= 0 ? x * x : (u = randomGenerator.nextDouble(), d * u <= t * t * t ? x * x : (q0 = calcQ0(alpha), (x > 0) && (StrictMath.log(1 - u) <= calcQ(t, s, ss, q0)) ? x * x : ((ref = alpha > 13.022 ? [1.77, 0.75, 0.1515 / s] : alpha > 3.686 ? [1.654 + 0.0076 * ss, 1.68 / s + 0.275, 0.062 / s + 0.024] : [0.463 + s - 0.178 * ss, 1.235, 0.195 / s - 0.079 + 0.016 * s], b = ref[0], si = ref[1], c = ref[2], ref), gdsFromDoubleExponential(b, si, c, s, ss, q0, randomGenerator)))));
+    return gds / lambda;
+  };
+
+}).call(this);
+
+},{"shim/strictmath":"shim/strictmath"}],"engine/prim/importexportprims":[function(require,module,exports){
+(function() {
+  var ImportExportConfig, ImportExportPrims;
+
+  module.exports.Config = ImportExportConfig = (function() {
+    function ImportExportConfig(exportAllPlots1, exportFile1, exportOutput, exportPlot1, exportView, exportWorld1, importWorld1) {
+      this.exportAllPlots = exportAllPlots1 != null ? exportAllPlots1 : (function() {
+        return function() {};
+      });
+      this.exportFile = exportFile1 != null ? exportFile1 : (function() {
+        return function() {};
+      });
+      this.exportOutput = exportOutput != null ? exportOutput : (function() {});
+      this.exportPlot = exportPlot1 != null ? exportPlot1 : (function() {
+        return function() {};
+      });
+      this.exportView = exportView != null ? exportView : (function() {});
+      this.exportWorld = exportWorld1 != null ? exportWorld1 : (function() {
+        return function() {};
+      });
+      this.importWorld = importWorld1 != null ? importWorld1 : (function() {
+        return function() {};
+      });
+    }
+
+    return ImportExportConfig;
+
+  })();
+
+  module.exports.Prims = ImportExportPrims = (function() {
+    function ImportExportPrims(arg, trueExportWorld, trueExportAllPlots, trueExportPlot, trueImportWorld) {
+      var exportAllPlots, exportFile, exportPlot, exportWorld, importWorld;
+      exportAllPlots = arg.exportAllPlots, exportFile = arg.exportFile, this.exportOutput = arg.exportOutput, exportPlot = arg.exportPlot, this.exportView = arg.exportView, exportWorld = arg.exportWorld, importWorld = arg.importWorld;
+      this.exportWorld = function(filename) {
+        return exportFile(trueExportWorld())(filename);
+      };
+      this.exportAllPlots = function(filename) {
+        return exportFile(trueExportAllPlots())(filename);
+      };
+      this.exportPlot = function(plot, filename) {
+        return exportFile(trueExportPlot(plot))(filename);
+      };
+      this.importWorld = function(filename) {
+        return importWorld(trueImportWorld)(filename);
+      };
+    }
+
+    return ImportExportPrims;
+
+  })();
+
+}).call(this);
+
+},{}],"engine/prim/layoutmanager":[function(require,module,exports){
+(function() {
+  var LayoutManager, NLMath, NLType, TreeNode, contains, filter, flatMap, fold, foldl, forEach, id, map, maxBy, pipeline, rangeUntil, ref, ref1, unique, values, zip;
+
+  NLMath = require('util/nlmath');
+
+  NLType = require('../core/typechecker');
+
+  ref = require('brazierjs/array'), contains = ref.contains, filter = ref.filter, flatMap = ref.flatMap, foldl = ref.foldl, forEach = ref.forEach, map = ref.map, maxBy = ref.maxBy, unique = ref.unique, zip = ref.zip;
+
+  ref1 = require('brazierjs/function'), id = ref1.id, pipeline = ref1.pipeline;
+
+  fold = require('brazierjs/maybe').fold;
+
+  rangeUntil = require('brazierjs/number').rangeUntil;
+
+  values = require('brazierjs/object').values;
+
+  TreeNode = (function() {
+    TreeNode.prototype._angle = void 0;
+
+    TreeNode.prototype._children = void 0;
+
+    TreeNode.prototype._depth = void 0;
+
+    TreeNode.prototype._val = void 0;
+
+    function TreeNode(_turtle, _depth) {
+      this._turtle = _turtle;
+      this._depth = _depth;
+      this._angle = 0.0;
+      this._children = [];
+    }
+
+    TreeNode.prototype.addChild = function(child) {
+      this._children.push(child);
+    };
+
+    TreeNode.prototype.getAngle = function() {
+      return this._angle;
+    };
+
+    TreeNode.prototype.getDepth = function() {
+      return this._depth;
+    };
+
+    TreeNode.prototype.getTurtle = function() {
+      return this._turtle;
+    };
+
+    TreeNode.prototype.getWeight = function() {
+      var maxChildWeight;
+      maxChildWeight = pipeline(map(function(c) {
+        return c.getWeight();
+      }), maxBy(id), fold(function() {
+        return 0;
+      })(id))(this._children);
+      return NLMath.max(maxChildWeight * 0.8, this._children.length + 1);
+    };
+
+    TreeNode.prototype.layoutRadial = function(arcStart, arcEnd) {
+      var f, weightSum;
+      this._angle = (arcStart + arcEnd) / 2;
+      weightSum = foldl(function(acc, x) {
+        return acc + x.getWeight();
+      })(0)(this._children);
+      f = function(childStart, child) {
+        var childEnd;
+        childEnd = childStart + (arcEnd - arcStart) * child.getWeight() / weightSum;
+        child.layoutRadial(childStart, childEnd);
+        return childEnd;
+      };
+      return foldl(f)(arcStart)(this._children);
+    };
+
+    return TreeNode;
+
+  })();
+
+  module.exports = LayoutManager = (function() {
+    function LayoutManager(_world, _nextDouble) {
+      this._world = _world;
+      this._nextDouble = _nextDouble;
+    }
+
+    LayoutManager.prototype.layoutCircle = function(agentsOrList, radius) {
+      var midx, midy, n, turtles;
+      turtles = NLType(agentsOrList).isList() ? agentsOrList : agentsOrList.shufflerator().toArray();
+      n = turtles.length;
+      midx = this._world.topology.minPxcor + NLMath.floor(this._world.topology.width / 2);
+      midy = this._world.topology.minPycor + NLMath.floor(this._world.topology.height / 2);
+      return rangeUntil(0)(n).forEach(function(i) {
+        var heading, turtle;
+        heading = (i * 360) / n;
+        turtle = turtles[i];
+        turtle.patchAtHeadingAndDistance(heading, radius);
+        turtle.setXY(midx, midy);
+        turtle.setVariable("heading", heading);
+        return turtle.jumpIfAble(radius);
+      });
+    };
+
+    LayoutManager.prototype.layoutSpring = function(nodeSet, linkSet, spr, len, rep) {
+      var agt, ax, ay, degCounts, nodeCount, ref2, tMap;
+      if (!nodeSet.isEmpty()) {
+        ref2 = this._initialize(nodeSet), ax = ref2[0], ay = ref2[1], tMap = ref2[2], agt = ref2[3];
+        nodeCount = nodeSet.size();
+        degCounts = this._calcDegreeCounts(linkSet, tMap, nodeCount);
+        this._updateXYArraysForNeighbors(ax, ay, linkSet, tMap, degCounts, spr, len);
+        this._updateXYArraysForAll(ax, ay, agt, degCounts, nodeCount, rep);
+        this._moveTurtles(ax, ay, agt, nodeCount);
+      }
+    };
+
+    LayoutManager.prototype.layoutTutte = function(nodeSet, linkSet, radius) {
+      var anchors, turtleXYTriplets;
+      anchors = pipeline(flatMap(function(arg) {
+        var end1, end2;
+        end1 = arg.end1, end2 = arg.end2;
+        return [end1, end2];
+      }), unique, filter(function(t) {
+        return !nodeSet.contains(t);
+      }))(linkSet.toArray());
+      this.layoutCircle(anchors, radius);
+      turtleXYTriplets = nodeSet.shuffled().toArray().map((function(_this) {
+        return function(turtle) {
+          var allOfMyLinks, compute, computeCor, degree, neighbors, relevantLinks, x, y;
+          computeCor = function(turtle, neighbors, degree) {
+            return function(getCor, max, min) {
+              var adjustedValue, limit, limitedValue, readjustedValue, value;
+              value = pipeline(map(getCor), foldl(function(a, b) {
+                return a + b;
+              })(0))(neighbors);
+              adjustedValue = (value / degree) - getCor(turtle);
+              limit = 100;
+              limitedValue = adjustedValue > limit ? limit : adjustedValue < -limit ? -limit : adjustedValue;
+              readjustedValue = limitedValue + getCor(turtle);
+              if (readjustedValue > max) {
+                return max;
+              } else if (readjustedValue < min) {
+                return min;
+              } else {
+                return readjustedValue;
+              }
+            };
+          };
+          allOfMyLinks = turtle.linkManager.myLinks("LINKS").toArray();
+          relevantLinks = pipeline(unique, filter(function(link) {
+            return linkSet.contains(link);
+          }))(allOfMyLinks);
+          neighbors = relevantLinks.map(function(arg) {
+            var end1, end2;
+            end1 = arg.end1, end2 = arg.end2;
+            if (end1 === turtle) {
+              return end2;
+            } else {
+              return end1;
+            }
+          });
+          degree = relevantLinks.length;
+          compute = computeCor(turtle, neighbors, degree);
+          x = compute((function(t) {
+            return t.xcor;
+          }), _this._world.topology.maxPxcor, _this._world.topology.minPxcor);
+          y = compute((function(t) {
+            return t.ycor;
+          }), _this._world.topology.maxPycor, _this._world.topology.minPycor);
+          return [turtle, x, y];
+        };
+      })(this));
+      turtleXYTriplets.forEach(function(arg) {
+        var turtle, x, y;
+        turtle = arg[0], x = arg[1], y = arg[2];
+        return turtle.setXY(x, y);
+      });
+    };
+
+    LayoutManager.prototype.layoutRadial = function(nodeSet, linkSet, root) {
+      var adjustPosition, allowedTurtleIDs, lastNode, layerGap, maxDepth, maxPxcor, maxPycor, minPxcor, minPycor, nodeTable, queue, ref2, rootNode, rootX, rootY, turtleIsAllowed, visitNeighbors, xDistToEdge, yDistToEdge;
+      ref2 = this._world.topology, maxPxcor = ref2.maxPxcor, maxPycor = ref2.maxPycor, minPxcor = ref2.minPxcor, minPycor = ref2.minPycor;
+      rootX = (maxPxcor + minPxcor) / 2;
+      rootY = (maxPycor + minPycor) / 2;
+      rootNode = new TreeNode(root, 0);
+      queue = [rootNode];
+      nodeTable = {};
+      nodeTable[rootNode.getTurtle().id] = rootNode;
+      turtleIsAllowed = linkSet.getSpecialName() == null ? (allowedTurtleIDs = pipeline(flatMap(function(arg) {
+        var end1, end2;
+        end1 = arg.end1, end2 = arg.end2;
+        return [end1, end2];
+      }), foldl(function(acc, arg) {
+        var id;
+        id = arg.id;
+        acc[id] = true;
+        return acc;
+      })({}))(linkSet.toArray()), function(arg) {
+        var id;
+        id = arg.id;
+        return allowedTurtleIDs[id] === true;
+      }) : function() {
+        return true;
+      };
+      visitNeighbors = function(queue, last) {
+        var node;
+        if (queue.length === 0) {
+          return last;
+        } else {
+          node = queue.shift();
+          node.getTurtle().linkManager.neighborsIn(linkSet).forEach(function(t) {
+            var child;
+            if (nodeSet.contains(t) && (nodeTable[t.id] == null) && turtleIsAllowed(t)) {
+              child = new TreeNode(t, node.getDepth() + 1);
+              node.addChild(child);
+              nodeTable[t.id] = child;
+              queue.push(child);
+            }
+          });
+          return visitNeighbors(queue, node);
+        }
+      };
+      lastNode = visitNeighbors(queue, rootNode);
+      rootNode.layoutRadial(0, 360);
+      maxDepth = NLMath.max(1, lastNode.getDepth() + .2);
+      xDistToEdge = NLMath.min(maxPxcor - rootX, rootX - minPxcor);
+      yDistToEdge = NLMath.min(maxPycor - rootY, rootY - minPycor);
+      layerGap = NLMath.min(xDistToEdge, yDistToEdge) / maxDepth;
+      adjustPosition = function(node) {
+        var turtle;
+        turtle = node.getTurtle();
+        turtle.setXY(rootX, rootY);
+        turtle.setVariable("heading", node.getAngle());
+        turtle.jumpIfAble(node.getDepth() * layerGap);
+      };
+      pipeline(values, forEach(adjustPosition))(nodeTable);
+    };
+
+    LayoutManager.prototype._initialize = function(nodeSet) {
+      var agt, ax, ay, tMap, turtles;
+      ax = [];
+      ay = [];
+      tMap = [];
+      agt = [];
+      turtles = nodeSet.shuffled().toArray();
+      forEach(function(i) {
+        var turtle;
+        turtle = turtles[i];
+        agt[i] = turtle;
+        tMap[turtle.id] = i;
+        ax[i] = 0.0;
+        ay[i] = 0.0;
+      })(rangeUntil(0)(turtles.length));
+      return [ax, ay, tMap, agt];
+    };
+
+    LayoutManager.prototype._calcDegreeCounts = function(links, idToIndexMap, nodeCount) {
+      var baseCounts;
+      baseCounts = map(function() {
+        return 0;
+      })(rangeUntil(0)(nodeCount));
+      links.forEach(function(arg) {
+        var f, t1, t2;
+        t1 = arg.end1, t2 = arg.end2;
+        f = function(turtle) {
+          var index;
+          index = idToIndexMap[turtle.id];
+          if (index != null) {
+            return baseCounts[index]++;
+          }
+        };
+        f(t1);
+        f(t2);
+      });
+      return baseCounts;
+    };
+
+    LayoutManager.prototype._updateXYArraysForNeighbors = function(ax, ay, links, idToIndexMap, degCounts, spr, len) {
+      var indexAndCountOf;
+      indexAndCountOf = function(turtle) {
+        var index;
+        index = idToIndexMap[turtle.id];
+        if (index != null) {
+          return [index, degCounts[index]];
+        } else {
+          return [-1, 0];
+        }
+      };
+      links.forEach(function(arg) {
+        var degCount1, degCount2, dist, div, dx, dy, f, newDX, newDY, ref2, ref3, ref4, t1, t1Index, t2, t2Index;
+        t1 = arg.end1, t2 = arg.end2;
+        ref2 = indexAndCountOf(t1), t1Index = ref2[0], degCount1 = ref2[1];
+        ref3 = indexAndCountOf(t2), t2Index = ref3[0], degCount2 = ref3[1];
+        dist = t1.distance(t2);
+        div = NLMath.max((degCount1 + degCount2) / 2.0, 1.0);
+        ref4 = dist === 0 ? [(spr * len) / div, 0] : (f = spr * (dist - len) / div, newDX = f * (t2.xcor - t1.xcor) / dist, newDY = f * (t2.ycor - t1.ycor) / dist, [newDX, newDY]), dx = ref4[0], dy = ref4[1];
+        if (t1Index !== -1) {
+          ax[t1Index] += dx;
+          ay[t1Index] += dy;
+        }
+        if (t2Index !== -1) {
+          ax[t2Index] -= dx;
+          ay[t2Index] -= dy;
+        }
+      });
+    };
+
+    LayoutManager.prototype._updateXYArraysForAll = function(ax, ay, agents, degCounts, nodeCount, rep) {
+      var ang, dist, div, dx, dy, f, i, j, k, l, newDX, newDY, ref2, ref3, ref4, ref5, t1, t2;
+      for (i = k = 0, ref2 = nodeCount; 0 <= ref2 ? k < ref2 : k > ref2; i = 0 <= ref2 ? ++k : --k) {
+        t1 = agents[i];
+        for (j = l = ref3 = i + 1, ref4 = nodeCount; ref3 <= ref4 ? l < ref4 : l > ref4; j = ref3 <= ref4 ? ++l : --l) {
+          t2 = agents[j];
+          div = NLMath.max((degCounts[i] + degCounts[j]) / 2.0, 1.0);
+          ref5 = t2.xcor === t1.xcor && t2.ycor === t1.ycor ? (ang = 360 * this._nextDouble(), newDX = -(rep / div * NLMath.squash(NLMath.sin(ang))), newDY = -(rep / div * NLMath.squash(NLMath.cos(ang))), [newDX, newDY]) : (dist = t1.distance(t2), f = rep / (dist * dist) / div, newDX = -(f * (t2.xcor - t1.xcor) / dist), newDY = -(f * (t2.ycor - t1.ycor) / dist), [newDX, newDY]), dx = ref5[0], dy = ref5[1];
+          ax[i] += dx;
+          ay[i] += dy;
+          ax[j] -= dx;
+          ay[j] -= dy;
+        }
+      }
+    };
+
+    LayoutManager.prototype._moveTurtles = function(ax, ay, agt, nodeCount) {
+      var bounded, calculateLimit, calculateXCor, calculateYCor, height, limit, maxX, maxY, minX, minY, perturbment, width;
+      maxX = this._world.topology.maxPxcor;
+      minX = this._world.topology.minPxcor;
+      maxY = this._world.topology.maxPycor;
+      minY = this._world.topology.minPycor;
+      height = this._world.topology.height;
+      width = this._world.topology.width;
+      if (nodeCount > 1) {
+        perturbment = (width + height) / 1.0e10;
+        ax[0] += this._nextDouble() * perturbment - perturbment / 2.0;
+        ay[0] += this._nextDouble() * perturbment - perturbment / 2.0;
+      }
+      limit = (width + height) / 50.0;
+      bounded = function(min, max) {
+        return function(x) {
+          if (x < min) {
+            return min;
+          } else if (x > max) {
+            return max;
+          } else {
+            return x;
+          }
+        };
+      };
+      calculateLimit = bounded(-limit, limit);
+      calculateXCor = bounded(minX, maxX);
+      calculateYCor = bounded(minY, maxY);
+      forEach(function(i) {
+        var newX, newY, turtle;
+        turtle = agt[i];
+        newX = calculateXCor(turtle.xcor + calculateLimit(ax[i]));
+        newY = calculateYCor(turtle.ycor + calculateLimit(ay[i]));
+        turtle.setXY(newX, newY);
+      })(rangeUntil(0)(nodeCount));
+    };
+
+    return LayoutManager;
+
+  })();
+
+}).call(this);
+
+},{"../core/typechecker":"engine/core/typechecker","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/maybe":"brazier/maybe","brazierjs/number":"brazier/number","brazierjs/object":"brazier/object","util/nlmath":"util/nlmath"}],"engine/prim/linkprims":[function(require,module,exports){
+(function() {
+  var LinkPrims;
+
+  module.exports = LinkPrims = (function() {
+    LinkPrims._linkManager = void 0;
+
+    LinkPrims._self = void 0;
+
+    function LinkPrims(arg) {
+      var linkManager, selfManager;
+      linkManager = arg.linkManager, selfManager = arg.selfManager;
+      this._linkManager = linkManager;
+      this._self = selfManager.self;
+    }
+
+    LinkPrims.prototype.createLinkFrom = function(otherTurtle, breedName) {
+      return this._linkManager.createDirectedLink(otherTurtle, this._self(), breedName);
+    };
+
+    LinkPrims.prototype.createLinksFrom = function(otherTurtles, breedName) {
+      return this._linkManager.createReverseDirectedLinks(this._self(), otherTurtles.shuffled(), breedName);
+    };
+
+    LinkPrims.prototype.createLinkTo = function(otherTurtle, breedName) {
+      return this._linkManager.createDirectedLink(this._self(), otherTurtle, breedName);
+    };
+
+    LinkPrims.prototype.createLinksTo = function(otherTurtles, breedName) {
+      return this._linkManager.createDirectedLinks(this._self(), otherTurtles.shuffled(), breedName);
+    };
+
+    LinkPrims.prototype.createLinkWith = function(otherTurtle, breedName) {
+      return this._linkManager.createUndirectedLink(this._self(), otherTurtle, breedName);
+    };
+
+    LinkPrims.prototype.createLinksWith = function(otherTurtles, breedName) {
+      return this._linkManager.createUndirectedLinks(this._self(), otherTurtles.shuffled(), breedName);
+    };
+
+    LinkPrims.prototype.isInLinkNeighbor = function(breedName, otherTurtle) {
+      return this._self().linkManager.isInLinkNeighbor(breedName, otherTurtle);
+    };
+
+    LinkPrims.prototype.isLinkNeighbor = function(breedName, otherTurtle) {
+      return this._self().linkManager.isLinkNeighbor(breedName, otherTurtle);
+    };
+
+    LinkPrims.prototype.isOutLinkNeighbor = function(breedName, otherTurtle) {
+      return this._self().linkManager.isOutLinkNeighbor(breedName, otherTurtle);
+    };
+
+    LinkPrims.prototype.inLinkFrom = function(breedName, otherTurtle) {
+      return this._self().linkManager.inLinkFrom(breedName, otherTurtle);
+    };
+
+    LinkPrims.prototype.linkWith = function(breedName, otherTurtle) {
+      return this._self().linkManager.linkWith(breedName, otherTurtle);
+    };
+
+    LinkPrims.prototype.outLinkTo = function(breedName, otherTurtle) {
+      return this._self().linkManager.outLinkTo(breedName, otherTurtle);
+    };
+
+    LinkPrims.prototype.inLinkNeighbors = function(breedName) {
+      return this._self().linkManager.inLinkNeighbors(breedName);
+    };
+
+    LinkPrims.prototype.linkNeighbors = function(breedName) {
+      return this._self().linkManager.linkNeighbors(breedName);
+    };
+
+    LinkPrims.prototype.outLinkNeighbors = function(breedName) {
+      return this._self().linkManager.outLinkNeighbors(breedName);
+    };
+
+    LinkPrims.prototype.myInLinks = function(breedName) {
+      return this._self().linkManager.myInLinks(breedName);
+    };
+
+    LinkPrims.prototype.myLinks = function(breedName) {
+      return this._self().linkManager.myLinks(breedName);
+    };
+
+    LinkPrims.prototype.myOutLinks = function(breedName) {
+      return this._self().linkManager.myOutLinks(breedName);
+    };
+
+    return LinkPrims;
+
+  })();
+
+}).call(this);
+
+},{}],"engine/prim/listprims":[function(require,module,exports){
+(function() {
+  var AbstractAgentSet, Comparator, Exception, Link, ListPrims, NLMath, NLType, Patch, StrictMath, Turtle, all, arrayLength, exists, filter, find, findIndex, fold, foldl, id, isEmpty, last, pipeline, ref, ref1, sortBy, stableSort, tail,
+    slice = [].slice;
+
+  AbstractAgentSet = require('../core/abstractagentset');
+
+  Link = require('../core/link');
+
+  Patch = require('../core/patch');
+
+  Turtle = require('../core/turtle');
+
+  NLType = require('../core/typechecker');
+
+  StrictMath = require('shim/strictmath');
+
+  Comparator = require('util/comparator');
+
+  Exception = require('util/exception');
+
+  NLMath = require('util/nlmath');
+
+  stableSort = require('util/stablesort');
+
+  ref = require('brazierjs/array'), all = ref.all, exists = ref.exists, filter = ref.filter, find = ref.find, findIndex = ref.findIndex, foldl = ref.foldl, isEmpty = ref.isEmpty, arrayLength = ref.length, last = ref.last, sortBy = ref.sortBy, tail = ref.tail;
+
+  ref1 = require('brazierjs/function'), id = ref1.id, pipeline = ref1.pipeline;
+
+  fold = require('brazierjs/maybe').fold;
+
+  module.exports = ListPrims = (function() {
+    function ListPrims(_dump, _hasher, _equality, _nextInt) {
+      this._dump = _dump;
+      this._hasher = _hasher;
+      this._equality = _equality;
+      this._nextInt = _nextInt;
+    }
+
+    ListPrims.prototype.butFirst = function(xs) {
+      return tail(xs);
+    };
+
+    ListPrims.prototype.butLast = function(xs) {
+      return xs.slice(0, xs.length - 1);
+    };
+
+    ListPrims.prototype.empty = function(xs) {
+      return isEmpty(xs);
+    };
+
+    ListPrims.prototype.first = function(xs) {
+      return xs[0];
+    };
+
+    ListPrims.prototype.fput = function(x, xs) {
+      return [x].concat(xs);
+    };
+
+    ListPrims.prototype.insertItem = function(n, xs, x) {
+      var chars, clone, typeName;
+      if (n < 0) {
+        throw new Error(n + " isn't greater than or equal to zero.");
+      } else if (n > xs.length) {
+        typeName = NLType(xs).isList() ? "list" : NLType(xs).isString() ? "string" : "unknown";
+        throw new Error("Can't find element " + n + " of the " + typeName + " " + (this._dump(xs)) + ", which is only of length " + xs.length + ".");
+      } else {
+        if (NLType(xs).isString()) {
+          if (NLType(x).isString()) {
+            chars = xs.split('');
+            chars.splice(n, 0, x);
+            return chars.join('');
+          } else {
+            throw new Error("INSERT-ITEM expected input to be a string but got the " + (typeof x) + " " + (this._dump(x)) + " instead.");
+          }
+        } else if (NLType(xs).isList()) {
+          clone = xs.slice(0);
+          clone.splice(n, 0, x);
+          return clone;
+        } else {
+          throw new Error("Unrecognized type of collection for `insert-item`: " + (this._dump(xs)));
+        }
+      }
+    };
+
+    ListPrims.prototype.item = function(n, xs) {
+      return xs[n];
+    };
+
+    ListPrims.prototype.last = function(xs) {
+      return last(xs);
+    };
+
+    ListPrims.prototype.length = function(xs) {
+      return arrayLength(xs);
+    };
+
+    ListPrims.prototype.list = function() {
+      var xs;
+      xs = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+      return xs;
+    };
+
+    ListPrims.prototype.lput = function(x, xs) {
+      var result;
+      result = xs.slice(0);
+      result.push(x);
+      return result;
+    };
+
+    ListPrims.prototype.max = function(xs) {
+      return Math.max.apply(Math, xs);
+    };
+
+    ListPrims.prototype.mean = function(xs) {
+      return this.sum(xs) / xs.length;
+    };
+
+    ListPrims.prototype.median = function(xs) {
+      var length, middleIndex, middleNum, nums, subMiddleNum;
+      nums = pipeline(filter(function(x) {
+        return NLType(x).isNumber();
+      }), sortBy(id))(xs);
+      length = nums.length;
+      if (length !== 0) {
+        middleIndex = StrictMath.floor(length / 2);
+        middleNum = nums[middleIndex];
+        if (length % 2 === 1) {
+          return middleNum;
+        } else {
+          subMiddleNum = nums[middleIndex - 1];
+          return NLMath.validateNumber((middleNum + subMiddleNum) / 2);
+        }
+      } else {
+        throw new Error("Can't find the median of a list with no numbers: " + (this._dump(xs)) + ".");
+      }
+    };
+
+    ListPrims.prototype.member = function(x, xs) {
+      var type;
+      type = NLType(xs);
+      if (type.isList()) {
+        return exists((function(_this) {
+          return function(y) {
+            return _this._equality(x, y);
+          };
+        })(this))(xs);
+      } else if (type.isString()) {
+        return xs.indexOf(x) !== -1;
+      } else {
+        return xs.exists(function(a) {
+          return x === a;
+        });
+      }
+    };
+
+    ListPrims.prototype.min = function(xs) {
+      return Math.min.apply(Math, xs);
+    };
+
+    ListPrims.prototype.modes = function(items) {
+      var calculateModes, genItemCountPairs, ref2, result;
+      genItemCountPairs = (function(_this) {
+        return function(xs) {
+          var incrementCount, k, len, pairMaybe, pairs, pushNewPair, x;
+          pairs = [];
+          for (k = 0, len = xs.length; k < len; k++) {
+            x = xs[k];
+            pushNewPair = function() {
+              return pairs.push([x, 1]);
+            };
+            incrementCount = function(pair) {
+              return pair[1] += 1;
+            };
+            pairMaybe = find(function(arg) {
+              var c, item;
+              item = arg[0], c = arg[1];
+              return _this._equality(item, x);
+            })(pairs);
+            fold(pushNewPair)(incrementCount)(pairMaybe);
+          }
+          return pairs;
+        };
+      })(this);
+      calculateModes = function(xsToCounts) {
+        var f;
+        f = function(arg, arg1) {
+          var bestCount, bests, count, item;
+          bests = arg[0], bestCount = arg[1];
+          item = arg1[0], count = arg1[1];
+          if (count > bestCount) {
+            return [[item], count];
+          } else if (count < bestCount) {
+            return [bests, bestCount];
+          } else {
+            return [bests.concat([item]), bestCount];
+          }
+        };
+        return foldl(f)([[], 0])(xsToCounts);
+      };
+      ref2 = calculateModes(genItemCountPairs(items)), result = ref2[0], ref2[1];
+      return result;
+    };
+
+    ListPrims.prototype.nOf = function(n, agentsOrList) {
+      var items, newItems, type;
+      type = NLType(agentsOrList);
+      if (type.isList()) {
+        return this._nOfArray(n, agentsOrList);
+      } else if (type.isAgentSet()) {
+        items = agentsOrList.iterator().toArray();
+        newItems = this._nOfArray(n, items);
+        return agentsOrList.copyWithNewAgents(newItems);
+      } else {
+        throw new Error("N-OF expected input to be a list or agentset but got " + (this._dump(agentsOrList)) + " instead.");
+      }
+    };
+
+    ListPrims.prototype.oneOf = function(agentsOrList) {
+      var arr, type;
+      type = NLType(agentsOrList);
+      arr = type.isAgentSet() ? agentsOrList.iterator().toArray() : agentsOrList;
+      if (arr.length === 0) {
+        return Nobody;
+      } else {
+        return arr[this._nextInt(arr.length)];
+      }
+    };
+
+    ListPrims.prototype.position = function(x, xs) {
+      var index, type;
+      type = NLType(xs);
+      index = type.isList() ? pipeline(findIndex((function(_this) {
+        return function(y) {
+          return _this._equality(x, y);
+        };
+      })(this)), fold(function() {
+        return -1;
+      })(id))(xs) : xs.indexOf(x);
+      if (index !== -1) {
+        return index;
+      } else {
+        return false;
+      }
+    };
+
+    ListPrims.prototype.remove = function(x, xs) {
+      var type;
+      type = NLType(xs);
+      if (type.isList()) {
+        return filter((function(_this) {
+          return function(y) {
+            return !_this._equality(x, y);
+          };
+        })(this))(xs);
+      } else {
+        return xs.replace(new RegExp(x, "g"), "");
+      }
+    };
+
+    ListPrims.prototype.removeDuplicates = function(xs) {
+      var f, out, ref2;
+      if (xs.length < 2) {
+        return xs;
+      } else {
+        f = (function(_this) {
+          return function(arg, x) {
+            var accArr, accSet, hash, values;
+            accArr = arg[0], accSet = arg[1];
+            hash = _this._hasher(x);
+            values = accSet[hash];
+            if (values != null) {
+              if (!exists(function(y) {
+                return _this._equality(x, y);
+              })(values)) {
+                accArr.push(x);
+                values.push(x);
+              }
+            } else {
+              accArr.push(x);
+              accSet[hash] = [x];
+            }
+            return [accArr, accSet];
+          };
+        })(this);
+        ref2 = xs.reduce(f, [[], {}]), out = ref2[0], ref2[1];
+        return out;
+      }
+    };
+
+    ListPrims.prototype.removeItem = function(n, xs) {
+      var post, pre, temp, type;
+      type = NLType(xs);
+      if (type.isList()) {
+        temp = xs.slice(0);
+        temp.splice(n, 1);
+        return temp;
+      } else {
+        pre = xs.slice(0, n);
+        post = xs.slice(n + 1);
+        return pre + post;
+      }
+    };
+
+    ListPrims.prototype.replaceItem = function(n, xs, x) {
+      var post, pre, temp, type;
+      type = NLType(xs);
+      if (type.isList()) {
+        temp = xs.slice(0);
+        temp.splice(n, 1, x);
+        return temp;
+      } else {
+        pre = xs.slice(0, n);
+        post = xs.slice(n + 1);
+        return pre + x + post;
+      }
+    };
+
+    ListPrims.prototype.reverse = function(xs) {
+      var type;
+      type = NLType(xs);
+      if (type.isList()) {
+        return xs.slice(0).reverse();
+      } else if (type.isString()) {
+        return xs.split("").reverse().join("");
+      } else {
+        throw new Error("can only reverse lists and strings");
+      }
+    };
+
+    ListPrims.prototype.sentence = function() {
+      var f, xs;
+      xs = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+      f = function(acc, x) {
+        if (NLType(x).isList()) {
+          return acc.concat(x);
+        } else {
+          acc.push(x);
+          return acc;
+        }
+      };
+      return foldl(f)([])(xs);
+    };
+
+    ListPrims.prototype.shuffle = function(xs) {
+      var i, out, swap;
+      swap = function(arr, i, j) {
+        var tmp;
+        tmp = arr[i];
+        arr[i] = arr[j];
+        return arr[j] = tmp;
+      };
+      out = xs.slice(0);
+      i = out.length;
+      while (i > 1) {
+        swap(out, i - 1, this._nextInt(i));
+        i--;
+      }
+      return out;
+    };
+
+    ListPrims.prototype.sort = function(xs) {
+      var Agent, None, Number, String, f, filteredItems, filteredType, ref2, type;
+      type = NLType(xs);
+      if (type.isList()) {
+        Number = {};
+        String = {};
+        Agent = {};
+        None = {};
+        f = function(acc, x) {
+          var arr, xType;
+          xType = NLType(x).isNumber() ? Number : NLType(x).isString() ? String : ((x instanceof Turtle) || (x instanceof Patch) || (x instanceof Link)) && (x.id !== -1) ? Agent : None;
+          type = acc[0], arr = acc[1];
+          switch (xType) {
+            case Number:
+              switch (type) {
+                case Number:
+                  return [Number, arr.concat([x])];
+                default:
+                  return [Number, [x]];
+              }
+              break;
+            case String:
+              switch (type) {
+                case String:
+                  return [String, arr.concat([x])];
+                case Agent:
+                case None:
+                  return [String, [x]];
+                default:
+                  return acc;
+              }
+              break;
+            case Agent:
+              switch (type) {
+                case Agent:
+                  return [Agent, arr.concat([x])];
+                case None:
+                  return [Agent, [x]];
+                default:
+                  return acc;
+              }
+              break;
+            default:
+              return acc;
+          }
+        };
+        ref2 = foldl(f)([None, []])(xs), filteredType = ref2[0], filteredItems = ref2[1];
+        switch (filteredType) {
+          case None:
+            return filteredItems;
+          case Number:
+            return filteredItems.sort(function(x, y) {
+              return Comparator.numericCompare(x, y).toInt;
+            });
+          case String:
+            return filteredItems.sort();
+          case Agent:
+            return stableSort(filteredItems)(function(x, y) {
+              return x.compare(y).toInt;
+            });
+          default:
+            throw new Error("We don't know how to sort your kind here!");
+        }
+      } else if (type.isAgentSet()) {
+        return xs.sort();
+      } else {
+        throw new Error("can only sort lists and agentsets");
+      }
+    };
+
+    ListPrims.prototype.sortBy = function(task, xs) {
+      var arr, f, taskIsTrue, type;
+      type = NLType(xs);
+      arr = (function() {
+        if (type.isList()) {
+          return xs;
+        } else if (type.isAgentSet()) {
+          return xs.shufflerator().toArray();
+        } else {
+          throw new Error("can only sort lists and agentsets");
+        }
+      })();
+      taskIsTrue = function(a, b) {
+        var value;
+        value = task(a, b);
+        if (value === true || value === false) {
+          return value;
+        } else {
+          throw new Error("SORT-BY expected input to be a TRUE/FALSE but got " + value + " instead.");
+        }
+      };
+      f = function(x, y) {
+        var xy, yx;
+        xy = taskIsTrue(x, y);
+        yx = taskIsTrue(y, x);
+        if (xy === yx) {
+          return 0;
+        } else if (xy) {
+          return -1;
+        } else {
+          return 1;
+        }
+      };
+      return stableSort(arr)(f);
+    };
+
+    ListPrims.prototype.standardDeviation = function(xs) {
+      var mean, nums, squareDiff, stdDev;
+      nums = xs.filter(function(x) {
+        return NLType(x).isNumber();
+      });
+      if (nums.length > 1) {
+        mean = this.sum(xs) / xs.length;
+        squareDiff = foldl(function(acc, x) {
+          return acc + StrictMath.pow(x - mean, 2);
+        })(0)(xs);
+        stdDev = StrictMath.sqrt(squareDiff / (nums.length - 1));
+        return NLMath.validateNumber(stdDev);
+      } else {
+        throw new Error("Can't find the standard deviation of a list without at least two numbers: " + (this._dump(xs)));
+      }
+    };
+
+    ListPrims.prototype.sublist = function(xs, n1, n2) {
+      return xs.slice(n1, n2);
+    };
+
+    ListPrims.prototype.substring = function(xs, n1, n2) {
+      return xs.substr(n1, n2 - n1);
+    };
+
+    ListPrims.prototype.sum = function(xs) {
+      return xs.reduce((function(a, b) {
+        return a + b;
+      }), 0);
+    };
+
+    ListPrims.prototype.variance = function(xs) {
+      var count, mean, numbers, squareOfDifference, sum;
+      numbers = filter(function(x) {
+        return NLType(x).isNumber();
+      })(xs);
+      count = numbers.length;
+      if (count < 2) {
+        throw new Error("Can't find the variance of a list without at least two numbers");
+      }
+      sum = numbers.reduce((function(acc, x) {
+        return acc + x;
+      }), 0);
+      mean = sum / count;
+      squareOfDifference = numbers.reduce((function(acc, x) {
+        return acc + StrictMath.pow(x - mean, 2);
+      }), 0);
+      return squareOfDifference / (count - 1);
+    };
+
+    ListPrims.prototype._nOfArray = function(n, items) {
+      var i, index1, index2, j, newIndex1, newIndex2, ref2, result;
+      switch (n) {
+        case 0:
+          return [];
+        case 1:
+          return [items[this._nextInt(items.length)]];
+        case 2:
+          index1 = this._nextInt(items.length);
+          index2 = this._nextInt(items.length - 1);
+          ref2 = index2 >= index1 ? [index1, index2 + 1] : [index2, index1], newIndex1 = ref2[0], newIndex2 = ref2[1];
+          return [items[newIndex1], items[newIndex2]];
+        default:
+          i = 0;
+          j = 0;
+          result = [];
+          while (j < n) {
+            if (this._nextInt(items.length - i) < n - j) {
+              result.push(items[i]);
+              j += 1;
+            }
+            i += 1;
+          }
+          return result;
+      }
+    };
+
+    return ListPrims;
+
+  })();
+
+}).call(this);
+
+},{"../core/abstractagentset":"engine/core/abstractagentset","../core/link":"engine/core/link","../core/patch":"engine/core/patch","../core/turtle":"engine/core/turtle","../core/typechecker":"engine/core/typechecker","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/maybe":"brazier/maybe","shim/strictmath":"shim/strictmath","util/comparator":"util/comparator","util/exception":"util/exception","util/nlmath":"util/nlmath","util/stablesort":"util/stablesort"}],"engine/prim/mouseprims":[function(require,module,exports){
+(function() {
+  var MouseConfig, MousePrims;
+
+  module.exports.Config = MouseConfig = (function() {
+    function MouseConfig(peekIsDown, peekIsInside, peekX, peekY) {
+      this.peekIsDown = peekIsDown != null ? peekIsDown : (function() {
+        return false;
+      });
+      this.peekIsInside = peekIsInside != null ? peekIsInside : (function() {
+        return false;
+      });
+      this.peekX = peekX != null ? peekX : (function() {
+        return 0;
+      });
+      this.peekY = peekY != null ? peekY : (function() {
+        return 0;
+      });
+    }
+
+    return MouseConfig;
+
+  })();
+
+  module.exports.Prims = MousePrims = (function() {
+    function MousePrims(arg) {
+      this.isDown = arg.peekIsDown, this.isInside = arg.peekIsInside, this.getX = arg.peekX, this.getY = arg.peekY;
+    }
+
+    return MousePrims;
+
+  })();
+
+}).call(this);
+
+},{}],"engine/prim/outputprims":[function(require,module,exports){
+(function() {
+  var OutputConfig, OutputPrims, genPrintBundle;
+
+  genPrintBundle = require('./printbundle');
+
+  module.exports.Config = OutputConfig = (function() {
+    function OutputConfig(clear1, write1) {
+      this.clear = clear1 != null ? clear1 : (function() {});
+      this.write = write1 != null ? write1 : (function() {});
+    }
+
+    return OutputConfig;
+
+  })();
+
+  module.exports.Prims = OutputPrims = (function() {
+    OutputPrims.prototype.clear = void 0;
+
+    OutputPrims.prototype.print = void 0;
+
+    OutputPrims.prototype.show = void 0;
+
+    OutputPrims.prototype.type = void 0;
+
+    OutputPrims.prototype.write = void 0;
+
+    function OutputPrims(arg, writeToStore, clearStored, dump) {
+      var clear, ref, write, writePlus;
+      clear = arg.clear, write = arg.write;
+      this.clear = (function() {
+        clearStored();
+        return clear();
+      });
+      writePlus = (function(x) {
+        writeToStore(x);
+        return write(x);
+      });
+      ref = genPrintBundle(writePlus, dump), this.print = ref.print, this.show = ref.show, this.type = ref.type, this.write = ref.write;
+    }
+
+    return OutputPrims;
+
+  })();
+
+}).call(this);
+
+},{"./printbundle":"engine/prim/printbundle"}],"engine/prim/prims":[function(require,module,exports){
+(function() {
+  var AbstractAgentSet, EQ, Exception, GT, Gamma, LT, Link, LinkSet, MersenneTwisterFast, NLMath, NLType, Patch, PatchSet, Prims, StrictMath, Timer, Turtle, TurtleSet, flatMap, flattenDeep, getNeighbors, getNeighbors4, greaterThan, isEmpty, lessThan, map, range, ref, ref1,
+    slice = [].slice;
+
+  AbstractAgentSet = require('../core/abstractagentset');
+
+  Link = require('../core/link');
+
+  LinkSet = require('../core/linkset');
+
+  Patch = require('../core/patch');
+
+  PatchSet = require('../core/patchset');
+
+  Turtle = require('../core/turtle');
+
+  TurtleSet = require('../core/turtleset');
+
+  NLType = require('../core/typechecker');
+
+  StrictMath = require('shim/strictmath');
+
+  Exception = require('util/exception');
+
+  NLMath = require('util/nlmath');
+
+  Timer = require('util/timer');
+
+  Gamma = require('./gamma');
+
+  ref = require('brazierjs/array'), flatMap = ref.flatMap, flattenDeep = ref.flattenDeep, isEmpty = ref.isEmpty, map = ref.map;
+
+  MersenneTwisterFast = require('shim/engine-scala').MersenneTwisterFast;
+
+  ref1 = require('util/comparator'), EQ = ref1.EQUALS, GT = ref1.GREATER_THAN, LT = ref1.LESS_THAN;
+
+  getNeighbors = function(patch) {
+    return patch.getNeighbors();
+  };
+
+  getNeighbors4 = function(patch) {
+    return patch.getNeighbors4();
+  };
+
+  lessThan = function(a, b) {
+    return a < b;
+  };
+
+  greaterThan = function(a, b) {
+    return a > b;
+  };
+
+  range = function(lowerBound, upperBound, stepSize) {
+    var j, ref2, ref3, ref4, results, x;
+    results = [];
+    for (x = j = ref2 = lowerBound, ref3 = upperBound, ref4 = stepSize; ref4 > 0 ? j < ref3 : j > ref3; x = j += ref4) {
+      results.push(x);
+    }
+    return results;
+  };
+
+  module.exports = Prims = (function() {
+    Prims.prototype._everyMap = void 0;
+
+    function Prims(_dumper, _hasher, _rng, _world, _evalPrims) {
+      this._dumper = _dumper;
+      this._hasher = _hasher;
+      this._rng = _rng;
+      this._world = _world;
+      this._evalPrims = _evalPrims;
+      this._everyMap = {};
+    }
+
+    Prims.prototype.boom = function() {
+      throw new Error("boom!");
+    };
+
+    Prims.prototype.breedOn = function(breedName, x) {
+      var patches, turtles, type;
+      type = NLType(x);
+      patches = (function() {
+        if (type.isPatch()) {
+          return [x];
+        } else if (type.isTurtle()) {
+          return [x.getPatchHere()];
+        } else if (type.isPatchSet()) {
+          return x.toArray();
+        } else if (type.isTurtleSet()) {
+          return map(function(t) {
+            return t.getPatchHere();
+          })(x.iterator().toArray());
+        } else {
+          throw new Error("`breed-on` unsupported for class '" + (typeof x) + "'");
+        }
+      })();
+      turtles = flatMap(function(p) {
+        return p.breedHereArray(breedName);
+      })(patches);
+      return new TurtleSet(turtles, this._world);
+    };
+
+    Prims.prototype.div = function(a, b) {
+      if (b !== 0) {
+        return a / b;
+      } else {
+        throw new Error("Division by zero.");
+      }
+    };
+
+    Prims.prototype.equality = function(a, b) {
+      var subsumes, typeA, typeB;
+      if ((a != null) && (b != null)) {
+        typeA = NLType(a);
+        typeB = NLType(b);
+        return (a === b) || typeA.isBreedSet(typeof b.getSpecialName === "function" ? b.getSpecialName() : void 0) || typeB.isBreedSet(typeof a.getSpecialName === "function" ? a.getSpecialName() : void 0) || (a === Nobody && (typeof b.isDead === "function" ? b.isDead() : void 0)) || (b === Nobody && (typeof a.isDead === "function" ? a.isDead() : void 0)) || ((typeA.isTurtle() || (typeA.isLink() && b !== Nobody)) && a.compare(b) === EQ) || (typeA.isList() && typeB.isList() && a.length === b.length && a.every((function(_this) {
+          return function(elem, i) {
+            return _this.equality(elem, b[i]);
+          };
+        })(this))) || (typeA.isAgentSet() && typeB.isAgentSet() && a.size() === b.size() && Object.getPrototypeOf(a) === Object.getPrototypeOf(b) && (subsumes = (function(_this) {
+          return function(xs, ys) {
+            var index, j, len, x;
+            for (index = j = 0, len = xs.length; j < len; index = ++j) {
+              x = xs[index];
+              if (!_this.equality(ys[index], x)) {
+                return false;
+              }
+            }
+            return true;
+          };
+        })(this), subsumes(a.sort(), b.sort())));
+      } else {
+        throw new Error("Checking equality on undefined is an invalid condition");
+      }
+    };
+
+    Prims.prototype.dateAndTime = function() {
+      var amOrPM, calendarComponent, clockTime, d, date, hours, hoursNum, millis, minutes, modHours, month, numberToMonth, seconds, withThreeDigits, withTwoDigits, year;
+      withTwoDigits = function(x) {
+        return (x < 10 ? "0" : "") + x;
+      };
+      withThreeDigits = function(x) {
+        return (x < 10 ? "00" : x < 100 ? "0" : "") + x;
+      };
+      numberToMonth = {
+        1: "Jan",
+        2: "Feb",
+        3: "Mar",
+        4: "Apr",
+        5: "May",
+        6: "Jun",
+        7: "Jul",
+        8: "Aug",
+        9: "Sep",
+        10: "Oct",
+        11: "Nov",
+        12: "Dec"
+      };
+      d = new Date;
+      hoursNum = d.getHours();
+      modHours = hoursNum === 0 || hoursNum === 12 ? 12 : hoursNum % 12;
+      hours = withTwoDigits(modHours);
+      minutes = withTwoDigits(d.getMinutes());
+      seconds = withTwoDigits(d.getSeconds());
+      clockTime = hours + ":" + minutes + ":" + seconds;
+      millis = withThreeDigits(d.getMilliseconds());
+      amOrPM = hoursNum >= 12 ? "PM" : "AM";
+      date = withTwoDigits(d.getDate());
+      month = numberToMonth[d.getMonth() + 1];
+      year = d.getFullYear();
+      calendarComponent = date + "-" + month + "-" + year;
+      return clockTime + "." + millis + " " + amOrPM + " " + calendarComponent;
+    };
+
+    Prims.prototype.isThrottleTimeElapsed = function(commandID, agent, timeLimit) {
+      var entry;
+      entry = this._everyMap[this._genEveryKey(commandID, agent)];
+      return (entry == null) || entry.elapsed() >= timeLimit;
+    };
+
+    Prims.prototype.resetThrottleTimerFor = function(commandID, agent) {
+      return this._everyMap[this._genEveryKey(commandID, agent)] = new Timer();
+    };
+
+    Prims.prototype.generateNewSeed = (function() {
+      var helper, lastSeed;
+      lastSeed = 0;
+      helper = function() {
+        var seed;
+        seed = (new MersenneTwisterFast).nextInt();
+        if (seed !== lastSeed) {
+          lastSeed = seed;
+          return seed;
+        } else {
+          return helper();
+        }
+      };
+      return helper;
+    })();
+
+    Prims.prototype.gt = function(a, b) {
+      var typeA, typeB;
+      typeA = NLType(a);
+      typeB = NLType(b);
+      if ((typeA.isString() && typeB.isString()) || (typeA.isNumber() && typeB.isNumber())) {
+        return a > b;
+      } else if (typeof a === typeof b && (a.compare != null) && (b.compare != null)) {
+        return a.compare(b) === GT;
+      } else {
+        throw new Error("Invalid operands to `gt`");
+      }
+    };
+
+    Prims.prototype.gte = function(a, b) {
+      return this.gt(a, b) || this.equality(a, b);
+    };
+
+    Prims.prototype.linkSet = function() {
+      var inputs;
+      inputs = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+      return this._createAgentSet(inputs, Link, LinkSet);
+    };
+
+    Prims.prototype.lt = function(a, b) {
+      var typeA, typeB;
+      typeA = NLType(a);
+      typeB = NLType(b);
+      if ((typeA.isString() && typeB.isString()) || (typeA.isNumber() && typeB.isNumber())) {
+        return a < b;
+      } else if (typeof a === typeof b && (a.compare != null) && (b.compare != null)) {
+        return a.compare(b) === LT;
+      } else {
+        throw new Error("Invalid operands to `lt`");
+      }
+    };
+
+    Prims.prototype.lte = function(a, b) {
+      return this.lt(a, b) || this.equality(a, b);
+    };
+
+    Prims.prototype.nanoTime = function() {
+      var nanos, ref2;
+      nanos = ((ref2 = typeof performance !== "undefined" && performance !== null ? typeof performance.now === "function" ? performance.now() : void 0 : void 0) != null ? ref2 : Date.now()) * 1e6;
+      return StrictMath.floor(nanos);
+    };
+
+    Prims.prototype.patchSet = function() {
+      var inputs;
+      inputs = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+      return this._createAgentSet(inputs, Patch, PatchSet);
+    };
+
+    Prims.prototype.random = function(n) {
+      var truncated;
+      truncated = n >= 0 ? StrictMath.ceil(n) : StrictMath.floor(n);
+      if (truncated === 0) {
+        return 0;
+      } else if (truncated > 0) {
+        return this._rng.nextLong(truncated);
+      } else {
+        return -this._rng.nextLong(-truncated);
+      }
+    };
+
+    Prims.prototype.randomCoord = function(min, max) {
+      return min - 0.5 + this._rng.nextDouble() * (max - min + 1);
+    };
+
+    Prims.prototype.randomFloat = function(n) {
+      return n * this._rng.nextDouble();
+    };
+
+    Prims.prototype.randomNormal = function(mean, stdDev) {
+      if (stdDev >= 0) {
+        return NLMath.validateNumber(mean + stdDev * this._rng.nextGaussian());
+      } else {
+        throw new Error("random-normal's second input can't be negative.");
+      }
+    };
+
+    Prims.prototype.randomExponential = function(mean) {
+      return NLMath.validateNumber(-mean * StrictMath.log(this._rng.nextDouble()));
+    };
+
+    Prims.prototype.randomPatchCoord = function(min, max) {
+      return min + this._rng.nextInt(max - min + 1);
+    };
+
+    Prims.prototype.randomPoisson = function(mean) {
+      var q, sum;
+      q = 0;
+      sum = -StrictMath.log(1 - this._rng.nextDouble());
+      while (sum <= mean) {
+        q += 1;
+        sum -= StrictMath.log(1 - this._rng.nextDouble());
+      }
+      return q;
+    };
+
+    Prims.prototype.randomGamma = function(alpha, lambda) {
+      if (alpha <= 0 || lambda <= 0) {
+        throw new Error("Both Inputs to RANDOM-GAMMA must be positive.");
+      }
+      return Gamma(this._rng, alpha, lambda);
+    };
+
+    Prims.prototype.rangeUnary = function(upperBound) {
+      return range(0, upperBound, 1);
+    };
+
+    Prims.prototype.rangeBinary = function(lowerBound, upperBound) {
+      return range(lowerBound, upperBound, 1);
+    };
+
+    Prims.prototype.rangeTernary = function(lowerBound, upperBound, stepSize) {
+      if (stepSize !== 0) {
+        return range(lowerBound, upperBound, stepSize);
+      } else {
+        throw new Error("The step-size for range must be non-zero.");
+      }
+    };
+
+    Prims.prototype.readFromString = function(str) {
+      return this._evalPrims.readFromString(str);
+    };
+
+    Prims.prototype.runCode = function() {
+      var args, f, isRunResult, procVars;
+      isRunResult = arguments[0], procVars = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : [];
+      f = args[0];
+      if (NLType(f).isString()) {
+        if (args.length === 1) {
+          return this._evalPrims.runCode(f, isRunResult, procVars);
+        } else {
+          throw new Error((isRunResult ? "runresult" : "run") + " doesn't accept further inputs if the first is a string");
+        }
+      } else {
+        return f.apply(null, args.slice(1));
+      }
+    };
+
+    Prims.prototype.stdout = function(x) {
+      var dumpedX;
+      dumpedX = this._dumper(x);
+      if (typeof console !== "undefined" && console !== null) {
+        console.log(dumpedX);
+      } else if (typeof print !== "undefined" && print !== null) {
+        print(dumpedX);
+      } else {
+        throw new Error("We don't know how to output text on this platform.  But, if it helps you any, here's the thing you wanted to see: " + dumpedX);
+      }
+    };
+
+    Prims.prototype.turtleSet = function() {
+      var inputs;
+      inputs = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+      return this._createAgentSet(inputs, Turtle, TurtleSet);
+    };
+
+    Prims.prototype.turtlesOn = function(agentsOrAgent) {
+      var turtles, type;
+      type = NLType(agentsOrAgent);
+      if (type.isAgentSet()) {
+        turtles = flatMap(function(agent) {
+          return agent.turtlesHere().toArray();
+        })(agentsOrAgent.iterator().toArray());
+        return new TurtleSet(turtles, this._world);
+      } else {
+        return agentsOrAgent.turtlesHere();
+      }
+    };
+
+    Prims.prototype.wait = function(seconds) {
+      var startTime;
+      startTime = this.nanoTime();
+      while (((this.nanoTime() - startTime) / 1e9) < seconds) {}
+    };
+
+    Prims.prototype.uphill = function(varName) {
+      this._moveUpOrDownhill(-Infinity, greaterThan, getNeighbors, varName);
+    };
+
+    Prims.prototype.uphill4 = function(varName) {
+      this._moveUpOrDownhill(-Infinity, greaterThan, getNeighbors4, varName);
+    };
+
+    Prims.prototype.downhill = function(varName) {
+      this._moveUpOrDownhill(Infinity, lessThan, getNeighbors, varName);
+    };
+
+    Prims.prototype.downhill4 = function(varName) {
+      this._moveUpOrDownhill(Infinity, lessThan, getNeighbors4, varName);
+    };
+
+    Prims.prototype._moveUpOrDownhill = function(worstPossible, findIsBetter, getNeighbors, varName) {
+      var patch, turtle, winner, winners, winningValue;
+      turtle = SelfManager.self();
+      patch = turtle.getPatchHere();
+      winningValue = worstPossible;
+      winners = [];
+      getNeighbors(patch).forEach(function(neighbor) {
+        var value;
+        value = neighbor.getPatchVariable(varName);
+        if (NLType(value).isNumber()) {
+          if (findIsBetter(value, winningValue)) {
+            winningValue = value;
+            return winners = [neighbor];
+          } else if (winningValue === value) {
+            return winners.push(neighbor);
+          }
+        }
+      });
+      if (winners.length !== 0 && findIsBetter(winningValue, patch.getPatchVariable(varName))) {
+        winner = winners[this._rng.nextInt(winners.length)];
+        turtle.face(winner);
+        turtle.moveTo(winner);
+      }
+    };
+
+    Prims.prototype._genEveryKey = function(commandID, agent) {
+      var agentID;
+      agentID = agent === 0 ? "observer" : this._dumper(agent);
+      return commandID + "__" + agentID;
+    };
+
+    Prims.prototype._createAgentSet = function(inputs, tClass, outClass) {
+      var addT, buildFromAgentSet, buildItems, flattened, hashIt, hashSet, head, makeOutie, result;
+      flattened = flattenDeep(inputs);
+      makeOutie = (function(_this) {
+        return function(agents) {
+          return new outClass(agents, _this._world);
+        };
+      })(this);
+      if (isEmpty(flattened)) {
+        return makeOutie([]);
+      } else if (flattened.length === 1) {
+        head = flattened[0];
+        if (head instanceof outClass) {
+          return head;
+        } else if (head instanceof tClass) {
+          return makeOutie([head]);
+        } else {
+          return makeOutie([]);
+        }
+      } else {
+        result = [];
+        hashSet = {};
+        hashIt = this._hasher;
+        addT = function(p) {
+          var hash;
+          hash = hashIt(p);
+          if (!hashSet.hasOwnProperty(hash)) {
+            result.push(p);
+            hashSet[hash] = true;
+          }
+        };
+        buildFromAgentSet = function(agentSet) {
+          return agentSet.forEach(addT);
+        };
+        buildItems = (function(_this) {
+          return function(inputs) {
+            var input, j, len, results;
+            results = [];
+            for (j = 0, len = inputs.length; j < len; j++) {
+              input = inputs[j];
+              if (NLType(input).isList()) {
+                results.push(buildItems(input));
+              } else if (input instanceof tClass) {
+                results.push(addT(input));
+              } else if (input !== Nobody) {
+                results.push(buildFromAgentSet(input));
+              } else {
+                results.push(void 0);
+              }
+            }
+            return results;
+          };
+        })(this);
+        buildItems(flattened);
+        return makeOutie(result);
+      }
+    };
+
+    return Prims;
+
+  })();
+
+}).call(this);
+
+},{"../core/abstractagentset":"engine/core/abstractagentset","../core/link":"engine/core/link","../core/linkset":"engine/core/linkset","../core/patch":"engine/core/patch","../core/patchset":"engine/core/patchset","../core/turtle":"engine/core/turtle","../core/turtleset":"engine/core/turtleset","../core/typechecker":"engine/core/typechecker","./gamma":"engine/prim/gamma","brazierjs/array":"brazier/array","shim/engine-scala":"shim/engine-scala","shim/strictmath":"shim/strictmath","util/comparator":"util/comparator","util/exception":"util/exception","util/nlmath":"util/nlmath","util/timer":"util/timer"}],"engine/prim/printbundle":[function(require,module,exports){
+(function() {
+  var PrintBundle, pipeline,
+    slice = [].slice;
+
+  pipeline = require('brazierjs/function').pipeline;
+
+  PrintBundle = (function() {
+    function PrintBundle(print1, type1, write1, show1) {
+      this.print = print1;
+      this.type = type1;
+      this.write = write1;
+      this.show = show1;
+    }
+
+    return PrintBundle;
+
+  })();
+
+  module.exports = function(printFunc, dump) {
+    var dumpWrapped, newLine, preSpace, prependAgent, print, show, type, write, writeAfter;
+    preSpace = function(s) {
+      return " " + s;
+    };
+    newLine = function(s) {
+      return s + "\n";
+    };
+    dumpWrapped = function(s) {
+      return dump(s, true);
+    };
+    prependAgent = function(thunk) {
+      return function(s) {
+        var agentOrZero, agentStr;
+        agentOrZero = thunk();
+        agentStr = agentOrZero === 0 ? "observer" : dump(agentOrZero);
+        return agentStr + ": " + s;
+      };
+    };
+    writeAfter = function() {
+      var fs;
+      fs = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+      return pipeline.apply(null, slice.call(fs).concat([printFunc]));
+    };
+    print = writeAfter(dump, newLine);
+    type = writeAfter(dump);
+    write = writeAfter(dumpWrapped, preSpace);
+    show = function(agentThunk) {
+      return writeAfter(dumpWrapped, prependAgent(agentThunk), newLine);
+    };
+    return new PrintBundle(print, type, write, show);
+  };
+
+}).call(this);
+
+},{"brazierjs/function":"brazier/function"}],"engine/prim/printprims":[function(require,module,exports){
+(function() {
+  var PrintConfig, PrintPrims, genPrintBundle;
+
+  genPrintBundle = require('./printbundle');
+
+  module.exports.Config = PrintConfig = (function() {
+    function PrintConfig(write1) {
+      this.write = write1 != null ? write1 : (function() {});
+    }
+
+    return PrintConfig;
+
+  })();
+
+  module.exports.Prims = PrintPrims = (function() {
+    PrintPrims.prototype.print = void 0;
+
+    PrintPrims.prototype.show = void 0;
+
+    PrintPrims.prototype.type = void 0;
+
+    PrintPrims.prototype.write = void 0;
+
+    function PrintPrims(arg, dump) {
+      var ref, write;
+      write = arg.write;
+      ref = genPrintBundle(write, dump), this.print = ref.print, this.show = ref.show, this.type = ref.type, this.write = ref.write;
+    }
+
+    return PrintPrims;
+
+  })();
+
+}).call(this);
+
+},{"./printbundle":"engine/prim/printbundle"}],"engine/prim/selfprims":[function(require,module,exports){
+(function() {
+  var SelfPrims, TypeSet, linkType, mempty, observerType, patchType, turtleType;
+
+  TypeSet = (function() {
+    function TypeSet(link1, observer1, patch1, turtle1) {
+      this.link = link1;
+      this.observer = observer1;
+      this.patch = patch1;
+      this.turtle = turtle1;
+    }
+
+    TypeSet.prototype.mergeWith = function(arg) {
+      var link, observer, patch, turtle;
+      link = arg.link, observer = arg.observer, patch = arg.patch, turtle = arg.turtle;
+      return new TypeSet(this.link || link, this.observer || observer, this.patch || patch, this.turtle || turtle);
+    };
+
+    TypeSet.prototype.mappend = function(ts) {
+      return this.mergeWith(ts);
+    };
+
+    return TypeSet;
+
+  })();
+
+  mempty = new TypeSet(false, false, false, false);
+
+  linkType = new TypeSet(true, false, false, false);
+
+  observerType = new TypeSet(false, true, false, false);
+
+  patchType = new TypeSet(false, false, true, false);
+
+  turtleType = new TypeSet(false, false, false, true);
+
+  module.exports = SelfPrims = (function() {
+    function SelfPrims(_getSelf) {
+      this._getSelf = _getSelf;
+    }
+
+    SelfPrims.prototype.other = function(agentSet) {
+      var self;
+      self = this._getSelf();
+      return agentSet.filter((function(_this) {
+        return function(agent) {
+          return agent !== self;
+        };
+      })(this));
+    };
+
+    SelfPrims.prototype._optimalAnyOther = function(agentSet) {
+      var self;
+      self = this._getSelf();
+      return agentSet.exists(function(agent) {
+        return agent !== self;
+      });
+    };
+
+    SelfPrims.prototype._optimalCountOther = function(agentSet) {
+      var self;
+      self = this._getSelf();
+      return (agentSet.filter(function(agent) {
+        return agent !== self;
+      })).size();
+    };
+
+    SelfPrims.prototype.linkHeading = function() {
+      return this._getSelfSafe(linkType).getHeading();
+    };
+
+    SelfPrims.prototype.linkLength = function() {
+      return this._getSelfSafe(linkType).getSize();
+    };
+
+    SelfPrims.prototype._getSelfSafe = function(typeSet) {
+      var agentStr, allowsL, allowsP, allowsT, part1, part2, self, type, typeStr;
+      allowsL = typeSet.link, allowsP = typeSet.patch, allowsT = typeSet.turtle;
+      self = this._getSelf();
+      type = NLType(self);
+      if ((type.isTurtle() && allowsT) || (type.isPatch() && allowsP) || (type.isLink() && allowsL)) {
+        return self;
+      } else {
+        typeStr = this._nlTypeToString(type);
+        part1 = "this code can't be run by " + typeStr;
+        agentStr = this._typeSetToAgentString(typeSet);
+        part2 = agentStr.length !== 0 ? ", only " + agentStr : "";
+        throw new Error(part1 + part2);
+      }
+    };
+
+    SelfPrims.prototype._nlTypeToString = function(nlType) {
+      if (nlType.isTurtle()) {
+        return "a turtle";
+      } else if (nlType.isPatch()) {
+        return "a patch";
+      } else if (nlType.isLink()) {
+        return "a link";
+      } else {
+        return "";
+      }
+    };
+
+    SelfPrims.prototype._typeSetToAgentString = function(typeSet) {
+      if (typeSet.turtle) {
+        return "a turtle";
+      } else if (typeSet.patch) {
+        return "a patch";
+      } else if (typeSet.link) {
+        return "a link";
+      } else {
+        return "";
+      }
+    };
+
+    return SelfPrims;
+
+  })();
+
+}).call(this);
+
+},{}],"engine/prim/tasks":[function(require,module,exports){
+(function() {
+  var Exception, all, length, map, pipeline, rangeUntil, ref,
+    slice = [].slice;
+
+  ref = require('brazierjs/array'), all = ref.all, length = ref.length, map = ref.map;
+
+  pipeline = require('brazierjs/function').pipeline;
+
+  rangeUntil = require('brazierjs/number').rangeUntil;
+
+  Exception = require('util/exception');
+
+  module.exports = {
+    commandTask: function(fn, body) {
+      fn.isReporter = false;
+      fn.nlogoBody = body;
+      return fn;
+    },
+    reporterTask: function(fn, body) {
+      fn.isReporter = true;
+      fn.nlogoBody = body;
+      return fn;
+    },
+    apply: function(fn, args) {
+      var pluralStr;
+      if (args.length >= fn.length) {
+        return fn.apply(fn, args);
+      } else {
+        pluralStr = fn.length === 1 ? "" : "s";
+        throw new Error("anonymous procedure expected " + fn.length + " input" + pluralStr + ", but only got " + args.length);
+      }
+    },
+    map: function() {
+      var fn, lists;
+      fn = arguments[0], lists = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      return this._processLists(fn, lists, "map");
+    },
+    nValues: function(n, fn) {
+      return map(fn)(rangeUntil(0)(n));
+    },
+    forEach: function() {
+      var fn, lists;
+      fn = arguments[0], lists = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      return this._processLists(fn, lists, "foreach");
+    },
+    _processLists: function(fn, lists, primName) {
+      var head, i, j, newArr, numLists, ref1, res, results, x;
+      numLists = lists.length;
+      head = lists[0];
+      if (numLists === 1) {
+        if (fn.isReporter) {
+          return map(fn)(head);
+        } else {
+          newArr = (function() {
+            var j, len, results;
+            results = [];
+            for (j = 0, len = head.length; j < len; j++) {
+              x = head[j];
+              res = fn(x);
+              if ((res != null)) {
+                break;
+              } else {
+                results.push(void 0);
+              }
+            }
+            return results;
+          })();
+          if (res != null) {
+            return res;
+          }
+        }
+      } else if (all(function(l) {
+        return l.length === head.length;
+      })(lists)) {
+        results = [];
+        for (i = j = 0, ref1 = head.length; 0 <= ref1 ? j < ref1 : j > ref1; i = 0 <= ref1 ? ++j : --j) {
+          results.push(fn.apply(null, map(function(list) {
+            return list[i];
+          })(lists)));
+        }
+        return results;
+      } else {
+        throw new Error("All the list arguments to " + (primName.toUpperCase()) + " must be the same length.");
+      }
+    }
+  };
+
+}).call(this);
+
+},{"brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/number":"brazier/number","util/exception":"util/exception"}],"engine/prim/userdialogprims":[function(require,module,exports){
+(function() {
+  var HaltInterrupt, UserDialogConfig, UserDialogPrims;
+
+  HaltInterrupt = require('util/exception').HaltInterrupt;
+
+  module.exports.Config = UserDialogConfig = (function() {
+    function UserDialogConfig(notify, confirm, yesOrNo, input) {
+      this.notify = notify != null ? notify : (function() {});
+      this.confirm = confirm != null ? confirm : (function() {
+        return true;
+      });
+      this.yesOrNo = yesOrNo != null ? yesOrNo : (function() {
+        return true;
+      });
+      this.input = input != null ? input : (function() {
+        return "dummy implementation";
+      });
+    }
+
+    return UserDialogConfig;
+
+  })();
+
+  module.exports.Prims = UserDialogPrims = (function() {
+    function UserDialogPrims(arg) {
+      this._confirm = arg.confirm, this._input = arg.input, this._yesOrNo = arg.yesOrNo;
+    }
+
+    UserDialogPrims.prototype.confirm = function(msg) {
+      if (!this._confirm(msg)) {
+        throw new HaltInterrupt;
+      }
+    };
+
+    UserDialogPrims.prototype.input = function(msg) {
+      var ref;
+      return (function() {
+        if ((ref = this._input(msg)) != null) {
+          return ref;
+        } else {
+          throw new HaltInterrupt;
+        }
+      }).call(this);
+    };
+
+    UserDialogPrims.prototype.yesOrNo = function(msg) {
+      var ref;
+      return (function() {
+        if ((ref = this._yesOrNo(msg)) != null) {
+          return ref;
+        } else {
+          throw new HaltInterrupt;
+        }
+      }).call(this);
+    };
+
+    return UserDialogPrims;
+
+  })();
+
+}).call(this);
+
+},{"util/exception":"util/exception"}],"engine/updater":[function(require,module,exports){
+(function() {
+  var Link, Observer, Patch, Turtle, Update, Updater, World, ignored, perspectiveToNum, ref, ref1,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
+    slice = [].slice;
+
+  Link = require('./core/link');
+
+  Patch = require('./core/patch');
+
+  Turtle = require('./core/turtle');
+
+  World = require('./core/world');
+
+  ref = require('./core/observer'), (ref1 = ref.Perspective, perspectiveToNum = ref1.perspectiveToNum), Observer = ref.Observer;
+
+  ignored = [
+    "", function() {
+      return "";
+    }
+  ];
+
+  Update = (function() {
+    function Update(turtles, patches, links, observer1, world1, drawingEvents) {
+      this.turtles = turtles != null ? turtles : {};
+      this.patches = patches != null ? patches : {};
+      this.links = links != null ? links : {};
+      this.observer = observer1 != null ? observer1 : {};
+      this.world = world1 != null ? world1 : {};
+      this.drawingEvents = drawingEvents != null ? drawingEvents : [];
+    }
+
+    return Update;
+
+  })();
+
+  module.exports = Updater = (function() {
+    Updater.prototype._hasUpdates = void 0;
+
+    Updater.prototype._updates = void 0;
+
+    function Updater(_dump) {
+      this._dump = _dump;
+      this.updated = bind(this.updated, this);
+      this.registerLinkStamp = bind(this.registerLinkStamp, this);
+      this.registerTurtleStamp = bind(this.registerTurtleStamp, this);
+      this.registerPenTrail = bind(this.registerPenTrail, this);
+      this.registerDeadTurtle = bind(this.registerDeadTurtle, this);
+      this.registerDeadLink = bind(this.registerDeadLink, this);
+      this._flushUpdates();
+    }
+
+    Updater.prototype.clearDrawing = function() {
+      this._reportDrawingEvent({
+        type: "clear-drawing"
+      });
+    };
+
+    Updater.prototype.importDrawing = function(sourcePath) {
+      this._reportDrawingEvent({
+        type: "import-drawing",
+        sourcePath: sourcePath
+      });
+    };
+
+    Updater.prototype.collectUpdates = function() {
+      var temp;
+      temp = this._updates;
+      this._flushUpdates();
+      return temp;
+    };
+
+    Updater.prototype.hasUpdates = function() {
+      return this._hasUpdates;
+    };
+
+    Updater.prototype.registerDeadLink = function(id) {
+      this._update("links", id, {
+        WHO: -1
+      });
+    };
+
+    Updater.prototype.registerDeadTurtle = function(id) {
+      this._update("turtles", id, {
+        WHO: -1
+      });
+    };
+
+    Updater.prototype.registerPenTrail = function(fromX, fromY, toX, toY, rgb, size, penMode) {
+      this._reportDrawingEvent({
+        type: "line",
+        fromX: fromX,
+        fromY: fromY,
+        toX: toX,
+        toY: toY,
+        rgb: rgb,
+        size: size,
+        penMode: penMode
+      });
+    };
+
+    Updater.prototype.registerTurtleStamp = function(x, y, size, heading, color, shapeName, stampMode) {
+      this._reportDrawingEvent({
+        type: "stamp-image",
+        agentType: "turtle",
+        stamp: {
+          x: x,
+          y: y,
+          size: size,
+          heading: heading,
+          color: color,
+          shapeName: shapeName,
+          stampMode: stampMode
+        }
+      });
+    };
+
+    Updater.prototype.registerLinkStamp = function(x1, y1, x2, y2, midpointX, midpointY, heading, color, shapeName, thickness, isDirected, size, isHidden, stampMode) {
+      this._reportDrawingEvent({
+        type: "stamp-image",
+        agentType: "link",
+        stamp: {
+          x1: x1,
+          y1: y1,
+          x2: x2,
+          y2: y2,
+          midpointX: midpointX,
+          midpointY: midpointY,
+          heading: heading,
+          color: color,
+          shapeName: shapeName,
+          thickness: thickness,
+          'directed?': isDirected,
+          size: size,
+          'hidden?': isHidden,
+          stampMode: stampMode
+        }
+      });
+    };
+
+    Updater.prototype.registerWorldState = function(state, id) {
+      if (id == null) {
+        id = 0;
+      }
+      this._update("world", id, state);
+    };
+
+    Updater.prototype.updated = function(obj) {
+      return (function(_this) {
+        return function() {
+          var entry, entryUpdate, getter, i, len, mapping, objMap, ref2, ref3, update, v, varName, vars;
+          vars = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+          _this._hasUpdates = true;
+          update = _this._updates[0];
+          ref2 = (function() {
+            if (obj instanceof Turtle) {
+              return [update.turtles, this._turtleMap()];
+            } else if (obj instanceof Patch) {
+              return [update.patches, this._patchMap()];
+            } else if (obj instanceof Link) {
+              return [update.links, this._linkMap()];
+            } else if (obj instanceof World) {
+              return [update.world, this._worldMap()];
+            } else if (obj instanceof Observer) {
+              return [update.observer, this._observerMap()];
+            } else {
+              throw new Error("Unrecognized update type");
+            }
+          }).call(_this), entry = ref2[0], objMap = ref2[1];
+          entryUpdate = (ref3 = entry[obj.id]) != null ? ref3 : {};
+          if (entryUpdate['WHO'] < 0) {
+            delete entryUpdate['WHO'];
+          }
+          for (i = 0, len = vars.length; i < len; i++) {
+            v = vars[i];
+            mapping = objMap[v];
+            if (mapping != null) {
+              if (mapping !== ignored) {
+                varName = mapping[0], getter = mapping[1];
+                entryUpdate[varName] = getter(obj);
+                entry[obj.id] = entryUpdate;
+              }
+            } else {
+              throw new Error("Unknown " + obj.constructor.name + " variable for update: " + v);
+            }
+          }
+        };
+      })(this);
+    };
+
+    Updater.prototype._turtleMap = function() {
+      return {
+        breed: [
+          "BREED", function(turtle) {
+            return turtle.getBreedName();
+          }
+        ],
+        color: [
+          "COLOR", function(turtle) {
+            return turtle._color;
+          }
+        ],
+        heading: [
+          "HEADING", function(turtle) {
+            return turtle._heading;
+          }
+        ],
+        who: [
+          "WHO", function(turtle) {
+            return turtle.id;
+          }
+        ],
+        'label-color': [
+          "LABEL-COLOR", function(turtle) {
+            return turtle._labelcolor;
+          }
+        ],
+        'hidden?': [
+          "HIDDEN?", function(turtle) {
+            return turtle._hidden;
+          }
+        ],
+        label: [
+          "LABEL", (function(_this) {
+            return function(turtle) {
+              return _this._dump(turtle._label);
+            };
+          })(this)
+        ],
+        'pen-size': [
+          "PEN-SIZE", function(turtle) {
+            return turtle.penManager.getSize();
+          }
+        ],
+        'pen-mode': [
+          "PEN-MODE", function(turtle) {
+            return turtle.penManager.getMode().toString();
+          }
+        ],
+        shape: [
+          "SHAPE", function(turtle) {
+            return turtle._getShape();
+          }
+        ],
+        size: [
+          "SIZE", function(turtle) {
+            return turtle._size;
+          }
+        ],
+        xcor: [
+          "XCOR", function(turtle) {
+            return turtle.xcor;
+          }
+        ],
+        ycor: [
+          "YCOR", function(turtle) {
+            return turtle.ycor;
+          }
+        ]
+      };
+    };
+
+    Updater.prototype._patchMap = function() {
+      return {
+        id: [
+          "WHO", function(patch) {
+            return patch.id;
+          }
+        ],
+        pcolor: [
+          "PCOLOR", function(patch) {
+            return patch._pcolor;
+          }
+        ],
+        plabel: [
+          "PLABEL", (function(_this) {
+            return function(patch) {
+              return _this._dump(patch._plabel);
+            };
+          })(this)
+        ],
+        'plabel-color': [
+          "PLABEL-COLOR", function(patch) {
+            return patch._plabelcolor;
+          }
+        ],
+        pxcor: [
+          "PXCOR", function(patch) {
+            return patch.pxcor;
+          }
+        ],
+        pycor: [
+          "PYCOR", function(patch) {
+            return patch.pycor;
+          }
+        ]
+      };
+    };
+
+    Updater.prototype._linkMap = function() {
+      return {
+        breed: [
+          "BREED", function(link) {
+            return link.getBreedName();
+          }
+        ],
+        color: [
+          "COLOR", function(link) {
+            return link._color;
+          }
+        ],
+        end1: [
+          "END1", function(link) {
+            return link.end1.id;
+          }
+        ],
+        end2: [
+          "END2", function(link) {
+            return link.end2.id;
+          }
+        ],
+        heading: [
+          "HEADING", function(link) {
+            var _, error;
+            try {
+              return link.getHeading();
+            } catch (error) {
+              _ = error;
+              return 0;
+            }
+          }
+        ],
+        'hidden?': [
+          "HIDDEN?", function(link) {
+            return link._isHidden;
+          }
+        ],
+        id: [
+          "ID", function(link) {
+            return link.id;
+          }
+        ],
+        'directed?': [
+          "DIRECTED?", function(link) {
+            return link.isDirected;
+          }
+        ],
+        label: [
+          "LABEL", (function(_this) {
+            return function(link) {
+              return _this._dump(link._label);
+            };
+          })(this)
+        ],
+        'label-color': [
+          "LABEL-COLOR", function(link) {
+            return link._labelcolor;
+          }
+        ],
+        midpointx: [
+          "MIDPOINTX", function(link) {
+            return link.getMidpointX();
+          }
+        ],
+        midpointy: [
+          "MIDPOINTY", function(link) {
+            return link.getMidpointY();
+          }
+        ],
+        shape: [
+          "SHAPE", function(link) {
+            return link._shape;
+          }
+        ],
+        size: [
+          "SIZE", function(link) {
+            return link.getSize();
+          }
+        ],
+        thickness: [
+          "THICKNESS", function(link) {
+            return link._thickness;
+          }
+        ],
+        'tie-mode': [
+          "TIE-MODE", function(link) {
+            return link.tiemode;
+          }
+        ],
+        lcolor: ignored,
+        llabel: ignored,
+        llabelcolor: ignored,
+        lhidden: ignored,
+        lbreed: ignored,
+        lshape: ignored
+      };
+    };
+
+    Updater.prototype._worldMap = function() {
+      return {
+        height: [
+          "worldHeight", function(world) {
+            return world.topology.height;
+          }
+        ],
+        id: [
+          "WHO", function(world) {
+            return world.id;
+          }
+        ],
+        patchesAllBlack: [
+          "patchesAllBlack", function(world) {
+            return world._patchesAllBlack;
+          }
+        ],
+        patchesWithLabels: [
+          "patchesWithLabels", function(world) {
+            return world._patchesWithLabels;
+          }
+        ],
+        maxPxcor: [
+          "MAXPXCOR", function(world) {
+            return world.topology.maxPxcor;
+          }
+        ],
+        maxPycor: [
+          "MAXPYCOR", function(world) {
+            return world.topology.maxPycor;
+          }
+        ],
+        minPxcor: [
+          "MINPXCOR", function(world) {
+            return world.topology.minPxcor;
+          }
+        ],
+        minPycor: [
+          "MINPYCOR", function(world) {
+            return world.topology.minPycor;
+          }
+        ],
+        patchSize: [
+          "patchSize", function(world) {
+            return world.patchSize;
+          }
+        ],
+        ticks: [
+          "ticks", function(world) {
+            return world.ticker._count;
+          }
+        ],
+        unbreededLinksAreDirected: [
+          "unbreededLinksAreDirected", function(world) {
+            return world.breedManager.links().isDirected();
+          }
+        ],
+        width: [
+          "worldWidth", function(world) {
+            return world.topology.width;
+          }
+        ],
+        wrappingAllowedInX: [
+          "wrappingAllowedInX", function(world) {
+            return world.topology._wrapInX;
+          }
+        ],
+        wrappingAllowedInY: [
+          "wrappingAllowedInY", function(world) {
+            return world.topology._wrapInY;
+          }
+        ]
+      };
+    };
+
+    Updater.prototype._observerMap = function() {
+      return {
+        id: [
+          "WHO", function(observer) {
+            return observer.id;
+          }
+        ],
+        perspective: [
+          "perspective", function(observer) {
+            return perspectiveToNum(observer.getPerspective());
+          }
+        ],
+        targetAgent: [
+          "targetAgent", function(observer) {
+            return observer._getTargetAgentUpdate();
+          }
+        ]
+      };
+    };
+
+    Updater.prototype._update = function(agentType, id, newAgent) {
+      this._hasUpdates = true;
+      this._updates[0][agentType][id] = newAgent;
+    };
+
+    Updater.prototype._reportDrawingEvent = function(event) {
+      this._hasUpdates = true;
+      this._updates[0].drawingEvents.push(event);
+    };
+
+    Updater.prototype._flushUpdates = function() {
+      this._hasUpdates = false;
+      this._updates = [new Update()];
+    };
+
+    return Updater;
+
+  })();
+
+}).call(this);
+
+},{"./core/link":"engine/core/link","./core/observer":"engine/core/observer","./core/patch":"engine/core/patch","./core/turtle":"engine/core/turtle","./core/world":"engine/core/world"}],"engine/workspace":[function(require,module,exports){
+(function() {
+  var BreedManager, Dump, EvalPrims, Hasher, ImportExportConfig, ImportExportPrims, LayoutManager, LinkPrims, ListPrims, Meta, MiniWorkspace, MouseConfig, MousePrims, NLType, OutputConfig, OutputPrims, PlotManager, Prims, PrintConfig, PrintPrims, RNG, SelfManager, SelfPrims, Timer, Updater, UserDialogConfig, UserDialogPrims, World, WorldConfig, csvToWorldState, fold, id, lookup, ref, ref1, ref2, ref3, ref4, ref5, toObject, values,
+    slice = [].slice;
+
+  WorldConfig = (function() {
+    function WorldConfig(resizeWorld) {
+      this.resizeWorld = resizeWorld != null ? resizeWorld : (function() {});
+    }
+
+    return WorldConfig;
+
+  })();
+
+  BreedManager = require('./core/breedmanager');
+
+  Dump = require('./dump');
+
+  EvalPrims = require('./prim/evalprims');
+
+  Hasher = require('./hasher');
+
+  LayoutManager = require('./prim/layoutmanager');
+
+  LinkPrims = require('./prim/linkprims');
+
+  ListPrims = require('./prim/listprims');
+
+  NLType = require('./core/typechecker');
+
+  PlotManager = require('./plot/plotmanager');
+
+  Prims = require('./prim/prims');
+
+  RNG = require('util/rng');
+
+  SelfManager = require('./core/structure/selfmanager');
+
+  SelfPrims = require('./prim/selfprims');
+
+  Timer = require('util/timer');
+
+  Updater = require('./updater');
+
+  World = require('./core/world');
+
+  csvToWorldState = require('serialize/importcsv');
+
+  toObject = require('brazier/array').toObject;
+
+  fold = require('brazier/maybe').fold;
+
+  id = require('brazier/function').id;
+
+  ref = require('brazier/object'), lookup = ref.lookup, values = ref.values;
+
+  ref1 = require('./prim/importexportprims'), ImportExportConfig = ref1.Config, ImportExportPrims = ref1.Prims;
+
+  ref2 = require('./prim/mouseprims'), MouseConfig = ref2.Config, MousePrims = ref2.Prims;
+
+  ref3 = require('./prim/outputprims'), OutputConfig = ref3.Config, OutputPrims = ref3.Prims;
+
+  ref4 = require('./prim/printprims'), PrintConfig = ref4.Config, PrintPrims = ref4.Prims;
+
+  ref5 = require('./prim/userdialogprims'), UserDialogConfig = ref5.Config, UserDialogPrims = ref5.Prims;
+
+  Meta = require('meta');
+
+  MiniWorkspace = (function() {
+    function MiniWorkspace(selfManager1, updater1, breedManager1, rng1, plotManager1) {
+      this.selfManager = selfManager1;
+      this.updater = updater1;
+      this.breedManager = breedManager1;
+      this.rng = rng1;
+      this.plotManager = plotManager1;
+    }
+
+    return MiniWorkspace;
+
+  })();
+
+  module.exports = function(modelConfig) {
+    return function(breedObjs) {
+      return function(turtlesOwns, linksOwns) {
+        return function(code) {
+          return function(widgets) {
+            return function(extensionDumpers) {
+              return function() {
+                var breedManager, dialogConfig, dump, evalPrims, importExportConfig, importExportPrims, importWorldFromCSV, layoutManager, linkPrims, listPrims, mouseConfig, mousePrims, outputConfig, outputPrims, outputStore, plotManager, plots, prims, printConfig, printPrims, ref10, ref11, ref12, ref13, ref6, ref7, ref8, ref9, rng, selfManager, selfPrims, timer, typechecker, updater, userDialogPrims, world, worldArgs, worldConfig;
+                worldArgs = arguments;
+                dialogConfig = (ref6 = modelConfig != null ? modelConfig.dialog : void 0) != null ? ref6 : new UserDialogConfig;
+                importExportConfig = (ref7 = modelConfig != null ? modelConfig.importExport : void 0) != null ? ref7 : new ImportExportConfig;
+                mouseConfig = (ref8 = modelConfig != null ? modelConfig.mouse : void 0) != null ? ref8 : new MouseConfig;
+                outputConfig = (ref9 = modelConfig != null ? modelConfig.output : void 0) != null ? ref9 : new OutputConfig;
+                plots = (ref10 = modelConfig != null ? modelConfig.plots : void 0) != null ? ref10 : [];
+                printConfig = (ref11 = modelConfig != null ? modelConfig.print : void 0) != null ? ref11 : new PrintConfig;
+                worldConfig = (ref12 = modelConfig != null ? modelConfig.world : void 0) != null ? ref12 : new WorldConfig;
+                Meta.version = (ref13 = modelConfig != null ? modelConfig.version : void 0) != null ? ref13 : Meta.version;
+                dump = Dump(extensionDumpers);
+                rng = new RNG;
+                typechecker = NLType;
+                outputStore = "";
+                selfManager = new SelfManager;
+                breedManager = new BreedManager(breedObjs, turtlesOwns, linksOwns);
+                plotManager = new PlotManager(plots);
+                timer = new Timer;
+                updater = new Updater(dump);
+                world = (function(func, args, ctor) {
+                  ctor.prototype = func.prototype;
+                  var child = new ctor, result = func.apply(child, args);
+                  return Object(result) === result ? result : child;
+                })(World, [new MiniWorkspace(selfManager, updater, breedManager, rng, plotManager), worldConfig, (function() {
+                  outputConfig.clear();
+                  return outputStore = "";
+                }), (function() {
+                  return outputStore;
+                }), (function(text) {
+                  return outputStore = text;
+                }), dump].concat(slice.call(worldArgs)), function(){});
+                layoutManager = new LayoutManager(world, rng.nextDouble);
+                evalPrims = new EvalPrims(code, widgets);
+                prims = new Prims(dump, Hasher, rng, world, evalPrims);
+                selfPrims = new SelfPrims(selfManager.self);
+                linkPrims = new LinkPrims(world);
+                listPrims = new ListPrims(dump, Hasher, prims.equality.bind(prims), rng.nextInt);
+                mousePrims = new MousePrims(mouseConfig);
+                outputPrims = new OutputPrims(outputConfig, (function(x) {
+                  return outputStore += x;
+                }), (function() {
+                  return outputStore = "";
+                }), dump);
+                printPrims = new PrintPrims(printConfig, dump);
+                userDialogPrims = new UserDialogPrims(dialogConfig);
+                importWorldFromCSV = function(csvText) {
+                  var breedNamePairs, functionify, pluralToSingular, ptsObject, singularToPlural, stpObject, worldState;
+                  functionify = function(obj) {
+                    return function(x) {
+                      var msg;
+                      msg = "Cannot find corresponding breed name for " + x + "!";
+                      return fold(function() {
+                        throw new Error(msg);
+                      })(id)(lookup(x)(obj));
+                    };
+                  };
+                  breedNamePairs = values(breedManager.breeds()).map(function(arg) {
+                    var name, singular;
+                    name = arg.name, singular = arg.singular;
+                    return [name, singular];
+                  });
+                  ptsObject = toObject(breedNamePairs);
+                  stpObject = toObject(breedNamePairs.map(function(arg) {
+                    var p, s;
+                    p = arg[0], s = arg[1];
+                    return [s, p];
+                  }));
+                  pluralToSingular = functionify(ptsObject);
+                  singularToPlural = functionify(stpObject);
+                  worldState = csvToWorldState(singularToPlural, pluralToSingular)(csvText);
+                  return world.importState(worldState);
+                };
+                importExportPrims = new ImportExportPrims(importExportConfig, (function() {
+                  return world.exportCSV();
+                }), (function() {
+                  return world.exportAllPlotsCSV();
+                }), (function(plot) {
+                  return world.exportPlotCSV(plot);
+                }), importWorldFromCSV);
+                return {
+                  selfManager: selfManager,
+                  breedManager: breedManager,
+                  dump: dump,
+                  importExportPrims: importExportPrims,
+                  layoutManager: layoutManager,
+                  linkPrims: linkPrims,
+                  listPrims: listPrims,
+                  mousePrims: mousePrims,
+                  outputPrims: outputPrims,
+                  plotManager: plotManager,
+                  evalPrims: evalPrims,
+                  prims: prims,
+                  printPrims: printPrims,
+                  rng: rng,
+                  selfPrims: selfPrims,
+                  timer: timer,
+                  typechecker: typechecker,
+                  updater: updater,
+                  userDialogPrims: userDialogPrims,
+                  world: world
+                };
+              };
+            };
+          };
+        };
+      };
+    };
+  };
+
+}).call(this);
+
+},{"./core/breedmanager":"engine/core/breedmanager","./core/structure/selfmanager":"engine/core/structure/selfmanager","./core/typechecker":"engine/core/typechecker","./core/world":"engine/core/world","./dump":"engine/dump","./hasher":"engine/hasher","./plot/plotmanager":"engine/plot/plotmanager","./prim/evalprims":"engine/prim/evalprims","./prim/importexportprims":"engine/prim/importexportprims","./prim/layoutmanager":"engine/prim/layoutmanager","./prim/linkprims":"engine/prim/linkprims","./prim/listprims":"engine/prim/listprims","./prim/mouseprims":"engine/prim/mouseprims","./prim/outputprims":"engine/prim/outputprims","./prim/prims":"engine/prim/prims","./prim/printprims":"engine/prim/printprims","./prim/selfprims":"engine/prim/selfprims","./prim/userdialogprims":"engine/prim/userdialogprims","./updater":"engine/updater","brazier/array":"brazier/array","brazier/function":"brazier/function","brazier/maybe":"brazier/maybe","brazier/object":"brazier/object","meta":"meta","serialize/importcsv":"serialize/importcsv","util/rng":"util/rng","util/timer":"util/timer"}],"extensions/all":[function(require,module,exports){
+(function() {
+  var dumpers, extensionPaths;
+
+  extensionPaths = ['codap', 'logging', 'nlmap', 'http-req'];
+
+  dumpers = extensionPaths.map(function(path) {
+    return require("extensions/" + path).dumper;
+  }).filter(function(x) {
+    return x != null;
+  });
+
+  module.exports = {
+    initialize: function(workspace) {
+      var extObj;
+      extObj = {};
+      extensionPaths.forEach(function(path) {
+        var e;
+        e = require("extensions/" + path).init(workspace);
+        return extObj[e.name.toUpperCase()] = e;
+      });
+      return extObj;
+    },
+    dumpers: function() {
+      return dumpers;
+    }
+  };
+
+}).call(this);
+
+},{}],"extensions/codap":[function(require,module,exports){
+(function() {
+  var IFramePhone;
+
+  IFramePhone = require('iframe-phone');
+
+  module.exports = {
+    dumper: void 0,
+    init: function(workspace) {
+      var phone;
+      phone = void 0;
+      return {
+        name: "codap",
+        prims: {
+          INIT: function(handler) {
+            var ref;
+            phone = ((typeof window !== "undefined" && window !== null ? window.parent : void 0) != null) && window.parent !== window ? new IFramePhone.IframePhoneRpcEndpoint(handler, "data-interactive", window.parent) : (((ref = typeof console !== "undefined" && console !== null ? console.log : void 0) != null ? ref : print)("CODAP Extension: Not in a frame; calls will have no effect."), {
+              call: function(x) {
+                var ref1;
+                return ((ref1 = typeof console !== "undefined" && console !== null ? console.log : void 0) != null ? ref1 : print)("CODAP Extension: Not in a frame; doing nothing; received:", x);
+              }
+            });
+            phone.call({
+              action: "update",
+              resource: "interactiveFrame",
+              values: {
+                preventDataContextReorg: false,
+                title: "NetLogo Web"
+              }
+            });
+          },
+          CALL: function(argObj) {
+            phone.call(argObj);
+          }
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{"iframe-phone":14}],"extensions/http-req":[function(require,module,exports){
+(function() {
+  module.exports = {
+    dumper: void 0,
+    init: function(workspace) {
+      var get, post, requestor;
+      get = function(url) {
+        var ref, req;
+        req = requestor("GET", url);
+        return [req.status, req.statusText, (ref = req.responseText) != null ? ref : ''];
+      };
+      post = function(url, message, contentType) {
+        var req;
+        req = requestor("POST", url, message, contentType != null ? contentType : "text/plain");
+        return [req.status, req.statusText, req.responseText];
+      };
+      requestor = function(reqType, url, message, contentType) {
+        var ct, req;
+        req = new XMLHttpRequest();
+        req.open(reqType, url, false);
+        if (contentType != null) {
+          ct = (function() {
+            switch (contentType) {
+              case 'json':
+                return 'application/json';
+              case 'urlencoded':
+                return 'application/x-www-form-urlencoded';
+              default:
+                return contentType;
+            }
+          })();
+          req.setRequestHeader("Content-type", ct);
+        }
+        req.send(message != null ? message : "");
+        return req;
+      };
+      return {
+        name: "http-req",
+        prims: {
+          "GET": get,
+          "POST": post
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{}],"extensions/logging":[function(require,module,exports){
+(function() {
+  var contains, filter, flip, foldl, id, isEmpty, map, pipeline, ref, ref1, tail, tee,
+    slice = [].slice;
+
+  ref = require('brazierjs/array'), contains = ref.contains, filter = ref.filter, foldl = ref.foldl, isEmpty = ref.isEmpty, map = ref.map, tail = ref.tail;
+
+  ref1 = require('brazierjs/function'), flip = ref1.flip, id = ref1.id, pipeline = ref1.pipeline, tee = ref1.tee;
+
+  module.exports = {
+    dumper: void 0,
+    init: function(workspace) {
+      var allLogs, clearLogs, logBuffer, logGlobals, logMessage;
+      logBuffer = [];
+      logMessage = function(str) {
+        logBuffer.push(str);
+      };
+      logGlobals = function() {
+        var getGlobal, globalNames, join, nameToLog, names, observer, toLogMessage, trueNames;
+        names = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+        observer = workspace.world.observer;
+        globalNames = observer.varNames();
+        getGlobal = observer.getGlobal.bind(observer);
+        trueNames = isEmpty(names) ? globalNames : filter(flip(contains(globalNames)))(names);
+        toLogMessage = function(arg) {
+          var name, value;
+          name = arg[0], value = arg[1];
+          return name + ": " + value;
+        };
+        nameToLog = pipeline(tee(id)(pipeline(getGlobal, function(x) {
+          return workspace.dump(x, true);
+        })), toLogMessage);
+        join = pipeline(foldl(function(acc, s) {
+          return acc + "\n" + s;
+        })(""), tail);
+        pipeline(map(nameToLog), join, logMessage)(trueNames);
+      };
+      allLogs = function() {
+        return logBuffer.slice(0);
+      };
+      clearLogs = function() {
+        logBuffer = [];
+      };
+      return {
+        name: "logging",
+        prims: {
+          "ALL-LOGS": allLogs,
+          "CLEAR-LOGS": clearLogs,
+          "LOG-GLOBALS": logGlobals,
+          "LOG-MESSAGE": logMessage
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{"brazierjs/array":"brazier/array","brazierjs/function":"brazier/function"}],"extensions/nlmap":[function(require,module,exports){
+(function() {
+  var isMap,
+    hasProp = {}.hasOwnProperty;
+
+  isMap = function(x) {
+    return x._type === "ext_map";
+  };
+
+  module.exports = {
+    dumper: {
+      canDump: isMap,
+      dump: function(x) {
+        return "{{nlmap:  " + (JSON.stringify(x)) + "}}";
+      }
+    },
+    init: function(workspace) {
+      var add, fromList, get, jsonToMap, mapToJson, mapToUrlEncoded, newMap, remove, toList, toMap;
+      newMap = function() {
+        var out;
+        out = {};
+        return toMap(out);
+      };
+      toMap = function(obj) {
+        Object.defineProperty(obj, "_type", {
+          enumerable: false,
+          value: "ext_map",
+          writable: false
+        });
+        return obj;
+      };
+      fromList = function(list) {
+        var i, k, len, out, ref, v;
+        out = newMap();
+        for (i = 0, len = list.length; i < len; i++) {
+          ref = list[i], k = ref[0], v = ref[1];
+          out[k] = v;
+        }
+        return out;
+      };
+      toList = function(extMap) {
+        var k, results;
+        results = [];
+        for (k in extMap) {
+          results.push([k, extMap[k]]);
+        }
+        return results;
+      };
+      add = function(extMap, key, value) {
+        var k, out;
+        out = newMap();
+        for (k in extMap) {
+          out[k] = extMap[k];
+        }
+        out[key] = value;
+        return out;
+      };
+      get = function(extMap, key) {
+        var ref;
+        return (function() {
+          if ((ref = extMap[key]) != null) {
+            return ref;
+          } else {
+            throw new Error(key + " does not exist in this map");
+          }
+        })();
+      };
+      remove = function(extMap, key) {
+        var k, out;
+        out = newMap();
+        for (k in extMap) {
+          if (k !== key) {
+            out[k] = extMap[k];
+          }
+        }
+        return out;
+      };
+      mapToJson = function(nlmap) {
+        if (nlmap._type !== "ext_map") {
+          throw new Error("Only nlmap type values can be converted to JSON format.");
+        }
+        return JSON.stringify(nlmap);
+      };
+      mapToUrlEncoded = function(nlmap) {
+        var key, kvps, value;
+        if (nlmap._type !== "ext_map") {
+          throw new Error("Only nlmap type values can be converted to URL format.");
+        } else {
+          kvps = [];
+          for (key in nlmap) {
+            if (!hasProp.call(nlmap, key)) continue;
+            value = nlmap[key];
+            if (typeof value !== 'object') {
+              kvps.push((encodeURIComponent(key)) + "=" + (encodeURIComponent(value)));
+            }
+          }
+          return kvps.join('&');
+        }
+      };
+      jsonToMap = function(json) {
+        return JSON.parse(json, function(key, value) {
+          if (typeof value === 'object') {
+            return toMap(value);
+          } else {
+            return value;
+          }
+        });
+      };
+      return {
+        name: "nlmap",
+        prims: {
+          "FROM-LIST": fromList,
+          "TO-LIST": toList,
+          "IS-MAP?": isMap,
+          "ADD": add,
+          "GET": get,
+          "REMOVE": remove,
+          "TO-JSON": mapToJson,
+          "TO-URLENC": mapToUrlEncoded,
+          "FROM-JSON": jsonToMap
+        }
+      };
+    }
+  };
+
+}).call(this);
+
+},{}],"meta":[function(require,module,exports){
+(function() {
+  module.exports = {
+    isApplet: false,
+    isWeb: true,
+    version: "1.0"
+  };
+
+}).call(this);
+
+},{}],"mori":[function(require,module,exports){
+(function(definition){if(typeof exports==="object"){module.exports=definition();}else if(typeof define==="function"&&define.amd){define(definition);}else{mori=definition();}})(function(){return function(){
+if(typeof Math.imul == "undefined" || (Math.imul(0xffffffff,5) == 0)) {
+    Math.imul = function (a, b) {
+        var ah  = (a >>> 16) & 0xffff;
+        var al = a & 0xffff;
+        var bh  = (b >>> 16) & 0xffff;
+        var bl = b & 0xffff;
+        // the shift by 0 fixes the sign on the high part
+        // the final |0 converts the unsigned value into a signed value
+        return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
+    }
+}
+
+var k,aa=this;
+function n(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if("function"==
+b&&"undefined"==typeof a.call)return"object";return b}var ba="closure_uid_"+(1E9*Math.random()>>>0),ca=0;function r(a,b){var c=a.split("."),d=aa;c[0]in d||!d.execScript||d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d=d[e]?d[e]:d[e]={}:d[e]=b};function da(a){return Array.prototype.join.call(arguments,"")};function ea(a,b){for(var c in a)b.call(void 0,a[c],c,a)};function fa(a,b){null!=a&&this.append.apply(this,arguments)}fa.prototype.Za="";fa.prototype.append=function(a,b,c){this.Za+=a;if(null!=b)for(var d=1;d<arguments.length;d++)this.Za+=arguments[d];return this};fa.prototype.clear=function(){this.Za=""};fa.prototype.toString=function(){return this.Za};function ga(a,b){a.sort(b||ha)}function ia(a,b){for(var c=0;c<a.length;c++)a[c]={index:c,value:a[c]};var d=b||ha;ga(a,function(a,b){return d(a.value,b.value)||a.index-b.index});for(c=0;c<a.length;c++)a[c]=a[c].value}function ha(a,b){return a>b?1:a<b?-1:0};var ja;if("undefined"===typeof ka)var ka=function(){throw Error("No *print-fn* fn set for evaluation environment");};var la=null,ma=null;if("undefined"===typeof na)var na=null;function oa(){return new pa(null,5,[sa,!0,ua,!0,wa,!1,ya,!1,za,la],null)}function t(a){return null!=a&&!1!==a}function Aa(a){return t(a)?!1:!0}function w(a,b){return a[n(null==b?null:b)]?!0:a._?!0:!1}function Ba(a){return null==a?null:a.constructor}
+function x(a,b){var c=Ba(b),c=t(t(c)?c.Yb:c)?c.Xb:n(b);return Error(["No protocol method ",a," defined for type ",c,": ",b].join(""))}function Da(a){var b=a.Xb;return t(b)?b:""+z(a)}var Ea="undefined"!==typeof Symbol&&"function"===n(Symbol)?Symbol.Cc:"@@iterator";function Fa(a){for(var b=a.length,c=Array(b),d=0;;)if(d<b)c[d]=a[d],d+=1;else break;return c}function Ha(a){for(var b=Array(arguments.length),c=0;;)if(c<b.length)b[c]=arguments[c],c+=1;else return b}
+var Ia=function(){function a(a,b){function c(a,b){a.push(b);return a}var g=[];return A.c?A.c(c,g,b):A.call(null,c,g,b)}function b(a){return c.a(null,a)}var c=null,c=function(d,c){switch(arguments.length){case 1:return b.call(this,d);case 2:return a.call(this,0,c)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),Ja={},La={};function Ma(a){if(a?a.L:a)return a.L(a);var b;b=Ma[n(null==a?null:a)];if(!b&&(b=Ma._,!b))throw x("ICounted.-count",a);return b.call(null,a)}
+function Na(a){if(a?a.J:a)return a.J(a);var b;b=Na[n(null==a?null:a)];if(!b&&(b=Na._,!b))throw x("IEmptyableCollection.-empty",a);return b.call(null,a)}var Qa={};function Ra(a,b){if(a?a.G:a)return a.G(a,b);var c;c=Ra[n(null==a?null:a)];if(!c&&(c=Ra._,!c))throw x("ICollection.-conj",a);return c.call(null,a,b)}
+var Ta={},C=function(){function a(a,b,c){if(a?a.$:a)return a.$(a,b,c);var g;g=C[n(null==a?null:a)];if(!g&&(g=C._,!g))throw x("IIndexed.-nth",a);return g.call(null,a,b,c)}function b(a,b){if(a?a.Q:a)return a.Q(a,b);var c;c=C[n(null==a?null:a)];if(!c&&(c=C._,!c))throw x("IIndexed.-nth",a);return c.call(null,a,b)}var c=null,c=function(d,c,f){switch(arguments.length){case 2:return b.call(this,d,c);case 3:return a.call(this,d,c,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=a;return c}(),
+Ua={};function Va(a){if(a?a.N:a)return a.N(a);var b;b=Va[n(null==a?null:a)];if(!b&&(b=Va._,!b))throw x("ISeq.-first",a);return b.call(null,a)}function Wa(a){if(a?a.S:a)return a.S(a);var b;b=Wa[n(null==a?null:a)];if(!b&&(b=Wa._,!b))throw x("ISeq.-rest",a);return b.call(null,a)}
+var Xa={},Za={},$a=function(){function a(a,b,c){if(a?a.s:a)return a.s(a,b,c);var g;g=$a[n(null==a?null:a)];if(!g&&(g=$a._,!g))throw x("ILookup.-lookup",a);return g.call(null,a,b,c)}function b(a,b){if(a?a.t:a)return a.t(a,b);var c;c=$a[n(null==a?null:a)];if(!c&&(c=$a._,!c))throw x("ILookup.-lookup",a);return c.call(null,a,b)}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,c,e);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=
+a;return c}(),ab={};function bb(a,b){if(a?a.rb:a)return a.rb(a,b);var c;c=bb[n(null==a?null:a)];if(!c&&(c=bb._,!c))throw x("IAssociative.-contains-key?",a);return c.call(null,a,b)}function cb(a,b,c){if(a?a.Ka:a)return a.Ka(a,b,c);var d;d=cb[n(null==a?null:a)];if(!d&&(d=cb._,!d))throw x("IAssociative.-assoc",a);return d.call(null,a,b,c)}var db={};function eb(a,b){if(a?a.wb:a)return a.wb(a,b);var c;c=eb[n(null==a?null:a)];if(!c&&(c=eb._,!c))throw x("IMap.-dissoc",a);return c.call(null,a,b)}var fb={};
+function hb(a){if(a?a.hb:a)return a.hb(a);var b;b=hb[n(null==a?null:a)];if(!b&&(b=hb._,!b))throw x("IMapEntry.-key",a);return b.call(null,a)}function ib(a){if(a?a.ib:a)return a.ib(a);var b;b=ib[n(null==a?null:a)];if(!b&&(b=ib._,!b))throw x("IMapEntry.-val",a);return b.call(null,a)}var jb={};function kb(a,b){if(a?a.Eb:a)return a.Eb(a,b);var c;c=kb[n(null==a?null:a)];if(!c&&(c=kb._,!c))throw x("ISet.-disjoin",a);return c.call(null,a,b)}
+function lb(a){if(a?a.La:a)return a.La(a);var b;b=lb[n(null==a?null:a)];if(!b&&(b=lb._,!b))throw x("IStack.-peek",a);return b.call(null,a)}function mb(a){if(a?a.Ma:a)return a.Ma(a);var b;b=mb[n(null==a?null:a)];if(!b&&(b=mb._,!b))throw x("IStack.-pop",a);return b.call(null,a)}var nb={};function pb(a,b,c){if(a?a.Ua:a)return a.Ua(a,b,c);var d;d=pb[n(null==a?null:a)];if(!d&&(d=pb._,!d))throw x("IVector.-assoc-n",a);return d.call(null,a,b,c)}
+function qb(a){if(a?a.Ra:a)return a.Ra(a);var b;b=qb[n(null==a?null:a)];if(!b&&(b=qb._,!b))throw x("IDeref.-deref",a);return b.call(null,a)}var rb={};function sb(a){if(a?a.H:a)return a.H(a);var b;b=sb[n(null==a?null:a)];if(!b&&(b=sb._,!b))throw x("IMeta.-meta",a);return b.call(null,a)}var tb={};function ub(a,b){if(a?a.F:a)return a.F(a,b);var c;c=ub[n(null==a?null:a)];if(!c&&(c=ub._,!c))throw x("IWithMeta.-with-meta",a);return c.call(null,a,b)}
+var vb={},wb=function(){function a(a,b,c){if(a?a.O:a)return a.O(a,b,c);var g;g=wb[n(null==a?null:a)];if(!g&&(g=wb._,!g))throw x("IReduce.-reduce",a);return g.call(null,a,b,c)}function b(a,b){if(a?a.R:a)return a.R(a,b);var c;c=wb[n(null==a?null:a)];if(!c&&(c=wb._,!c))throw x("IReduce.-reduce",a);return c.call(null,a,b)}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,c,e);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=a;return c}();
+function xb(a,b,c){if(a?a.gb:a)return a.gb(a,b,c);var d;d=xb[n(null==a?null:a)];if(!d&&(d=xb._,!d))throw x("IKVReduce.-kv-reduce",a);return d.call(null,a,b,c)}function yb(a,b){if(a?a.A:a)return a.A(a,b);var c;c=yb[n(null==a?null:a)];if(!c&&(c=yb._,!c))throw x("IEquiv.-equiv",a);return c.call(null,a,b)}function zb(a){if(a?a.B:a)return a.B(a);var b;b=zb[n(null==a?null:a)];if(!b&&(b=zb._,!b))throw x("IHash.-hash",a);return b.call(null,a)}var Bb={};
+function Cb(a){if(a?a.D:a)return a.D(a);var b;b=Cb[n(null==a?null:a)];if(!b&&(b=Cb._,!b))throw x("ISeqable.-seq",a);return b.call(null,a)}var Db={},Eb={},Fb={};function Gb(a){if(a?a.ab:a)return a.ab(a);var b;b=Gb[n(null==a?null:a)];if(!b&&(b=Gb._,!b))throw x("IReversible.-rseq",a);return b.call(null,a)}function Hb(a,b){if(a?a.Hb:a)return a.Hb(a,b);var c;c=Hb[n(null==a?null:a)];if(!c&&(c=Hb._,!c))throw x("ISorted.-sorted-seq",a);return c.call(null,a,b)}
+function Ib(a,b,c){if(a?a.Ib:a)return a.Ib(a,b,c);var d;d=Ib[n(null==a?null:a)];if(!d&&(d=Ib._,!d))throw x("ISorted.-sorted-seq-from",a);return d.call(null,a,b,c)}function Jb(a,b){if(a?a.Gb:a)return a.Gb(a,b);var c;c=Jb[n(null==a?null:a)];if(!c&&(c=Jb._,!c))throw x("ISorted.-entry-key",a);return c.call(null,a,b)}function Kb(a){if(a?a.Fb:a)return a.Fb(a);var b;b=Kb[n(null==a?null:a)];if(!b&&(b=Kb._,!b))throw x("ISorted.-comparator",a);return b.call(null,a)}
+function Lb(a,b){if(a?a.Wb:a)return a.Wb(0,b);var c;c=Lb[n(null==a?null:a)];if(!c&&(c=Lb._,!c))throw x("IWriter.-write",a);return c.call(null,a,b)}var Mb={};function Nb(a,b,c){if(a?a.v:a)return a.v(a,b,c);var d;d=Nb[n(null==a?null:a)];if(!d&&(d=Nb._,!d))throw x("IPrintWithWriter.-pr-writer",a);return d.call(null,a,b,c)}function Ob(a){if(a?a.$a:a)return a.$a(a);var b;b=Ob[n(null==a?null:a)];if(!b&&(b=Ob._,!b))throw x("IEditableCollection.-as-transient",a);return b.call(null,a)}
+function Pb(a,b){if(a?a.Sa:a)return a.Sa(a,b);var c;c=Pb[n(null==a?null:a)];if(!c&&(c=Pb._,!c))throw x("ITransientCollection.-conj!",a);return c.call(null,a,b)}function Qb(a){if(a?a.Ta:a)return a.Ta(a);var b;b=Qb[n(null==a?null:a)];if(!b&&(b=Qb._,!b))throw x("ITransientCollection.-persistent!",a);return b.call(null,a)}function Rb(a,b,c){if(a?a.kb:a)return a.kb(a,b,c);var d;d=Rb[n(null==a?null:a)];if(!d&&(d=Rb._,!d))throw x("ITransientAssociative.-assoc!",a);return d.call(null,a,b,c)}
+function Sb(a,b){if(a?a.Jb:a)return a.Jb(a,b);var c;c=Sb[n(null==a?null:a)];if(!c&&(c=Sb._,!c))throw x("ITransientMap.-dissoc!",a);return c.call(null,a,b)}function Tb(a,b,c){if(a?a.Ub:a)return a.Ub(0,b,c);var d;d=Tb[n(null==a?null:a)];if(!d&&(d=Tb._,!d))throw x("ITransientVector.-assoc-n!",a);return d.call(null,a,b,c)}function Ub(a){if(a?a.Vb:a)return a.Vb();var b;b=Ub[n(null==a?null:a)];if(!b&&(b=Ub._,!b))throw x("ITransientVector.-pop!",a);return b.call(null,a)}
+function Vb(a,b){if(a?a.Tb:a)return a.Tb(0,b);var c;c=Vb[n(null==a?null:a)];if(!c&&(c=Vb._,!c))throw x("ITransientSet.-disjoin!",a);return c.call(null,a,b)}function Xb(a){if(a?a.Pb:a)return a.Pb();var b;b=Xb[n(null==a?null:a)];if(!b&&(b=Xb._,!b))throw x("IChunk.-drop-first",a);return b.call(null,a)}function Yb(a){if(a?a.Cb:a)return a.Cb(a);var b;b=Yb[n(null==a?null:a)];if(!b&&(b=Yb._,!b))throw x("IChunkedSeq.-chunked-first",a);return b.call(null,a)}
+function Zb(a){if(a?a.Db:a)return a.Db(a);var b;b=Zb[n(null==a?null:a)];if(!b&&(b=Zb._,!b))throw x("IChunkedSeq.-chunked-rest",a);return b.call(null,a)}function $b(a){if(a?a.Bb:a)return a.Bb(a);var b;b=$b[n(null==a?null:a)];if(!b&&(b=$b._,!b))throw x("IChunkedNext.-chunked-next",a);return b.call(null,a)}function ac(a,b){if(a?a.bb:a)return a.bb(0,b);var c;c=ac[n(null==a?null:a)];if(!c&&(c=ac._,!c))throw x("IVolatile.-vreset!",a);return c.call(null,a,b)}var bc={};
+function cc(a){if(a?a.fb:a)return a.fb(a);var b;b=cc[n(null==a?null:a)];if(!b&&(b=cc._,!b))throw x("IIterable.-iterator",a);return b.call(null,a)}function dc(a){this.qc=a;this.q=0;this.j=1073741824}dc.prototype.Wb=function(a,b){return this.qc.append(b)};function ec(a){var b=new fa;a.v(null,new dc(b),oa());return""+z(b)}
+var fc="undefined"!==typeof Math.imul&&0!==(Math.imul.a?Math.imul.a(4294967295,5):Math.imul.call(null,4294967295,5))?function(a,b){return Math.imul.a?Math.imul.a(a,b):Math.imul.call(null,a,b)}:function(a,b){var c=a&65535,d=b&65535;return c*d+((a>>>16&65535)*d+c*(b>>>16&65535)<<16>>>0)|0};function gc(a){a=fc(a,3432918353);return fc(a<<15|a>>>-15,461845907)}function hc(a,b){var c=a^b;return fc(c<<13|c>>>-13,5)+3864292196}
+function ic(a,b){var c=a^b,c=fc(c^c>>>16,2246822507),c=fc(c^c>>>13,3266489909);return c^c>>>16}var kc={},lc=0;function mc(a){255<lc&&(kc={},lc=0);var b=kc[a];if("number"!==typeof b){a:if(null!=a)if(b=a.length,0<b){for(var c=0,d=0;;)if(c<b)var e=c+1,d=fc(31,d)+a.charCodeAt(c),c=e;else{b=d;break a}b=void 0}else b=0;else b=0;kc[a]=b;lc+=1}return a=b}
+function nc(a){a&&(a.j&4194304||a.vc)?a=a.B(null):"number"===typeof a?a=(Math.floor.b?Math.floor.b(a):Math.floor.call(null,a))%2147483647:!0===a?a=1:!1===a?a=0:"string"===typeof a?(a=mc(a),0!==a&&(a=gc(a),a=hc(0,a),a=ic(a,4))):a=a instanceof Date?a.valueOf():null==a?0:zb(a);return a}
+function oc(a){var b;b=a.name;var c;a:{c=1;for(var d=0;;)if(c<b.length){var e=c+2,d=hc(d,gc(b.charCodeAt(c-1)|b.charCodeAt(c)<<16));c=e}else{c=d;break a}c=void 0}c=1===(b.length&1)?c^gc(b.charCodeAt(b.length-1)):c;b=ic(c,fc(2,b.length));a=mc(a.ba);return b^a+2654435769+(b<<6)+(b>>2)}function pc(a,b){if(a.ta===b.ta)return 0;var c=Aa(a.ba);if(t(c?b.ba:c))return-1;if(t(a.ba)){if(Aa(b.ba))return 1;c=ha(a.ba,b.ba);return 0===c?ha(a.name,b.name):c}return ha(a.name,b.name)}
+function qc(a,b,c,d,e){this.ba=a;this.name=b;this.ta=c;this.Ya=d;this.Z=e;this.j=2154168321;this.q=4096}k=qc.prototype;k.v=function(a,b){return Lb(b,this.ta)};k.B=function(){var a=this.Ya;return null!=a?a:this.Ya=a=oc(this)};k.F=function(a,b){return new qc(this.ba,this.name,this.ta,this.Ya,b)};k.H=function(){return this.Z};
+k.call=function(){var a=null,a=function(a,c,d){switch(arguments.length){case 2:return $a.c(c,this,null);case 3:return $a.c(c,this,d)}throw Error("Invalid arity: "+arguments.length);};a.a=function(a,c){return $a.c(c,this,null)};a.c=function(a,c,d){return $a.c(c,this,d)};return a}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.b=function(a){return $a.c(a,this,null)};k.a=function(a,b){return $a.c(a,this,b)};k.A=function(a,b){return b instanceof qc?this.ta===b.ta:!1};
+k.toString=function(){return this.ta};var rc=function(){function a(a,b){var c=null!=a?[z(a),z("/"),z(b)].join(""):b;return new qc(a,b,c,null,null)}function b(a){return a instanceof qc?a:c.a(null,a)}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}();
+function D(a){if(null==a)return null;if(a&&(a.j&8388608||a.mc))return a.D(null);if(a instanceof Array||"string"===typeof a)return 0===a.length?null:new F(a,0);if(w(Bb,a))return Cb(a);throw Error([z(a),z(" is not ISeqable")].join(""));}function G(a){if(null==a)return null;if(a&&(a.j&64||a.jb))return a.N(null);a=D(a);return null==a?null:Va(a)}function H(a){return null!=a?a&&(a.j&64||a.jb)?a.S(null):(a=D(a))?Wa(a):J:J}function K(a){return null==a?null:a&&(a.j&128||a.xb)?a.T(null):D(H(a))}
+var sc=function(){function a(a,b){return null==a?null==b:a===b||yb(a,b)}var b=null,c=function(){function a(b,d,h){var l=null;if(2<arguments.length){for(var l=0,m=Array(arguments.length-2);l<m.length;)m[l]=arguments[l+2],++l;l=new F(m,0)}return c.call(this,b,d,l)}function c(a,d,e){for(;;)if(b.a(a,d))if(K(e))a=d,d=G(e),e=K(e);else return b.a(d,G(e));else return!1}a.i=2;a.f=function(a){var b=G(a);a=K(a);var d=G(a);a=H(a);return c(b,d,a)};a.d=c;return a}(),b=function(b,e,f){switch(arguments.length){case 1:return!0;
+case 2:return a.call(this,b,e);default:var g=null;if(2<arguments.length){for(var g=0,h=Array(arguments.length-2);g<h.length;)h[g]=arguments[g+2],++g;g=new F(h,0)}return c.d(b,e,g)}throw Error("Invalid arity: "+arguments.length);};b.i=2;b.f=c.f;b.b=function(){return!0};b.a=a;b.d=c.d;return b}();function tc(a){this.C=a}tc.prototype.next=function(){if(null!=this.C){var a=G(this.C);this.C=K(this.C);return{done:!1,value:a}}return{done:!0,value:null}};function uc(a){return new tc(D(a))}
+function vc(a,b){var c=gc(a),c=hc(0,c);return ic(c,b)}function wc(a){var b=0,c=1;for(a=D(a);;)if(null!=a)b+=1,c=fc(31,c)+nc(G(a))|0,a=K(a);else return vc(c,b)}function xc(a){var b=0,c=0;for(a=D(a);;)if(null!=a)b+=1,c=c+nc(G(a))|0,a=K(a);else return vc(c,b)}La["null"]=!0;Ma["null"]=function(){return 0};Date.prototype.A=function(a,b){return b instanceof Date&&this.toString()===b.toString()};yb.number=function(a,b){return a===b};rb["function"]=!0;sb["function"]=function(){return null};
+Ja["function"]=!0;zb._=function(a){return a[ba]||(a[ba]=++ca)};function yc(a){this.o=a;this.q=0;this.j=32768}yc.prototype.Ra=function(){return this.o};function Ac(a){return a instanceof yc}function Bc(a){return Ac(a)?L.b?L.b(a):L.call(null,a):a}function L(a){return qb(a)}
+var Cc=function(){function a(a,b,c,d){for(var l=Ma(a);;)if(d<l){var m=C.a(a,d);c=b.a?b.a(c,m):b.call(null,c,m);if(Ac(c))return qb(c);d+=1}else return c}function b(a,b,c){var d=Ma(a),l=c;for(c=0;;)if(c<d){var m=C.a(a,c),l=b.a?b.a(l,m):b.call(null,l,m);if(Ac(l))return qb(l);c+=1}else return l}function c(a,b){var c=Ma(a);if(0===c)return b.l?b.l():b.call(null);for(var d=C.a(a,0),l=1;;)if(l<c){var m=C.a(a,l),d=b.a?b.a(d,m):b.call(null,d,m);if(Ac(d))return qb(d);l+=1}else return d}var d=null,d=function(d,
+f,g,h){switch(arguments.length){case 2:return c.call(this,d,f);case 3:return b.call(this,d,f,g);case 4:return a.call(this,d,f,g,h)}throw Error("Invalid arity: "+arguments.length);};d.a=c;d.c=b;d.n=a;return d}(),Dc=function(){function a(a,b,c,d){for(var l=a.length;;)if(d<l){var m=a[d];c=b.a?b.a(c,m):b.call(null,c,m);if(Ac(c))return qb(c);d+=1}else return c}function b(a,b,c){var d=a.length,l=c;for(c=0;;)if(c<d){var m=a[c],l=b.a?b.a(l,m):b.call(null,l,m);if(Ac(l))return qb(l);c+=1}else return l}function c(a,
+b){var c=a.length;if(0===a.length)return b.l?b.l():b.call(null);for(var d=a[0],l=1;;)if(l<c){var m=a[l],d=b.a?b.a(d,m):b.call(null,d,m);if(Ac(d))return qb(d);l+=1}else return d}var d=null,d=function(d,f,g,h){switch(arguments.length){case 2:return c.call(this,d,f);case 3:return b.call(this,d,f,g);case 4:return a.call(this,d,f,g,h)}throw Error("Invalid arity: "+arguments.length);};d.a=c;d.c=b;d.n=a;return d}();function Ec(a){return a?a.j&2||a.cc?!0:a.j?!1:w(La,a):w(La,a)}
+function Fc(a){return a?a.j&16||a.Qb?!0:a.j?!1:w(Ta,a):w(Ta,a)}function Gc(a,b){this.e=a;this.m=b}Gc.prototype.ga=function(){return this.m<this.e.length};Gc.prototype.next=function(){var a=this.e[this.m];this.m+=1;return a};function F(a,b){this.e=a;this.m=b;this.j=166199550;this.q=8192}k=F.prototype;k.toString=function(){return ec(this)};k.Q=function(a,b){var c=b+this.m;return c<this.e.length?this.e[c]:null};k.$=function(a,b,c){a=b+this.m;return a<this.e.length?this.e[a]:c};k.vb=!0;
+k.fb=function(){return new Gc(this.e,this.m)};k.T=function(){return this.m+1<this.e.length?new F(this.e,this.m+1):null};k.L=function(){return this.e.length-this.m};k.ab=function(){var a=Ma(this);return 0<a?new Hc(this,a-1,null):null};k.B=function(){return wc(this)};k.A=function(a,b){return Ic.a?Ic.a(this,b):Ic.call(null,this,b)};k.J=function(){return J};k.R=function(a,b){return Dc.n(this.e,b,this.e[this.m],this.m+1)};k.O=function(a,b,c){return Dc.n(this.e,b,c,this.m)};k.N=function(){return this.e[this.m]};
+k.S=function(){return this.m+1<this.e.length?new F(this.e,this.m+1):J};k.D=function(){return this};k.G=function(a,b){return M.a?M.a(b,this):M.call(null,b,this)};F.prototype[Ea]=function(){return uc(this)};
+var Jc=function(){function a(a,b){return b<a.length?new F(a,b):null}function b(a){return c.a(a,0)}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),Kc=function(){function a(a,b){return Jc.a(a,b)}function b(a){return Jc.a(a,0)}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+
+arguments.length);};c.b=b;c.a=a;return c}();function Hc(a,b,c){this.qb=a;this.m=b;this.k=c;this.j=32374990;this.q=8192}k=Hc.prototype;k.toString=function(){return ec(this)};k.H=function(){return this.k};k.T=function(){return 0<this.m?new Hc(this.qb,this.m-1,null):null};k.L=function(){return this.m+1};k.B=function(){return wc(this)};k.A=function(a,b){return Ic.a?Ic.a(this,b):Ic.call(null,this,b)};k.J=function(){var a=this.k;return O.a?O.a(J,a):O.call(null,J,a)};
+k.R=function(a,b){return P.a?P.a(b,this):P.call(null,b,this)};k.O=function(a,b,c){return P.c?P.c(b,c,this):P.call(null,b,c,this)};k.N=function(){return C.a(this.qb,this.m)};k.S=function(){return 0<this.m?new Hc(this.qb,this.m-1,null):J};k.D=function(){return this};k.F=function(a,b){return new Hc(this.qb,this.m,b)};k.G=function(a,b){return M.a?M.a(b,this):M.call(null,b,this)};Hc.prototype[Ea]=function(){return uc(this)};function Lc(a){return G(K(a))}yb._=function(a,b){return a===b};
+var Nc=function(){function a(a,b){return null!=a?Ra(a,b):Ra(J,b)}var b=null,c=function(){function a(b,d,h){var l=null;if(2<arguments.length){for(var l=0,m=Array(arguments.length-2);l<m.length;)m[l]=arguments[l+2],++l;l=new F(m,0)}return c.call(this,b,d,l)}function c(a,d,e){for(;;)if(t(e))a=b.a(a,d),d=G(e),e=K(e);else return b.a(a,d)}a.i=2;a.f=function(a){var b=G(a);a=K(a);var d=G(a);a=H(a);return c(b,d,a)};a.d=c;return a}(),b=function(b,e,f){switch(arguments.length){case 0:return Mc;case 1:return b;
+case 2:return a.call(this,b,e);default:var g=null;if(2<arguments.length){for(var g=0,h=Array(arguments.length-2);g<h.length;)h[g]=arguments[g+2],++g;g=new F(h,0)}return c.d(b,e,g)}throw Error("Invalid arity: "+arguments.length);};b.i=2;b.f=c.f;b.l=function(){return Mc};b.b=function(a){return a};b.a=a;b.d=c.d;return b}();function Oc(a){return null==a?null:Na(a)}
+function Q(a){if(null!=a)if(a&&(a.j&2||a.cc))a=a.L(null);else if(a instanceof Array)a=a.length;else if("string"===typeof a)a=a.length;else if(w(La,a))a=Ma(a);else a:{a=D(a);for(var b=0;;){if(Ec(a)){a=b+Ma(a);break a}a=K(a);b+=1}a=void 0}else a=0;return a}
+var Pc=function(){function a(a,b,c){for(;;){if(null==a)return c;if(0===b)return D(a)?G(a):c;if(Fc(a))return C.c(a,b,c);if(D(a))a=K(a),b-=1;else return c}}function b(a,b){for(;;){if(null==a)throw Error("Index out of bounds");if(0===b){if(D(a))return G(a);throw Error("Index out of bounds");}if(Fc(a))return C.a(a,b);if(D(a)){var c=K(a),g=b-1;a=c;b=g}else throw Error("Index out of bounds");}}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,c,e);case 3:return a.call(this,
+c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=a;return c}(),R=function(){function a(a,b,c){if("number"!==typeof b)throw Error("index argument to nth must be a number.");if(null==a)return c;if(a&&(a.j&16||a.Qb))return a.$(null,b,c);if(a instanceof Array||"string"===typeof a)return b<a.length?a[b]:c;if(w(Ta,a))return C.a(a,b);if(a?a.j&64||a.jb||(a.j?0:w(Ua,a)):w(Ua,a))return Pc.c(a,b,c);throw Error([z("nth not supported on this type "),z(Da(Ba(a)))].join(""));}function b(a,b){if("number"!==
+typeof b)throw Error("index argument to nth must be a number");if(null==a)return a;if(a&&(a.j&16||a.Qb))return a.Q(null,b);if(a instanceof Array||"string"===typeof a)return b<a.length?a[b]:null;if(w(Ta,a))return C.a(a,b);if(a?a.j&64||a.jb||(a.j?0:w(Ua,a)):w(Ua,a))return Pc.a(a,b);throw Error([z("nth not supported on this type "),z(Da(Ba(a)))].join(""));}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,c,e);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+
+arguments.length);};c.a=b;c.c=a;return c}(),S=function(){function a(a,b,c){return null!=a?a&&(a.j&256||a.Rb)?a.s(null,b,c):a instanceof Array?b<a.length?a[b]:c:"string"===typeof a?b<a.length?a[b]:c:w(Za,a)?$a.c(a,b,c):c:c}function b(a,b){return null==a?null:a&&(a.j&256||a.Rb)?a.t(null,b):a instanceof Array?b<a.length?a[b]:null:"string"===typeof a?b<a.length?a[b]:null:w(Za,a)?$a.a(a,b):null}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,c,e);case 3:return a.call(this,
+c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=a;return c}(),Rc=function(){function a(a,b,c){if(null!=a)a=cb(a,b,c);else a:{a=[b];c=[c];b=a.length;for(var g=0,h=Ob(Qc);;)if(g<b)var l=g+1,h=h.kb(null,a[g],c[g]),g=l;else{a=Qb(h);break a}a=void 0}return a}var b=null,c=function(){function a(b,d,h,l){var m=null;if(3<arguments.length){for(var m=0,p=Array(arguments.length-3);m<p.length;)p[m]=arguments[m+3],++m;m=new F(p,0)}return c.call(this,b,d,h,m)}function c(a,d,e,l){for(;;)if(a=b.c(a,
+d,e),t(l))d=G(l),e=Lc(l),l=K(K(l));else return a}a.i=3;a.f=function(a){var b=G(a);a=K(a);var d=G(a);a=K(a);var l=G(a);a=H(a);return c(b,d,l,a)};a.d=c;return a}(),b=function(b,e,f,g){switch(arguments.length){case 3:return a.call(this,b,e,f);default:var h=null;if(3<arguments.length){for(var h=0,l=Array(arguments.length-3);h<l.length;)l[h]=arguments[h+3],++h;h=new F(l,0)}return c.d(b,e,f,h)}throw Error("Invalid arity: "+arguments.length);};b.i=3;b.f=c.f;b.c=a;b.d=c.d;return b}(),Sc=function(){function a(a,
+b){return null==a?null:eb(a,b)}var b=null,c=function(){function a(b,d,h){var l=null;if(2<arguments.length){for(var l=0,m=Array(arguments.length-2);l<m.length;)m[l]=arguments[l+2],++l;l=new F(m,0)}return c.call(this,b,d,l)}function c(a,d,e){for(;;){if(null==a)return null;a=b.a(a,d);if(t(e))d=G(e),e=K(e);else return a}}a.i=2;a.f=function(a){var b=G(a);a=K(a);var d=G(a);a=H(a);return c(b,d,a)};a.d=c;return a}(),b=function(b,e,f){switch(arguments.length){case 1:return b;case 2:return a.call(this,b,e);
+default:var g=null;if(2<arguments.length){for(var g=0,h=Array(arguments.length-2);g<h.length;)h[g]=arguments[g+2],++g;g=new F(h,0)}return c.d(b,e,g)}throw Error("Invalid arity: "+arguments.length);};b.i=2;b.f=c.f;b.b=function(a){return a};b.a=a;b.d=c.d;return b}();function Tc(a){var b="function"==n(a);return t(b)?b:a?t(t(null)?null:a.bc)?!0:a.yb?!1:w(Ja,a):w(Ja,a)}function Uc(a,b){this.h=a;this.k=b;this.q=0;this.j=393217}k=Uc.prototype;
+k.call=function(){function a(a,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E,N,Y,ra,I){a=this.h;return T.ub?T.ub(a,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E,N,Y,ra,I):T.call(null,a,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E,N,Y,ra,I)}function b(a,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E,N,Y,ra){a=this;return a.h.Fa?a.h.Fa(b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E,N,Y,ra):a.h.call(null,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E,N,Y,ra)}function c(a,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E,N,Y){a=this;return a.h.Ea?a.h.Ea(b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E,N,
+Y):a.h.call(null,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E,N,Y)}function d(a,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E,N){a=this;return a.h.Da?a.h.Da(b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E,N):a.h.call(null,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E,N)}function e(a,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E){a=this;return a.h.Ca?a.h.Ca(b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E):a.h.call(null,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B,E)}function f(a,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B){a=this;return a.h.Ba?a.h.Ba(b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B):a.h.call(null,
+b,c,d,e,f,g,h,l,m,p,q,u,s,v,y,B)}function g(a,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y){a=this;return a.h.Aa?a.h.Aa(b,c,d,e,f,g,h,l,m,p,q,u,s,v,y):a.h.call(null,b,c,d,e,f,g,h,l,m,p,q,u,s,v,y)}function h(a,b,c,d,e,f,g,h,l,m,p,q,u,s,v){a=this;return a.h.za?a.h.za(b,c,d,e,f,g,h,l,m,p,q,u,s,v):a.h.call(null,b,c,d,e,f,g,h,l,m,p,q,u,s,v)}function l(a,b,c,d,e,f,g,h,l,m,p,q,u,s){a=this;return a.h.ya?a.h.ya(b,c,d,e,f,g,h,l,m,p,q,u,s):a.h.call(null,b,c,d,e,f,g,h,l,m,p,q,u,s)}function m(a,b,c,d,e,f,g,h,l,m,p,q,u){a=this;
+return a.h.xa?a.h.xa(b,c,d,e,f,g,h,l,m,p,q,u):a.h.call(null,b,c,d,e,f,g,h,l,m,p,q,u)}function p(a,b,c,d,e,f,g,h,l,m,p,q){a=this;return a.h.wa?a.h.wa(b,c,d,e,f,g,h,l,m,p,q):a.h.call(null,b,c,d,e,f,g,h,l,m,p,q)}function q(a,b,c,d,e,f,g,h,l,m,p){a=this;return a.h.va?a.h.va(b,c,d,e,f,g,h,l,m,p):a.h.call(null,b,c,d,e,f,g,h,l,m,p)}function s(a,b,c,d,e,f,g,h,l,m){a=this;return a.h.Ha?a.h.Ha(b,c,d,e,f,g,h,l,m):a.h.call(null,b,c,d,e,f,g,h,l,m)}function u(a,b,c,d,e,f,g,h,l){a=this;return a.h.Ga?a.h.Ga(b,c,
+d,e,f,g,h,l):a.h.call(null,b,c,d,e,f,g,h,l)}function v(a,b,c,d,e,f,g,h){a=this;return a.h.ia?a.h.ia(b,c,d,e,f,g,h):a.h.call(null,b,c,d,e,f,g,h)}function y(a,b,c,d,e,f,g){a=this;return a.h.P?a.h.P(b,c,d,e,f,g):a.h.call(null,b,c,d,e,f,g)}function B(a,b,c,d,e,f){a=this;return a.h.r?a.h.r(b,c,d,e,f):a.h.call(null,b,c,d,e,f)}function E(a,b,c,d,e){a=this;return a.h.n?a.h.n(b,c,d,e):a.h.call(null,b,c,d,e)}function N(a,b,c,d){a=this;return a.h.c?a.h.c(b,c,d):a.h.call(null,b,c,d)}function Y(a,b,c){a=this;
+return a.h.a?a.h.a(b,c):a.h.call(null,b,c)}function ra(a,b){a=this;return a.h.b?a.h.b(b):a.h.call(null,b)}function Pa(a){a=this;return a.h.l?a.h.l():a.h.call(null)}var I=null,I=function(I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya,gb,ob,Ab,Wb,jc,zc,Zc,Gd,De,Wf,dh){switch(arguments.length){case 1:return Pa.call(this,I);case 2:return ra.call(this,I,qa);case 3:return Y.call(this,I,qa,ta);case 4:return N.call(this,I,qa,ta,va);case 5:return E.call(this,I,qa,ta,va,xa);case 6:return B.call(this,I,qa,ta,va,xa,Ca);case 7:return y.call(this,
+I,qa,ta,va,xa,Ca,Ga);case 8:return v.call(this,I,qa,ta,va,xa,Ca,Ga,Ka);case 9:return u.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa);case 10:return s.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa);case 11:return q.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya);case 12:return p.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya,gb);case 13:return m.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya,gb,ob);case 14:return l.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya,gb,ob,Ab);case 15:return h.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya,gb,
+ob,Ab,Wb);case 16:return g.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya,gb,ob,Ab,Wb,jc);case 17:return f.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya,gb,ob,Ab,Wb,jc,zc);case 18:return e.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya,gb,ob,Ab,Wb,jc,zc,Zc);case 19:return d.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya,gb,ob,Ab,Wb,jc,zc,Zc,Gd);case 20:return c.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya,gb,ob,Ab,Wb,jc,zc,Zc,Gd,De);case 21:return b.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya,gb,ob,Ab,Wb,jc,zc,Zc,Gd,De,
+Wf);case 22:return a.call(this,I,qa,ta,va,xa,Ca,Ga,Ka,Oa,Sa,Ya,gb,ob,Ab,Wb,jc,zc,Zc,Gd,De,Wf,dh)}throw Error("Invalid arity: "+arguments.length);};I.b=Pa;I.a=ra;I.c=Y;I.n=N;I.r=E;I.P=B;I.ia=y;I.Ga=v;I.Ha=u;I.va=s;I.wa=q;I.xa=p;I.ya=m;I.za=l;I.Aa=h;I.Ba=g;I.Ca=f;I.Da=e;I.Ea=d;I.Fa=c;I.hc=b;I.ub=a;return I}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.l=function(){return this.h.l?this.h.l():this.h.call(null)};
+k.b=function(a){return this.h.b?this.h.b(a):this.h.call(null,a)};k.a=function(a,b){return this.h.a?this.h.a(a,b):this.h.call(null,a,b)};k.c=function(a,b,c){return this.h.c?this.h.c(a,b,c):this.h.call(null,a,b,c)};k.n=function(a,b,c,d){return this.h.n?this.h.n(a,b,c,d):this.h.call(null,a,b,c,d)};k.r=function(a,b,c,d,e){return this.h.r?this.h.r(a,b,c,d,e):this.h.call(null,a,b,c,d,e)};k.P=function(a,b,c,d,e,f){return this.h.P?this.h.P(a,b,c,d,e,f):this.h.call(null,a,b,c,d,e,f)};
+k.ia=function(a,b,c,d,e,f,g){return this.h.ia?this.h.ia(a,b,c,d,e,f,g):this.h.call(null,a,b,c,d,e,f,g)};k.Ga=function(a,b,c,d,e,f,g,h){return this.h.Ga?this.h.Ga(a,b,c,d,e,f,g,h):this.h.call(null,a,b,c,d,e,f,g,h)};k.Ha=function(a,b,c,d,e,f,g,h,l){return this.h.Ha?this.h.Ha(a,b,c,d,e,f,g,h,l):this.h.call(null,a,b,c,d,e,f,g,h,l)};k.va=function(a,b,c,d,e,f,g,h,l,m){return this.h.va?this.h.va(a,b,c,d,e,f,g,h,l,m):this.h.call(null,a,b,c,d,e,f,g,h,l,m)};
+k.wa=function(a,b,c,d,e,f,g,h,l,m,p){return this.h.wa?this.h.wa(a,b,c,d,e,f,g,h,l,m,p):this.h.call(null,a,b,c,d,e,f,g,h,l,m,p)};k.xa=function(a,b,c,d,e,f,g,h,l,m,p,q){return this.h.xa?this.h.xa(a,b,c,d,e,f,g,h,l,m,p,q):this.h.call(null,a,b,c,d,e,f,g,h,l,m,p,q)};k.ya=function(a,b,c,d,e,f,g,h,l,m,p,q,s){return this.h.ya?this.h.ya(a,b,c,d,e,f,g,h,l,m,p,q,s):this.h.call(null,a,b,c,d,e,f,g,h,l,m,p,q,s)};
+k.za=function(a,b,c,d,e,f,g,h,l,m,p,q,s,u){return this.h.za?this.h.za(a,b,c,d,e,f,g,h,l,m,p,q,s,u):this.h.call(null,a,b,c,d,e,f,g,h,l,m,p,q,s,u)};k.Aa=function(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v){return this.h.Aa?this.h.Aa(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v):this.h.call(null,a,b,c,d,e,f,g,h,l,m,p,q,s,u,v)};k.Ba=function(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y){return this.h.Ba?this.h.Ba(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y):this.h.call(null,a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y)};
+k.Ca=function(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B){return this.h.Ca?this.h.Ca(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B):this.h.call(null,a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B)};k.Da=function(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E){return this.h.Da?this.h.Da(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E):this.h.call(null,a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E)};
+k.Ea=function(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N){return this.h.Ea?this.h.Ea(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N):this.h.call(null,a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N)};k.Fa=function(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y){return this.h.Fa?this.h.Fa(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y):this.h.call(null,a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y)};
+k.hc=function(a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y,ra){var Pa=this.h;return T.ub?T.ub(Pa,a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y,ra):T.call(null,Pa,a,b,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y,ra)};k.bc=!0;k.F=function(a,b){return new Uc(this.h,b)};k.H=function(){return this.k};function O(a,b){return Tc(a)&&!(a?a.j&262144||a.Bc||(a.j?0:w(tb,a)):w(tb,a))?new Uc(a,b):null==a?null:ub(a,b)}function Vc(a){var b=null!=a;return(b?a?a.j&131072||a.kc||(a.j?0:w(rb,a)):w(rb,a):b)?sb(a):null}
+function Wc(a){return null==a?null:lb(a)}
+var Xc=function(){function a(a,b){return null==a?null:kb(a,b)}var b=null,c=function(){function a(b,d,h){var l=null;if(2<arguments.length){for(var l=0,m=Array(arguments.length-2);l<m.length;)m[l]=arguments[l+2],++l;l=new F(m,0)}return c.call(this,b,d,l)}function c(a,d,e){for(;;){if(null==a)return null;a=b.a(a,d);if(t(e))d=G(e),e=K(e);else return a}}a.i=2;a.f=function(a){var b=G(a);a=K(a);var d=G(a);a=H(a);return c(b,d,a)};a.d=c;return a}(),b=function(b,e,f){switch(arguments.length){case 1:return b;case 2:return a.call(this,
+b,e);default:var g=null;if(2<arguments.length){for(var g=0,h=Array(arguments.length-2);g<h.length;)h[g]=arguments[g+2],++g;g=new F(h,0)}return c.d(b,e,g)}throw Error("Invalid arity: "+arguments.length);};b.i=2;b.f=c.f;b.b=function(a){return a};b.a=a;b.d=c.d;return b}();function Yc(a){return null==a||Aa(D(a))}function $c(a){return null==a?!1:a?a.j&8||a.tc?!0:a.j?!1:w(Qa,a):w(Qa,a)}function ad(a){return null==a?!1:a?a.j&4096||a.zc?!0:a.j?!1:w(jb,a):w(jb,a)}
+function bd(a){return a?a.j&512||a.rc?!0:a.j?!1:w(ab,a):w(ab,a)}function cd(a){return a?a.j&16777216||a.yc?!0:a.j?!1:w(Db,a):w(Db,a)}function dd(a){return null==a?!1:a?a.j&1024||a.ic?!0:a.j?!1:w(db,a):w(db,a)}function ed(a){return a?a.j&16384||a.Ac?!0:a.j?!1:w(nb,a):w(nb,a)}function fd(a){return a?a.q&512||a.sc?!0:!1:!1}function gd(a){var b=[];ea(a,function(a,b){return function(a,c){return b.push(c)}}(a,b));return b}function hd(a,b,c,d,e){for(;0!==e;)c[d]=a[b],d+=1,e-=1,b+=1}
+function id(a,b,c,d,e){b+=e-1;for(d+=e-1;0!==e;)c[d]=a[b],d-=1,e-=1,b-=1}var jd={};function kd(a){return null==a?!1:a?a.j&64||a.jb?!0:a.j?!1:w(Ua,a):w(Ua,a)}function ld(a){return a?a.j&8388608||a.mc?!0:a.j?!1:w(Bb,a):w(Bb,a)}function md(a){return t(a)?!0:!1}function nd(a,b){return S.c(a,b,jd)===jd?!1:!0}
+function od(a,b){if(a===b)return 0;if(null==a)return-1;if(null==b)return 1;if(Ba(a)===Ba(b))return a&&(a.q&2048||a.sb)?a.tb(null,b):ha(a,b);throw Error("compare on non-nil objects of different types");}
+var pd=function(){function a(a,b,c,g){for(;;){var h=od(R.a(a,g),R.a(b,g));if(0===h&&g+1<c)g+=1;else return h}}function b(a,b){var f=Q(a),g=Q(b);return f<g?-1:f>g?1:c.n(a,b,f,0)}var c=null,c=function(c,e,f,g){switch(arguments.length){case 2:return b.call(this,c,e);case 4:return a.call(this,c,e,f,g)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.n=a;return c}();
+function qd(a){return sc.a(a,od)?od:function(b,c){var d=a.a?a.a(b,c):a.call(null,b,c);return"number"===typeof d?d:t(d)?-1:t(a.a?a.a(c,b):a.call(null,c,b))?1:0}}
+var sd=function(){function a(a,b){if(D(b)){var c=rd.b?rd.b(b):rd.call(null,b),g=qd(a);ia(c,g);return D(c)}return J}function b(a){return c.a(od,a)}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),td=function(){function a(a,b,c){return sd.a(function(c,f){return qd(b).call(null,a.b?a.b(c):a.call(null,c),a.b?a.b(f):a.call(null,f))},c)}function b(a,b){return c.c(a,od,
+b)}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,c,e);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=a;return c}(),P=function(){function a(a,b,c){for(c=D(c);;)if(c){var g=G(c);b=a.a?a.a(b,g):a.call(null,b,g);if(Ac(b))return qb(b);c=K(c)}else return b}function b(a,b){var c=D(b);if(c){var g=G(c),c=K(c);return A.c?A.c(a,g,c):A.call(null,a,g,c)}return a.l?a.l():a.call(null)}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,
+c,e);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=a;return c}(),A=function(){function a(a,b,c){return c&&(c.j&524288||c.Sb)?c.O(null,a,b):c instanceof Array?Dc.c(c,a,b):"string"===typeof c?Dc.c(c,a,b):w(vb,c)?wb.c(c,a,b):P.c(a,b,c)}function b(a,b){return b&&(b.j&524288||b.Sb)?b.R(null,a):b instanceof Array?Dc.a(b,a):"string"===typeof b?Dc.a(b,a):w(vb,b)?wb.a(b,a):P.a(a,b)}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,
+c,e);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=a;return c}();function ud(a){return a}
+var vd=function(){function a(a,b){return function(){function c(b,e){return a.a?a.a(b,e):a.call(null,b,e)}function g(a){return b.b?b.b(a):b.call(null,a)}function h(){return a.l?a.l():a.call(null)}var l=null,l=function(a,b){switch(arguments.length){case 0:return h.call(this);case 1:return g.call(this,a);case 2:return c.call(this,a,b)}throw Error("Invalid arity: "+arguments.length);};l.l=h;l.b=g;l.a=c;return l}()}function b(a){return c.a(a,ud)}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,
+c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),wd=function(){function a(a,b,c,g){a=a.b?a.b(b):a.call(null,b);c=A.c(a,c,g);return a.b?a.b(c):a.call(null,c)}function b(a,b,f){return c.n(a,b,b.l?b.l():b.call(null),f)}var c=null,c=function(c,e,f,g){switch(arguments.length){case 3:return b.call(this,c,e,f);case 4:return a.call(this,c,e,f,g)}throw Error("Invalid arity: "+arguments.length);};c.c=b;c.n=a;return c}(),xd=function(){var a=null,b=function(){function b(a,
+c,g){var h=null;if(2<arguments.length){for(var h=0,l=Array(arguments.length-2);h<l.length;)l[h]=arguments[h+2],++h;h=new F(l,0)}return d.call(this,a,c,h)}function d(b,c,d){return A.c(a,b+c,d)}b.i=2;b.f=function(a){var b=G(a);a=K(a);var c=G(a);a=H(a);return d(b,c,a)};b.d=d;return b}(),a=function(a,d,e){switch(arguments.length){case 0:return 0;case 1:return a;case 2:return a+d;default:var f=null;if(2<arguments.length){for(var f=0,g=Array(arguments.length-2);f<g.length;)g[f]=arguments[f+2],++f;f=new F(g,
+0)}return b.d(a,d,f)}throw Error("Invalid arity: "+arguments.length);};a.i=2;a.f=b.f;a.l=function(){return 0};a.b=function(a){return a};a.a=function(a,b){return a+b};a.d=b.d;return a}(),yd=function(){var a=null,b=function(){function a(c,f,g){var h=null;if(2<arguments.length){for(var h=0,l=Array(arguments.length-2);h<l.length;)l[h]=arguments[h+2],++h;h=new F(l,0)}return b.call(this,c,f,h)}function b(a,c,d){for(;;)if(a<c)if(K(d))a=c,c=G(d),d=K(d);else return c<G(d);else return!1}a.i=2;a.f=function(a){var c=
+G(a);a=K(a);var g=G(a);a=H(a);return b(c,g,a)};a.d=b;return a}(),a=function(a,d,e){switch(arguments.length){case 1:return!0;case 2:return a<d;default:var f=null;if(2<arguments.length){for(var f=0,g=Array(arguments.length-2);f<g.length;)g[f]=arguments[f+2],++f;f=new F(g,0)}return b.d(a,d,f)}throw Error("Invalid arity: "+arguments.length);};a.i=2;a.f=b.f;a.b=function(){return!0};a.a=function(a,b){return a<b};a.d=b.d;return a}(),zd=function(){var a=null,b=function(){function a(c,f,g){var h=null;if(2<
+arguments.length){for(var h=0,l=Array(arguments.length-2);h<l.length;)l[h]=arguments[h+2],++h;h=new F(l,0)}return b.call(this,c,f,h)}function b(a,c,d){for(;;)if(a<=c)if(K(d))a=c,c=G(d),d=K(d);else return c<=G(d);else return!1}a.i=2;a.f=function(a){var c=G(a);a=K(a);var g=G(a);a=H(a);return b(c,g,a)};a.d=b;return a}(),a=function(a,d,e){switch(arguments.length){case 1:return!0;case 2:return a<=d;default:var f=null;if(2<arguments.length){for(var f=0,g=Array(arguments.length-2);f<g.length;)g[f]=arguments[f+
+2],++f;f=new F(g,0)}return b.d(a,d,f)}throw Error("Invalid arity: "+arguments.length);};a.i=2;a.f=b.f;a.b=function(){return!0};a.a=function(a,b){return a<=b};a.d=b.d;return a}(),Ad=function(){var a=null,b=function(){function a(c,f,g){var h=null;if(2<arguments.length){for(var h=0,l=Array(arguments.length-2);h<l.length;)l[h]=arguments[h+2],++h;h=new F(l,0)}return b.call(this,c,f,h)}function b(a,c,d){for(;;)if(a>c)if(K(d))a=c,c=G(d),d=K(d);else return c>G(d);else return!1}a.i=2;a.f=function(a){var c=
+G(a);a=K(a);var g=G(a);a=H(a);return b(c,g,a)};a.d=b;return a}(),a=function(a,d,e){switch(arguments.length){case 1:return!0;case 2:return a>d;default:var f=null;if(2<arguments.length){for(var f=0,g=Array(arguments.length-2);f<g.length;)g[f]=arguments[f+2],++f;f=new F(g,0)}return b.d(a,d,f)}throw Error("Invalid arity: "+arguments.length);};a.i=2;a.f=b.f;a.b=function(){return!0};a.a=function(a,b){return a>b};a.d=b.d;return a}(),Bd=function(){var a=null,b=function(){function a(c,f,g){var h=null;if(2<
+arguments.length){for(var h=0,l=Array(arguments.length-2);h<l.length;)l[h]=arguments[h+2],++h;h=new F(l,0)}return b.call(this,c,f,h)}function b(a,c,d){for(;;)if(a>=c)if(K(d))a=c,c=G(d),d=K(d);else return c>=G(d);else return!1}a.i=2;a.f=function(a){var c=G(a);a=K(a);var g=G(a);a=H(a);return b(c,g,a)};a.d=b;return a}(),a=function(a,d,e){switch(arguments.length){case 1:return!0;case 2:return a>=d;default:var f=null;if(2<arguments.length){for(var f=0,g=Array(arguments.length-2);f<g.length;)g[f]=arguments[f+
+2],++f;f=new F(g,0)}return b.d(a,d,f)}throw Error("Invalid arity: "+arguments.length);};a.i=2;a.f=b.f;a.b=function(){return!0};a.a=function(a,b){return a>=b};a.d=b.d;return a}();function Cd(a,b){var c=(a-a%b)/b;return 0<=c?Math.floor.b?Math.floor.b(c):Math.floor.call(null,c):Math.ceil.b?Math.ceil.b(c):Math.ceil.call(null,c)}function Dd(a){a-=a>>1&1431655765;a=(a&858993459)+(a>>2&858993459);return 16843009*(a+(a>>4)&252645135)>>24}
+function Ed(a){var b=1;for(a=D(a);;)if(a&&0<b)b-=1,a=K(a);else return a}
+var z=function(){function a(a){return null==a?"":da(a)}var b=null,c=function(){function a(b,d){var h=null;if(1<arguments.length){for(var h=0,l=Array(arguments.length-1);h<l.length;)l[h]=arguments[h+1],++h;h=new F(l,0)}return c.call(this,b,h)}function c(a,d){for(var e=new fa(b.b(a)),l=d;;)if(t(l))e=e.append(b.b(G(l))),l=K(l);else return e.toString()}a.i=1;a.f=function(a){var b=G(a);a=H(a);return c(b,a)};a.d=c;return a}(),b=function(b,e){switch(arguments.length){case 0:return"";case 1:return a.call(this,
+b);default:var f=null;if(1<arguments.length){for(var f=0,g=Array(arguments.length-1);f<g.length;)g[f]=arguments[f+1],++f;f=new F(g,0)}return c.d(b,f)}throw Error("Invalid arity: "+arguments.length);};b.i=1;b.f=c.f;b.l=function(){return""};b.b=a;b.d=c.d;return b}();function Ic(a,b){var c;if(cd(b))if(Ec(a)&&Ec(b)&&Q(a)!==Q(b))c=!1;else a:{c=D(a);for(var d=D(b);;){if(null==c){c=null==d;break a}if(null!=d&&sc.a(G(c),G(d)))c=K(c),d=K(d);else{c=!1;break a}}c=void 0}else c=null;return md(c)}
+function Fd(a,b,c,d,e){this.k=a;this.first=b;this.M=c;this.count=d;this.p=e;this.j=65937646;this.q=8192}k=Fd.prototype;k.toString=function(){return ec(this)};k.H=function(){return this.k};k.T=function(){return 1===this.count?null:this.M};k.L=function(){return this.count};k.La=function(){return this.first};k.Ma=function(){return Wa(this)};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return ub(J,this.k)};
+k.R=function(a,b){return P.a(b,this)};k.O=function(a,b,c){return P.c(b,c,this)};k.N=function(){return this.first};k.S=function(){return 1===this.count?J:this.M};k.D=function(){return this};k.F=function(a,b){return new Fd(b,this.first,this.M,this.count,this.p)};k.G=function(a,b){return new Fd(this.k,b,this,this.count+1,null)};Fd.prototype[Ea]=function(){return uc(this)};function Hd(a){this.k=a;this.j=65937614;this.q=8192}k=Hd.prototype;k.toString=function(){return ec(this)};k.H=function(){return this.k};
+k.T=function(){return null};k.L=function(){return 0};k.La=function(){return null};k.Ma=function(){throw Error("Can't pop empty list");};k.B=function(){return 0};k.A=function(a,b){return Ic(this,b)};k.J=function(){return this};k.R=function(a,b){return P.a(b,this)};k.O=function(a,b,c){return P.c(b,c,this)};k.N=function(){return null};k.S=function(){return J};k.D=function(){return null};k.F=function(a,b){return new Hd(b)};k.G=function(a,b){return new Fd(this.k,b,null,1,null)};var J=new Hd(null);
+Hd.prototype[Ea]=function(){return uc(this)};function Id(a){return a?a.j&134217728||a.xc?!0:a.j?!1:w(Fb,a):w(Fb,a)}function Jd(a){return Id(a)?Gb(a):A.c(Nc,J,a)}
+var Kd=function(){function a(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return b.call(this,d)}function b(a){var b;if(a instanceof F&&0===a.m)b=a.e;else a:{for(b=[];;)if(null!=a)b.push(a.N(null)),a=a.T(null);else break a;b=void 0}a=b.length;for(var e=J;;)if(0<a){var f=a-1,e=e.G(null,b[a-1]);a=f}else return e}a.i=0;a.f=function(a){a=D(a);return b(a)};a.d=b;return a}();
+function Ld(a,b,c,d){this.k=a;this.first=b;this.M=c;this.p=d;this.j=65929452;this.q=8192}k=Ld.prototype;k.toString=function(){return ec(this)};k.H=function(){return this.k};k.T=function(){return null==this.M?null:D(this.M)};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(J,this.k)};k.R=function(a,b){return P.a(b,this)};k.O=function(a,b,c){return P.c(b,c,this)};k.N=function(){return this.first};
+k.S=function(){return null==this.M?J:this.M};k.D=function(){return this};k.F=function(a,b){return new Ld(b,this.first,this.M,this.p)};k.G=function(a,b){return new Ld(null,b,this,this.p)};Ld.prototype[Ea]=function(){return uc(this)};function M(a,b){var c=null==b;return(c?c:b&&(b.j&64||b.jb))?new Ld(null,a,b,null):new Ld(null,a,D(b),null)}
+function Md(a,b){if(a.pa===b.pa)return 0;var c=Aa(a.ba);if(t(c?b.ba:c))return-1;if(t(a.ba)){if(Aa(b.ba))return 1;c=ha(a.ba,b.ba);return 0===c?ha(a.name,b.name):c}return ha(a.name,b.name)}function U(a,b,c,d){this.ba=a;this.name=b;this.pa=c;this.Ya=d;this.j=2153775105;this.q=4096}k=U.prototype;k.v=function(a,b){return Lb(b,[z(":"),z(this.pa)].join(""))};k.B=function(){var a=this.Ya;return null!=a?a:this.Ya=a=oc(this)+2654435769|0};
+k.call=function(){var a=null,a=function(a,c,d){switch(arguments.length){case 2:return S.a(c,this);case 3:return S.c(c,this,d)}throw Error("Invalid arity: "+arguments.length);};a.a=function(a,c){return S.a(c,this)};a.c=function(a,c,d){return S.c(c,this,d)};return a}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.b=function(a){return S.a(a,this)};k.a=function(a,b){return S.c(a,this,b)};k.A=function(a,b){return b instanceof U?this.pa===b.pa:!1};
+k.toString=function(){return[z(":"),z(this.pa)].join("")};function Nd(a,b){return a===b?!0:a instanceof U&&b instanceof U?a.pa===b.pa:!1}
+var Pd=function(){function a(a,b){return new U(a,b,[z(t(a)?[z(a),z("/")].join(""):null),z(b)].join(""),null)}function b(a){if(a instanceof U)return a;if(a instanceof qc){var b;if(a&&(a.q&4096||a.lc))b=a.ba;else throw Error([z("Doesn't support namespace: "),z(a)].join(""));return new U(b,Od.b?Od.b(a):Od.call(null,a),a.ta,null)}return"string"===typeof a?(b=a.split("/"),2===b.length?new U(b[0],b[1],a,null):new U(null,b[0],a,null)):null}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,
+c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}();function V(a,b,c,d){this.k=a;this.cb=b;this.C=c;this.p=d;this.q=0;this.j=32374988}k=V.prototype;k.toString=function(){return ec(this)};function Qd(a){null!=a.cb&&(a.C=a.cb.l?a.cb.l():a.cb.call(null),a.cb=null);return a.C}k.H=function(){return this.k};k.T=function(){Cb(this);return null==this.C?null:K(this.C)};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};
+k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(J,this.k)};k.R=function(a,b){return P.a(b,this)};k.O=function(a,b,c){return P.c(b,c,this)};k.N=function(){Cb(this);return null==this.C?null:G(this.C)};k.S=function(){Cb(this);return null!=this.C?H(this.C):J};k.D=function(){Qd(this);if(null==this.C)return null;for(var a=this.C;;)if(a instanceof V)a=Qd(a);else return this.C=a,D(this.C)};k.F=function(a,b){return new V(b,this.cb,this.C,this.p)};k.G=function(a,b){return M(b,this)};
+V.prototype[Ea]=function(){return uc(this)};function Rd(a,b){this.Ab=a;this.end=b;this.q=0;this.j=2}Rd.prototype.L=function(){return this.end};Rd.prototype.add=function(a){this.Ab[this.end]=a;return this.end+=1};Rd.prototype.ca=function(){var a=new Sd(this.Ab,0,this.end);this.Ab=null;return a};function Td(a){return new Rd(Array(a),0)}function Sd(a,b,c){this.e=a;this.V=b;this.end=c;this.q=0;this.j=524306}k=Sd.prototype;k.R=function(a,b){return Dc.n(this.e,b,this.e[this.V],this.V+1)};
+k.O=function(a,b,c){return Dc.n(this.e,b,c,this.V)};k.Pb=function(){if(this.V===this.end)throw Error("-drop-first of empty chunk");return new Sd(this.e,this.V+1,this.end)};k.Q=function(a,b){return this.e[this.V+b]};k.$=function(a,b,c){return 0<=b&&b<this.end-this.V?this.e[this.V+b]:c};k.L=function(){return this.end-this.V};
+var Ud=function(){function a(a,b,c){return new Sd(a,b,c)}function b(a,b){return new Sd(a,b,a.length)}function c(a){return new Sd(a,0,a.length)}var d=null,d=function(d,f,g){switch(arguments.length){case 1:return c.call(this,d);case 2:return b.call(this,d,f);case 3:return a.call(this,d,f,g)}throw Error("Invalid arity: "+arguments.length);};d.b=c;d.a=b;d.c=a;return d}();function Vd(a,b,c,d){this.ca=a;this.ra=b;this.k=c;this.p=d;this.j=31850732;this.q=1536}k=Vd.prototype;k.toString=function(){return ec(this)};
+k.H=function(){return this.k};k.T=function(){if(1<Ma(this.ca))return new Vd(Xb(this.ca),this.ra,this.k,null);var a=Cb(this.ra);return null==a?null:a};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(J,this.k)};k.N=function(){return C.a(this.ca,0)};k.S=function(){return 1<Ma(this.ca)?new Vd(Xb(this.ca),this.ra,this.k,null):null==this.ra?J:this.ra};k.D=function(){return this};k.Cb=function(){return this.ca};
+k.Db=function(){return null==this.ra?J:this.ra};k.F=function(a,b){return new Vd(this.ca,this.ra,b,this.p)};k.G=function(a,b){return M(b,this)};k.Bb=function(){return null==this.ra?null:this.ra};Vd.prototype[Ea]=function(){return uc(this)};function Wd(a,b){return 0===Ma(a)?b:new Vd(a,b,null,null)}function Xd(a,b){a.add(b)}function rd(a){for(var b=[];;)if(D(a))b.push(G(a)),a=K(a);else return b}function Yd(a,b){if(Ec(a))return Q(a);for(var c=a,d=b,e=0;;)if(0<d&&D(c))c=K(c),d-=1,e+=1;else return e}
+var $d=function Zd(b){return null==b?null:null==K(b)?D(G(b)):M(G(b),Zd(K(b)))},ae=function(){function a(a,b){return new V(null,function(){var c=D(a);return c?fd(c)?Wd(Yb(c),d.a(Zb(c),b)):M(G(c),d.a(H(c),b)):b},null,null)}function b(a){return new V(null,function(){return a},null,null)}function c(){return new V(null,function(){return null},null,null)}var d=null,e=function(){function a(c,d,e){var f=null;if(2<arguments.length){for(var f=0,q=Array(arguments.length-2);f<q.length;)q[f]=arguments[f+2],++f;
+f=new F(q,0)}return b.call(this,c,d,f)}function b(a,c,e){return function q(a,b){return new V(null,function(){var c=D(a);return c?fd(c)?Wd(Yb(c),q(Zb(c),b)):M(G(c),q(H(c),b)):t(b)?q(G(b),K(b)):null},null,null)}(d.a(a,c),e)}a.i=2;a.f=function(a){var c=G(a);a=K(a);var d=G(a);a=H(a);return b(c,d,a)};a.d=b;return a}(),d=function(d,g,h){switch(arguments.length){case 0:return c.call(this);case 1:return b.call(this,d);case 2:return a.call(this,d,g);default:var l=null;if(2<arguments.length){for(var l=0,m=
+Array(arguments.length-2);l<m.length;)m[l]=arguments[l+2],++l;l=new F(m,0)}return e.d(d,g,l)}throw Error("Invalid arity: "+arguments.length);};d.i=2;d.f=e.f;d.l=c;d.b=b;d.a=a;d.d=e.d;return d}(),be=function(){function a(a,b,c,d){return M(a,M(b,M(c,d)))}function b(a,b,c){return M(a,M(b,c))}var c=null,d=function(){function a(c,d,e,m,p){var q=null;if(4<arguments.length){for(var q=0,s=Array(arguments.length-4);q<s.length;)s[q]=arguments[q+4],++q;q=new F(s,0)}return b.call(this,c,d,e,m,q)}function b(a,
+c,d,e,f){return M(a,M(c,M(d,M(e,$d(f)))))}a.i=4;a.f=function(a){var c=G(a);a=K(a);var d=G(a);a=K(a);var e=G(a);a=K(a);var p=G(a);a=H(a);return b(c,d,e,p,a)};a.d=b;return a}(),c=function(c,f,g,h,l){switch(arguments.length){case 1:return D(c);case 2:return M(c,f);case 3:return b.call(this,c,f,g);case 4:return a.call(this,c,f,g,h);default:var m=null;if(4<arguments.length){for(var m=0,p=Array(arguments.length-4);m<p.length;)p[m]=arguments[m+4],++m;m=new F(p,0)}return d.d(c,f,g,h,m)}throw Error("Invalid arity: "+
+arguments.length);};c.i=4;c.f=d.f;c.b=function(a){return D(a)};c.a=function(a,b){return M(a,b)};c.c=b;c.n=a;c.d=d.d;return c}();function ce(a){return Qb(a)}
+var de=function(){function a(){return Ob(Mc)}var b=null,c=function(){function a(c,d,h){var l=null;if(2<arguments.length){for(var l=0,m=Array(arguments.length-2);l<m.length;)m[l]=arguments[l+2],++l;l=new F(m,0)}return b.call(this,c,d,l)}function b(a,c,d){for(;;)if(a=Pb(a,c),t(d))c=G(d),d=K(d);else return a}a.i=2;a.f=function(a){var c=G(a);a=K(a);var d=G(a);a=H(a);return b(c,d,a)};a.d=b;return a}(),b=function(b,e,f){switch(arguments.length){case 0:return a.call(this);case 1:return b;case 2:return Pb(b,
+e);default:var g=null;if(2<arguments.length){for(var g=0,h=Array(arguments.length-2);g<h.length;)h[g]=arguments[g+2],++g;g=new F(h,0)}return c.d(b,e,g)}throw Error("Invalid arity: "+arguments.length);};b.i=2;b.f=c.f;b.l=a;b.b=function(a){return a};b.a=function(a,b){return Pb(a,b)};b.d=c.d;return b}(),ee=function(){var a=null,b=function(){function a(c,f,g,h){var l=null;if(3<arguments.length){for(var l=0,m=Array(arguments.length-3);l<m.length;)m[l]=arguments[l+3],++l;l=new F(m,0)}return b.call(this,
+c,f,g,l)}function b(a,c,d,h){for(;;)if(a=Rb(a,c,d),t(h))c=G(h),d=Lc(h),h=K(K(h));else return a}a.i=3;a.f=function(a){var c=G(a);a=K(a);var g=G(a);a=K(a);var h=G(a);a=H(a);return b(c,g,h,a)};a.d=b;return a}(),a=function(a,d,e,f){switch(arguments.length){case 3:return Rb(a,d,e);default:var g=null;if(3<arguments.length){for(var g=0,h=Array(arguments.length-3);g<h.length;)h[g]=arguments[g+3],++g;g=new F(h,0)}return b.d(a,d,e,g)}throw Error("Invalid arity: "+arguments.length);};a.i=3;a.f=b.f;a.c=function(a,
+b,e){return Rb(a,b,e)};a.d=b.d;return a}(),fe=function(){var a=null,b=function(){function a(c,f,g){var h=null;if(2<arguments.length){for(var h=0,l=Array(arguments.length-2);h<l.length;)l[h]=arguments[h+2],++h;h=new F(l,0)}return b.call(this,c,f,h)}function b(a,c,d){for(;;)if(a=Sb(a,c),t(d))c=G(d),d=K(d);else return a}a.i=2;a.f=function(a){var c=G(a);a=K(a);var g=G(a);a=H(a);return b(c,g,a)};a.d=b;return a}(),a=function(a,d,e){switch(arguments.length){case 2:return Sb(a,d);default:var f=null;if(2<
+arguments.length){for(var f=0,g=Array(arguments.length-2);f<g.length;)g[f]=arguments[f+2],++f;f=new F(g,0)}return b.d(a,d,f)}throw Error("Invalid arity: "+arguments.length);};a.i=2;a.f=b.f;a.a=function(a,b){return Sb(a,b)};a.d=b.d;return a}(),ge=function(){var a=null,b=function(){function a(c,f,g){var h=null;if(2<arguments.length){for(var h=0,l=Array(arguments.length-2);h<l.length;)l[h]=arguments[h+2],++h;h=new F(l,0)}return b.call(this,c,f,h)}function b(a,c,d){for(;;)if(a=Vb(a,c),t(d))c=G(d),d=K(d);
+else return a}a.i=2;a.f=function(a){var c=G(a);a=K(a);var g=G(a);a=H(a);return b(c,g,a)};a.d=b;return a}(),a=function(a,d,e){switch(arguments.length){case 2:return Vb(a,d);default:var f=null;if(2<arguments.length){for(var f=0,g=Array(arguments.length-2);f<g.length;)g[f]=arguments[f+2],++f;f=new F(g,0)}return b.d(a,d,f)}throw Error("Invalid arity: "+arguments.length);};a.i=2;a.f=b.f;a.a=function(a,b){return Vb(a,b)};a.d=b.d;return a}();
+function he(a,b,c){var d=D(c);if(0===b)return a.l?a.l():a.call(null);c=Va(d);var e=Wa(d);if(1===b)return a.b?a.b(c):a.b?a.b(c):a.call(null,c);var d=Va(e),f=Wa(e);if(2===b)return a.a?a.a(c,d):a.a?a.a(c,d):a.call(null,c,d);var e=Va(f),g=Wa(f);if(3===b)return a.c?a.c(c,d,e):a.c?a.c(c,d,e):a.call(null,c,d,e);var f=Va(g),h=Wa(g);if(4===b)return a.n?a.n(c,d,e,f):a.n?a.n(c,d,e,f):a.call(null,c,d,e,f);var g=Va(h),l=Wa(h);if(5===b)return a.r?a.r(c,d,e,f,g):a.r?a.r(c,d,e,f,g):a.call(null,c,d,e,f,g);var h=Va(l),
+m=Wa(l);if(6===b)return a.P?a.P(c,d,e,f,g,h):a.P?a.P(c,d,e,f,g,h):a.call(null,c,d,e,f,g,h);var l=Va(m),p=Wa(m);if(7===b)return a.ia?a.ia(c,d,e,f,g,h,l):a.ia?a.ia(c,d,e,f,g,h,l):a.call(null,c,d,e,f,g,h,l);var m=Va(p),q=Wa(p);if(8===b)return a.Ga?a.Ga(c,d,e,f,g,h,l,m):a.Ga?a.Ga(c,d,e,f,g,h,l,m):a.call(null,c,d,e,f,g,h,l,m);var p=Va(q),s=Wa(q);if(9===b)return a.Ha?a.Ha(c,d,e,f,g,h,l,m,p):a.Ha?a.Ha(c,d,e,f,g,h,l,m,p):a.call(null,c,d,e,f,g,h,l,m,p);var q=Va(s),u=Wa(s);if(10===b)return a.va?a.va(c,d,e,
+f,g,h,l,m,p,q):a.va?a.va(c,d,e,f,g,h,l,m,p,q):a.call(null,c,d,e,f,g,h,l,m,p,q);var s=Va(u),v=Wa(u);if(11===b)return a.wa?a.wa(c,d,e,f,g,h,l,m,p,q,s):a.wa?a.wa(c,d,e,f,g,h,l,m,p,q,s):a.call(null,c,d,e,f,g,h,l,m,p,q,s);var u=Va(v),y=Wa(v);if(12===b)return a.xa?a.xa(c,d,e,f,g,h,l,m,p,q,s,u):a.xa?a.xa(c,d,e,f,g,h,l,m,p,q,s,u):a.call(null,c,d,e,f,g,h,l,m,p,q,s,u);var v=Va(y),B=Wa(y);if(13===b)return a.ya?a.ya(c,d,e,f,g,h,l,m,p,q,s,u,v):a.ya?a.ya(c,d,e,f,g,h,l,m,p,q,s,u,v):a.call(null,c,d,e,f,g,h,l,m,p,
+q,s,u,v);var y=Va(B),E=Wa(B);if(14===b)return a.za?a.za(c,d,e,f,g,h,l,m,p,q,s,u,v,y):a.za?a.za(c,d,e,f,g,h,l,m,p,q,s,u,v,y):a.call(null,c,d,e,f,g,h,l,m,p,q,s,u,v,y);var B=Va(E),N=Wa(E);if(15===b)return a.Aa?a.Aa(c,d,e,f,g,h,l,m,p,q,s,u,v,y,B):a.Aa?a.Aa(c,d,e,f,g,h,l,m,p,q,s,u,v,y,B):a.call(null,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B);var E=Va(N),Y=Wa(N);if(16===b)return a.Ba?a.Ba(c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E):a.Ba?a.Ba(c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E):a.call(null,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E);var N=
+Va(Y),ra=Wa(Y);if(17===b)return a.Ca?a.Ca(c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N):a.Ca?a.Ca(c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N):a.call(null,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N);var Y=Va(ra),Pa=Wa(ra);if(18===b)return a.Da?a.Da(c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y):a.Da?a.Da(c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y):a.call(null,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y);ra=Va(Pa);Pa=Wa(Pa);if(19===b)return a.Ea?a.Ea(c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y,ra):a.Ea?a.Ea(c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y,ra):a.call(null,
+c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y,ra);var I=Va(Pa);Wa(Pa);if(20===b)return a.Fa?a.Fa(c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y,ra,I):a.Fa?a.Fa(c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y,ra,I):a.call(null,c,d,e,f,g,h,l,m,p,q,s,u,v,y,B,E,N,Y,ra,I);throw Error("Only up to 20 arguments supported on functions");}
+var T=function(){function a(a,b,c,d,e){b=be.n(b,c,d,e);c=a.i;return a.f?(d=Yd(b,c+1),d<=c?he(a,d,b):a.f(b)):a.apply(a,rd(b))}function b(a,b,c,d){b=be.c(b,c,d);c=a.i;return a.f?(d=Yd(b,c+1),d<=c?he(a,d,b):a.f(b)):a.apply(a,rd(b))}function c(a,b,c){b=be.a(b,c);c=a.i;if(a.f){var d=Yd(b,c+1);return d<=c?he(a,d,b):a.f(b)}return a.apply(a,rd(b))}function d(a,b){var c=a.i;if(a.f){var d=Yd(b,c+1);return d<=c?he(a,d,b):a.f(b)}return a.apply(a,rd(b))}var e=null,f=function(){function a(c,d,e,f,g,u){var v=null;
+if(5<arguments.length){for(var v=0,y=Array(arguments.length-5);v<y.length;)y[v]=arguments[v+5],++v;v=new F(y,0)}return b.call(this,c,d,e,f,g,v)}function b(a,c,d,e,f,g){c=M(c,M(d,M(e,M(f,$d(g)))));d=a.i;return a.f?(e=Yd(c,d+1),e<=d?he(a,e,c):a.f(c)):a.apply(a,rd(c))}a.i=5;a.f=function(a){var c=G(a);a=K(a);var d=G(a);a=K(a);var e=G(a);a=K(a);var f=G(a);a=K(a);var g=G(a);a=H(a);return b(c,d,e,f,g,a)};a.d=b;return a}(),e=function(e,h,l,m,p,q){switch(arguments.length){case 2:return d.call(this,e,h);case 3:return c.call(this,
+e,h,l);case 4:return b.call(this,e,h,l,m);case 5:return a.call(this,e,h,l,m,p);default:var s=null;if(5<arguments.length){for(var s=0,u=Array(arguments.length-5);s<u.length;)u[s]=arguments[s+5],++s;s=new F(u,0)}return f.d(e,h,l,m,p,s)}throw Error("Invalid arity: "+arguments.length);};e.i=5;e.f=f.f;e.a=d;e.c=c;e.n=b;e.r=a;e.d=f.d;return e}(),ie=function(){function a(a,b,c,d,e,f){var g=O,v=Vc(a);b=b.r?b.r(v,c,d,e,f):b.call(null,v,c,d,e,f);return g(a,b)}function b(a,b,c,d,e){var f=O,g=Vc(a);b=b.n?b.n(g,
+c,d,e):b.call(null,g,c,d,e);return f(a,b)}function c(a,b,c,d){var e=O,f=Vc(a);b=b.c?b.c(f,c,d):b.call(null,f,c,d);return e(a,b)}function d(a,b,c){var d=O,e=Vc(a);b=b.a?b.a(e,c):b.call(null,e,c);return d(a,b)}function e(a,b){var c=O,d;d=Vc(a);d=b.b?b.b(d):b.call(null,d);return c(a,d)}var f=null,g=function(){function a(c,d,e,f,g,h,y){var B=null;if(6<arguments.length){for(var B=0,E=Array(arguments.length-6);B<E.length;)E[B]=arguments[B+6],++B;B=new F(E,0)}return b.call(this,c,d,e,f,g,h,B)}function b(a,
+c,d,e,f,g,h){return O(a,T.d(c,Vc(a),d,e,f,Kc([g,h],0)))}a.i=6;a.f=function(a){var c=G(a);a=K(a);var d=G(a);a=K(a);var e=G(a);a=K(a);var f=G(a);a=K(a);var g=G(a);a=K(a);var h=G(a);a=H(a);return b(c,d,e,f,g,h,a)};a.d=b;return a}(),f=function(f,l,m,p,q,s,u){switch(arguments.length){case 2:return e.call(this,f,l);case 3:return d.call(this,f,l,m);case 4:return c.call(this,f,l,m,p);case 5:return b.call(this,f,l,m,p,q);case 6:return a.call(this,f,l,m,p,q,s);default:var v=null;if(6<arguments.length){for(var v=
+0,y=Array(arguments.length-6);v<y.length;)y[v]=arguments[v+6],++v;v=new F(y,0)}return g.d(f,l,m,p,q,s,v)}throw Error("Invalid arity: "+arguments.length);};f.i=6;f.f=g.f;f.a=e;f.c=d;f.n=c;f.r=b;f.P=a;f.d=g.d;return f}(),je=function(){function a(a,b){return!sc.a(a,b)}var b=null,c=function(){function a(c,d,h){var l=null;if(2<arguments.length){for(var l=0,m=Array(arguments.length-2);l<m.length;)m[l]=arguments[l+2],++l;l=new F(m,0)}return b.call(this,c,d,l)}function b(a,c,d){return Aa(T.n(sc,a,c,d))}a.i=
+2;a.f=function(a){var c=G(a);a=K(a);var d=G(a);a=H(a);return b(c,d,a)};a.d=b;return a}(),b=function(b,e,f){switch(arguments.length){case 1:return!1;case 2:return a.call(this,b,e);default:var g=null;if(2<arguments.length){for(var g=0,h=Array(arguments.length-2);g<h.length;)h[g]=arguments[g+2],++g;g=new F(h,0)}return c.d(b,e,g)}throw Error("Invalid arity: "+arguments.length);};b.i=2;b.f=c.f;b.b=function(){return!1};b.a=a;b.d=c.d;return b}(),qe=function ke(){"undefined"===typeof ja&&(ja=function(b,c){this.pc=
+b;this.oc=c;this.q=0;this.j=393216},ja.prototype.ga=function(){return!1},ja.prototype.next=function(){return Error("No such element")},ja.prototype.H=function(){return this.oc},ja.prototype.F=function(b,c){return new ja(this.pc,c)},ja.Yb=!0,ja.Xb="cljs.core/t12660",ja.nc=function(b){return Lb(b,"cljs.core/t12660")});return new ja(ke,new pa(null,5,[le,54,me,2998,ne,3,oe,2994,pe,"/Users/davidnolen/development/clojure/mori/out-mori-adv/cljs/core.cljs"],null))};function re(a,b){this.C=a;this.m=b}
+re.prototype.ga=function(){return this.m<this.C.length};re.prototype.next=function(){var a=this.C.charAt(this.m);this.m+=1;return a};function se(a,b){this.e=a;this.m=b}se.prototype.ga=function(){return this.m<this.e.length};se.prototype.next=function(){var a=this.e[this.m];this.m+=1;return a};var te={},ue={};function ve(a,b){this.eb=a;this.Qa=b}ve.prototype.ga=function(){this.eb===te?(this.eb=ue,this.Qa=D(this.Qa)):this.eb===this.Qa&&(this.Qa=K(this.eb));return null!=this.Qa};
+ve.prototype.next=function(){if(Aa(this.ga()))throw Error("No such element");this.eb=this.Qa;return G(this.Qa)};function we(a){if(null==a)return qe();if("string"===typeof a)return new re(a,0);if(a instanceof Array)return new se(a,0);if(a?t(t(null)?null:a.vb)||(a.yb?0:w(bc,a)):w(bc,a))return cc(a);if(ld(a))return new ve(te,a);throw Error([z("Cannot create iterator from "),z(a)].join(""));}function xe(a,b){this.fa=a;this.$b=b}
+xe.prototype.step=function(a){for(var b=this;;){if(t(function(){var c=null!=a.X;return c?b.$b.ga():c}()))if(Ac(function(){var c=b.$b.next();return b.fa.a?b.fa.a(a,c):b.fa.call(null,a,c)}()))null!=a.M&&(a.M.X=null);else continue;break}return null==a.X?null:b.fa.b?b.fa.b(a):b.fa.call(null,a)};
+function ye(a,b){var c=function(){function a(b,c){b.first=c;b.M=new ze(b.X,null,null,null);b.X=null;return b.M}function b(a){(Ac(a)?qb(a):a).X=null;return a}var c=null,c=function(c,f){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,f)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}();return new xe(a.b?a.b(c):a.call(null,c),b)}function Ae(a,b,c){this.fa=a;this.Kb=b;this.ac=c}
+Ae.prototype.ga=function(){for(var a=D(this.Kb);;)if(null!=a){var b=G(a);if(Aa(b.ga()))return!1;a=K(a)}else return!0};Ae.prototype.next=function(){for(var a=this.Kb.length,b=0;;)if(b<a)this.ac[b]=this.Kb[b].next(),b+=1;else break;return Jc.a(this.ac,0)};Ae.prototype.step=function(a){for(;;){var b;b=(b=null!=a.X)?this.ga():b;if(t(b))if(Ac(T.a(this.fa,M(a,this.next()))))null!=a.M&&(a.M.X=null);else continue;break}return null==a.X?null:this.fa.b?this.fa.b(a):this.fa.call(null,a)};
+var Be=function(){function a(a,b,c){var g=function(){function a(b,c){b.first=c;b.M=new ze(b.X,null,null,null);b.X=null;return b.M}function b(a){a=Ac(a)?qb(a):a;a.X=null;return a}var c=null,c=function(c,d){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,d)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}();return new Ae(a.b?a.b(g):a.call(null,g),b,c)}function b(a,b){return c.c(a,b,Array(b.length))}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,
+c,e);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=a;return c}();function ze(a,b,c,d){this.X=a;this.first=b;this.M=c;this.k=d;this.q=0;this.j=31719628}k=ze.prototype;k.T=function(){null!=this.X&&Cb(this);return null==this.M?null:Cb(this.M)};k.N=function(){null!=this.X&&Cb(this);return null==this.M?null:this.first};k.S=function(){null!=this.X&&Cb(this);return null==this.M?J:this.M};
+k.D=function(){null!=this.X&&this.X.step(this);return null==this.M?null:this};k.B=function(){return wc(this)};k.A=function(a,b){return null!=Cb(this)?Ic(this,b):cd(b)&&null==D(b)};k.J=function(){return J};k.G=function(a,b){return M(b,Cb(this))};k.F=function(a,b){return new ze(this.X,this.first,this.M,b)};ze.prototype[Ea]=function(){return uc(this)};
+var Ce=function(){function a(a){return kd(a)?a:(a=D(a))?a:J}var b=null,c=function(){function a(c,d,h){var l=null;if(2<arguments.length){for(var l=0,m=Array(arguments.length-2);l<m.length;)m[l]=arguments[l+2],++l;l=new F(m,0)}return b.call(this,c,d,l)}function b(a,c,d){d=rd(M(c,d));c=[];d=D(d);for(var e=null,m=0,p=0;;)if(p<m){var q=e.Q(null,p);c.push(we(q));p+=1}else if(d=D(d))e=d,fd(e)?(d=Yb(e),p=Zb(e),e=d,m=Q(d),d=p):(d=G(e),c.push(we(d)),d=K(e),e=null,m=0),p=0;else break;return new ze(Be.c(a,c,
+Array(c.length)),null,null,null)}a.i=2;a.f=function(a){var c=G(a);a=K(a);var d=G(a);a=H(a);return b(c,d,a)};a.d=b;return a}(),b=function(b,e,f){switch(arguments.length){case 1:return a.call(this,b);case 2:return new ze(ye(b,we(e)),null,null,null);default:var g=null;if(2<arguments.length){for(var g=0,h=Array(arguments.length-2);g<h.length;)h[g]=arguments[g+2],++g;g=new F(h,0)}return c.d(b,e,g)}throw Error("Invalid arity: "+arguments.length);};b.i=2;b.f=c.f;b.b=a;b.a=function(a,b){return new ze(ye(a,
+we(b)),null,null,null)};b.d=c.d;return b}();function Ee(a,b){for(;;){if(null==D(b))return!0;var c;c=G(b);c=a.b?a.b(c):a.call(null,c);if(t(c)){c=a;var d=K(b);a=c;b=d}else return!1}}function Fe(a,b){for(;;)if(D(b)){var c;c=G(b);c=a.b?a.b(c):a.call(null,c);if(t(c))return c;c=a;var d=K(b);a=c;b=d}else return null}function Ge(a){if("number"===typeof a&&Aa(isNaN(a))&&Infinity!==a&&parseFloat(a)===parseInt(a,10))return 0===(a&1);throw Error([z("Argument must be an integer: "),z(a)].join(""));}
+function He(a){return function(){function b(b,c){return Aa(a.a?a.a(b,c):a.call(null,b,c))}function c(b){return Aa(a.b?a.b(b):a.call(null,b))}function d(){return Aa(a.l?a.l():a.call(null))}var e=null,f=function(){function b(a,d,e){var f=null;if(2<arguments.length){for(var f=0,g=Array(arguments.length-2);f<g.length;)g[f]=arguments[f+2],++f;f=new F(g,0)}return c.call(this,a,d,f)}function c(b,d,e){return Aa(T.n(a,b,d,e))}b.i=2;b.f=function(a){var b=G(a);a=K(a);var d=G(a);a=H(a);return c(b,d,a)};b.d=c;
+return b}(),e=function(a,e,l){switch(arguments.length){case 0:return d.call(this);case 1:return c.call(this,a);case 2:return b.call(this,a,e);default:var m=null;if(2<arguments.length){for(var m=0,p=Array(arguments.length-2);m<p.length;)p[m]=arguments[m+2],++m;m=new F(p,0)}return f.d(a,e,m)}throw Error("Invalid arity: "+arguments.length);};e.i=2;e.f=f.f;e.l=d;e.b=c;e.a=b;e.d=f.d;return e}()}
+var Ie=function(){function a(a,b,c){return function(){function d(h,l,m){h=c.c?c.c(h,l,m):c.call(null,h,l,m);h=b.b?b.b(h):b.call(null,h);return a.b?a.b(h):a.call(null,h)}function l(d,h){var l;l=c.a?c.a(d,h):c.call(null,d,h);l=b.b?b.b(l):b.call(null,l);return a.b?a.b(l):a.call(null,l)}function m(d){d=c.b?c.b(d):c.call(null,d);d=b.b?b.b(d):b.call(null,d);return a.b?a.b(d):a.call(null,d)}function p(){var d;d=c.l?c.l():c.call(null);d=b.b?b.b(d):b.call(null,d);return a.b?a.b(d):a.call(null,d)}var q=null,
+s=function(){function d(a,b,c,e){var f=null;if(3<arguments.length){for(var f=0,g=Array(arguments.length-3);f<g.length;)g[f]=arguments[f+3],++f;f=new F(g,0)}return h.call(this,a,b,c,f)}function h(d,l,m,p){d=T.r(c,d,l,m,p);d=b.b?b.b(d):b.call(null,d);return a.b?a.b(d):a.call(null,d)}d.i=3;d.f=function(a){var b=G(a);a=K(a);var c=G(a);a=K(a);var d=G(a);a=H(a);return h(b,c,d,a)};d.d=h;return d}(),q=function(a,b,c,e){switch(arguments.length){case 0:return p.call(this);case 1:return m.call(this,a);case 2:return l.call(this,
+a,b);case 3:return d.call(this,a,b,c);default:var f=null;if(3<arguments.length){for(var f=0,g=Array(arguments.length-3);f<g.length;)g[f]=arguments[f+3],++f;f=new F(g,0)}return s.d(a,b,c,f)}throw Error("Invalid arity: "+arguments.length);};q.i=3;q.f=s.f;q.l=p;q.b=m;q.a=l;q.c=d;q.d=s.d;return q}()}function b(a,b){return function(){function c(d,g,h){d=b.c?b.c(d,g,h):b.call(null,d,g,h);return a.b?a.b(d):a.call(null,d)}function d(c,g){var h=b.a?b.a(c,g):b.call(null,c,g);return a.b?a.b(h):a.call(null,h)}
+function l(c){c=b.b?b.b(c):b.call(null,c);return a.b?a.b(c):a.call(null,c)}function m(){var c=b.l?b.l():b.call(null);return a.b?a.b(c):a.call(null,c)}var p=null,q=function(){function c(a,b,e,f){var g=null;if(3<arguments.length){for(var g=0,h=Array(arguments.length-3);g<h.length;)h[g]=arguments[g+3],++g;g=new F(h,0)}return d.call(this,a,b,e,g)}function d(c,g,h,l){c=T.r(b,c,g,h,l);return a.b?a.b(c):a.call(null,c)}c.i=3;c.f=function(a){var b=G(a);a=K(a);var c=G(a);a=K(a);var e=G(a);a=H(a);return d(b,
+c,e,a)};c.d=d;return c}(),p=function(a,b,e,f){switch(arguments.length){case 0:return m.call(this);case 1:return l.call(this,a);case 2:return d.call(this,a,b);case 3:return c.call(this,a,b,e);default:var p=null;if(3<arguments.length){for(var p=0,E=Array(arguments.length-3);p<E.length;)E[p]=arguments[p+3],++p;p=new F(E,0)}return q.d(a,b,e,p)}throw Error("Invalid arity: "+arguments.length);};p.i=3;p.f=q.f;p.l=m;p.b=l;p.a=d;p.c=c;p.d=q.d;return p}()}var c=null,d=function(){function a(c,d,e,m){var p=null;
+if(3<arguments.length){for(var p=0,q=Array(arguments.length-3);p<q.length;)q[p]=arguments[p+3],++p;p=new F(q,0)}return b.call(this,c,d,e,p)}function b(a,c,d,e){return function(a){return function(){function b(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return c.call(this,d)}function c(b){b=T.a(G(a),b);for(var d=K(a);;)if(d)b=G(d).call(null,b),d=K(d);else return b}b.i=0;b.f=function(a){a=D(a);return c(a)};b.d=c;return b}()}(Jd(be.n(a,
+c,d,e)))}a.i=3;a.f=function(a){var c=G(a);a=K(a);var d=G(a);a=K(a);var e=G(a);a=H(a);return b(c,d,e,a)};a.d=b;return a}(),c=function(c,f,g,h){switch(arguments.length){case 0:return ud;case 1:return c;case 2:return b.call(this,c,f);case 3:return a.call(this,c,f,g);default:var l=null;if(3<arguments.length){for(var l=0,m=Array(arguments.length-3);l<m.length;)m[l]=arguments[l+3],++l;l=new F(m,0)}return d.d(c,f,g,l)}throw Error("Invalid arity: "+arguments.length);};c.i=3;c.f=d.f;c.l=function(){return ud};
+c.b=function(a){return a};c.a=b;c.c=a;c.d=d.d;return c}(),Je=function(){function a(a,b,c,d){return function(){function e(m,p,q){return a.P?a.P(b,c,d,m,p,q):a.call(null,b,c,d,m,p,q)}function p(e,m){return a.r?a.r(b,c,d,e,m):a.call(null,b,c,d,e,m)}function q(e){return a.n?a.n(b,c,d,e):a.call(null,b,c,d,e)}function s(){return a.c?a.c(b,c,d):a.call(null,b,c,d)}var u=null,v=function(){function e(a,b,c,d){var f=null;if(3<arguments.length){for(var f=0,g=Array(arguments.length-3);f<g.length;)g[f]=arguments[f+
+3],++f;f=new F(g,0)}return m.call(this,a,b,c,f)}function m(e,p,q,s){return T.d(a,b,c,d,e,Kc([p,q,s],0))}e.i=3;e.f=function(a){var b=G(a);a=K(a);var c=G(a);a=K(a);var d=G(a);a=H(a);return m(b,c,d,a)};e.d=m;return e}(),u=function(a,b,c,d){switch(arguments.length){case 0:return s.call(this);case 1:return q.call(this,a);case 2:return p.call(this,a,b);case 3:return e.call(this,a,b,c);default:var f=null;if(3<arguments.length){for(var f=0,g=Array(arguments.length-3);f<g.length;)g[f]=arguments[f+3],++f;f=
+new F(g,0)}return v.d(a,b,c,f)}throw Error("Invalid arity: "+arguments.length);};u.i=3;u.f=v.f;u.l=s;u.b=q;u.a=p;u.c=e;u.d=v.d;return u}()}function b(a,b,c){return function(){function d(e,l,m){return a.r?a.r(b,c,e,l,m):a.call(null,b,c,e,l,m)}function e(d,l){return a.n?a.n(b,c,d,l):a.call(null,b,c,d,l)}function p(d){return a.c?a.c(b,c,d):a.call(null,b,c,d)}function q(){return a.a?a.a(b,c):a.call(null,b,c)}var s=null,u=function(){function d(a,b,c,f){var g=null;if(3<arguments.length){for(var g=0,h=Array(arguments.length-
+3);g<h.length;)h[g]=arguments[g+3],++g;g=new F(h,0)}return e.call(this,a,b,c,g)}function e(d,l,m,p){return T.d(a,b,c,d,l,Kc([m,p],0))}d.i=3;d.f=function(a){var b=G(a);a=K(a);var c=G(a);a=K(a);var d=G(a);a=H(a);return e(b,c,d,a)};d.d=e;return d}(),s=function(a,b,c,f){switch(arguments.length){case 0:return q.call(this);case 1:return p.call(this,a);case 2:return e.call(this,a,b);case 3:return d.call(this,a,b,c);default:var g=null;if(3<arguments.length){for(var g=0,h=Array(arguments.length-3);g<h.length;)h[g]=
+arguments[g+3],++g;g=new F(h,0)}return u.d(a,b,c,g)}throw Error("Invalid arity: "+arguments.length);};s.i=3;s.f=u.f;s.l=q;s.b=p;s.a=e;s.c=d;s.d=u.d;return s}()}function c(a,b){return function(){function c(d,e,h){return a.n?a.n(b,d,e,h):a.call(null,b,d,e,h)}function d(c,e){return a.c?a.c(b,c,e):a.call(null,b,c,e)}function e(c){return a.a?a.a(b,c):a.call(null,b,c)}function p(){return a.b?a.b(b):a.call(null,b)}var q=null,s=function(){function c(a,b,e,f){var g=null;if(3<arguments.length){for(var g=0,
+h=Array(arguments.length-3);g<h.length;)h[g]=arguments[g+3],++g;g=new F(h,0)}return d.call(this,a,b,e,g)}function d(c,e,h,l){return T.d(a,b,c,e,h,Kc([l],0))}c.i=3;c.f=function(a){var b=G(a);a=K(a);var c=G(a);a=K(a);var e=G(a);a=H(a);return d(b,c,e,a)};c.d=d;return c}(),q=function(a,b,f,g){switch(arguments.length){case 0:return p.call(this);case 1:return e.call(this,a);case 2:return d.call(this,a,b);case 3:return c.call(this,a,b,f);default:var q=null;if(3<arguments.length){for(var q=0,N=Array(arguments.length-
+3);q<N.length;)N[q]=arguments[q+3],++q;q=new F(N,0)}return s.d(a,b,f,q)}throw Error("Invalid arity: "+arguments.length);};q.i=3;q.f=s.f;q.l=p;q.b=e;q.a=d;q.c=c;q.d=s.d;return q}()}var d=null,e=function(){function a(c,d,e,f,q){var s=null;if(4<arguments.length){for(var s=0,u=Array(arguments.length-4);s<u.length;)u[s]=arguments[s+4],++s;s=new F(u,0)}return b.call(this,c,d,e,f,s)}function b(a,c,d,e,f){return function(){function b(a){var c=null;if(0<arguments.length){for(var c=0,d=Array(arguments.length-
+0);c<d.length;)d[c]=arguments[c+0],++c;c=new F(d,0)}return g.call(this,c)}function g(b){return T.r(a,c,d,e,ae.a(f,b))}b.i=0;b.f=function(a){a=D(a);return g(a)};b.d=g;return b}()}a.i=4;a.f=function(a){var c=G(a);a=K(a);var d=G(a);a=K(a);var e=G(a);a=K(a);var f=G(a);a=H(a);return b(c,d,e,f,a)};a.d=b;return a}(),d=function(d,g,h,l,m){switch(arguments.length){case 1:return d;case 2:return c.call(this,d,g);case 3:return b.call(this,d,g,h);case 4:return a.call(this,d,g,h,l);default:var p=null;if(4<arguments.length){for(var p=
+0,q=Array(arguments.length-4);p<q.length;)q[p]=arguments[p+4],++p;p=new F(q,0)}return e.d(d,g,h,l,p)}throw Error("Invalid arity: "+arguments.length);};d.i=4;d.f=e.f;d.b=function(a){return a};d.a=c;d.c=b;d.n=a;d.d=e.d;return d}(),Ke=function(){function a(a,b,c,d){return function(){function l(l,m,p){l=null==l?b:l;m=null==m?c:m;p=null==p?d:p;return a.c?a.c(l,m,p):a.call(null,l,m,p)}function m(d,h){var l=null==d?b:d,m=null==h?c:h;return a.a?a.a(l,m):a.call(null,l,m)}var p=null,q=function(){function l(a,
+b,c,d){var e=null;if(3<arguments.length){for(var e=0,f=Array(arguments.length-3);e<f.length;)f[e]=arguments[e+3],++e;e=new F(f,0)}return m.call(this,a,b,c,e)}function m(l,p,q,s){return T.r(a,null==l?b:l,null==p?c:p,null==q?d:q,s)}l.i=3;l.f=function(a){var b=G(a);a=K(a);var c=G(a);a=K(a);var d=G(a);a=H(a);return m(b,c,d,a)};l.d=m;return l}(),p=function(a,b,c,d){switch(arguments.length){case 2:return m.call(this,a,b);case 3:return l.call(this,a,b,c);default:var e=null;if(3<arguments.length){for(var e=
+0,f=Array(arguments.length-3);e<f.length;)f[e]=arguments[e+3],++e;e=new F(f,0)}return q.d(a,b,c,e)}throw Error("Invalid arity: "+arguments.length);};p.i=3;p.f=q.f;p.a=m;p.c=l;p.d=q.d;return p}()}function b(a,b,c){return function(){function d(h,l,m){h=null==h?b:h;l=null==l?c:l;return a.c?a.c(h,l,m):a.call(null,h,l,m)}function l(d,h){var l=null==d?b:d,m=null==h?c:h;return a.a?a.a(l,m):a.call(null,l,m)}var m=null,p=function(){function d(a,b,c,e){var f=null;if(3<arguments.length){for(var f=0,g=Array(arguments.length-
+3);f<g.length;)g[f]=arguments[f+3],++f;f=new F(g,0)}return h.call(this,a,b,c,f)}function h(d,l,m,p){return T.r(a,null==d?b:d,null==l?c:l,m,p)}d.i=3;d.f=function(a){var b=G(a);a=K(a);var c=G(a);a=K(a);var d=G(a);a=H(a);return h(b,c,d,a)};d.d=h;return d}(),m=function(a,b,c,e){switch(arguments.length){case 2:return l.call(this,a,b);case 3:return d.call(this,a,b,c);default:var f=null;if(3<arguments.length){for(var f=0,g=Array(arguments.length-3);f<g.length;)g[f]=arguments[f+3],++f;f=new F(g,0)}return p.d(a,
+b,c,f)}throw Error("Invalid arity: "+arguments.length);};m.i=3;m.f=p.f;m.a=l;m.c=d;m.d=p.d;return m}()}function c(a,b){return function(){function c(d,g,h){d=null==d?b:d;return a.c?a.c(d,g,h):a.call(null,d,g,h)}function d(c,g){var h=null==c?b:c;return a.a?a.a(h,g):a.call(null,h,g)}function l(c){c=null==c?b:c;return a.b?a.b(c):a.call(null,c)}var m=null,p=function(){function c(a,b,e,f){var g=null;if(3<arguments.length){for(var g=0,h=Array(arguments.length-3);g<h.length;)h[g]=arguments[g+3],++g;g=new F(h,
+0)}return d.call(this,a,b,e,g)}function d(c,g,h,l){return T.r(a,null==c?b:c,g,h,l)}c.i=3;c.f=function(a){var b=G(a);a=K(a);var c=G(a);a=K(a);var e=G(a);a=H(a);return d(b,c,e,a)};c.d=d;return c}(),m=function(a,b,e,f){switch(arguments.length){case 1:return l.call(this,a);case 2:return d.call(this,a,b);case 3:return c.call(this,a,b,e);default:var m=null;if(3<arguments.length){for(var m=0,B=Array(arguments.length-3);m<B.length;)B[m]=arguments[m+3],++m;m=new F(B,0)}return p.d(a,b,e,m)}throw Error("Invalid arity: "+
+arguments.length);};m.i=3;m.f=p.f;m.b=l;m.a=d;m.c=c;m.d=p.d;return m}()}var d=null,d=function(d,f,g,h){switch(arguments.length){case 2:return c.call(this,d,f);case 3:return b.call(this,d,f,g);case 4:return a.call(this,d,f,g,h)}throw Error("Invalid arity: "+arguments.length);};d.a=c;d.c=b;d.n=a;return d}(),Le=function(){function a(a,b){return new V(null,function(){var f=D(b);if(f){if(fd(f)){for(var g=Yb(f),h=Q(g),l=Td(h),m=0;;)if(m<h){var p=function(){var b=C.a(g,m);return a.b?a.b(b):a.call(null,b)}();
+null!=p&&l.add(p);m+=1}else break;return Wd(l.ca(),c.a(a,Zb(f)))}h=function(){var b=G(f);return a.b?a.b(b):a.call(null,b)}();return null==h?c.a(a,H(f)):M(h,c.a(a,H(f)))}return null},null,null)}function b(a){return function(b){return function(){function c(f,g){var h=a.b?a.b(g):a.call(null,g);return null==h?f:b.a?b.a(f,h):b.call(null,f,h)}function g(a){return b.b?b.b(a):b.call(null,a)}function h(){return b.l?b.l():b.call(null)}var l=null,l=function(a,b){switch(arguments.length){case 0:return h.call(this);
+case 1:return g.call(this,a);case 2:return c.call(this,a,b)}throw Error("Invalid arity: "+arguments.length);};l.l=h;l.b=g;l.a=c;return l}()}}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}();function Me(a){this.state=a;this.q=0;this.j=32768}Me.prototype.Ra=function(){return this.state};Me.prototype.bb=function(a,b){return this.state=b};
+var Ne=function(){function a(a,b){return function g(b,c){return new V(null,function(){var e=D(c);if(e){if(fd(e)){for(var p=Yb(e),q=Q(p),s=Td(q),u=0;;)if(u<q){var v=function(){var c=b+u,e=C.a(p,u);return a.a?a.a(c,e):a.call(null,c,e)}();null!=v&&s.add(v);u+=1}else break;return Wd(s.ca(),g(b+q,Zb(e)))}q=function(){var c=G(e);return a.a?a.a(b,c):a.call(null,b,c)}();return null==q?g(b+1,H(e)):M(q,g(b+1,H(e)))}return null},null,null)}(0,b)}function b(a){return function(b){return function(c){return function(){function g(g,
+h){var l=c.bb(0,c.Ra(null)+1),l=a.a?a.a(l,h):a.call(null,l,h);return null==l?g:b.a?b.a(g,l):b.call(null,g,l)}function h(a){return b.b?b.b(a):b.call(null,a)}function l(){return b.l?b.l():b.call(null)}var m=null,m=function(a,b){switch(arguments.length){case 0:return l.call(this);case 1:return h.call(this,a);case 2:return g.call(this,a,b)}throw Error("Invalid arity: "+arguments.length);};m.l=l;m.b=h;m.a=g;return m}()}(new Me(-1))}}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,
+c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),Oe=function(){function a(a,b,c,d){return new V(null,function(){var f=D(b),q=D(c),s=D(d);if(f&&q&&s){var u=M,v;v=G(f);var y=G(q),B=G(s);v=a.c?a.c(v,y,B):a.call(null,v,y,B);f=u(v,e.n(a,H(f),H(q),H(s)))}else f=null;return f},null,null)}function b(a,b,c){return new V(null,function(){var d=D(b),f=D(c);if(d&&f){var q=M,s;s=G(d);var u=G(f);s=a.a?a.a(s,u):a.call(null,s,u);d=q(s,e.c(a,H(d),H(f)))}else d=
+null;return d},null,null)}function c(a,b){return new V(null,function(){var c=D(b);if(c){if(fd(c)){for(var d=Yb(c),f=Q(d),q=Td(f),s=0;;)if(s<f)Xd(q,function(){var b=C.a(d,s);return a.b?a.b(b):a.call(null,b)}()),s+=1;else break;return Wd(q.ca(),e.a(a,Zb(c)))}return M(function(){var b=G(c);return a.b?a.b(b):a.call(null,b)}(),e.a(a,H(c)))}return null},null,null)}function d(a){return function(b){return function(){function c(d,e){var f=a.b?a.b(e):a.call(null,e);return b.a?b.a(d,f):b.call(null,d,f)}function d(a){return b.b?
+b.b(a):b.call(null,a)}function e(){return b.l?b.l():b.call(null)}var f=null,s=function(){function c(a,b,e){var f=null;if(2<arguments.length){for(var f=0,g=Array(arguments.length-2);f<g.length;)g[f]=arguments[f+2],++f;f=new F(g,0)}return d.call(this,a,b,f)}function d(c,e,f){e=T.c(a,e,f);return b.a?b.a(c,e):b.call(null,c,e)}c.i=2;c.f=function(a){var b=G(a);a=K(a);var c=G(a);a=H(a);return d(b,c,a)};c.d=d;return c}(),f=function(a,b,f){switch(arguments.length){case 0:return e.call(this);case 1:return d.call(this,
+a);case 2:return c.call(this,a,b);default:var g=null;if(2<arguments.length){for(var g=0,h=Array(arguments.length-2);g<h.length;)h[g]=arguments[g+2],++g;g=new F(h,0)}return s.d(a,b,g)}throw Error("Invalid arity: "+arguments.length);};f.i=2;f.f=s.f;f.l=e;f.b=d;f.a=c;f.d=s.d;return f}()}}var e=null,f=function(){function a(c,d,e,f,g){var u=null;if(4<arguments.length){for(var u=0,v=Array(arguments.length-4);u<v.length;)v[u]=arguments[u+4],++u;u=new F(v,0)}return b.call(this,c,d,e,f,u)}function b(a,c,d,
+f,g){var h=function y(a){return new V(null,function(){var b=e.a(D,a);return Ee(ud,b)?M(e.a(G,b),y(e.a(H,b))):null},null,null)};return e.a(function(){return function(b){return T.a(a,b)}}(h),h(Nc.d(g,f,Kc([d,c],0))))}a.i=4;a.f=function(a){var c=G(a);a=K(a);var d=G(a);a=K(a);var e=G(a);a=K(a);var f=G(a);a=H(a);return b(c,d,e,f,a)};a.d=b;return a}(),e=function(e,h,l,m,p){switch(arguments.length){case 1:return d.call(this,e);case 2:return c.call(this,e,h);case 3:return b.call(this,e,h,l);case 4:return a.call(this,
+e,h,l,m);default:var q=null;if(4<arguments.length){for(var q=0,s=Array(arguments.length-4);q<s.length;)s[q]=arguments[q+4],++q;q=new F(s,0)}return f.d(e,h,l,m,q)}throw Error("Invalid arity: "+arguments.length);};e.i=4;e.f=f.f;e.b=d;e.a=c;e.c=b;e.n=a;e.d=f.d;return e}(),Pe=function(){function a(a,b){return new V(null,function(){if(0<a){var f=D(b);return f?M(G(f),c.a(a-1,H(f))):null}return null},null,null)}function b(a){return function(b){return function(a){return function(){function c(d,g){var h=qb(a),
+l=a.bb(0,a.Ra(null)-1),h=0<h?b.a?b.a(d,g):b.call(null,d,g):d;return 0<l?h:Ac(h)?h:new yc(h)}function d(a){return b.b?b.b(a):b.call(null,a)}function l(){return b.l?b.l():b.call(null)}var m=null,m=function(a,b){switch(arguments.length){case 0:return l.call(this);case 1:return d.call(this,a);case 2:return c.call(this,a,b)}throw Error("Invalid arity: "+arguments.length);};m.l=l;m.b=d;m.a=c;return m}()}(new Me(a))}}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,
+c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),Qe=function(){function a(a,b){return new V(null,function(c){return function(){return c(a,b)}}(function(a,b){for(;;){var c=D(b);if(0<a&&c){var d=a-1,c=H(c);a=d;b=c}else return c}}),null,null)}function b(a){return function(b){return function(a){return function(){function c(d,g){var h=qb(a);a.bb(0,a.Ra(null)-1);return 0<h?d:b.a?b.a(d,g):b.call(null,d,g)}function d(a){return b.b?b.b(a):b.call(null,a)}function l(){return b.l?
+b.l():b.call(null)}var m=null,m=function(a,b){switch(arguments.length){case 0:return l.call(this);case 1:return d.call(this,a);case 2:return c.call(this,a,b)}throw Error("Invalid arity: "+arguments.length);};m.l=l;m.b=d;m.a=c;return m}()}(new Me(a))}}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),Re=function(){function a(a,b){return new V(null,function(c){return function(){return c(a,
+b)}}(function(a,b){for(;;){var c=D(b),d;if(d=c)d=G(c),d=a.b?a.b(d):a.call(null,d);if(t(d))d=a,c=H(c),a=d,b=c;else return c}}),null,null)}function b(a){return function(b){return function(c){return function(){function g(g,h){var l=qb(c);if(t(t(l)?a.b?a.b(h):a.call(null,h):l))return g;ac(c,null);return b.a?b.a(g,h):b.call(null,g,h)}function h(a){return b.b?b.b(a):b.call(null,a)}function l(){return b.l?b.l():b.call(null)}var m=null,m=function(a,b){switch(arguments.length){case 0:return l.call(this);case 1:return h.call(this,
+a);case 2:return g.call(this,a,b)}throw Error("Invalid arity: "+arguments.length);};m.l=l;m.b=h;m.a=g;return m}()}(new Me(!0))}}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),Se=function(){function a(a,b){return Pe.a(a,c.b(b))}function b(a){return new V(null,function(){return M(a,c.b(a))},null,null)}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,
+c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),Te=function(){function a(a,b){return Pe.a(a,c.b(b))}function b(a){return new V(null,function(){return M(a.l?a.l():a.call(null),c.b(a))},null,null)}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),Ue=function(){function a(a,c){return new V(null,function(){var f=
+D(a),g=D(c);return f&&g?M(G(f),M(G(g),b.a(H(f),H(g)))):null},null,null)}var b=null,c=function(){function a(b,d,h){var l=null;if(2<arguments.length){for(var l=0,m=Array(arguments.length-2);l<m.length;)m[l]=arguments[l+2],++l;l=new F(m,0)}return c.call(this,b,d,l)}function c(a,d,e){return new V(null,function(){var c=Oe.a(D,Nc.d(e,d,Kc([a],0)));return Ee(ud,c)?ae.a(Oe.a(G,c),T.a(b,Oe.a(H,c))):null},null,null)}a.i=2;a.f=function(a){var b=G(a);a=K(a);var d=G(a);a=H(a);return c(b,d,a)};a.d=c;return a}(),
+b=function(b,e,f){switch(arguments.length){case 2:return a.call(this,b,e);default:var g=null;if(2<arguments.length){for(var g=0,h=Array(arguments.length-2);g<h.length;)h[g]=arguments[g+2],++g;g=new F(h,0)}return c.d(b,e,g)}throw Error("Invalid arity: "+arguments.length);};b.i=2;b.f=c.f;b.a=a;b.d=c.d;return b}(),We=function(){function a(a){return Ie.a(Oe.b(a),Ve)}var b=null,c=function(){function a(c,d){var h=null;if(1<arguments.length){for(var h=0,l=Array(arguments.length-1);h<l.length;)l[h]=arguments[h+
+1],++h;h=new F(l,0)}return b.call(this,c,h)}function b(a,c){return T.a(ae,T.c(Oe,a,c))}a.i=1;a.f=function(a){var c=G(a);a=H(a);return b(c,a)};a.d=b;return a}(),b=function(b,e){switch(arguments.length){case 1:return a.call(this,b);default:var f=null;if(1<arguments.length){for(var f=0,g=Array(arguments.length-1);f<g.length;)g[f]=arguments[f+1],++f;f=new F(g,0)}return c.d(b,f)}throw Error("Invalid arity: "+arguments.length);};b.i=1;b.f=c.f;b.b=a;b.d=c.d;return b}(),Xe=function(){function a(a,b){return new V(null,
+function(){var f=D(b);if(f){if(fd(f)){for(var g=Yb(f),h=Q(g),l=Td(h),m=0;;)if(m<h){var p;p=C.a(g,m);p=a.b?a.b(p):a.call(null,p);t(p)&&(p=C.a(g,m),l.add(p));m+=1}else break;return Wd(l.ca(),c.a(a,Zb(f)))}g=G(f);f=H(f);return t(a.b?a.b(g):a.call(null,g))?M(g,c.a(a,f)):c.a(a,f)}return null},null,null)}function b(a){return function(b){return function(){function c(f,g){return t(a.b?a.b(g):a.call(null,g))?b.a?b.a(f,g):b.call(null,f,g):f}function g(a){return b.b?b.b(a):b.call(null,a)}function h(){return b.l?
+b.l():b.call(null)}var l=null,l=function(a,b){switch(arguments.length){case 0:return h.call(this);case 1:return g.call(this,a);case 2:return c.call(this,a,b)}throw Error("Invalid arity: "+arguments.length);};l.l=h;l.b=g;l.a=c;return l}()}}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),Ye=function(){function a(a,b){return Xe.a(He(a),b)}function b(a){return Xe.b(He(a))}
+var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}();function Ze(a){var b=$e;return function d(a){return new V(null,function(){return M(a,t(b.b?b.b(a):b.call(null,a))?We.d(d,Kc([D.b?D.b(a):D.call(null,a)],0)):null)},null,null)}(a)}
+var af=function(){function a(a,b,c){return a&&(a.q&4||a.dc)?O(ce(wd.n(b,de,Ob(a),c)),Vc(a)):wd.n(b,Nc,a,c)}function b(a,b){return null!=a?a&&(a.q&4||a.dc)?O(ce(A.c(Pb,Ob(a),b)),Vc(a)):A.c(Ra,a,b):A.c(Nc,J,b)}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,c,e);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=a;return c}(),bf=function(){function a(a,b,c,h){return new V(null,function(){var l=D(h);if(l){var m=Pe.a(a,l);return a===
+Q(m)?M(m,d.n(a,b,c,Qe.a(b,l))):Ra(J,Pe.a(a,ae.a(m,c)))}return null},null,null)}function b(a,b,c){return new V(null,function(){var h=D(c);if(h){var l=Pe.a(a,h);return a===Q(l)?M(l,d.c(a,b,Qe.a(b,h))):null}return null},null,null)}function c(a,b){return d.c(a,a,b)}var d=null,d=function(d,f,g,h){switch(arguments.length){case 2:return c.call(this,d,f);case 3:return b.call(this,d,f,g);case 4:return a.call(this,d,f,g,h)}throw Error("Invalid arity: "+arguments.length);};d.a=c;d.c=b;d.n=a;return d}(),cf=function(){function a(a,
+b,c){var g=jd;for(b=D(b);;)if(b){var h=a;if(h?h.j&256||h.Rb||(h.j?0:w(Za,h)):w(Za,h)){a=S.c(a,G(b),g);if(g===a)return c;b=K(b)}else return c}else return a}function b(a,b){return c.c(a,b,null)}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,c,e);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=a;return c}(),df=function(){function a(a,b,c,d,f,q){var s=R.c(b,0,null);return(b=Ed(b))?Rc.c(a,s,e.P(S.a(a,s),b,c,d,f,q)):Rc.c(a,s,
+function(){var b=S.a(a,s);return c.n?c.n(b,d,f,q):c.call(null,b,d,f,q)}())}function b(a,b,c,d,f){var q=R.c(b,0,null);return(b=Ed(b))?Rc.c(a,q,e.r(S.a(a,q),b,c,d,f)):Rc.c(a,q,function(){var b=S.a(a,q);return c.c?c.c(b,d,f):c.call(null,b,d,f)}())}function c(a,b,c,d){var f=R.c(b,0,null);return(b=Ed(b))?Rc.c(a,f,e.n(S.a(a,f),b,c,d)):Rc.c(a,f,function(){var b=S.a(a,f);return c.a?c.a(b,d):c.call(null,b,d)}())}function d(a,b,c){var d=R.c(b,0,null);return(b=Ed(b))?Rc.c(a,d,e.c(S.a(a,d),b,c)):Rc.c(a,d,function(){var b=
+S.a(a,d);return c.b?c.b(b):c.call(null,b)}())}var e=null,f=function(){function a(c,d,e,f,g,u,v){var y=null;if(6<arguments.length){for(var y=0,B=Array(arguments.length-6);y<B.length;)B[y]=arguments[y+6],++y;y=new F(B,0)}return b.call(this,c,d,e,f,g,u,y)}function b(a,c,d,f,g,h,v){var y=R.c(c,0,null);return(c=Ed(c))?Rc.c(a,y,T.d(e,S.a(a,y),c,d,f,Kc([g,h,v],0))):Rc.c(a,y,T.d(d,S.a(a,y),f,g,h,Kc([v],0)))}a.i=6;a.f=function(a){var c=G(a);a=K(a);var d=G(a);a=K(a);var e=G(a);a=K(a);var f=G(a);a=K(a);var g=
+G(a);a=K(a);var v=G(a);a=H(a);return b(c,d,e,f,g,v,a)};a.d=b;return a}(),e=function(e,h,l,m,p,q,s){switch(arguments.length){case 3:return d.call(this,e,h,l);case 4:return c.call(this,e,h,l,m);case 5:return b.call(this,e,h,l,m,p);case 6:return a.call(this,e,h,l,m,p,q);default:var u=null;if(6<arguments.length){for(var u=0,v=Array(arguments.length-6);u<v.length;)v[u]=arguments[u+6],++u;u=new F(v,0)}return f.d(e,h,l,m,p,q,u)}throw Error("Invalid arity: "+arguments.length);};e.i=6;e.f=f.f;e.c=d;e.n=c;
+e.r=b;e.P=a;e.d=f.d;return e}();function ef(a,b){this.u=a;this.e=b}function ff(a){return new ef(a,[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null])}function gf(a){return new ef(a.u,Fa(a.e))}function hf(a){a=a.g;return 32>a?0:a-1>>>5<<5}function jf(a,b,c){for(;;){if(0===b)return c;var d=ff(a);d.e[0]=c;c=d;b-=5}}
+var lf=function kf(b,c,d,e){var f=gf(d),g=b.g-1>>>c&31;5===c?f.e[g]=e:(d=d.e[g],b=null!=d?kf(b,c-5,d,e):jf(null,c-5,e),f.e[g]=b);return f};function mf(a,b){throw Error([z("No item "),z(a),z(" in vector of length "),z(b)].join(""));}function nf(a,b){if(b>=hf(a))return a.W;for(var c=a.root,d=a.shift;;)if(0<d)var e=d-5,c=c.e[b>>>d&31],d=e;else return c.e}function of(a,b){return 0<=b&&b<a.g?nf(a,b):mf(b,a.g)}
+var qf=function pf(b,c,d,e,f){var g=gf(d);if(0===c)g.e[e&31]=f;else{var h=e>>>c&31;b=pf(b,c-5,d.e[h],e,f);g.e[h]=b}return g},sf=function rf(b,c,d){var e=b.g-2>>>c&31;if(5<c){b=rf(b,c-5,d.e[e]);if(null==b&&0===e)return null;d=gf(d);d.e[e]=b;return d}if(0===e)return null;d=gf(d);d.e[e]=null;return d};function tf(a,b,c,d,e,f){this.m=a;this.zb=b;this.e=c;this.oa=d;this.start=e;this.end=f}tf.prototype.ga=function(){return this.m<this.end};
+tf.prototype.next=function(){32===this.m-this.zb&&(this.e=nf(this.oa,this.m),this.zb+=32);var a=this.e[this.m&31];this.m+=1;return a};function W(a,b,c,d,e,f){this.k=a;this.g=b;this.shift=c;this.root=d;this.W=e;this.p=f;this.j=167668511;this.q=8196}k=W.prototype;k.toString=function(){return ec(this)};k.t=function(a,b){return $a.c(this,b,null)};k.s=function(a,b,c){return"number"===typeof b?C.c(this,b,c):c};
+k.gb=function(a,b,c){a=0;for(var d=c;;)if(a<this.g){var e=nf(this,a);c=e.length;a:{for(var f=0;;)if(f<c){var g=f+a,h=e[f],d=b.c?b.c(d,g,h):b.call(null,d,g,h);if(Ac(d)){e=d;break a}f+=1}else{e=d;break a}e=void 0}if(Ac(e))return b=e,L.b?L.b(b):L.call(null,b);a+=c;d=e}else return d};k.Q=function(a,b){return of(this,b)[b&31]};k.$=function(a,b,c){return 0<=b&&b<this.g?nf(this,b)[b&31]:c};
+k.Ua=function(a,b,c){if(0<=b&&b<this.g)return hf(this)<=b?(a=Fa(this.W),a[b&31]=c,new W(this.k,this.g,this.shift,this.root,a,null)):new W(this.k,this.g,this.shift,qf(this,this.shift,this.root,b,c),this.W,null);if(b===this.g)return Ra(this,c);throw Error([z("Index "),z(b),z(" out of bounds  [0,"),z(this.g),z("]")].join(""));};k.vb=!0;k.fb=function(){var a=this.g;return new tf(0,0,0<Q(this)?nf(this,0):null,this,0,a)};k.H=function(){return this.k};k.L=function(){return this.g};
+k.hb=function(){return C.a(this,0)};k.ib=function(){return C.a(this,1)};k.La=function(){return 0<this.g?C.a(this,this.g-1):null};
+k.Ma=function(){if(0===this.g)throw Error("Can't pop empty vector");if(1===this.g)return ub(Mc,this.k);if(1<this.g-hf(this))return new W(this.k,this.g-1,this.shift,this.root,this.W.slice(0,-1),null);var a=nf(this,this.g-2),b=sf(this,this.shift,this.root),b=null==b?uf:b,c=this.g-1;return 5<this.shift&&null==b.e[1]?new W(this.k,c,this.shift-5,b.e[0],a,null):new W(this.k,c,this.shift,b,a,null)};k.ab=function(){return 0<this.g?new Hc(this,this.g-1,null):null};
+k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){if(b instanceof W)if(this.g===Q(b))for(var c=cc(this),d=cc(b);;)if(t(c.ga())){var e=c.next(),f=d.next();if(!sc.a(e,f))return!1}else return!0;else return!1;else return Ic(this,b)};k.$a=function(){var a=this;return new vf(a.g,a.shift,function(){var b=a.root;return wf.b?wf.b(b):wf.call(null,b)}(),function(){var b=a.W;return xf.b?xf.b(b):xf.call(null,b)}())};k.J=function(){return O(Mc,this.k)};
+k.R=function(a,b){return Cc.a(this,b)};k.O=function(a,b,c){a=0;for(var d=c;;)if(a<this.g){var e=nf(this,a);c=e.length;a:{for(var f=0;;)if(f<c){var g=e[f],d=b.a?b.a(d,g):b.call(null,d,g);if(Ac(d)){e=d;break a}f+=1}else{e=d;break a}e=void 0}if(Ac(e))return b=e,L.b?L.b(b):L.call(null,b);a+=c;d=e}else return d};k.Ka=function(a,b,c){if("number"===typeof b)return pb(this,b,c);throw Error("Vector's key for assoc must be a number.");};
+k.D=function(){if(0===this.g)return null;if(32>=this.g)return new F(this.W,0);var a;a:{a=this.root;for(var b=this.shift;;)if(0<b)b-=5,a=a.e[0];else{a=a.e;break a}a=void 0}return yf.n?yf.n(this,a,0,0):yf.call(null,this,a,0,0)};k.F=function(a,b){return new W(b,this.g,this.shift,this.root,this.W,this.p)};
+k.G=function(a,b){if(32>this.g-hf(this)){for(var c=this.W.length,d=Array(c+1),e=0;;)if(e<c)d[e]=this.W[e],e+=1;else break;d[c]=b;return new W(this.k,this.g+1,this.shift,this.root,d,null)}c=(d=this.g>>>5>1<<this.shift)?this.shift+5:this.shift;d?(d=ff(null),d.e[0]=this.root,e=jf(null,this.shift,new ef(null,this.W)),d.e[1]=e):d=lf(this,this.shift,this.root,new ef(null,this.W));return new W(this.k,this.g+1,c,d,[b],null)};
+k.call=function(){var a=null,a=function(a,c,d){switch(arguments.length){case 2:return this.Q(null,c);case 3:return this.$(null,c,d)}throw Error("Invalid arity: "+arguments.length);};a.a=function(a,c){return this.Q(null,c)};a.c=function(a,c,d){return this.$(null,c,d)};return a}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.b=function(a){return this.Q(null,a)};k.a=function(a,b){return this.$(null,a,b)};
+var uf=new ef(null,[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]),Mc=new W(null,0,5,uf,[],0);W.prototype[Ea]=function(){return uc(this)};function zf(a){return Qb(A.c(Pb,Ob(Mc),a))}
+var Af=function(){function a(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return b.call(this,d)}function b(a){if(a instanceof F&&0===a.m)a:{a=a.e;var b=a.length;if(32>b)a=new W(null,b,5,uf,a,null);else{for(var e=32,f=(new W(null,32,5,uf,a.slice(0,32),null)).$a(null);;)if(e<b)var g=e+1,f=de.a(f,a[e]),e=g;else{a=Qb(f);break a}a=void 0}}else a=zf(a);return a}a.i=0;a.f=function(a){a=D(a);return b(a)};a.d=b;return a}();
+function Bf(a,b,c,d,e,f){this.ha=a;this.Ja=b;this.m=c;this.V=d;this.k=e;this.p=f;this.j=32375020;this.q=1536}k=Bf.prototype;k.toString=function(){return ec(this)};k.H=function(){return this.k};k.T=function(){if(this.V+1<this.Ja.length){var a;a=this.ha;var b=this.Ja,c=this.m,d=this.V+1;a=yf.n?yf.n(a,b,c,d):yf.call(null,a,b,c,d);return null==a?null:a}return $b(this)};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(Mc,this.k)};
+k.R=function(a,b){var c=this;return Cc.a(function(){var a=c.ha,b=c.m+c.V,f=Q(c.ha);return Cf.c?Cf.c(a,b,f):Cf.call(null,a,b,f)}(),b)};k.O=function(a,b,c){var d=this;return Cc.c(function(){var a=d.ha,b=d.m+d.V,c=Q(d.ha);return Cf.c?Cf.c(a,b,c):Cf.call(null,a,b,c)}(),b,c)};k.N=function(){return this.Ja[this.V]};k.S=function(){if(this.V+1<this.Ja.length){var a;a=this.ha;var b=this.Ja,c=this.m,d=this.V+1;a=yf.n?yf.n(a,b,c,d):yf.call(null,a,b,c,d);return null==a?J:a}return Zb(this)};k.D=function(){return this};
+k.Cb=function(){return Ud.a(this.Ja,this.V)};k.Db=function(){var a=this.m+this.Ja.length;if(a<Ma(this.ha)){var b=this.ha,c=nf(this.ha,a);return yf.n?yf.n(b,c,a,0):yf.call(null,b,c,a,0)}return J};k.F=function(a,b){var c=this.ha,d=this.Ja,e=this.m,f=this.V;return yf.r?yf.r(c,d,e,f,b):yf.call(null,c,d,e,f,b)};k.G=function(a,b){return M(b,this)};k.Bb=function(){var a=this.m+this.Ja.length;if(a<Ma(this.ha)){var b=this.ha,c=nf(this.ha,a);return yf.n?yf.n(b,c,a,0):yf.call(null,b,c,a,0)}return null};
+Bf.prototype[Ea]=function(){return uc(this)};var yf=function(){function a(a,b,c,d,l){return new Bf(a,b,c,d,l,null)}function b(a,b,c,d){return new Bf(a,b,c,d,null,null)}function c(a,b,c){return new Bf(a,of(a,b),b,c,null,null)}var d=null,d=function(d,f,g,h,l){switch(arguments.length){case 3:return c.call(this,d,f,g);case 4:return b.call(this,d,f,g,h);case 5:return a.call(this,d,f,g,h,l)}throw Error("Invalid arity: "+arguments.length);};d.c=c;d.n=b;d.r=a;return d}();
+function Df(a,b,c,d,e){this.k=a;this.oa=b;this.start=c;this.end=d;this.p=e;this.j=166617887;this.q=8192}k=Df.prototype;k.toString=function(){return ec(this)};k.t=function(a,b){return $a.c(this,b,null)};k.s=function(a,b,c){return"number"===typeof b?C.c(this,b,c):c};k.Q=function(a,b){return 0>b||this.end<=this.start+b?mf(b,this.end-this.start):C.a(this.oa,this.start+b)};k.$=function(a,b,c){return 0>b||this.end<=this.start+b?c:C.c(this.oa,this.start+b,c)};
+k.Ua=function(a,b,c){var d=this.start+b;a=this.k;c=Rc.c(this.oa,d,c);b=this.start;var e=this.end,d=d+1,d=e>d?e:d;return Ef.r?Ef.r(a,c,b,d,null):Ef.call(null,a,c,b,d,null)};k.H=function(){return this.k};k.L=function(){return this.end-this.start};k.La=function(){return C.a(this.oa,this.end-1)};k.Ma=function(){if(this.start===this.end)throw Error("Can't pop empty vector");var a=this.k,b=this.oa,c=this.start,d=this.end-1;return Ef.r?Ef.r(a,b,c,d,null):Ef.call(null,a,b,c,d,null)};
+k.ab=function(){return this.start!==this.end?new Hc(this,this.end-this.start-1,null):null};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(Mc,this.k)};k.R=function(a,b){return Cc.a(this,b)};k.O=function(a,b,c){return Cc.c(this,b,c)};k.Ka=function(a,b,c){if("number"===typeof b)return pb(this,b,c);throw Error("Subvec's key for assoc must be a number.");};
+k.D=function(){var a=this;return function(b){return function d(e){return e===a.end?null:M(C.a(a.oa,e),new V(null,function(){return function(){return d(e+1)}}(b),null,null))}}(this)(a.start)};k.F=function(a,b){var c=this.oa,d=this.start,e=this.end,f=this.p;return Ef.r?Ef.r(b,c,d,e,f):Ef.call(null,b,c,d,e,f)};k.G=function(a,b){var c=this.k,d=pb(this.oa,this.end,b),e=this.start,f=this.end+1;return Ef.r?Ef.r(c,d,e,f,null):Ef.call(null,c,d,e,f,null)};
+k.call=function(){var a=null,a=function(a,c,d){switch(arguments.length){case 2:return this.Q(null,c);case 3:return this.$(null,c,d)}throw Error("Invalid arity: "+arguments.length);};a.a=function(a,c){return this.Q(null,c)};a.c=function(a,c,d){return this.$(null,c,d)};return a}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.b=function(a){return this.Q(null,a)};k.a=function(a,b){return this.$(null,a,b)};Df.prototype[Ea]=function(){return uc(this)};
+function Ef(a,b,c,d,e){for(;;)if(b instanceof Df)c=b.start+c,d=b.start+d,b=b.oa;else{var f=Q(b);if(0>c||0>d||c>f||d>f)throw Error("Index out of bounds");return new Df(a,b,c,d,e)}}var Cf=function(){function a(a,b,c){return Ef(null,a,b,c,null)}function b(a,b){return c.c(a,b,Q(a))}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,c,e);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=a;return c}();
+function Ff(a,b){return a===b.u?b:new ef(a,Fa(b.e))}function wf(a){return new ef({},Fa(a.e))}function xf(a){var b=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];hd(a,0,b,0,a.length);return b}
+var Hf=function Gf(b,c,d,e){d=Ff(b.root.u,d);var f=b.g-1>>>c&31;if(5===c)b=e;else{var g=d.e[f];b=null!=g?Gf(b,c-5,g,e):jf(b.root.u,c-5,e)}d.e[f]=b;return d},Jf=function If(b,c,d){d=Ff(b.root.u,d);var e=b.g-2>>>c&31;if(5<c){b=If(b,c-5,d.e[e]);if(null==b&&0===e)return null;d.e[e]=b;return d}if(0===e)return null;d.e[e]=null;return d};function vf(a,b,c,d){this.g=a;this.shift=b;this.root=c;this.W=d;this.j=275;this.q=88}k=vf.prototype;
+k.call=function(){var a=null,a=function(a,c,d){switch(arguments.length){case 2:return this.t(null,c);case 3:return this.s(null,c,d)}throw Error("Invalid arity: "+arguments.length);};a.a=function(a,c){return this.t(null,c)};a.c=function(a,c,d){return this.s(null,c,d)};return a}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.b=function(a){return this.t(null,a)};k.a=function(a,b){return this.s(null,a,b)};k.t=function(a,b){return $a.c(this,b,null)};
+k.s=function(a,b,c){return"number"===typeof b?C.c(this,b,c):c};k.Q=function(a,b){if(this.root.u)return of(this,b)[b&31];throw Error("nth after persistent!");};k.$=function(a,b,c){return 0<=b&&b<this.g?C.a(this,b):c};k.L=function(){if(this.root.u)return this.g;throw Error("count after persistent!");};
+k.Ub=function(a,b,c){var d=this;if(d.root.u){if(0<=b&&b<d.g)return hf(this)<=b?d.W[b&31]=c:(a=function(){return function f(a,h){var l=Ff(d.root.u,h);if(0===a)l.e[b&31]=c;else{var m=b>>>a&31,p=f(a-5,l.e[m]);l.e[m]=p}return l}}(this).call(null,d.shift,d.root),d.root=a),this;if(b===d.g)return Pb(this,c);throw Error([z("Index "),z(b),z(" out of bounds for TransientVector of length"),z(d.g)].join(""));}throw Error("assoc! after persistent!");};
+k.Vb=function(){if(this.root.u){if(0===this.g)throw Error("Can't pop empty vector");if(1===this.g)this.g=0;else if(0<(this.g-1&31))this.g-=1;else{var a;a:if(a=this.g-2,a>=hf(this))a=this.W;else{for(var b=this.root,c=b,d=this.shift;;)if(0<d)c=Ff(b.u,c.e[a>>>d&31]),d-=5;else{a=c.e;break a}a=void 0}b=Jf(this,this.shift,this.root);b=null!=b?b:new ef(this.root.u,[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+null,null,null,null]);5<this.shift&&null==b.e[1]?(this.root=Ff(this.root.u,b.e[0]),this.shift-=5):this.root=b;this.g-=1;this.W=a}return this}throw Error("pop! after persistent!");};k.kb=function(a,b,c){if("number"===typeof b)return Tb(this,b,c);throw Error("TransientVector's key for assoc! must be a number.");};
+k.Sa=function(a,b){if(this.root.u){if(32>this.g-hf(this))this.W[this.g&31]=b;else{var c=new ef(this.root.u,this.W),d=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];d[0]=b;this.W=d;if(this.g>>>5>1<<this.shift){var d=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],e=this.shift+
+5;d[0]=this.root;d[1]=jf(this.root.u,this.shift,c);this.root=new ef(this.root.u,d);this.shift=e}else this.root=Hf(this,this.shift,this.root,c)}this.g+=1;return this}throw Error("conj! after persistent!");};k.Ta=function(){if(this.root.u){this.root.u=null;var a=this.g-hf(this),b=Array(a);hd(this.W,0,b,0,a);return new W(null,this.g,this.shift,this.root,b,null)}throw Error("persistent! called twice");};function Kf(a,b,c,d){this.k=a;this.ea=b;this.sa=c;this.p=d;this.q=0;this.j=31850572}k=Kf.prototype;
+k.toString=function(){return ec(this)};k.H=function(){return this.k};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(J,this.k)};k.N=function(){return G(this.ea)};k.S=function(){var a=K(this.ea);return a?new Kf(this.k,a,this.sa,null):null==this.sa?Na(this):new Kf(this.k,this.sa,null,null)};k.D=function(){return this};k.F=function(a,b){return new Kf(b,this.ea,this.sa,this.p)};k.G=function(a,b){return M(b,this)};
+Kf.prototype[Ea]=function(){return uc(this)};function Lf(a,b,c,d,e){this.k=a;this.count=b;this.ea=c;this.sa=d;this.p=e;this.j=31858766;this.q=8192}k=Lf.prototype;k.toString=function(){return ec(this)};k.H=function(){return this.k};k.L=function(){return this.count};k.La=function(){return G(this.ea)};k.Ma=function(){if(t(this.ea)){var a=K(this.ea);return a?new Lf(this.k,this.count-1,a,this.sa,null):new Lf(this.k,this.count-1,D(this.sa),Mc,null)}return this};
+k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(Mf,this.k)};k.N=function(){return G(this.ea)};k.S=function(){return H(D(this))};k.D=function(){var a=D(this.sa),b=this.ea;return t(t(b)?b:a)?new Kf(null,this.ea,D(a),null):null};k.F=function(a,b){return new Lf(b,this.count,this.ea,this.sa,this.p)};
+k.G=function(a,b){var c;t(this.ea)?(c=this.sa,c=new Lf(this.k,this.count+1,this.ea,Nc.a(t(c)?c:Mc,b),null)):c=new Lf(this.k,this.count+1,Nc.a(this.ea,b),Mc,null);return c};var Mf=new Lf(null,0,null,Mc,0);Lf.prototype[Ea]=function(){return uc(this)};function Nf(){this.q=0;this.j=2097152}Nf.prototype.A=function(){return!1};var Of=new Nf;function Pf(a,b){return md(dd(b)?Q(a)===Q(b)?Ee(ud,Oe.a(function(a){return sc.a(S.c(b,G(a),Of),Lc(a))},a)):null:null)}
+function Qf(a,b){var c=a.e;if(b instanceof U)a:{for(var d=c.length,e=b.pa,f=0;;){if(d<=f){c=-1;break a}var g=c[f];if(g instanceof U&&e===g.pa){c=f;break a}f+=2}c=void 0}else if(d="string"==typeof b,t(t(d)?d:"number"===typeof b))a:{d=c.length;for(e=0;;){if(d<=e){c=-1;break a}if(b===c[e]){c=e;break a}e+=2}c=void 0}else if(b instanceof qc)a:{d=c.length;e=b.ta;for(f=0;;){if(d<=f){c=-1;break a}g=c[f];if(g instanceof qc&&e===g.ta){c=f;break a}f+=2}c=void 0}else if(null==b)a:{d=c.length;for(e=0;;){if(d<=
+e){c=-1;break a}if(null==c[e]){c=e;break a}e+=2}c=void 0}else a:{d=c.length;for(e=0;;){if(d<=e){c=-1;break a}if(sc.a(b,c[e])){c=e;break a}e+=2}c=void 0}return c}function Rf(a,b,c){this.e=a;this.m=b;this.Z=c;this.q=0;this.j=32374990}k=Rf.prototype;k.toString=function(){return ec(this)};k.H=function(){return this.Z};k.T=function(){return this.m<this.e.length-2?new Rf(this.e,this.m+2,this.Z):null};k.L=function(){return(this.e.length-this.m)/2};k.B=function(){return wc(this)};
+k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(J,this.Z)};k.R=function(a,b){return P.a(b,this)};k.O=function(a,b,c){return P.c(b,c,this)};k.N=function(){return new W(null,2,5,uf,[this.e[this.m],this.e[this.m+1]],null)};k.S=function(){return this.m<this.e.length-2?new Rf(this.e,this.m+2,this.Z):J};k.D=function(){return this};k.F=function(a,b){return new Rf(this.e,this.m,b)};k.G=function(a,b){return M(b,this)};Rf.prototype[Ea]=function(){return uc(this)};
+function Sf(a,b,c){this.e=a;this.m=b;this.g=c}Sf.prototype.ga=function(){return this.m<this.g};Sf.prototype.next=function(){var a=new W(null,2,5,uf,[this.e[this.m],this.e[this.m+1]],null);this.m+=2;return a};function pa(a,b,c,d){this.k=a;this.g=b;this.e=c;this.p=d;this.j=16647951;this.q=8196}k=pa.prototype;k.toString=function(){return ec(this)};k.t=function(a,b){return $a.c(this,b,null)};k.s=function(a,b,c){a=Qf(this,b);return-1===a?c:this.e[a+1]};
+k.gb=function(a,b,c){a=this.e.length;for(var d=0;;)if(d<a){var e=this.e[d],f=this.e[d+1];c=b.c?b.c(c,e,f):b.call(null,c,e,f);if(Ac(c))return b=c,L.b?L.b(b):L.call(null,b);d+=2}else return c};k.vb=!0;k.fb=function(){return new Sf(this.e,0,2*this.g)};k.H=function(){return this.k};k.L=function(){return this.g};k.B=function(){var a=this.p;return null!=a?a:this.p=a=xc(this)};
+k.A=function(a,b){if(b&&(b.j&1024||b.ic)){var c=this.e.length;if(this.g===b.L(null))for(var d=0;;)if(d<c){var e=b.s(null,this.e[d],jd);if(e!==jd)if(sc.a(this.e[d+1],e))d+=2;else return!1;else return!1}else return!0;else return!1}else return Pf(this,b)};k.$a=function(){return new Tf({},this.e.length,Fa(this.e))};k.J=function(){return ub(Uf,this.k)};k.R=function(a,b){return P.a(b,this)};k.O=function(a,b,c){return P.c(b,c,this)};
+k.wb=function(a,b){if(0<=Qf(this,b)){var c=this.e.length,d=c-2;if(0===d)return Na(this);for(var d=Array(d),e=0,f=0;;){if(e>=c)return new pa(this.k,this.g-1,d,null);sc.a(b,this.e[e])||(d[f]=this.e[e],d[f+1]=this.e[e+1],f+=2);e+=2}}else return this};
+k.Ka=function(a,b,c){a=Qf(this,b);if(-1===a){if(this.g<Vf){a=this.e;for(var d=a.length,e=Array(d+2),f=0;;)if(f<d)e[f]=a[f],f+=1;else break;e[d]=b;e[d+1]=c;return new pa(this.k,this.g+1,e,null)}return ub(cb(af.a(Qc,this),b,c),this.k)}if(c===this.e[a+1])return this;b=Fa(this.e);b[a+1]=c;return new pa(this.k,this.g,b,null)};k.rb=function(a,b){return-1!==Qf(this,b)};k.D=function(){var a=this.e;return 0<=a.length-2?new Rf(a,0,null):null};k.F=function(a,b){return new pa(b,this.g,this.e,this.p)};
+k.G=function(a,b){if(ed(b))return cb(this,C.a(b,0),C.a(b,1));for(var c=this,d=D(b);;){if(null==d)return c;var e=G(d);if(ed(e))c=cb(c,C.a(e,0),C.a(e,1)),d=K(d);else throw Error("conj on a map takes map entries or seqables of map entries");}};
+k.call=function(){var a=null,a=function(a,c,d){switch(arguments.length){case 2:return this.t(null,c);case 3:return this.s(null,c,d)}throw Error("Invalid arity: "+arguments.length);};a.a=function(a,c){return this.t(null,c)};a.c=function(a,c,d){return this.s(null,c,d)};return a}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.b=function(a){return this.t(null,a)};k.a=function(a,b){return this.s(null,a,b)};var Uf=new pa(null,0,[],null),Vf=8;pa.prototype[Ea]=function(){return uc(this)};
+function Tf(a,b,c){this.Va=a;this.qa=b;this.e=c;this.q=56;this.j=258}k=Tf.prototype;k.Jb=function(a,b){if(t(this.Va)){var c=Qf(this,b);0<=c&&(this.e[c]=this.e[this.qa-2],this.e[c+1]=this.e[this.qa-1],c=this.e,c.pop(),c.pop(),this.qa-=2);return this}throw Error("dissoc! after persistent!");};
+k.kb=function(a,b,c){var d=this;if(t(d.Va)){a=Qf(this,b);if(-1===a)return d.qa+2<=2*Vf?(d.qa+=2,d.e.push(b),d.e.push(c),this):ee.c(function(){var a=d.qa,b=d.e;return Xf.a?Xf.a(a,b):Xf.call(null,a,b)}(),b,c);c!==d.e[a+1]&&(d.e[a+1]=c);return this}throw Error("assoc! after persistent!");};
+k.Sa=function(a,b){if(t(this.Va)){if(b?b.j&2048||b.jc||(b.j?0:w(fb,b)):w(fb,b))return Rb(this,Yf.b?Yf.b(b):Yf.call(null,b),Zf.b?Zf.b(b):Zf.call(null,b));for(var c=D(b),d=this;;){var e=G(c);if(t(e))var f=e,c=K(c),d=Rb(d,function(){var a=f;return Yf.b?Yf.b(a):Yf.call(null,a)}(),function(){var a=f;return Zf.b?Zf.b(a):Zf.call(null,a)}());else return d}}else throw Error("conj! after persistent!");};
+k.Ta=function(){if(t(this.Va))return this.Va=!1,new pa(null,Cd(this.qa,2),this.e,null);throw Error("persistent! called twice");};k.t=function(a,b){return $a.c(this,b,null)};k.s=function(a,b,c){if(t(this.Va))return a=Qf(this,b),-1===a?c:this.e[a+1];throw Error("lookup after persistent!");};k.L=function(){if(t(this.Va))return Cd(this.qa,2);throw Error("count after persistent!");};function Xf(a,b){for(var c=Ob(Qc),d=0;;)if(d<a)c=ee.c(c,b[d],b[d+1]),d+=2;else return c}function $f(){this.o=!1}
+function ag(a,b){return a===b?!0:Nd(a,b)?!0:sc.a(a,b)}var bg=function(){function a(a,b,c,g,h){a=Fa(a);a[b]=c;a[g]=h;return a}function b(a,b,c){a=Fa(a);a[b]=c;return a}var c=null,c=function(c,e,f,g,h){switch(arguments.length){case 3:return b.call(this,c,e,f);case 5:return a.call(this,c,e,f,g,h)}throw Error("Invalid arity: "+arguments.length);};c.c=b;c.r=a;return c}();function cg(a,b){var c=Array(a.length-2);hd(a,0,c,0,2*b);hd(a,2*(b+1),c,2*b,c.length-2*b);return c}
+var dg=function(){function a(a,b,c,g,h,l){a=a.Na(b);a.e[c]=g;a.e[h]=l;return a}function b(a,b,c,g){a=a.Na(b);a.e[c]=g;return a}var c=null,c=function(c,e,f,g,h,l){switch(arguments.length){case 4:return b.call(this,c,e,f,g);case 6:return a.call(this,c,e,f,g,h,l)}throw Error("Invalid arity: "+arguments.length);};c.n=b;c.P=a;return c}();
+function eg(a,b,c){for(var d=a.length,e=0,f=c;;)if(e<d){c=a[e];if(null!=c){var g=a[e+1];c=b.c?b.c(f,c,g):b.call(null,f,c,g)}else c=a[e+1],c=null!=c?c.Xa(b,f):f;if(Ac(c))return a=c,L.b?L.b(a):L.call(null,a);e+=2;f=c}else return f}function fg(a,b,c){this.u=a;this.w=b;this.e=c}k=fg.prototype;k.Na=function(a){if(a===this.u)return this;var b=Dd(this.w),c=Array(0>b?4:2*(b+1));hd(this.e,0,c,0,2*b);return new fg(a,this.w,c)};
+k.nb=function(a,b,c,d,e){var f=1<<(c>>>b&31);if(0===(this.w&f))return this;var g=Dd(this.w&f-1),h=this.e[2*g],l=this.e[2*g+1];return null==h?(b=l.nb(a,b+5,c,d,e),b===l?this:null!=b?dg.n(this,a,2*g+1,b):this.w===f?null:gg(this,a,f,g)):ag(d,h)?(e[0]=!0,gg(this,a,f,g)):this};function gg(a,b,c,d){if(a.w===c)return null;a=a.Na(b);b=a.e;var e=b.length;a.w^=c;hd(b,2*(d+1),b,2*d,e-2*(d+1));b[e-2]=null;b[e-1]=null;return a}k.lb=function(){var a=this.e;return hg.b?hg.b(a):hg.call(null,a)};
+k.Xa=function(a,b){return eg(this.e,a,b)};k.Oa=function(a,b,c,d){var e=1<<(b>>>a&31);if(0===(this.w&e))return d;var f=Dd(this.w&e-1),e=this.e[2*f],f=this.e[2*f+1];return null==e?f.Oa(a+5,b,c,d):ag(c,e)?f:d};
+k.la=function(a,b,c,d,e,f){var g=1<<(c>>>b&31),h=Dd(this.w&g-1);if(0===(this.w&g)){var l=Dd(this.w);if(2*l<this.e.length){var m=this.Na(a),p=m.e;f.o=!0;id(p,2*h,p,2*(h+1),2*(l-h));p[2*h]=d;p[2*h+1]=e;m.w|=g;return m}if(16<=l){g=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];g[c>>>b&31]=ig.la(a,b+5,c,d,e,f);for(m=h=0;;)if(32>h)0!==(this.w>>>h&1)&&(g[h]=null!=this.e[m]?ig.la(a,b+5,nc(this.e[m]),
+this.e[m],this.e[m+1],f):this.e[m+1],m+=2),h+=1;else break;return new jg(a,l+1,g)}p=Array(2*(l+4));hd(this.e,0,p,0,2*h);p[2*h]=d;p[2*h+1]=e;hd(this.e,2*h,p,2*(h+1),2*(l-h));f.o=!0;m=this.Na(a);m.e=p;m.w|=g;return m}var q=this.e[2*h],s=this.e[2*h+1];if(null==q)return l=s.la(a,b+5,c,d,e,f),l===s?this:dg.n(this,a,2*h+1,l);if(ag(d,q))return e===s?this:dg.n(this,a,2*h+1,e);f.o=!0;return dg.P(this,a,2*h,null,2*h+1,function(){var f=b+5;return kg.ia?kg.ia(a,f,q,s,c,d,e):kg.call(null,a,f,q,s,c,d,e)}())};
+k.ka=function(a,b,c,d,e){var f=1<<(b>>>a&31),g=Dd(this.w&f-1);if(0===(this.w&f)){var h=Dd(this.w);if(16<=h){f=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];f[b>>>a&31]=ig.ka(a+5,b,c,d,e);for(var l=g=0;;)if(32>g)0!==(this.w>>>g&1)&&(f[g]=null!=this.e[l]?ig.ka(a+5,nc(this.e[l]),this.e[l],this.e[l+1],e):this.e[l+1],l+=2),g+=1;else break;return new jg(null,h+1,f)}l=Array(2*(h+1));hd(this.e,
+0,l,0,2*g);l[2*g]=c;l[2*g+1]=d;hd(this.e,2*g,l,2*(g+1),2*(h-g));e.o=!0;return new fg(null,this.w|f,l)}var m=this.e[2*g],p=this.e[2*g+1];if(null==m)return h=p.ka(a+5,b,c,d,e),h===p?this:new fg(null,this.w,bg.c(this.e,2*g+1,h));if(ag(c,m))return d===p?this:new fg(null,this.w,bg.c(this.e,2*g+1,d));e.o=!0;return new fg(null,this.w,bg.r(this.e,2*g,null,2*g+1,function(){var e=a+5;return kg.P?kg.P(e,m,p,b,c,d):kg.call(null,e,m,p,b,c,d)}()))};
+k.mb=function(a,b,c){var d=1<<(b>>>a&31);if(0===(this.w&d))return this;var e=Dd(this.w&d-1),f=this.e[2*e],g=this.e[2*e+1];return null==f?(a=g.mb(a+5,b,c),a===g?this:null!=a?new fg(null,this.w,bg.c(this.e,2*e+1,a)):this.w===d?null:new fg(null,this.w^d,cg(this.e,e))):ag(c,f)?new fg(null,this.w^d,cg(this.e,e)):this};var ig=new fg(null,0,[]);
+function lg(a,b,c){var d=a.e,e=d.length;a=Array(2*(a.g-1));for(var f=0,g=1,h=0;;)if(f<e)f!==c&&null!=d[f]&&(a[g]=d[f],g+=2,h|=1<<f),f+=1;else return new fg(b,h,a)}function jg(a,b,c){this.u=a;this.g=b;this.e=c}k=jg.prototype;k.Na=function(a){return a===this.u?this:new jg(a,this.g,Fa(this.e))};
+k.nb=function(a,b,c,d,e){var f=c>>>b&31,g=this.e[f];if(null==g)return this;b=g.nb(a,b+5,c,d,e);if(b===g)return this;if(null==b){if(8>=this.g)return lg(this,a,f);a=dg.n(this,a,f,b);a.g-=1;return a}return dg.n(this,a,f,b)};k.lb=function(){var a=this.e;return mg.b?mg.b(a):mg.call(null,a)};k.Xa=function(a,b){for(var c=this.e.length,d=0,e=b;;)if(d<c){var f=this.e[d];if(null!=f&&(e=f.Xa(a,e),Ac(e)))return c=e,L.b?L.b(c):L.call(null,c);d+=1}else return e};
+k.Oa=function(a,b,c,d){var e=this.e[b>>>a&31];return null!=e?e.Oa(a+5,b,c,d):d};k.la=function(a,b,c,d,e,f){var g=c>>>b&31,h=this.e[g];if(null==h)return a=dg.n(this,a,g,ig.la(a,b+5,c,d,e,f)),a.g+=1,a;b=h.la(a,b+5,c,d,e,f);return b===h?this:dg.n(this,a,g,b)};k.ka=function(a,b,c,d,e){var f=b>>>a&31,g=this.e[f];if(null==g)return new jg(null,this.g+1,bg.c(this.e,f,ig.ka(a+5,b,c,d,e)));a=g.ka(a+5,b,c,d,e);return a===g?this:new jg(null,this.g,bg.c(this.e,f,a))};
+k.mb=function(a,b,c){var d=b>>>a&31,e=this.e[d];return null!=e?(a=e.mb(a+5,b,c),a===e?this:null==a?8>=this.g?lg(this,null,d):new jg(null,this.g-1,bg.c(this.e,d,a)):new jg(null,this.g,bg.c(this.e,d,a))):this};function ng(a,b,c){b*=2;for(var d=0;;)if(d<b){if(ag(c,a[d]))return d;d+=2}else return-1}function og(a,b,c,d){this.u=a;this.Ia=b;this.g=c;this.e=d}k=og.prototype;k.Na=function(a){if(a===this.u)return this;var b=Array(2*(this.g+1));hd(this.e,0,b,0,2*this.g);return new og(a,this.Ia,this.g,b)};
+k.nb=function(a,b,c,d,e){b=ng(this.e,this.g,d);if(-1===b)return this;e[0]=!0;if(1===this.g)return null;a=this.Na(a);e=a.e;e[b]=e[2*this.g-2];e[b+1]=e[2*this.g-1];e[2*this.g-1]=null;e[2*this.g-2]=null;a.g-=1;return a};k.lb=function(){var a=this.e;return hg.b?hg.b(a):hg.call(null,a)};k.Xa=function(a,b){return eg(this.e,a,b)};k.Oa=function(a,b,c,d){a=ng(this.e,this.g,c);return 0>a?d:ag(c,this.e[a])?this.e[a+1]:d};
+k.la=function(a,b,c,d,e,f){if(c===this.Ia){b=ng(this.e,this.g,d);if(-1===b){if(this.e.length>2*this.g)return a=dg.P(this,a,2*this.g,d,2*this.g+1,e),f.o=!0,a.g+=1,a;c=this.e.length;b=Array(c+2);hd(this.e,0,b,0,c);b[c]=d;b[c+1]=e;f.o=!0;f=this.g+1;a===this.u?(this.e=b,this.g=f,a=this):a=new og(this.u,this.Ia,f,b);return a}return this.e[b+1]===e?this:dg.n(this,a,b+1,e)}return(new fg(a,1<<(this.Ia>>>b&31),[null,this,null,null])).la(a,b,c,d,e,f)};
+k.ka=function(a,b,c,d,e){return b===this.Ia?(a=ng(this.e,this.g,c),-1===a?(a=2*this.g,b=Array(a+2),hd(this.e,0,b,0,a),b[a]=c,b[a+1]=d,e.o=!0,new og(null,this.Ia,this.g+1,b)):sc.a(this.e[a],d)?this:new og(null,this.Ia,this.g,bg.c(this.e,a+1,d))):(new fg(null,1<<(this.Ia>>>a&31),[null,this])).ka(a,b,c,d,e)};k.mb=function(a,b,c){a=ng(this.e,this.g,c);return-1===a?this:1===this.g?null:new og(null,this.Ia,this.g-1,cg(this.e,Cd(a,2)))};
+var kg=function(){function a(a,b,c,g,h,l,m){var p=nc(c);if(p===h)return new og(null,p,2,[c,g,l,m]);var q=new $f;return ig.la(a,b,p,c,g,q).la(a,b,h,l,m,q)}function b(a,b,c,g,h,l){var m=nc(b);if(m===g)return new og(null,m,2,[b,c,h,l]);var p=new $f;return ig.ka(a,m,b,c,p).ka(a,g,h,l,p)}var c=null,c=function(c,e,f,g,h,l,m){switch(arguments.length){case 6:return b.call(this,c,e,f,g,h,l);case 7:return a.call(this,c,e,f,g,h,l,m)}throw Error("Invalid arity: "+arguments.length);};c.P=b;c.ia=a;return c}();
+function pg(a,b,c,d,e){this.k=a;this.Pa=b;this.m=c;this.C=d;this.p=e;this.q=0;this.j=32374860}k=pg.prototype;k.toString=function(){return ec(this)};k.H=function(){return this.k};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(J,this.k)};k.R=function(a,b){return P.a(b,this)};k.O=function(a,b,c){return P.c(b,c,this)};k.N=function(){return null==this.C?new W(null,2,5,uf,[this.Pa[this.m],this.Pa[this.m+1]],null):G(this.C)};
+k.S=function(){if(null==this.C){var a=this.Pa,b=this.m+2;return hg.c?hg.c(a,b,null):hg.call(null,a,b,null)}var a=this.Pa,b=this.m,c=K(this.C);return hg.c?hg.c(a,b,c):hg.call(null,a,b,c)};k.D=function(){return this};k.F=function(a,b){return new pg(b,this.Pa,this.m,this.C,this.p)};k.G=function(a,b){return M(b,this)};pg.prototype[Ea]=function(){return uc(this)};
+var hg=function(){function a(a,b,c){if(null==c)for(c=a.length;;)if(b<c){if(null!=a[b])return new pg(null,a,b,null,null);var g=a[b+1];if(t(g)&&(g=g.lb(),t(g)))return new pg(null,a,b+2,g,null);b+=2}else return null;else return new pg(null,a,b,c,null)}function b(a){return c.c(a,0,null)}var c=null,c=function(c,e,f){switch(arguments.length){case 1:return b.call(this,c);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.c=a;return c}();
+function qg(a,b,c,d,e){this.k=a;this.Pa=b;this.m=c;this.C=d;this.p=e;this.q=0;this.j=32374860}k=qg.prototype;k.toString=function(){return ec(this)};k.H=function(){return this.k};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(J,this.k)};k.R=function(a,b){return P.a(b,this)};k.O=function(a,b,c){return P.c(b,c,this)};k.N=function(){return G(this.C)};
+k.S=function(){var a=this.Pa,b=this.m,c=K(this.C);return mg.n?mg.n(null,a,b,c):mg.call(null,null,a,b,c)};k.D=function(){return this};k.F=function(a,b){return new qg(b,this.Pa,this.m,this.C,this.p)};k.G=function(a,b){return M(b,this)};qg.prototype[Ea]=function(){return uc(this)};
+var mg=function(){function a(a,b,c,g){if(null==g)for(g=b.length;;)if(c<g){var h=b[c];if(t(h)&&(h=h.lb(),t(h)))return new qg(a,b,c+1,h,null);c+=1}else return null;else return new qg(a,b,c,g,null)}function b(a){return c.n(null,a,0,null)}var c=null,c=function(c,e,f,g){switch(arguments.length){case 1:return b.call(this,c);case 4:return a.call(this,c,e,f,g)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.n=a;return c}();
+function rg(a,b,c,d,e,f){this.k=a;this.g=b;this.root=c;this.U=d;this.da=e;this.p=f;this.j=16123663;this.q=8196}k=rg.prototype;k.toString=function(){return ec(this)};k.t=function(a,b){return $a.c(this,b,null)};k.s=function(a,b,c){return null==b?this.U?this.da:c:null==this.root?c:this.root.Oa(0,nc(b),b,c)};k.gb=function(a,b,c){this.U&&(a=this.da,c=b.c?b.c(c,null,a):b.call(null,c,null,a));return Ac(c)?L.b?L.b(c):L.call(null,c):null!=this.root?this.root.Xa(b,c):c};k.H=function(){return this.k};k.L=function(){return this.g};
+k.B=function(){var a=this.p;return null!=a?a:this.p=a=xc(this)};k.A=function(a,b){return Pf(this,b)};k.$a=function(){return new sg({},this.root,this.g,this.U,this.da)};k.J=function(){return ub(Qc,this.k)};k.wb=function(a,b){if(null==b)return this.U?new rg(this.k,this.g-1,this.root,!1,null,null):this;if(null==this.root)return this;var c=this.root.mb(0,nc(b),b);return c===this.root?this:new rg(this.k,this.g-1,c,this.U,this.da,null)};
+k.Ka=function(a,b,c){if(null==b)return this.U&&c===this.da?this:new rg(this.k,this.U?this.g:this.g+1,this.root,!0,c,null);a=new $f;b=(null==this.root?ig:this.root).ka(0,nc(b),b,c,a);return b===this.root?this:new rg(this.k,a.o?this.g+1:this.g,b,this.U,this.da,null)};k.rb=function(a,b){return null==b?this.U:null==this.root?!1:this.root.Oa(0,nc(b),b,jd)!==jd};k.D=function(){if(0<this.g){var a=null!=this.root?this.root.lb():null;return this.U?M(new W(null,2,5,uf,[null,this.da],null),a):a}return null};
+k.F=function(a,b){return new rg(b,this.g,this.root,this.U,this.da,this.p)};k.G=function(a,b){if(ed(b))return cb(this,C.a(b,0),C.a(b,1));for(var c=this,d=D(b);;){if(null==d)return c;var e=G(d);if(ed(e))c=cb(c,C.a(e,0),C.a(e,1)),d=K(d);else throw Error("conj on a map takes map entries or seqables of map entries");}};
+k.call=function(){var a=null,a=function(a,c,d){switch(arguments.length){case 2:return this.t(null,c);case 3:return this.s(null,c,d)}throw Error("Invalid arity: "+arguments.length);};a.a=function(a,c){return this.t(null,c)};a.c=function(a,c,d){return this.s(null,c,d)};return a}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.b=function(a){return this.t(null,a)};k.a=function(a,b){return this.s(null,a,b)};var Qc=new rg(null,0,null,!1,null,0);rg.prototype[Ea]=function(){return uc(this)};
+function sg(a,b,c,d,e){this.u=a;this.root=b;this.count=c;this.U=d;this.da=e;this.q=56;this.j=258}k=sg.prototype;k.Jb=function(a,b){if(this.u)if(null==b)this.U&&(this.U=!1,this.da=null,this.count-=1);else{if(null!=this.root){var c=new $f,d=this.root.nb(this.u,0,nc(b),b,c);d!==this.root&&(this.root=d);t(c[0])&&(this.count-=1)}}else throw Error("dissoc! after persistent!");return this};k.kb=function(a,b,c){return tg(this,b,c)};k.Sa=function(a,b){return ug(this,b)};
+k.Ta=function(){var a;if(this.u)this.u=null,a=new rg(null,this.count,this.root,this.U,this.da,null);else throw Error("persistent! called twice");return a};k.t=function(a,b){return null==b?this.U?this.da:null:null==this.root?null:this.root.Oa(0,nc(b),b)};k.s=function(a,b,c){return null==b?this.U?this.da:c:null==this.root?c:this.root.Oa(0,nc(b),b,c)};k.L=function(){if(this.u)return this.count;throw Error("count after persistent!");};
+function ug(a,b){if(a.u){if(b?b.j&2048||b.jc||(b.j?0:w(fb,b)):w(fb,b))return tg(a,Yf.b?Yf.b(b):Yf.call(null,b),Zf.b?Zf.b(b):Zf.call(null,b));for(var c=D(b),d=a;;){var e=G(c);if(t(e))var f=e,c=K(c),d=tg(d,function(){var a=f;return Yf.b?Yf.b(a):Yf.call(null,a)}(),function(){var a=f;return Zf.b?Zf.b(a):Zf.call(null,a)}());else return d}}else throw Error("conj! after persistent");}
+function tg(a,b,c){if(a.u){if(null==b)a.da!==c&&(a.da=c),a.U||(a.count+=1,a.U=!0);else{var d=new $f;b=(null==a.root?ig:a.root).la(a.u,0,nc(b),b,c,d);b!==a.root&&(a.root=b);d.o&&(a.count+=1)}return a}throw Error("assoc! after persistent!");}function vg(a,b,c){for(var d=b;;)if(null!=a)b=c?a.left:a.right,d=Nc.a(d,a),a=b;else return d}function wg(a,b,c,d,e){this.k=a;this.stack=b;this.pb=c;this.g=d;this.p=e;this.q=0;this.j=32374862}k=wg.prototype;k.toString=function(){return ec(this)};k.H=function(){return this.k};
+k.L=function(){return 0>this.g?Q(K(this))+1:this.g};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(J,this.k)};k.R=function(a,b){return P.a(b,this)};k.O=function(a,b,c){return P.c(b,c,this)};k.N=function(){return Wc(this.stack)};k.S=function(){var a=G(this.stack),a=vg(this.pb?a.right:a.left,K(this.stack),this.pb);return null!=a?new wg(null,a,this.pb,this.g-1,null):J};k.D=function(){return this};
+k.F=function(a,b){return new wg(b,this.stack,this.pb,this.g,this.p)};k.G=function(a,b){return M(b,this)};wg.prototype[Ea]=function(){return uc(this)};function xg(a,b,c){return new wg(null,vg(a,null,b),b,c,null)}
+function yg(a,b,c,d){return c instanceof X?c.left instanceof X?new X(c.key,c.o,c.left.ua(),new Z(a,b,c.right,d,null),null):c.right instanceof X?new X(c.right.key,c.right.o,new Z(c.key,c.o,c.left,c.right.left,null),new Z(a,b,c.right.right,d,null),null):new Z(a,b,c,d,null):new Z(a,b,c,d,null)}
+function zg(a,b,c,d){return d instanceof X?d.right instanceof X?new X(d.key,d.o,new Z(a,b,c,d.left,null),d.right.ua(),null):d.left instanceof X?new X(d.left.key,d.left.o,new Z(a,b,c,d.left.left,null),new Z(d.key,d.o,d.left.right,d.right,null),null):new Z(a,b,c,d,null):new Z(a,b,c,d,null)}
+function Ag(a,b,c,d){if(c instanceof X)return new X(a,b,c.ua(),d,null);if(d instanceof Z)return zg(a,b,c,d.ob());if(d instanceof X&&d.left instanceof Z)return new X(d.left.key,d.left.o,new Z(a,b,c,d.left.left,null),zg(d.key,d.o,d.left.right,d.right.ob()),null);throw Error("red-black tree invariant violation");}
+var Cg=function Bg(b,c,d){d=null!=b.left?Bg(b.left,c,d):d;if(Ac(d))return L.b?L.b(d):L.call(null,d);var e=b.key,f=b.o;d=c.c?c.c(d,e,f):c.call(null,d,e,f);if(Ac(d))return L.b?L.b(d):L.call(null,d);b=null!=b.right?Bg(b.right,c,d):d;return Ac(b)?L.b?L.b(b):L.call(null,b):b};function Z(a,b,c,d,e){this.key=a;this.o=b;this.left=c;this.right=d;this.p=e;this.q=0;this.j=32402207}k=Z.prototype;k.Mb=function(a){return a.Ob(this)};k.ob=function(){return new X(this.key,this.o,this.left,this.right,null)};
+k.ua=function(){return this};k.Lb=function(a){return a.Nb(this)};k.replace=function(a,b,c,d){return new Z(a,b,c,d,null)};k.Nb=function(a){return new Z(a.key,a.o,this,a.right,null)};k.Ob=function(a){return new Z(a.key,a.o,a.left,this,null)};k.Xa=function(a,b){return Cg(this,a,b)};k.t=function(a,b){return C.c(this,b,null)};k.s=function(a,b,c){return C.c(this,b,c)};k.Q=function(a,b){return 0===b?this.key:1===b?this.o:null};k.$=function(a,b,c){return 0===b?this.key:1===b?this.o:c};
+k.Ua=function(a,b,c){return(new W(null,2,5,uf,[this.key,this.o],null)).Ua(null,b,c)};k.H=function(){return null};k.L=function(){return 2};k.hb=function(){return this.key};k.ib=function(){return this.o};k.La=function(){return this.o};k.Ma=function(){return new W(null,1,5,uf,[this.key],null)};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return Mc};k.R=function(a,b){return Cc.a(this,b)};k.O=function(a,b,c){return Cc.c(this,b,c)};
+k.Ka=function(a,b,c){return Rc.c(new W(null,2,5,uf,[this.key,this.o],null),b,c)};k.D=function(){return Ra(Ra(J,this.o),this.key)};k.F=function(a,b){return O(new W(null,2,5,uf,[this.key,this.o],null),b)};k.G=function(a,b){return new W(null,3,5,uf,[this.key,this.o,b],null)};
+k.call=function(){var a=null,a=function(a,c,d){switch(arguments.length){case 2:return this.t(null,c);case 3:return this.s(null,c,d)}throw Error("Invalid arity: "+arguments.length);};a.a=function(a,c){return this.t(null,c)};a.c=function(a,c,d){return this.s(null,c,d)};return a}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.b=function(a){return this.t(null,a)};k.a=function(a,b){return this.s(null,a,b)};Z.prototype[Ea]=function(){return uc(this)};
+function X(a,b,c,d,e){this.key=a;this.o=b;this.left=c;this.right=d;this.p=e;this.q=0;this.j=32402207}k=X.prototype;k.Mb=function(a){return new X(this.key,this.o,this.left,a,null)};k.ob=function(){throw Error("red-black tree invariant violation");};k.ua=function(){return new Z(this.key,this.o,this.left,this.right,null)};k.Lb=function(a){return new X(this.key,this.o,a,this.right,null)};k.replace=function(a,b,c,d){return new X(a,b,c,d,null)};
+k.Nb=function(a){return this.left instanceof X?new X(this.key,this.o,this.left.ua(),new Z(a.key,a.o,this.right,a.right,null),null):this.right instanceof X?new X(this.right.key,this.right.o,new Z(this.key,this.o,this.left,this.right.left,null),new Z(a.key,a.o,this.right.right,a.right,null),null):new Z(a.key,a.o,this,a.right,null)};
+k.Ob=function(a){return this.right instanceof X?new X(this.key,this.o,new Z(a.key,a.o,a.left,this.left,null),this.right.ua(),null):this.left instanceof X?new X(this.left.key,this.left.o,new Z(a.key,a.o,a.left,this.left.left,null),new Z(this.key,this.o,this.left.right,this.right,null),null):new Z(a.key,a.o,a.left,this,null)};k.Xa=function(a,b){return Cg(this,a,b)};k.t=function(a,b){return C.c(this,b,null)};k.s=function(a,b,c){return C.c(this,b,c)};
+k.Q=function(a,b){return 0===b?this.key:1===b?this.o:null};k.$=function(a,b,c){return 0===b?this.key:1===b?this.o:c};k.Ua=function(a,b,c){return(new W(null,2,5,uf,[this.key,this.o],null)).Ua(null,b,c)};k.H=function(){return null};k.L=function(){return 2};k.hb=function(){return this.key};k.ib=function(){return this.o};k.La=function(){return this.o};k.Ma=function(){return new W(null,1,5,uf,[this.key],null)};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};
+k.A=function(a,b){return Ic(this,b)};k.J=function(){return Mc};k.R=function(a,b){return Cc.a(this,b)};k.O=function(a,b,c){return Cc.c(this,b,c)};k.Ka=function(a,b,c){return Rc.c(new W(null,2,5,uf,[this.key,this.o],null),b,c)};k.D=function(){return Ra(Ra(J,this.o),this.key)};k.F=function(a,b){return O(new W(null,2,5,uf,[this.key,this.o],null),b)};k.G=function(a,b){return new W(null,3,5,uf,[this.key,this.o,b],null)};
+k.call=function(){var a=null,a=function(a,c,d){switch(arguments.length){case 2:return this.t(null,c);case 3:return this.s(null,c,d)}throw Error("Invalid arity: "+arguments.length);};a.a=function(a,c){return this.t(null,c)};a.c=function(a,c,d){return this.s(null,c,d)};return a}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.b=function(a){return this.t(null,a)};k.a=function(a,b){return this.s(null,a,b)};X.prototype[Ea]=function(){return uc(this)};
+var Eg=function Dg(b,c,d,e,f){if(null==c)return new X(d,e,null,null,null);var g;g=c.key;g=b.a?b.a(d,g):b.call(null,d,g);if(0===g)return f[0]=c,null;if(0>g)return b=Dg(b,c.left,d,e,f),null!=b?c.Lb(b):null;b=Dg(b,c.right,d,e,f);return null!=b?c.Mb(b):null},Gg=function Fg(b,c){if(null==b)return c;if(null==c)return b;if(b instanceof X){if(c instanceof X){var d=Fg(b.right,c.left);return d instanceof X?new X(d.key,d.o,new X(b.key,b.o,b.left,d.left,null),new X(c.key,c.o,d.right,c.right,null),null):new X(b.key,
+b.o,b.left,new X(c.key,c.o,d,c.right,null),null)}return new X(b.key,b.o,b.left,Fg(b.right,c),null)}if(c instanceof X)return new X(c.key,c.o,Fg(b,c.left),c.right,null);d=Fg(b.right,c.left);return d instanceof X?new X(d.key,d.o,new Z(b.key,b.o,b.left,d.left,null),new Z(c.key,c.o,d.right,c.right,null),null):Ag(b.key,b.o,b.left,new Z(c.key,c.o,d,c.right,null))},Ig=function Hg(b,c,d,e){if(null!=c){var f;f=c.key;f=b.a?b.a(d,f):b.call(null,d,f);if(0===f)return e[0]=c,Gg(c.left,c.right);if(0>f)return b=Hg(b,
+c.left,d,e),null!=b||null!=e[0]?c.left instanceof Z?Ag(c.key,c.o,b,c.right):new X(c.key,c.o,b,c.right,null):null;b=Hg(b,c.right,d,e);if(null!=b||null!=e[0])if(c.right instanceof Z)if(e=c.key,d=c.o,c=c.left,b instanceof X)c=new X(e,d,c,b.ua(),null);else if(c instanceof Z)c=yg(e,d,c.ob(),b);else if(c instanceof X&&c.right instanceof Z)c=new X(c.right.key,c.right.o,yg(c.key,c.o,c.left.ob(),c.right.left),new Z(e,d,c.right.right,b,null),null);else throw Error("red-black tree invariant violation");else c=
+new X(c.key,c.o,c.left,b,null);else c=null;return c}return null},Kg=function Jg(b,c,d,e){var f=c.key,g=b.a?b.a(d,f):b.call(null,d,f);return 0===g?c.replace(f,e,c.left,c.right):0>g?c.replace(f,c.o,Jg(b,c.left,d,e),c.right):c.replace(f,c.o,c.left,Jg(b,c.right,d,e))};function Lg(a,b,c,d,e){this.aa=a;this.na=b;this.g=c;this.k=d;this.p=e;this.j=418776847;this.q=8192}k=Lg.prototype;k.toString=function(){return ec(this)};
+function Mg(a,b){for(var c=a.na;;)if(null!=c){var d;d=c.key;d=a.aa.a?a.aa.a(b,d):a.aa.call(null,b,d);if(0===d)return c;c=0>d?c.left:c.right}else return null}k.t=function(a,b){return $a.c(this,b,null)};k.s=function(a,b,c){a=Mg(this,b);return null!=a?a.o:c};k.gb=function(a,b,c){return null!=this.na?Cg(this.na,b,c):c};k.H=function(){return this.k};k.L=function(){return this.g};k.ab=function(){return 0<this.g?xg(this.na,!1,this.g):null};k.B=function(){var a=this.p;return null!=a?a:this.p=a=xc(this)};
+k.A=function(a,b){return Pf(this,b)};k.J=function(){return new Lg(this.aa,null,0,this.k,0)};k.wb=function(a,b){var c=[null],d=Ig(this.aa,this.na,b,c);return null==d?null==R.a(c,0)?this:new Lg(this.aa,null,0,this.k,null):new Lg(this.aa,d.ua(),this.g-1,this.k,null)};k.Ka=function(a,b,c){a=[null];var d=Eg(this.aa,this.na,b,c,a);return null==d?(a=R.a(a,0),sc.a(c,a.o)?this:new Lg(this.aa,Kg(this.aa,this.na,b,c),this.g,this.k,null)):new Lg(this.aa,d.ua(),this.g+1,this.k,null)};
+k.rb=function(a,b){return null!=Mg(this,b)};k.D=function(){return 0<this.g?xg(this.na,!0,this.g):null};k.F=function(a,b){return new Lg(this.aa,this.na,this.g,b,this.p)};k.G=function(a,b){if(ed(b))return cb(this,C.a(b,0),C.a(b,1));for(var c=this,d=D(b);;){if(null==d)return c;var e=G(d);if(ed(e))c=cb(c,C.a(e,0),C.a(e,1)),d=K(d);else throw Error("conj on a map takes map entries or seqables of map entries");}};
+k.call=function(){var a=null,a=function(a,c,d){switch(arguments.length){case 2:return this.t(null,c);case 3:return this.s(null,c,d)}throw Error("Invalid arity: "+arguments.length);};a.a=function(a,c){return this.t(null,c)};a.c=function(a,c,d){return this.s(null,c,d)};return a}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.b=function(a){return this.t(null,a)};k.a=function(a,b){return this.s(null,a,b)};k.Hb=function(a,b){return 0<this.g?xg(this.na,b,this.g):null};
+k.Ib=function(a,b,c){if(0<this.g){a=null;for(var d=this.na;;)if(null!=d){var e;e=d.key;e=this.aa.a?this.aa.a(b,e):this.aa.call(null,b,e);if(0===e)return new wg(null,Nc.a(a,d),c,-1,null);t(c)?0>e?(a=Nc.a(a,d),d=d.left):d=d.right:0<e?(a=Nc.a(a,d),d=d.right):d=d.left}else return null==a?null:new wg(null,a,c,-1,null)}else return null};k.Gb=function(a,b){return Yf.b?Yf.b(b):Yf.call(null,b)};k.Fb=function(){return this.aa};var Ng=new Lg(od,null,0,null,0);Lg.prototype[Ea]=function(){return uc(this)};
+var Og=function(){function a(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return b.call(this,d)}function b(a){a=D(a);for(var b=Ob(Qc);;)if(a){var e=K(K(a)),b=ee.c(b,G(a),Lc(a));a=e}else return Qb(b)}a.i=0;a.f=function(a){a=D(a);return b(a)};a.d=b;return a}(),Pg=function(){function a(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return b.call(this,
+d)}function b(a){a:{a=T.a(Ha,a);for(var b=a.length,e=0,f=Ob(Uf);;)if(e<b)var g=e+2,f=Rb(f,a[e],a[e+1]),e=g;else{a=Qb(f);break a}a=void 0}return a}a.i=0;a.f=function(a){a=D(a);return b(a)};a.d=b;return a}(),Qg=function(){function a(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return b.call(this,d)}function b(a){a=D(a);for(var b=Ng;;)if(a){var e=K(K(a)),b=Rc.c(b,G(a),Lc(a));a=e}else return b}a.i=0;a.f=function(a){a=D(a);
+return b(a)};a.d=b;return a}(),Rg=function(){function a(a,d){var e=null;if(1<arguments.length){for(var e=0,f=Array(arguments.length-1);e<f.length;)f[e]=arguments[e+1],++e;e=new F(f,0)}return b.call(this,a,e)}function b(a,b){for(var e=D(b),f=new Lg(qd(a),null,0,null,0);;)if(e)var g=K(K(e)),f=Rc.c(f,G(e),Lc(e)),e=g;else return f}a.i=1;a.f=function(a){var d=G(a);a=H(a);return b(d,a)};a.d=b;return a}();function Sg(a,b){this.Y=a;this.Z=b;this.q=0;this.j=32374988}k=Sg.prototype;k.toString=function(){return ec(this)};
+k.H=function(){return this.Z};k.T=function(){var a=this.Y,a=(a?a.j&128||a.xb||(a.j?0:w(Xa,a)):w(Xa,a))?this.Y.T(null):K(this.Y);return null==a?null:new Sg(a,this.Z)};k.B=function(){return wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(J,this.Z)};k.R=function(a,b){return P.a(b,this)};k.O=function(a,b,c){return P.c(b,c,this)};k.N=function(){return this.Y.N(null).hb(null)};
+k.S=function(){var a=this.Y,a=(a?a.j&128||a.xb||(a.j?0:w(Xa,a)):w(Xa,a))?this.Y.T(null):K(this.Y);return null!=a?new Sg(a,this.Z):J};k.D=function(){return this};k.F=function(a,b){return new Sg(this.Y,b)};k.G=function(a,b){return M(b,this)};Sg.prototype[Ea]=function(){return uc(this)};function Tg(a){return(a=D(a))?new Sg(a,null):null}function Yf(a){return hb(a)}function Ug(a,b){this.Y=a;this.Z=b;this.q=0;this.j=32374988}k=Ug.prototype;k.toString=function(){return ec(this)};k.H=function(){return this.Z};
+k.T=function(){var a=this.Y,a=(a?a.j&128||a.xb||(a.j?0:w(Xa,a)):w(Xa,a))?this.Y.T(null):K(this.Y);return null==a?null:new Ug(a,this.Z)};k.B=function(){return wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(J,this.Z)};k.R=function(a,b){return P.a(b,this)};k.O=function(a,b,c){return P.c(b,c,this)};k.N=function(){return this.Y.N(null).ib(null)};k.S=function(){var a=this.Y,a=(a?a.j&128||a.xb||(a.j?0:w(Xa,a)):w(Xa,a))?this.Y.T(null):K(this.Y);return null!=a?new Ug(a,this.Z):J};
+k.D=function(){return this};k.F=function(a,b){return new Ug(this.Y,b)};k.G=function(a,b){return M(b,this)};Ug.prototype[Ea]=function(){return uc(this)};function Vg(a){return(a=D(a))?new Ug(a,null):null}function Zf(a){return ib(a)}
+var Wg=function(){function a(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return b.call(this,d)}function b(a){return t(Fe(ud,a))?A.a(function(a,b){return Nc.a(t(a)?a:Uf,b)},a):null}a.i=0;a.f=function(a){a=D(a);return b(a)};a.d=b;return a}(),Xg=function(){function a(a,d){var e=null;if(1<arguments.length){for(var e=0,f=Array(arguments.length-1);e<f.length;)f[e]=arguments[e+1],++e;e=new F(f,0)}return b.call(this,a,e)}function b(a,
+b){return t(Fe(ud,b))?A.a(function(a){return function(b,c){return A.c(a,t(b)?b:Uf,D(c))}}(function(b,d){var g=G(d),h=Lc(d);return nd(b,g)?Rc.c(b,g,function(){var d=S.a(b,g);return a.a?a.a(d,h):a.call(null,d,h)}()):Rc.c(b,g,h)}),b):null}a.i=1;a.f=function(a){var d=G(a);a=H(a);return b(d,a)};a.d=b;return a}();function Yg(a,b){for(var c=Uf,d=D(b);;)if(d)var e=G(d),f=S.c(a,e,Zg),c=je.a(f,Zg)?Rc.c(c,e,f):c,d=K(d);else return O(c,Vc(a))}
+function $g(a,b,c){this.k=a;this.Wa=b;this.p=c;this.j=15077647;this.q=8196}k=$g.prototype;k.toString=function(){return ec(this)};k.t=function(a,b){return $a.c(this,b,null)};k.s=function(a,b,c){return bb(this.Wa,b)?b:c};k.H=function(){return this.k};k.L=function(){return Ma(this.Wa)};k.B=function(){var a=this.p;return null!=a?a:this.p=a=xc(this)};k.A=function(a,b){return ad(b)&&Q(this)===Q(b)&&Ee(function(a){return function(b){return nd(a,b)}}(this),b)};k.$a=function(){return new ah(Ob(this.Wa))};
+k.J=function(){return O(bh,this.k)};k.Eb=function(a,b){return new $g(this.k,eb(this.Wa,b),null)};k.D=function(){return Tg(this.Wa)};k.F=function(a,b){return new $g(b,this.Wa,this.p)};k.G=function(a,b){return new $g(this.k,Rc.c(this.Wa,b,null),null)};
+k.call=function(){var a=null,a=function(a,c,d){switch(arguments.length){case 2:return this.t(null,c);case 3:return this.s(null,c,d)}throw Error("Invalid arity: "+arguments.length);};a.a=function(a,c){return this.t(null,c)};a.c=function(a,c,d){return this.s(null,c,d)};return a}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.b=function(a){return this.t(null,a)};k.a=function(a,b){return this.s(null,a,b)};var bh=new $g(null,Uf,0);$g.prototype[Ea]=function(){return uc(this)};
+function ah(a){this.ma=a;this.j=259;this.q=136}k=ah.prototype;k.call=function(){function a(a,b,c){return $a.c(this.ma,b,jd)===jd?c:b}function b(a,b){return $a.c(this.ma,b,jd)===jd?null:b}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,c,e);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+arguments.length);};c.a=b;c.c=a;return c}();k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};
+k.b=function(a){return $a.c(this.ma,a,jd)===jd?null:a};k.a=function(a,b){return $a.c(this.ma,a,jd)===jd?b:a};k.t=function(a,b){return $a.c(this,b,null)};k.s=function(a,b,c){return $a.c(this.ma,b,jd)===jd?c:b};k.L=function(){return Q(this.ma)};k.Tb=function(a,b){this.ma=fe.a(this.ma,b);return this};k.Sa=function(a,b){this.ma=ee.c(this.ma,b,null);return this};k.Ta=function(){return new $g(null,Qb(this.ma),null)};function ch(a,b,c){this.k=a;this.ja=b;this.p=c;this.j=417730831;this.q=8192}k=ch.prototype;
+k.toString=function(){return ec(this)};k.t=function(a,b){return $a.c(this,b,null)};k.s=function(a,b,c){a=Mg(this.ja,b);return null!=a?a.key:c};k.H=function(){return this.k};k.L=function(){return Q(this.ja)};k.ab=function(){return 0<Q(this.ja)?Oe.a(Yf,Gb(this.ja)):null};k.B=function(){var a=this.p;return null!=a?a:this.p=a=xc(this)};k.A=function(a,b){return ad(b)&&Q(this)===Q(b)&&Ee(function(a){return function(b){return nd(a,b)}}(this),b)};k.J=function(){return new ch(this.k,Na(this.ja),0)};
+k.Eb=function(a,b){return new ch(this.k,Sc.a(this.ja,b),null)};k.D=function(){return Tg(this.ja)};k.F=function(a,b){return new ch(b,this.ja,this.p)};k.G=function(a,b){return new ch(this.k,Rc.c(this.ja,b,null),null)};k.call=function(){var a=null,a=function(a,c,d){switch(arguments.length){case 2:return this.t(null,c);case 3:return this.s(null,c,d)}throw Error("Invalid arity: "+arguments.length);};a.a=function(a,c){return this.t(null,c)};a.c=function(a,c,d){return this.s(null,c,d)};return a}();
+k.apply=function(a,b){return this.call.apply(this,[this].concat(Fa(b)))};k.b=function(a){return this.t(null,a)};k.a=function(a,b){return this.s(null,a,b)};k.Hb=function(a,b){return Oe.a(Yf,Hb(this.ja,b))};k.Ib=function(a,b,c){return Oe.a(Yf,Ib(this.ja,b,c))};k.Gb=function(a,b){return b};k.Fb=function(){return Kb(this.ja)};var eh=new ch(null,Ng,0);ch.prototype[Ea]=function(){return uc(this)};
+function fh(a){a=D(a);if(null==a)return bh;if(a instanceof F&&0===a.m){a=a.e;a:{for(var b=0,c=Ob(bh);;)if(b<a.length)var d=b+1,c=c.Sa(null,a[b]),b=d;else{a=c;break a}a=void 0}return a.Ta(null)}for(d=Ob(bh);;)if(null!=a)b=a.T(null),d=d.Sa(null,a.N(null)),a=b;else return d.Ta(null)}
+var gh=function(){function a(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return b.call(this,d)}function b(a){return A.c(Ra,eh,a)}a.i=0;a.f=function(a){a=D(a);return b(a)};a.d=b;return a}(),hh=function(){function a(a,d){var e=null;if(1<arguments.length){for(var e=0,f=Array(arguments.length-1);e<f.length;)f[e]=arguments[e+1],++e;e=new F(f,0)}return b.call(this,a,e)}function b(a,b){return A.c(Ra,new ch(null,Rg(a),0),b)}
+a.i=1;a.f=function(a){var d=G(a);a=H(a);return b(d,a)};a.d=b;return a}();function Od(a){if(a&&(a.q&4096||a.lc))return a.name;if("string"===typeof a)return a;throw Error([z("Doesn't support name: "),z(a)].join(""));}
+var ih=function(){function a(a,b,c){return(a.b?a.b(b):a.call(null,b))>(a.b?a.b(c):a.call(null,c))?b:c}var b=null,c=function(){function a(b,d,h,l){var m=null;if(3<arguments.length){for(var m=0,p=Array(arguments.length-3);m<p.length;)p[m]=arguments[m+3],++m;m=new F(p,0)}return c.call(this,b,d,h,m)}function c(a,d,e,l){return A.c(function(c,d){return b.c(a,c,d)},b.c(a,d,e),l)}a.i=3;a.f=function(a){var b=G(a);a=K(a);var d=G(a);a=K(a);var l=G(a);a=H(a);return c(b,d,l,a)};a.d=c;return a}(),b=function(b,
+e,f,g){switch(arguments.length){case 2:return e;case 3:return a.call(this,b,e,f);default:var h=null;if(3<arguments.length){for(var h=0,l=Array(arguments.length-3);h<l.length;)l[h]=arguments[h+3],++h;h=new F(l,0)}return c.d(b,e,f,h)}throw Error("Invalid arity: "+arguments.length);};b.i=3;b.f=c.f;b.a=function(a,b){return b};b.c=a;b.d=c.d;return b}();function jh(a){this.e=a}jh.prototype.add=function(a){return this.e.push(a)};jh.prototype.size=function(){return this.e.length};
+jh.prototype.clear=function(){return this.e=[]};
+var kh=function(){function a(a,b,c){return new V(null,function(){var h=D(c);return h?M(Pe.a(a,h),d.c(a,b,Qe.a(b,h))):null},null,null)}function b(a,b){return d.c(a,a,b)}function c(a){return function(b){return function(c){return function(){function d(h,l){c.add(l);if(a===c.size()){var m=zf(c.e);c.clear();return b.a?b.a(h,m):b.call(null,h,m)}return h}function l(a){if(!t(0===c.e.length)){var d=zf(c.e);c.clear();a=Bc(b.a?b.a(a,d):b.call(null,a,d))}return b.b?b.b(a):b.call(null,a)}function m(){return b.l?
+b.l():b.call(null)}var p=null,p=function(a,b){switch(arguments.length){case 0:return m.call(this);case 1:return l.call(this,a);case 2:return d.call(this,a,b)}throw Error("Invalid arity: "+arguments.length);};p.l=m;p.b=l;p.a=d;return p}()}(new jh([]))}}var d=null,d=function(d,f,g){switch(arguments.length){case 1:return c.call(this,d);case 2:return b.call(this,d,f);case 3:return a.call(this,d,f,g)}throw Error("Invalid arity: "+arguments.length);};d.b=c;d.a=b;d.c=a;return d}(),lh=function(){function a(a,
+b){return new V(null,function(){var f=D(b);if(f){var g;g=G(f);g=a.b?a.b(g):a.call(null,g);f=t(g)?M(G(f),c.a(a,H(f))):null}else f=null;return f},null,null)}function b(a){return function(b){return function(){function c(f,g){return t(a.b?a.b(g):a.call(null,g))?b.a?b.a(f,g):b.call(null,f,g):new yc(f)}function g(a){return b.b?b.b(a):b.call(null,a)}function h(){return b.l?b.l():b.call(null)}var l=null,l=function(a,b){switch(arguments.length){case 0:return h.call(this);case 1:return g.call(this,a);case 2:return c.call(this,
+a,b)}throw Error("Invalid arity: "+arguments.length);};l.l=h;l.b=g;l.a=c;return l}()}}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}();function mh(a,b,c){return function(d){var e=Kb(a);d=Jb(a,d);e=e.a?e.a(d,c):e.call(null,d,c);return b.a?b.a(e,0):b.call(null,e,0)}}
+var nh=function(){function a(a,b,c,g,h){var l=Ib(a,c,!0);if(t(l)){var m=R.c(l,0,null);return lh.a(mh(a,g,h),t(mh(a,b,c).call(null,m))?l:K(l))}return null}function b(a,b,c){var g=mh(a,b,c),h;a:{h=[Ad,Bd];var l=h.length;if(l<=Vf)for(var m=0,p=Ob(Uf);;)if(m<l)var q=m+1,p=Rb(p,h[m],null),m=q;else{h=new $g(null,Qb(p),null);break a}else for(m=0,p=Ob(bh);;)if(m<l)q=m+1,p=Pb(p,h[m]),m=q;else{h=Qb(p);break a}h=void 0}return t(h.call(null,b))?(a=Ib(a,c,!0),t(a)?(b=R.c(a,0,null),t(g.b?g.b(b):g.call(null,b))?
+a:K(a)):null):lh.a(g,Hb(a,!0))}var c=null,c=function(c,e,f,g,h){switch(arguments.length){case 3:return b.call(this,c,e,f);case 5:return a.call(this,c,e,f,g,h)}throw Error("Invalid arity: "+arguments.length);};c.c=b;c.r=a;return c}();function oh(a,b,c){this.m=a;this.end=b;this.step=c}oh.prototype.ga=function(){return 0<this.step?this.m<this.end:this.m>this.end};oh.prototype.next=function(){var a=this.m;this.m+=this.step;return a};
+function ph(a,b,c,d,e){this.k=a;this.start=b;this.end=c;this.step=d;this.p=e;this.j=32375006;this.q=8192}k=ph.prototype;k.toString=function(){return ec(this)};k.Q=function(a,b){if(b<Ma(this))return this.start+b*this.step;if(this.start>this.end&&0===this.step)return this.start;throw Error("Index out of bounds");};k.$=function(a,b,c){return b<Ma(this)?this.start+b*this.step:this.start>this.end&&0===this.step?this.start:c};k.vb=!0;k.fb=function(){return new oh(this.start,this.end,this.step)};k.H=function(){return this.k};
+k.T=function(){return 0<this.step?this.start+this.step<this.end?new ph(this.k,this.start+this.step,this.end,this.step,null):null:this.start+this.step>this.end?new ph(this.k,this.start+this.step,this.end,this.step,null):null};k.L=function(){if(Aa(Cb(this)))return 0;var a=(this.end-this.start)/this.step;return Math.ceil.b?Math.ceil.b(a):Math.ceil.call(null,a)};k.B=function(){var a=this.p;return null!=a?a:this.p=a=wc(this)};k.A=function(a,b){return Ic(this,b)};k.J=function(){return O(J,this.k)};
+k.R=function(a,b){return Cc.a(this,b)};k.O=function(a,b,c){for(a=this.start;;)if(0<this.step?a<this.end:a>this.end){var d=a;c=b.a?b.a(c,d):b.call(null,c,d);if(Ac(c))return b=c,L.b?L.b(b):L.call(null,b);a+=this.step}else return c};k.N=function(){return null==Cb(this)?null:this.start};k.S=function(){return null!=Cb(this)?new ph(this.k,this.start+this.step,this.end,this.step,null):J};k.D=function(){return 0<this.step?this.start<this.end?this:null:this.start>this.end?this:null};
+k.F=function(a,b){return new ph(b,this.start,this.end,this.step,this.p)};k.G=function(a,b){return M(b,this)};ph.prototype[Ea]=function(){return uc(this)};
+var qh=function(){function a(a,b,c){return new ph(null,a,b,c,null)}function b(a,b){return e.c(a,b,1)}function c(a){return e.c(0,a,1)}function d(){return e.c(0,Number.MAX_VALUE,1)}var e=null,e=function(e,g,h){switch(arguments.length){case 0:return d.call(this);case 1:return c.call(this,e);case 2:return b.call(this,e,g);case 3:return a.call(this,e,g,h)}throw Error("Invalid arity: "+arguments.length);};e.l=d;e.b=c;e.a=b;e.c=a;return e}(),rh=function(){function a(a,b){return new V(null,function(){var f=
+D(b);return f?M(G(f),c.a(a,Qe.a(a,f))):null},null,null)}function b(a){return function(b){return function(c){return function(){function g(g,h){var l=c.bb(0,c.Ra(null)+1),m=Cd(l,a);return 0===l-a*m?b.a?b.a(g,h):b.call(null,g,h):g}function h(a){return b.b?b.b(a):b.call(null,a)}function l(){return b.l?b.l():b.call(null)}var m=null,m=function(a,b){switch(arguments.length){case 0:return l.call(this);case 1:return h.call(this,a);case 2:return g.call(this,a,b)}throw Error("Invalid arity: "+arguments.length);
+};m.l=l;m.b=h;m.a=g;return m}()}(new Me(-1))}}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),th=function(){function a(a,b){return new V(null,function(){var f=D(b);if(f){var g=G(f),h=a.b?a.b(g):a.call(null,g),g=M(g,lh.a(function(b,c){return function(b){return sc.a(c,a.b?a.b(b):a.call(null,b))}}(g,h,f,f),K(f)));return M(g,c.a(a,D(Qe.a(Q(g),f))))}return null},null,
+null)}function b(a){return function(b){return function(c,g){return function(){function h(h,l){var m=L.b?L.b(g):L.call(null,g),p=a.b?a.b(l):a.call(null,l);ac(g,p);if(Nd(m,sh)||sc.a(p,m))return c.add(l),h;m=zf(c.e);c.clear();m=b.a?b.a(h,m):b.call(null,h,m);Ac(m)||c.add(l);return m}function l(a){if(!t(0===c.e.length)){var d=zf(c.e);c.clear();a=Bc(b.a?b.a(a,d):b.call(null,a,d))}return b.b?b.b(a):b.call(null,a)}function m(){return b.l?b.l():b.call(null)}var p=null,p=function(a,b){switch(arguments.length){case 0:return m.call(this);
+case 1:return l.call(this,a);case 2:return h.call(this,a,b)}throw Error("Invalid arity: "+arguments.length);};p.l=m;p.b=l;p.a=h;return p}()}(new jh([]),new Me(sh))}}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),uh=function(){function a(a,b){for(;;)if(D(b)&&0<a){var c=a-1,g=K(b);a=c;b=g}else return null}function b(a){for(;;)if(D(a))a=K(a);else return null}var c=
+null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}(),vh=function(){function a(a,b){uh.a(a,b);return b}function b(a){uh.b(a);return a}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}();
+function wh(a,b,c,d,e,f,g){var h=ma;try{ma=null==ma?null:ma-1;if(null!=ma&&0>ma)return Lb(a,"#");Lb(a,c);if(D(g)){var l=G(g);b.c?b.c(l,a,f):b.call(null,l,a,f)}for(var m=K(g),p=za.b(f)-1;;)if(!m||null!=p&&0===p){D(m)&&0===p&&(Lb(a,d),Lb(a,"..."));break}else{Lb(a,d);var q=G(m);c=a;g=f;b.c?b.c(q,c,g):b.call(null,q,c,g);var s=K(m);c=p-1;m=s;p=c}return Lb(a,e)}finally{ma=h}}
+var xh=function(){function a(a,d){var e=null;if(1<arguments.length){for(var e=0,f=Array(arguments.length-1);e<f.length;)f[e]=arguments[e+1],++e;e=new F(f,0)}return b.call(this,a,e)}function b(a,b){for(var e=D(b),f=null,g=0,h=0;;)if(h<g){var l=f.Q(null,h);Lb(a,l);h+=1}else if(e=D(e))f=e,fd(f)?(e=Yb(f),g=Zb(f),f=e,l=Q(e),e=g,g=l):(l=G(f),Lb(a,l),e=K(f),f=null,g=0),h=0;else return null}a.i=1;a.f=function(a){var d=G(a);a=H(a);return b(d,a)};a.d=b;return a}(),yh={'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f",
+"\n":"\\n","\r":"\\r","\t":"\\t"};function zh(a){return[z('"'),z(a.replace(RegExp('[\\\\"\b\f\n\r\t]',"g"),function(a){return yh[a]})),z('"')].join("")}
+var $=function Ah(b,c,d){if(null==b)return Lb(c,"nil");if(void 0===b)return Lb(c,"#\x3cundefined\x3e");t(function(){var c=S.a(d,wa);return t(c)?(c=b?b.j&131072||b.kc?!0:b.j?!1:w(rb,b):w(rb,b))?Vc(b):c:c}())&&(Lb(c,"^"),Ah(Vc(b),c,d),Lb(c," "));if(null==b)return Lb(c,"nil");if(b.Yb)return b.nc(c);if(b&&(b.j&2147483648||b.I))return b.v(null,c,d);if(Ba(b)===Boolean||"number"===typeof b)return Lb(c,""+z(b));if(null!=b&&b.constructor===Object){Lb(c,"#js ");var e=Oe.a(function(c){return new W(null,2,5,
+uf,[Pd.b(c),b[c]],null)},gd(b));return Bh.n?Bh.n(e,Ah,c,d):Bh.call(null,e,Ah,c,d)}return b instanceof Array?wh(c,Ah,"#js ["," ","]",d,b):t("string"==typeof b)?t(ua.b(d))?Lb(c,zh(b)):Lb(c,b):Tc(b)?xh.d(c,Kc(["#\x3c",""+z(b),"\x3e"],0)):b instanceof Date?(e=function(b,c){for(var d=""+z(b);;)if(Q(d)<c)d=[z("0"),z(d)].join("");else return d},xh.d(c,Kc(['#inst "',""+z(b.getUTCFullYear()),"-",e(b.getUTCMonth()+1,2),"-",e(b.getUTCDate(),2),"T",e(b.getUTCHours(),2),":",e(b.getUTCMinutes(),2),":",e(b.getUTCSeconds(),
+2),".",e(b.getUTCMilliseconds(),3),"-",'00:00"'],0))):b instanceof RegExp?xh.d(c,Kc(['#"',b.source,'"'],0)):(b?b.j&2147483648||b.I||(b.j?0:w(Mb,b)):w(Mb,b))?Nb(b,c,d):xh.d(c,Kc(["#\x3c",""+z(b),"\x3e"],0))},Ch=function(){function a(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return b.call(this,d)}function b(a){var b=oa();if(Yc(a))b="";else{var e=z,f=new fa;a:{var g=new dc(f);$(G(a),g,b);a=D(K(a));for(var h=null,l=0,
+m=0;;)if(m<l){var p=h.Q(null,m);Lb(g," ");$(p,g,b);m+=1}else if(a=D(a))h=a,fd(h)?(a=Yb(h),l=Zb(h),h=a,p=Q(a),a=l,l=p):(p=G(h),Lb(g," "),$(p,g,b),a=K(h),h=null,l=0),m=0;else break a}b=""+e(f)}return b}a.i=0;a.f=function(a){a=D(a);return b(a)};a.d=b;return a}();function Bh(a,b,c,d){return wh(c,function(a,c,d){var h=hb(a);b.c?b.c(h,c,d):b.call(null,h,c,d);Lb(c," ");a=ib(a);return b.c?b.c(a,c,d):b.call(null,a,c,d)},"{",", ","}",d,D(a))}Me.prototype.I=!0;
+Me.prototype.v=function(a,b,c){Lb(b,"#\x3cVolatile: ");$(this.state,b,c);return Lb(b,"\x3e")};F.prototype.I=!0;F.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};V.prototype.I=!0;V.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};wg.prototype.I=!0;wg.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};pg.prototype.I=!0;pg.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};Z.prototype.I=!0;
+Z.prototype.v=function(a,b,c){return wh(b,$,"["," ","]",c,this)};Rf.prototype.I=!0;Rf.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};ch.prototype.I=!0;ch.prototype.v=function(a,b,c){return wh(b,$,"#{"," ","}",c,this)};Bf.prototype.I=!0;Bf.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};Ld.prototype.I=!0;Ld.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};Hc.prototype.I=!0;Hc.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};
+rg.prototype.I=!0;rg.prototype.v=function(a,b,c){return Bh(this,$,b,c)};qg.prototype.I=!0;qg.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};Df.prototype.I=!0;Df.prototype.v=function(a,b,c){return wh(b,$,"["," ","]",c,this)};Lg.prototype.I=!0;Lg.prototype.v=function(a,b,c){return Bh(this,$,b,c)};$g.prototype.I=!0;$g.prototype.v=function(a,b,c){return wh(b,$,"#{"," ","}",c,this)};Vd.prototype.I=!0;Vd.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};Ug.prototype.I=!0;
+Ug.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};X.prototype.I=!0;X.prototype.v=function(a,b,c){return wh(b,$,"["," ","]",c,this)};W.prototype.I=!0;W.prototype.v=function(a,b,c){return wh(b,$,"["," ","]",c,this)};Kf.prototype.I=!0;Kf.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};Hd.prototype.I=!0;Hd.prototype.v=function(a,b){return Lb(b,"()")};ze.prototype.I=!0;ze.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};Lf.prototype.I=!0;
+Lf.prototype.v=function(a,b,c){return wh(b,$,"#queue ["," ","]",c,D(this))};pa.prototype.I=!0;pa.prototype.v=function(a,b,c){return Bh(this,$,b,c)};ph.prototype.I=!0;ph.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};Sg.prototype.I=!0;Sg.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};Fd.prototype.I=!0;Fd.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};W.prototype.sb=!0;W.prototype.tb=function(a,b){return pd.a(this,b)};Df.prototype.sb=!0;
+Df.prototype.tb=function(a,b){return pd.a(this,b)};U.prototype.sb=!0;U.prototype.tb=function(a,b){return Md(this,b)};qc.prototype.sb=!0;qc.prototype.tb=function(a,b){return pc(this,b)};var Dh=function(){function a(a,d,e){var f=null;if(2<arguments.length){for(var f=0,g=Array(arguments.length-2);f<g.length;)g[f]=arguments[f+2],++f;f=new F(g,0)}return b.call(this,a,d,f)}function b(a,b,e){return a.k=T.c(b,a.k,e)}a.i=2;a.f=function(a){var d=G(a);a=K(a);var e=G(a);a=H(a);return b(d,e,a)};a.d=b;return a}();
+function Eh(a){return function(b,c){var d=a.a?a.a(b,c):a.call(null,b,c);return Ac(d)?new yc(d):d}}
+function Ve(a){return function(b){return function(){function c(a,c){return A.c(b,a,c)}function d(b){return a.b?a.b(b):a.call(null,b)}function e(){return a.l?a.l():a.call(null)}var f=null,f=function(a,b){switch(arguments.length){case 0:return e.call(this);case 1:return d.call(this,a);case 2:return c.call(this,a,b)}throw Error("Invalid arity: "+arguments.length);};f.l=e;f.b=d;f.a=c;return f}()}(Eh(a))}
+var Fh=function(){function a(a){return Ce.a(c.l(),a)}function b(){return function(a){return function(b){return function(){function c(f,g){var h=L.b?L.b(b):L.call(null,b);ac(b,g);return sc.a(h,g)?f:a.a?a.a(f,g):a.call(null,f,g)}function g(b){return a.b?a.b(b):a.call(null,b)}function h(){return a.l?a.l():a.call(null)}var l=null,l=function(a,b){switch(arguments.length){case 0:return h.call(this);case 1:return g.call(this,a);case 2:return c.call(this,a,b)}throw Error("Invalid arity: "+arguments.length);
+};l.l=h;l.b=g;l.a=c;return l}()}(new Me(sh))}}var c=null,c=function(c){switch(arguments.length){case 0:return b.call(this);case 1:return a.call(this,c)}throw Error("Invalid arity: "+arguments.length);};c.l=b;c.b=a;return c}();function Gh(a,b){this.fa=a;this.Zb=b;this.q=0;this.j=2173173760}Gh.prototype.v=function(a,b,c){return wh(b,$,"("," ",")",c,this)};Gh.prototype.O=function(a,b,c){return wd.n(this.fa,b,c,this.Zb)};Gh.prototype.D=function(){return D(Ce.a(this.fa,this.Zb))};Gh.prototype[Ea]=function(){return uc(this)};
+var Hh={};function Ih(a){if(a?a.gc:a)return a.gc(a);var b;b=Ih[n(null==a?null:a)];if(!b&&(b=Ih._,!b))throw x("IEncodeJS.-clj-\x3ejs",a);return b.call(null,a)}function Jh(a){return(a?t(t(null)?null:a.fc)||(a.yb?0:w(Hh,a)):w(Hh,a))?Ih(a):"string"===typeof a||"number"===typeof a||a instanceof U||a instanceof qc?Kh.b?Kh.b(a):Kh.call(null,a):Ch.d(Kc([a],0))}
+var Kh=function Lh(b){if(null==b)return null;if(b?t(t(null)?null:b.fc)||(b.yb?0:w(Hh,b)):w(Hh,b))return Ih(b);if(b instanceof U)return Od(b);if(b instanceof qc)return""+z(b);if(dd(b)){var c={};b=D(b);for(var d=null,e=0,f=0;;)if(f<e){var g=d.Q(null,f),h=R.c(g,0,null),g=R.c(g,1,null);c[Jh(h)]=Lh(g);f+=1}else if(b=D(b))fd(b)?(e=Yb(b),b=Zb(b),d=e,e=Q(e)):(e=G(b),d=R.c(e,0,null),e=R.c(e,1,null),c[Jh(d)]=Lh(e),b=K(b),d=null,e=0),f=0;else break;return c}if($c(b)){c=[];b=D(Oe.a(Lh,b));d=null;for(f=e=0;;)if(f<
+e)h=d.Q(null,f),c.push(h),f+=1;else if(b=D(b))d=b,fd(d)?(b=Yb(d),f=Zb(d),d=b,e=Q(b),b=f):(b=G(d),c.push(b),b=K(d),d=null,e=0),f=0;else break;return c}return b},Mh={};function Nh(a,b){if(a?a.ec:a)return a.ec(a,b);var c;c=Nh[n(null==a?null:a)];if(!c&&(c=Nh._,!c))throw x("IEncodeClojure.-js-\x3eclj",a);return c.call(null,a,b)}
+var Ph=function(){function a(a){return b.d(a,Kc([new pa(null,1,[Oh,!1],null)],0))}var b=null,c=function(){function a(c,d){var h=null;if(1<arguments.length){for(var h=0,l=Array(arguments.length-1);h<l.length;)l[h]=arguments[h+1],++h;h=new F(l,0)}return b.call(this,c,h)}function b(a,c){var d=kd(c)?T.a(Og,c):c,e=S.a(d,Oh);return function(a,b,d,e){return function v(f){return(f?t(t(null)?null:f.uc)||(f.yb?0:w(Mh,f)):w(Mh,f))?Nh(f,T.a(Pg,c)):kd(f)?vh.b(Oe.a(v,f)):$c(f)?af.a(Oc(f),Oe.a(v,f)):f instanceof
+Array?zf(Oe.a(v,f)):Ba(f)===Object?af.a(Uf,function(){return function(a,b,c,d){return function Pa(e){return new V(null,function(a,b,c,d){return function(){for(;;){var a=D(e);if(a){if(fd(a)){var b=Yb(a),c=Q(b),g=Td(c);return function(){for(var a=0;;)if(a<c){var e=C.a(b,a),h=g,l=uf,m;m=e;m=d.b?d.b(m):d.call(null,m);e=new W(null,2,5,l,[m,v(f[e])],null);h.add(e);a+=1}else return!0}()?Wd(g.ca(),Pa(Zb(a))):Wd(g.ca(),null)}var h=G(a);return M(new W(null,2,5,uf,[function(){var a=h;return d.b?d.b(a):d.call(null,
+a)}(),v(f[h])],null),Pa(H(a)))}return null}}}(a,b,c,d),null,null)}}(a,b,d,e)(gd(f))}()):f}}(c,d,e,t(e)?Pd:z)(a)}a.i=1;a.f=function(a){var c=G(a);a=H(a);return b(c,a)};a.d=b;return a}(),b=function(b,e){switch(arguments.length){case 1:return a.call(this,b);default:var f=null;if(1<arguments.length){for(var f=0,g=Array(arguments.length-1);f<g.length;)g[f]=arguments[f+1],++f;f=new F(g,0)}return c.d(b,f)}throw Error("Invalid arity: "+arguments.length);};b.i=1;b.f=c.f;b.b=a;b.d=c.d;return b}();var wa=new U(null,"meta","meta",1499536964),ya=new U(null,"dup","dup",556298533),sh=new U("cljs.core","none","cljs.core/none",926646439),pe=new U(null,"file","file",-1269645878),le=new U(null,"end-column","end-column",1425389514),sa=new U(null,"flush-on-newline","flush-on-newline",-151457939),ne=new U(null,"column","column",2078222095),ua=new U(null,"readably","readably",1129599760),oe=new U(null,"line","line",212345235),za=new U(null,"print-length","print-length",1931866356),me=new U(null,"end-line",
+"end-line",1837326455),Oh=new U(null,"keywordize-keys","keywordize-keys",1310784252),Zg=new U("cljs.core","not-found","cljs.core/not-found",-1572889185);function Qh(a,b){var c=T.c(ih,a,b);return M(c,Ye.a(function(a){return function(b){return a===b}}(c),b))}
+var Rh=function(){function a(a,b){return Q(a)<Q(b)?A.c(Nc,b,a):A.c(Nc,a,b)}var b=null,c=function(){function a(c,d,h){var l=null;if(2<arguments.length){for(var l=0,m=Array(arguments.length-2);l<m.length;)m[l]=arguments[l+2],++l;l=new F(m,0)}return b.call(this,c,d,l)}function b(a,c,d){a=Qh(Q,Nc.d(d,c,Kc([a],0)));return A.c(af,G(a),H(a))}a.i=2;a.f=function(a){var c=G(a);a=K(a);var d=G(a);a=H(a);return b(c,d,a)};a.d=b;return a}(),b=function(b,e,f){switch(arguments.length){case 0:return bh;case 1:return b;
+case 2:return a.call(this,b,e);default:var g=null;if(2<arguments.length){for(var g=0,h=Array(arguments.length-2);g<h.length;)h[g]=arguments[g+2],++g;g=new F(h,0)}return c.d(b,e,g)}throw Error("Invalid arity: "+arguments.length);};b.i=2;b.f=c.f;b.l=function(){return bh};b.b=function(a){return a};b.a=a;b.d=c.d;return b}(),Sh=function(){function a(a,b){for(;;)if(Q(b)<Q(a)){var c=a;a=b;b=c}else return A.c(function(a,b){return function(a,c){return nd(b,c)?a:Xc.a(a,c)}}(a,b),a,a)}var b=null,c=function(){function a(b,
+d,h){var l=null;if(2<arguments.length){for(var l=0,m=Array(arguments.length-2);l<m.length;)m[l]=arguments[l+2],++l;l=new F(m,0)}return c.call(this,b,d,l)}function c(a,d,e){a=Qh(function(a){return-Q(a)},Nc.d(e,d,Kc([a],0)));return A.c(b,G(a),H(a))}a.i=2;a.f=function(a){var b=G(a);a=K(a);var d=G(a);a=H(a);return c(b,d,a)};a.d=c;return a}(),b=function(b,e,f){switch(arguments.length){case 1:return b;case 2:return a.call(this,b,e);default:var g=null;if(2<arguments.length){for(var g=0,h=Array(arguments.length-
+2);g<h.length;)h[g]=arguments[g+2],++g;g=new F(h,0)}return c.d(b,e,g)}throw Error("Invalid arity: "+arguments.length);};b.i=2;b.f=c.f;b.b=function(a){return a};b.a=a;b.d=c.d;return b}(),Th=function(){function a(a,b){return Q(a)<Q(b)?A.c(function(a,c){return nd(b,c)?Xc.a(a,c):a},a,a):A.c(Xc,a,b)}var b=null,c=function(){function a(b,d,h){var l=null;if(2<arguments.length){for(var l=0,m=Array(arguments.length-2);l<m.length;)m[l]=arguments[l+2],++l;l=new F(m,0)}return c.call(this,b,d,l)}function c(a,d,
+e){return A.c(b,a,Nc.a(e,d))}a.i=2;a.f=function(a){var b=G(a);a=K(a);var d=G(a);a=H(a);return c(b,d,a)};a.d=c;return a}(),b=function(b,e,f){switch(arguments.length){case 1:return b;case 2:return a.call(this,b,e);default:var g=null;if(2<arguments.length){for(var g=0,h=Array(arguments.length-2);g<h.length;)h[g]=arguments[g+2],++g;g=new F(h,0)}return c.d(b,e,g)}throw Error("Invalid arity: "+arguments.length);};b.i=2;b.f=c.f;b.b=function(a){return a};b.a=a;b.d=c.d;return b}();
+function Uh(a,b){return A.c(function(b,d){var e=R.c(d,0,null),f=R.c(d,1,null);return nd(a,e)?Rc.c(b,f,S.a(a,e)):b},T.c(Sc,a,Tg(b)),b)}function Vh(a,b){return A.c(function(a,d){var e=Yg(d,b);return Rc.c(a,e,Nc.a(S.c(a,e,bh),d))},Uf,a)}function Wh(a){return A.c(function(a,c){var d=R.c(c,0,null),e=R.c(c,1,null);return Rc.c(a,e,d)},Uf,a)}
+var Xh=function(){function a(a,b,c){a=Q(a)<=Q(b)?new W(null,3,5,uf,[a,b,Wh(c)],null):new W(null,3,5,uf,[b,a,c],null);b=R.c(a,0,null);c=R.c(a,1,null);var g=R.c(a,2,null),h=Vh(b,Vg(g));return A.c(function(a,b,c,d,e){return function(f,g){var h=function(){var a=Uh(Yg(g,Tg(d)),d);return e.b?e.b(a):e.call(null,a)}();return t(h)?A.c(function(){return function(a,b){return Nc.a(a,Wg.d(Kc([b,g],0)))}}(h,a,b,c,d,e),f,h):f}}(a,b,c,g,h),bh,c)}function b(a,b){if(D(a)&&D(b)){var c=Sh.a(fh(Tg(G(a))),fh(Tg(G(b)))),
+g=Q(a)<=Q(b)?new W(null,2,5,uf,[a,b],null):new W(null,2,5,uf,[b,a],null),h=R.c(g,0,null),l=R.c(g,1,null),m=Vh(h,c);return A.c(function(a,b,c,d,e){return function(f,g){var h=function(){var b=Yg(g,a);return e.b?e.b(b):e.call(null,b)}();return t(h)?A.c(function(){return function(a,b){return Nc.a(a,Wg.d(Kc([b,g],0)))}}(h,a,b,c,d,e),f,h):f}}(c,g,h,l,m),bh,l)}return bh}var c=null,c=function(c,e,f){switch(arguments.length){case 2:return b.call(this,c,e);case 3:return a.call(this,c,e,f)}throw Error("Invalid arity: "+
+arguments.length);};c.a=b;c.c=a;return c}();r("mori.apply",T);r("mori.apply.f2",T.a);r("mori.apply.f3",T.c);r("mori.apply.f4",T.n);r("mori.apply.f5",T.r);r("mori.apply.fn",T.K);r("mori.count",Q);r("mori.distinct",function(a){return function c(a,e){return new V(null,function(){return function(a,d){for(;;){var e=a,l=R.c(e,0,null);if(e=D(e))if(nd(d,l))l=H(e),e=d,a=l,d=e;else return M(l,c(H(e),Nc.a(d,l)));else return null}}.call(null,a,e)},null,null)}(a,bh)});r("mori.empty",Oc);r("mori.first",G);r("mori.second",Lc);r("mori.next",K);
+r("mori.rest",H);r("mori.seq",D);r("mori.conj",Nc);r("mori.conj.f0",Nc.l);r("mori.conj.f1",Nc.b);r("mori.conj.f2",Nc.a);r("mori.conj.fn",Nc.K);r("mori.cons",M);r("mori.find",function(a,b){return null!=a&&bd(a)&&nd(a,b)?new W(null,2,5,uf,[b,S.a(a,b)],null):null});r("mori.nth",R);r("mori.nth.f2",R.a);r("mori.nth.f3",R.c);r("mori.last",function(a){for(;;){var b=K(a);if(null!=b)a=b;else return G(a)}});r("mori.assoc",Rc);r("mori.assoc.f3",Rc.c);r("mori.assoc.fn",Rc.K);r("mori.dissoc",Sc);
+r("mori.dissoc.f1",Sc.b);r("mori.dissoc.f2",Sc.a);r("mori.dissoc.fn",Sc.K);r("mori.getIn",cf);r("mori.getIn.f2",cf.a);r("mori.getIn.f3",cf.c);r("mori.updateIn",df);r("mori.updateIn.f3",df.c);r("mori.updateIn.f4",df.n);r("mori.updateIn.f5",df.r);r("mori.updateIn.f6",df.P);r("mori.updateIn.fn",df.K);r("mori.assocIn",function Yh(b,c,d){var e=R.c(c,0,null);return(c=Ed(c))?Rc.c(b,e,Yh(S.a(b,e),c,d)):Rc.c(b,e,d)});r("mori.fnil",Ke);r("mori.fnil.f2",Ke.a);r("mori.fnil.f3",Ke.c);r("mori.fnil.f4",Ke.n);
+r("mori.disj",Xc);r("mori.disj.f1",Xc.b);r("mori.disj.f2",Xc.a);r("mori.disj.fn",Xc.K);r("mori.pop",function(a){return null==a?null:mb(a)});r("mori.peek",Wc);r("mori.hash",nc);r("mori.get",S);r("mori.get.f2",S.a);r("mori.get.f3",S.c);r("mori.hasKey",nd);r("mori.isEmpty",Yc);r("mori.reverse",Jd);r("mori.take",Pe);r("mori.take.f1",Pe.b);r("mori.take.f2",Pe.a);r("mori.drop",Qe);r("mori.drop.f1",Qe.b);r("mori.drop.f2",Qe.a);r("mori.takeNth",rh);r("mori.takeNth.f1",rh.b);r("mori.takeNth.f2",rh.a);
+r("mori.partition",bf);r("mori.partition.f2",bf.a);r("mori.partition.f3",bf.c);r("mori.partition.f4",bf.n);r("mori.partitionAll",kh);r("mori.partitionAll.f1",kh.b);r("mori.partitionAll.f2",kh.a);r("mori.partitionAll.f3",kh.c);r("mori.partitionBy",th);r("mori.partitionBy.f1",th.b);r("mori.partitionBy.f2",th.a);r("mori.iterate",function Zh(b,c){return M(c,new V(null,function(){return Zh(b,b.b?b.b(c):b.call(null,c))},null,null))});r("mori.into",af);r("mori.into.f2",af.a);r("mori.into.f3",af.c);
+r("mori.merge",Wg);r("mori.mergeWith",Xg);r("mori.subvec",Cf);r("mori.subvec.f2",Cf.a);r("mori.subvec.f3",Cf.c);r("mori.takeWhile",lh);r("mori.takeWhile.f1",lh.b);r("mori.takeWhile.f2",lh.a);r("mori.dropWhile",Re);r("mori.dropWhile.f1",Re.b);r("mori.dropWhile.f2",Re.a);r("mori.groupBy",function(a,b){return ce(A.c(function(b,d){var e=a.b?a.b(d):a.call(null,d);return ee.c(b,e,Nc.a(S.c(b,e,Mc),d))},Ob(Uf),b))});r("mori.interpose",function(a,b){return Qe.a(1,Ue.a(Se.b(a),b))});r("mori.interleave",Ue);
+r("mori.interleave.f2",Ue.a);r("mori.interleave.fn",Ue.K);r("mori.concat",ae);r("mori.concat.f0",ae.l);r("mori.concat.f1",ae.b);r("mori.concat.f2",ae.a);r("mori.concat.fn",ae.K);function $e(a){return a instanceof Array||cd(a)}r("mori.flatten",function(a){return Xe.a(function(a){return!$e(a)},H(Ze(a)))});r("mori.lazySeq",function(a){return new V(null,a,null,null)});r("mori.keys",Tg);r("mori.selectKeys",Yg);r("mori.vals",Vg);r("mori.primSeq",Jc);r("mori.primSeq.f1",Jc.b);r("mori.primSeq.f2",Jc.a);
+r("mori.map",Oe);r("mori.map.f1",Oe.b);r("mori.map.f2",Oe.a);r("mori.map.f3",Oe.c);r("mori.map.f4",Oe.n);r("mori.map.fn",Oe.K);
+r("mori.mapIndexed",function(a,b){return function d(b,f){return new V(null,function(){var g=D(f);if(g){if(fd(g)){for(var h=Yb(g),l=Q(h),m=Td(l),p=0;;)if(p<l)Xd(m,function(){var d=b+p,f=C.a(h,p);return a.a?a.a(d,f):a.call(null,d,f)}()),p+=1;else break;return Wd(m.ca(),d(b+l,Zb(g)))}return M(function(){var d=G(g);return a.a?a.a(b,d):a.call(null,b,d)}(),d(b+1,H(g)))}return null},null,null)}(0,b)});r("mori.mapcat",We);r("mori.mapcat.f1",We.b);r("mori.mapcat.fn",We.K);r("mori.reduce",A);
+r("mori.reduce.f2",A.a);r("mori.reduce.f3",A.c);r("mori.reduceKV",function(a,b,c){return null!=c?xb(c,a,b):b});r("mori.keep",Le);r("mori.keep.f1",Le.b);r("mori.keep.f2",Le.a);r("mori.keepIndexed",Ne);r("mori.keepIndexed.f1",Ne.b);r("mori.keepIndexed.f2",Ne.a);r("mori.filter",Xe);r("mori.filter.f1",Xe.b);r("mori.filter.f2",Xe.a);r("mori.remove",Ye);r("mori.remove.f1",Ye.b);r("mori.remove.f2",Ye.a);r("mori.some",Fe);r("mori.every",Ee);r("mori.equals",sc);r("mori.equals.f1",sc.b);
+r("mori.equals.f2",sc.a);r("mori.equals.fn",sc.K);r("mori.range",qh);r("mori.range.f0",qh.l);r("mori.range.f1",qh.b);r("mori.range.f2",qh.a);r("mori.range.f3",qh.c);r("mori.repeat",Se);r("mori.repeat.f1",Se.b);r("mori.repeat.f2",Se.a);r("mori.repeatedly",Te);r("mori.repeatedly.f1",Te.b);r("mori.repeatedly.f2",Te.a);r("mori.sort",sd);r("mori.sort.f1",sd.b);r("mori.sort.f2",sd.a);r("mori.sortBy",td);r("mori.sortBy.f2",td.a);r("mori.sortBy.f3",td.c);r("mori.intoArray",Ia);r("mori.intoArray.f1",Ia.b);
+r("mori.intoArray.f2",Ia.a);r("mori.subseq",nh);r("mori.subseq.f3",nh.c);r("mori.subseq.f5",nh.r);r("mori.dedupe",Fh);r("mori.dedupe.f0",Fh.l);r("mori.dedupe.f1",Fh.b);r("mori.transduce",wd);r("mori.transduce.f3",wd.c);r("mori.transduce.f4",wd.n);r("mori.eduction",function(a,b){return new Gh(a,b)});r("mori.sequence",Ce);r("mori.sequence.f1",Ce.b);r("mori.sequence.f2",Ce.a);r("mori.sequence.fn",Ce.K);r("mori.completing",vd);r("mori.completing.f1",vd.b);r("mori.completing.f2",vd.a);r("mori.list",Kd);
+r("mori.vector",Af);r("mori.hashMap",Pg);r("mori.set",fh);r("mori.sortedSet",gh);r("mori.sortedSetBy",hh);r("mori.sortedMap",Qg);r("mori.sortedMapBy",Rg);r("mori.queue",function(){function a(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return b.call(this,d)}function b(a){return af.a?af.a(Mf,a):af.call(null,Mf,a)}a.i=0;a.f=function(a){a=D(a);return b(a)};a.d=b;return a}());r("mori.keyword",Pd);r("mori.keyword.f1",Pd.b);
+r("mori.keyword.f2",Pd.a);r("mori.symbol",rc);r("mori.symbol.f1",rc.b);r("mori.symbol.f2",rc.a);r("mori.zipmap",function(a,b){for(var c=Ob(Uf),d=D(a),e=D(b);;)if(d&&e)c=ee.c(c,G(d),G(e)),d=K(d),e=K(e);else return Qb(c)});r("mori.isList",function(a){return a?a.j&33554432||a.wc?!0:a.j?!1:w(Eb,a):w(Eb,a)});r("mori.isSeq",kd);r("mori.isVector",ed);r("mori.isMap",dd);r("mori.isSet",ad);r("mori.isKeyword",function(a){return a instanceof U});r("mori.isSymbol",function(a){return a instanceof qc});
+r("mori.isCollection",$c);r("mori.isSequential",cd);r("mori.isAssociative",bd);r("mori.isCounted",Ec);r("mori.isIndexed",Fc);r("mori.isReduceable",function(a){return a?a.j&524288||a.Sb?!0:a.j?!1:w(vb,a):w(vb,a)});r("mori.isSeqable",ld);r("mori.isReversible",Id);r("mori.union",Rh);r("mori.union.f0",Rh.l);r("mori.union.f1",Rh.b);r("mori.union.f2",Rh.a);r("mori.union.fn",Rh.K);r("mori.intersection",Sh);r("mori.intersection.f1",Sh.b);r("mori.intersection.f2",Sh.a);r("mori.intersection.fn",Sh.K);
+r("mori.difference",Th);r("mori.difference.f1",Th.b);r("mori.difference.f2",Th.a);r("mori.difference.fn",Th.K);r("mori.join",Xh);r("mori.join.f2",Xh.a);r("mori.join.f3",Xh.c);r("mori.index",Vh);r("mori.project",function(a,b){return fh(Oe.a(function(a){return Yg(a,b)},a))});r("mori.mapInvert",Wh);r("mori.rename",function(a,b){return fh(Oe.a(function(a){return Uh(a,b)},a))});r("mori.renameKeys",Uh);r("mori.isSubset",function(a,b){return Q(a)<=Q(b)&&Ee(function(a){return nd(b,a)},a)});
+r("mori.isSuperset",function(a,b){return Q(a)>=Q(b)&&Ee(function(b){return nd(a,b)},b)});r("mori.notEquals",je);r("mori.notEquals.f1",je.b);r("mori.notEquals.f2",je.a);r("mori.notEquals.fn",je.K);r("mori.gt",Ad);r("mori.gt.f1",Ad.b);r("mori.gt.f2",Ad.a);r("mori.gt.fn",Ad.K);r("mori.gte",Bd);r("mori.gte.f1",Bd.b);r("mori.gte.f2",Bd.a);r("mori.gte.fn",Bd.K);r("mori.lt",yd);r("mori.lt.f1",yd.b);r("mori.lt.f2",yd.a);r("mori.lt.fn",yd.K);r("mori.lte",zd);r("mori.lte.f1",zd.b);r("mori.lte.f2",zd.a);
+r("mori.lte.fn",zd.K);r("mori.compare",od);r("mori.partial",Je);r("mori.partial.f1",Je.b);r("mori.partial.f2",Je.a);r("mori.partial.f3",Je.c);r("mori.partial.f4",Je.n);r("mori.partial.fn",Je.K);r("mori.comp",Ie);r("mori.comp.f0",Ie.l);r("mori.comp.f1",Ie.b);r("mori.comp.f2",Ie.a);r("mori.comp.f3",Ie.c);r("mori.comp.fn",Ie.K);
+r("mori.pipeline",function(){function a(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return b.call(this,d)}function b(a){function b(a,c){return c.b?c.b(a):c.call(null,a)}return A.a?A.a(b,a):A.call(null,b,a)}a.i=0;a.f=function(a){a=D(a);return b(a)};a.d=b;return a}());
+r("mori.curry",function(){function a(a,d){var e=null;if(1<arguments.length){for(var e=0,f=Array(arguments.length-1);e<f.length;)f[e]=arguments[e+1],++e;e=new F(f,0)}return b.call(this,a,e)}function b(a,b){return function(e){return T.a(a,M.a?M.a(e,b):M.call(null,e,b))}}a.i=1;a.f=function(a){var d=G(a);a=H(a);return b(d,a)};a.d=b;return a}());
+r("mori.juxt",function(){function a(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return b.call(this,d)}function b(a){return function(){function b(a){var c=null;if(0<arguments.length){for(var c=0,d=Array(arguments.length-0);c<d.length;)d[c]=arguments[c+0],++c;c=new F(d,0)}return e.call(this,c)}function e(b){var d=function(){function d(a){return T.a(a,b)}return Oe.a?Oe.a(d,a):Oe.call(null,d,a)}();return Ia.b?Ia.b(d):Ia.call(null,
+d)}b.i=0;b.f=function(a){a=D(a);return e(a)};b.d=e;return b}()}a.i=0;a.f=function(a){a=D(a);return b(a)};a.d=b;return a}());
+r("mori.knit",function(){function a(a){var d=null;if(0<arguments.length){for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;d=new F(e,0)}return b.call(this,d)}function b(a){return function(b){var e=function(){function e(a,b){return a.b?a.b(b):a.call(null,b)}return Oe.c?Oe.c(e,a,b):Oe.call(null,e,a,b)}();return Ia.b?Ia.b(e):Ia.call(null,e)}}a.i=0;a.f=function(a){a=D(a);return b(a)};a.d=b;return a}());r("mori.sum",xd);r("mori.sum.f0",xd.l);r("mori.sum.f1",xd.b);
+r("mori.sum.f2",xd.a);r("mori.sum.fn",xd.K);r("mori.inc",function(a){return a+1});r("mori.dec",function(a){return a-1});r("mori.isEven",Ge);r("mori.isOdd",function(a){return!Ge(a)});r("mori.each",function(a,b){for(var c=D(a),d=null,e=0,f=0;;)if(f<e){var g=d.Q(null,f);b.b?b.b(g):b.call(null,g);f+=1}else if(c=D(c))fd(c)?(e=Yb(c),c=Zb(c),d=e,e=Q(e)):(d=g=G(c),b.b?b.b(d):b.call(null,d),c=K(c),d=null,e=0),f=0;else return null});r("mori.identity",ud);
+r("mori.constantly",function(a){return function(){function b(b){if(0<arguments.length)for(var d=0,e=Array(arguments.length-0);d<e.length;)e[d]=arguments[d+0],++d;return a}b.i=0;b.f=function(b){D(b);return a};b.d=function(){return a};return b}()});r("mori.toJs",Kh);
+r("mori.toClj",function(){function a(a,b){return Ph.d(a,Kc([Oh,b],0))}function b(a){return Ph.b(a)}var c=null,c=function(c,e){switch(arguments.length){case 1:return b.call(this,c);case 2:return a.call(this,c,e)}throw Error("Invalid arity: "+arguments.length);};c.b=b;c.a=a;return c}());r("mori.configure",function(a,b){switch(a){case "print-length":return la=b;case "print-level":return ma=b;default:throw Error([z("No matching clause: "),z(a)].join(""));}});r("mori.meta",Vc);r("mori.withMeta",O);
+r("mori.varyMeta",ie);r("mori.varyMeta.f2",ie.a);r("mori.varyMeta.f3",ie.c);r("mori.varyMeta.f4",ie.n);r("mori.varyMeta.f5",ie.r);r("mori.varyMeta.f6",ie.P);r("mori.varyMeta.fn",ie.K);r("mori.alterMeta",Dh);r("mori.resetMeta",function(a,b){return a.k=b});V.prototype.inspect=function(){return this.toString()};F.prototype.inspect=function(){return this.toString()};Hc.prototype.inspect=function(){return this.toString()};wg.prototype.inspect=function(){return this.toString()};pg.prototype.inspect=function(){return this.toString()};
+qg.prototype.inspect=function(){return this.toString()};Fd.prototype.inspect=function(){return this.toString()};Ld.prototype.inspect=function(){return this.toString()};Hd.prototype.inspect=function(){return this.toString()};W.prototype.inspect=function(){return this.toString()};Vd.prototype.inspect=function(){return this.toString()};Bf.prototype.inspect=function(){return this.toString()};Df.prototype.inspect=function(){return this.toString()};Z.prototype.inspect=function(){return this.toString()};
+X.prototype.inspect=function(){return this.toString()};pa.prototype.inspect=function(){return this.toString()};rg.prototype.inspect=function(){return this.toString()};Lg.prototype.inspect=function(){return this.toString()};$g.prototype.inspect=function(){return this.toString()};ch.prototype.inspect=function(){return this.toString()};ph.prototype.inspect=function(){return this.toString()};U.prototype.inspect=function(){return this.toString()};qc.prototype.inspect=function(){return this.toString()};
+Lf.prototype.inspect=function(){return this.toString()};Kf.prototype.inspect=function(){return this.toString()};r("mori.mutable.thaw",function(a){return Ob(a)});r("mori.mutable.freeze",ce);r("mori.mutable.conj",de);r("mori.mutable.conj.f0",de.l);r("mori.mutable.conj.f1",de.b);r("mori.mutable.conj.f2",de.a);r("mori.mutable.conj.fn",de.K);r("mori.mutable.assoc",ee);r("mori.mutable.assoc.f3",ee.c);r("mori.mutable.assoc.fn",ee.K);r("mori.mutable.dissoc",fe);r("mori.mutable.dissoc.f2",fe.a);r("mori.mutable.dissoc.fn",fe.K);r("mori.mutable.pop",function(a){return Ub(a)});r("mori.mutable.disj",ge);
+r("mori.mutable.disj.f2",ge.a);r("mori.mutable.disj.fn",ge.K);;return this.mori;}.call({});});
+
+},{}],"serialize/exportcsv":[function(require,module,exports){
+(function() {
+  var BreedReference, ExportedColorNum, ExportedCommandLambda, ExportedLinkSet, ExportedPatchSet, ExportedRGB, ExportedRGBA, ExportedReporterLambda, ExportedTurtleSet, JSType, LinkReference, NobodyReference, PatchReference, TurtleReference, allPlotsDataToCSV, flatMap, fold, formatAgentRef, formatAgents, formatAny, formatAnyInner, formatBoolean, formatBreedRef, formatColor, formatDate, formatGlobals, formatKeys, formatLinkRef, formatList, formatMetadata, formatMiniGlobals, formatNumber, formatNumberInner, formatPair, formatPatchRef, formatPensData, formatPlain, formatPlotData, formatPointsData, formatString, formatStringInner, formatTurtleRef, formatValues, id, isEmpty, joinCommaed, keys, map, maxBy, maybe, onNextLineIfNotEmpty, pairs, pipeline, plotDataToCSV, rangeUntil, ref1, ref2, ref3, ref4, ref5, schemafyAny, schemafyLink, schemafyPatch, schemafyTurtle, tee, toObject, unique, values, worldDataToCSV;
+
+  JSType = require('util/typechecker');
+
+  ref1 = require('brazierjs/array'), flatMap = ref1.flatMap, isEmpty = ref1.isEmpty, map = ref1.map, maxBy = ref1.maxBy, toObject = ref1.toObject, unique = ref1.unique;
+
+  ref2 = require('brazierjs/function'), id = ref2.id, pipeline = ref2.pipeline, tee = ref2.tee;
+
+  ref3 = require('brazierjs/maybe'), fold = ref3.fold, maybe = ref3.maybe;
+
+  rangeUntil = require('brazierjs/number').rangeUntil;
+
+  ref4 = require('brazierjs/object'), keys = ref4.keys, pairs = ref4.pairs, values = ref4.values;
+
+  ref5 = require('./exportstructures'), BreedReference = ref5.BreedReference, ExportedColorNum = ref5.ExportedColorNum, ExportedCommandLambda = ref5.ExportedCommandLambda, ExportedLinkSet = ref5.ExportedLinkSet, ExportedPatchSet = ref5.ExportedPatchSet, ExportedReporterLambda = ref5.ExportedReporterLambda, ExportedRGB = ref5.ExportedRGB, ExportedRGBA = ref5.ExportedRGBA, ExportedTurtleSet = ref5.ExportedTurtleSet, LinkReference = ref5.LinkReference, NobodyReference = ref5.NobodyReference, PatchReference = ref5.PatchReference, TurtleReference = ref5.TurtleReference;
+
+  onNextLineIfNotEmpty = function(x) {
+    if (isEmpty(x)) {
+      return '';
+    } else {
+      return '\n' + x;
+    }
+  };
+
+  joinCommaed = function(x) {
+    return x.join(',');
+  };
+
+  formatPlain = function(str) {
+    return '"' + str + '"';
+  };
+
+  formatStringInner = function(str) {
+    return '""' + str.replace(/\n/g, "\\n").replace(/"/g, '""') + '""';
+  };
+
+  formatString = function(str) {
+    return formatPlain(formatStringInner(str));
+  };
+
+  formatBoolean = function(bool) {
+    return formatPlain(bool);
+  };
+
+  formatNumberInner = function(num) {
+    var base, maxNetLogoInt;
+    maxNetLogoInt = 9007199254740992;
+    base = num > maxNetLogoInt || num < -maxNetLogoInt || ((0 < num && num < 1e-3)) || ((0 > num && num > -1e-3)) ? num.toExponential() : num.toString();
+    return base.replace(/e\+?/, 'E');
+  };
+
+  formatNumber = function(num) {
+    return formatPlain(formatNumberInner(num));
+  };
+
+  formatBreedRef = function(arg) {
+    var breedName, lowered;
+    breedName = arg.breedName;
+    lowered = breedName.toLowerCase();
+    if (lowered === "turtles" || lowered === "patches" || lowered === "links") {
+      return "{all-" + lowered + "}";
+    } else {
+      return "{breed " + lowered + "}";
+    }
+  };
+
+  formatPair = function(arg) {
+    var formatter, value;
+    value = arg[0], formatter = arg[1];
+    return formatter(value);
+  };
+
+  formatTurtleRef = function(arg) {
+    var ref6, singular, turtleID;
+    (ref6 = arg.breed, singular = ref6.singular), turtleID = arg.id;
+    return "{" + (singular.toLowerCase()) + " " + turtleID + "}";
+  };
+
+  formatPatchRef = function(arg) {
+    var pxcor, pycor;
+    pxcor = arg.pxcor, pycor = arg.pycor;
+    return "{patch " + pxcor + " " + pycor + "}";
+  };
+
+  formatLinkRef = function(arg) {
+    var id1, id2, ref6, singular;
+    (ref6 = arg.breed, singular = ref6.singular), id1 = arg.id1, id2 = arg.id2;
+    return "{" + (singular.toLowerCase()) + " " + id1 + " " + id2 + "}";
+  };
+
+  formatAgentRef = function(ref) {
+    if (ref === NobodyReference) {
+      return "nobody";
+    } else if (ref instanceof LinkReference) {
+      return formatLinkRef(ref);
+    } else if (ref instanceof PatchReference) {
+      return formatPatchRef(ref);
+    } else if (ref instanceof TurtleReference) {
+      return formatTurtleRef(ref);
+    } else {
+      throw new Error("Unknown agent reference: " + (JSON.stringify(ref)));
+    }
+  };
+
+  formatList = function(xs) {
+    return "[" + (xs.map(function(x) {
+      return formatAnyInner(x);
+    }).join(" ")) + "]";
+  };
+
+  formatColor = function(color) {
+    if (color instanceof ExportedColorNum) {
+      return formatNumber(color.value);
+    } else if (color instanceof ExportedRGB) {
+      return formatPlain(formatList([color.r, color.g, color.b]));
+    } else if (color instanceof ExportedRGBA) {
+      return formatPlain(formatList([color.r, color.g, color.b, color.a]));
+    } else {
+      throw new Error("Unknown color: " + (JSON.stringify(color)));
+    }
+  };
+
+  formatAnyInner = function(x) {
+    var exportInnerLink, exportInnerPatch, exportInnerTurtle, type;
+    type = JSType(x);
+    if (type.isArray()) {
+      return formatList(x);
+    } else if (type.isBoolean()) {
+      return x;
+    } else if (type.isNumber()) {
+      return formatNumberInner(x);
+    } else if (type.isString()) {
+      return formatStringInner(x);
+    } else if (x instanceof BreedReference) {
+      return formatBreedRef(x);
+    } else if (x === NobodyReference) {
+      return "nobody";
+    } else if (x instanceof LinkReference) {
+      return formatLinkRef(x);
+    } else if (x instanceof PatchReference) {
+      return formatPatchRef(x);
+    } else if (x instanceof TurtleReference) {
+      return formatTurtleRef(x);
+    } else if (x instanceof ExportedCommandLambda) {
+      return "(anonymous command: " + (x.source.replaceAll('"', '""')) + ")";
+    } else if (x instanceof ExportedReporterLambda) {
+      return "(anonymous reporter: " + (x.source.replaceAll('"', '""')) + ")";
+    } else if (x instanceof ExportedLinkSet) {
+      exportInnerLink = function(arg) {
+        var id1, id2, plural, ref6;
+        (ref6 = arg.breed, plural = ref6.plural), id1 = arg.id1, id2 = arg.id2;
+        return " [" + id1 + " " + id2 + " " + (formatBreedRef(new BreedReference(plural))) + "]";
+      };
+      return "{links" + (x.references.map(exportInnerLink).join("")) + "}";
+    } else if (x instanceof ExportedPatchSet) {
+      exportInnerPatch = function(arg) {
+        var pxcor, pycor;
+        pxcor = arg.pxcor, pycor = arg.pycor;
+        return " [" + pxcor + " " + pycor + "]";
+      };
+      return "{patches" + (x.references.map(exportInnerPatch).join("")) + "}";
+    } else if (x instanceof ExportedTurtleSet) {
+      exportInnerTurtle = function(ref) {
+        return " " + ref.id;
+      };
+      return "{turtles" + (x.references.map(exportInnerTurtle).join("")) + "}";
+    } else {
+      throw new Error("I don't know how to CSVify this: " + (JSON.stringify(x)));
+    }
+  };
+
+  formatAny = function(any) {
+    if (any == null) {
+      return "";
+    } else {
+      return formatPlain(formatAnyInner(any));
+    }
+  };
+
+  formatKeys = pipeline(keys, map(formatPlain), joinCommaed);
+
+  formatValues = pipeline(values, map(formatPair), joinCommaed);
+
+  schemafyTurtle = function(arg) {
+    var breed, color, formatWrapped, heading, isHidden, label, labelColor, penMode, penSize, shape, size, who, xcor, ycor;
+    who = arg.who, color = arg.color, heading = arg.heading, xcor = arg.xcor, ycor = arg.ycor, shape = arg.shape, label = arg.label, labelColor = arg.labelColor, breed = arg.breed, isHidden = arg.isHidden, size = arg.size, penSize = arg.penSize, penMode = arg.penMode;
+    formatWrapped = pipeline(formatBreedRef, formatPlain);
+    return {
+      "who": [who, formatNumber],
+      "color": [color, formatColor],
+      "heading": [heading, formatNumber],
+      "xcor": [xcor, formatNumber],
+      "ycor": [ycor, formatNumber],
+      "shape": [shape, formatString],
+      "label": [label, formatAny],
+      "label-color": [labelColor, formatColor],
+      "breed": [breed, formatWrapped],
+      "hidden?": [isHidden, formatBoolean],
+      "size": [size, formatNumber],
+      "pen-size": [penSize, formatNumber],
+      "pen-mode": [penMode, formatString]
+    };
+  };
+
+  schemafyPatch = function(arg) {
+    var pcolor, plabel, plabelColor, pxcor, pycor;
+    pxcor = arg.pxcor, pycor = arg.pycor, pcolor = arg.pcolor, plabel = arg.plabel, plabelColor = arg.plabelColor;
+    return {
+      "pxcor": [pxcor, formatNumber],
+      "pycor": [pycor, formatNumber],
+      "pcolor": [pcolor, formatColor],
+      "plabel": [plabel, formatAny],
+      "plabel-color": [plabelColor, formatColor]
+    };
+  };
+
+  schemafyLink = function(arg) {
+    var breed, color, end1, end2, formatWrappedBreed, formatWrappedTurtle, isHidden, label, labelColor, shape, thickness, tieMode;
+    end1 = arg.end1, end2 = arg.end2, color = arg.color, label = arg.label, labelColor = arg.labelColor, isHidden = arg.isHidden, breed = arg.breed, thickness = arg.thickness, shape = arg.shape, tieMode = arg.tieMode;
+    formatWrappedBreed = pipeline(formatBreedRef, formatPlain);
+    formatWrappedTurtle = pipeline(formatTurtleRef, formatPlain);
+    return {
+      "end1": [end1, formatWrappedTurtle],
+      "end2": [end2, formatWrappedTurtle],
+      "color": [color, formatColor],
+      "label": [label, formatAny],
+      "label-color": [labelColor, formatColor],
+      "hidden?": [isHidden, formatBoolean],
+      "breed": [breed, formatWrappedBreed],
+      "thickness": [thickness, formatNumber],
+      "shape": [shape, formatString],
+      "tie-mode": [tieMode, formatString]
+    };
+  };
+
+  schemafyAny = pipeline(pairs, map(function(arg) {
+    var k, v;
+    k = arg[0], v = arg[1];
+    return [k, [v, formatAny]];
+  }), toObject);
+
+  formatDate = function(date) {
+    var day, format, hour, milli, minute, month, second, tzOffset1, tzOffset2, tzSign, year;
+    format = function(value, precision) {
+      return value.toString().padStart(precision, '0');
+    };
+    month = format(date.getMonth() + 1, 2);
+    day = format(date.getDate(), 2);
+    year = format(date.getFullYear(), 4);
+    hour = format(date.getHours(), 2);
+    minute = format(date.getMinutes(), 2);
+    second = format(date.getSeconds(), 2);
+    milli = format(date.getMilliseconds(), 3);
+    tzSign = format((date.getTimezoneOffset() > 0 ? '-' : '+'), 0);
+    tzOffset1 = format(Math.abs(date.getTimezoneOffset() / 60), 2);
+    tzOffset2 = format(Math.abs(date.getTimezoneOffset() % 60), 2);
+    return month + "/" + day + "/" + year + " " + hour + ":" + minute + ":" + second + ":" + milli + " " + tzSign + tzOffset1 + tzOffset2;
+  };
+
+  formatGlobals = function(arg) {
+    var builtins, codeGlobals, formatDirectedness, formatPerspective, formatSubject, globals, linkDirectedness, maxPxcor, maxPycor, minPxcor, minPycor, nextWhoNumber, perspective, subject, ticks;
+    linkDirectedness = arg.linkDirectedness, maxPxcor = arg.maxPxcor, maxPycor = arg.maxPycor, minPxcor = arg.minPxcor, minPycor = arg.minPycor, nextWhoNumber = arg.nextWhoNumber, perspective = arg.perspective, subject = arg.subject, ticks = arg.ticks, codeGlobals = arg.codeGlobals;
+    formatPerspective = function(p) {
+      return formatNumber((function() {
+        switch (p.toLowerCase()) {
+          case 'observe':
+            return 0;
+          case 'ride':
+            return 1;
+          case 'follow':
+            return 2;
+          case 'watch':
+            return 3;
+          default:
+            throw new Error("Unknown perspective: " + (JSON.stringify(x)));
+        }
+      })());
+    };
+    formatDirectedness = pipeline((function(s) {
+      return s.toUpperCase();
+    }), formatString);
+    formatSubject = pipeline(formatAgentRef, formatPlain);
+    builtins = {
+      'min-pxcor': [minPxcor, formatNumber],
+      'max-pxcor': [maxPxcor, formatNumber],
+      'min-pycor': [minPycor, formatNumber],
+      'max-pycor': [maxPycor, formatNumber],
+      'perspective': [perspective, formatPerspective],
+      'subject': [subject, formatSubject],
+      'nextIndex': [nextWhoNumber, formatNumber],
+      'directed-links': [linkDirectedness, formatDirectedness],
+      'ticks': [ticks, formatNumber]
+    };
+    globals = Object.assign(builtins, schemafyAny(codeGlobals));
+    return (formatPlain('GLOBALS')) + "\n" + (formatKeys(globals)) + "\n" + (formatValues(globals));
+  };
+
+  formatMiniGlobals = function(miniGlobals) {
+    return (formatPlain('MODEL SETTINGS')) + "\n" + (formatKeys(miniGlobals)) + "\n" + (formatValues(schemafyAny(miniGlobals)));
+  };
+
+  formatMetadata = function(arg) {
+    var date, filename, version;
+    version = arg.version, filename = arg.filename, date = arg.date;
+    return "export-world data (NetLogo Web " + version + ")\n" + filename + "\n" + (formatPlain(formatDate(date)));
+  };
+
+  formatAgents = function(agents, schemafy, builtinsNames, ownsNames) {
+    var keysRow, valuesRows;
+    keysRow = pipeline(unique, map(formatPlain), joinCommaed)(builtinsNames.concat(ownsNames));
+    valuesRows = agents.map(function(agent) {
+      var base, extras, lookup;
+      lookup = function(key) {
+        var ref6;
+        return ((ref6 = agent.breedsOwns) != null ? ref6 : agent.patchesOwns)[key];
+      };
+      base = schemafy(agent);
+      extras = pipeline(map(tee(id)(lookup)), toObject, schemafyAny)(ownsNames);
+      return formatValues(Object.assign(base, extras));
+    }).join('\n');
+    return "" + keysRow + (onNextLineIfNotEmpty(valuesRows));
+  };
+
+  formatPlotData = function(arg) {
+    var convertedPlot, currentPenNameOrNull, currentPenStr, isAutoplotting, isLegendOpen, name, pens, xMax, xMin, yMax, yMin;
+    currentPenNameOrNull = arg.currentPenNameOrNull, isAutoplotting = arg.isAutoplotting, isLegendOpen = arg.isLegendOpen, name = arg.name, pens = arg.pens, xMax = arg.xMax, xMin = arg.xMin, yMax = arg.yMax, yMin = arg.yMin;
+    currentPenStr = currentPenNameOrNull != null ? currentPenNameOrNull : '';
+    convertedPlot = {
+      'x min': [xMin, formatNumber],
+      'x max': [xMax, formatNumber],
+      'y min': [yMin, formatNumber],
+      'y max': [yMax, formatNumber],
+      'autoplot?': [isAutoplotting, formatBoolean],
+      'current pen': [currentPenStr, formatString],
+      'legend open?': [isLegendOpen, formatBoolean],
+      'number of pens': [pens.length, formatNumber]
+    };
+    return (formatString(name)) + "\n" + (formatKeys(convertedPlot)) + "\n" + (formatValues(convertedPlot)) + "\n\n" + (formatPensData(pens)) + "\n\n" + (formatPointsData(pens));
+  };
+
+  formatPensData = function(pens) {
+    var convertPen, convertedPens, formatPenMode, pensKeys, pensValues;
+    formatPenMode = function(x) {
+      return formatNumber((function() {
+        switch (x.toLowerCase()) {
+          case 'line':
+            return 0;
+          case 'bar':
+            return 1;
+          case 'point':
+            return 2;
+          default:
+            throw new Error("Unknown pen mode: " + (JSON.stringify(x)));
+        }
+      })());
+    };
+    convertPen = function(arg) {
+      var color, interval, isPenDown, mode, name, x;
+      color = arg.color, interval = arg.interval, isPenDown = arg.isPenDown, mode = arg.mode, name = arg.name, x = arg.x;
+      return {
+        'pen name': [name, formatString],
+        'pen down?': [isPenDown, formatBoolean],
+        'mode': [mode, formatPenMode],
+        'interval': [interval, formatNumber],
+        'color': [color, formatNumber],
+        'x': [x, formatNumber]
+      };
+    };
+    convertedPens = pens.map(convertPen);
+    pensKeys = formatKeys(convertPen({}));
+    pensValues = convertedPens.map(pipeline(values, map(formatPair))).join('\n');
+    return "" + pensKeys + (onNextLineIfNotEmpty(pensValues));
+  };
+
+  formatPointsData = function(pens) {
+    var baseKeys, convertPoint, formatRow, longest, penNames, penPointsRows, pointKeys, pointValues, transposed;
+    convertPoint = function(arg) {
+      var color, isPenDown, x, y;
+      x = arg.x, y = arg.y, color = arg.color, isPenDown = arg.isPenDown;
+      return {
+        'x': [x, formatNumber],
+        'y': [y, formatNumber],
+        'color': [color, formatNumber],
+        'pen down?': [isPenDown, formatBoolean]
+      };
+    };
+    penNames = pens.map(function(pen) {
+      return formatString(pen.name);
+    }).join(',,,,');
+    baseKeys = keys(convertPoint({})).map(formatPlain);
+    pointKeys = flatMap(function() {
+      return baseKeys;
+    })(rangeUntil(0)(pens.length)).join(',');
+    penPointsRows = pens.map(function(pen) {
+      return pen.points.map(pipeline(convertPoint, values));
+    });
+    formatRow = function(row) {
+      return row.map(pipeline(maybe, fold(function() {
+        return ['', '', '', ''];
+      })(map(formatPair)))).join(',');
+    };
+    longest = pipeline(maxBy(function(a) {
+      return a.length;
+    }), fold(function() {
+      return [];
+    })(id));
+    transposed = function(arrays) {
+      return (longest(arrays)).map(function(_, i) {
+        return arrays.map(function(array) {
+          return array[i];
+        });
+      });
+    };
+    pointValues = transposed(penPointsRows).map(formatRow).join('\n');
+    return penNames + "\n" + pointKeys + (onNextLineIfNotEmpty(pointValues));
+  };
+
+  plotDataToCSV = function(arg) {
+    var metadata, miniGlobals, plot;
+    metadata = arg.metadata, miniGlobals = arg.miniGlobals, plot = arg.plot;
+    return (formatMetadata(metadata)) + "\n\n" + (formatMiniGlobals(miniGlobals)) + "\n\n" + (formatPlotData(plot));
+  };
+
+  allPlotsDataToCSV = function(arg) {
+    var metadata, miniGlobals, plots;
+    metadata = arg.metadata, miniGlobals = arg.miniGlobals, plots = arg.plots;
+    return (formatMetadata(metadata)) + "\n\n" + (formatMiniGlobals(miniGlobals)) + "\n\n" + (plots.map(formatPlotData).join("\n"));
+  };
+
+  worldDataToCSV = function(allTurtlesOwnsNames, allLinksOwnsNames, patchBuiltins, turtleBuiltins, linkBuiltins) {
+    return function(worldData) {
+      var allPatchesOwnsNames, currentPlotName, currentPlotNameOrNull, extensions, globals, links, linksStr, metadata, obnoxiousPlotCSV, output, patches, patchesStr, plotCSV, plotManager, plots, randomState, turtles, turtlesStr;
+      metadata = worldData.metadata, randomState = worldData.randomState, globals = worldData.globals, patches = worldData.patches, turtles = worldData.turtles, links = worldData.links, plotManager = worldData.plotManager, output = worldData.output, extensions = worldData.extensions;
+      allPatchesOwnsNames = Object.keys(patches[0].patchesOwns);
+      patchesStr = formatAgents(patches, schemafyPatch, patchBuiltins, allPatchesOwnsNames);
+      turtlesStr = formatAgents(turtles, schemafyTurtle, turtleBuiltins, allTurtlesOwnsNames);
+      linksStr = formatAgents(links, schemafyLink, linkBuiltins, allLinksOwnsNames);
+      currentPlotNameOrNull = plotManager.currentPlotNameOrNull, plots = plotManager.plots;
+      currentPlotName = currentPlotNameOrNull != null ? currentPlotNameOrNull : '';
+      plotCSV = plots.map(formatPlotData).join('\n\n');
+      obnoxiousPlotCSV = plotCSV.length > 0 ? plotCSV + "\n" : plotCSV;
+      return (formatMetadata(metadata)) + "\n\n" + (formatPlain('RANDOM STATE')) + "\n" + (formatPlain(randomState)) + "\n\n" + (formatGlobals(globals)) + "\n\n" + (formatPlain('TURTLES')) + "\n" + turtlesStr + "\n\n" + (formatPlain('PATCHES')) + "\n" + patchesStr + "\n\n" + (formatPlain('LINKS')) + "\n" + linksStr + "\n\n" + (formatPlain('OUTPUT')) + (onNextLineIfNotEmpty(output === "" ? "" : formatString(output))) + "\n" + (formatPlain('PLOTS')) + "\n" + (formatPlain(currentPlotName)) + (onNextLineIfNotEmpty(obnoxiousPlotCSV)) + "\n" + (formatPlain('EXTENSIONS')) + "\n\n";
+    };
+  };
+
+  module.exports = {
+    allPlotsDataToCSV: allPlotsDataToCSV,
+    plotDataToCSV: plotDataToCSV,
+    worldDataToCSV: worldDataToCSV
+  };
+
+}).call(this);
+
+},{"./exportstructures":"serialize/exportstructures","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/maybe":"brazier/maybe","brazierjs/number":"brazier/number","brazierjs/object":"brazier/object","util/typechecker":"util/typechecker"}],"serialize/exportstructures":[function(require,module,exports){
+(function() {
+  var AgentReference, ExportedAgent, ExportedAgentSet, ExportedColor,
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  module.exports.BreedNamePair = (function() {
+    function _Class(singular, plural) {
+      this.singular = singular;
+      this.plural = plural;
+    }
+
+    return _Class;
+
+  })();
+
+  ExportedColor = (function() {
+    function ExportedColor() {}
+
+    return ExportedColor;
+
+  })();
+
+  module.exports.ExportedColor = ExportedColor;
+
+  module.exports.ExportedRGB = (function(superClass) {
+    extend(_Class, superClass);
+
+    function _Class(r, g, b) {
+      this.r = r;
+      this.g = g;
+      this.b = b;
+    }
+
+    return _Class;
+
+  })(ExportedColor);
+
+  module.exports.ExportedRGBA = (function(superClass) {
+    extend(_Class, superClass);
+
+    function _Class(r, g, b, a) {
+      this.r = r;
+      this.g = g;
+      this.b = b;
+      this.a = a != null ? a : 255;
+    }
+
+    return _Class;
+
+  })(ExportedColor);
+
+  module.exports.ExportedColorNum = (function(superClass) {
+    extend(_Class, superClass);
+
+    function _Class(value) {
+      this.value = value;
+    }
+
+    return _Class;
+
+  })(ExportedColor);
+
+  module.exports.ExportedGlobals = (function() {
+    function _Class(linkDirectedness, maxPxcor, maxPycor, minPxcor, minPycor, nextWhoNumber, perspective, subject, ticks, codeGlobals) {
+      this.linkDirectedness = linkDirectedness;
+      this.maxPxcor = maxPxcor;
+      this.maxPycor = maxPycor;
+      this.minPxcor = minPxcor;
+      this.minPycor = minPycor;
+      this.nextWhoNumber = nextWhoNumber;
+      this.perspective = perspective;
+      this.subject = subject;
+      this.ticks = ticks;
+      this.codeGlobals = codeGlobals;
+    }
+
+    return _Class;
+
+  })();
+
+  module.exports.ExportedCommandLambda = (function() {
+    function _Class(source) {
+      this.source = source;
+    }
+
+    return _Class;
+
+  })();
+
+  module.exports.ExportedReporterLambda = (function() {
+    function _Class(source) {
+      this.source = source;
+    }
+
+    return _Class;
+
+  })();
+
+  module.exports.ExportedPoint = (function() {
+    function _Class(x, y, isPenDown, color) {
+      this.x = x;
+      this.y = y;
+      this.isPenDown = isPenDown;
+      this.color = color;
+    }
+
+    return _Class;
+
+  })();
+
+  module.exports.ExportedPen = (function() {
+    function _Class(color, interval, isPenDown, mode, name, points, x) {
+      this.color = color;
+      this.interval = interval;
+      this.isPenDown = isPenDown;
+      this.mode = mode;
+      this.name = name;
+      this.points = points;
+      this.x = x;
+    }
+
+    return _Class;
+
+  })();
+
+  module.exports.ExportedPlot = (function() {
+    function _Class(currentPenNameOrNull, isAutoplotting, isLegendOpen, name, pens, xMax, xMin, yMax, yMin) {
+      this.currentPenNameOrNull = currentPenNameOrNull;
+      this.isAutoplotting = isAutoplotting;
+      this.isLegendOpen = isLegendOpen;
+      this.name = name;
+      this.pens = pens;
+      this.xMax = xMax;
+      this.xMin = xMin;
+      this.yMax = yMax;
+      this.yMin = yMin;
+    }
+
+    return _Class;
+
+  })();
+
+  module.exports.ExportedPlotManager = (function() {
+    function _Class(currentPlotNameOrNull, plots) {
+      this.currentPlotNameOrNull = currentPlotNameOrNull;
+      this.plots = plots;
+    }
+
+    return _Class;
+
+  })();
+
+  module.exports.BreedReference = (function() {
+    function _Class(breedName) {
+      this.breedName = breedName;
+    }
+
+    return _Class;
+
+  })();
+
+  AgentReference = (function() {
+    function AgentReference(referenceType) {
+      this.referenceType = referenceType;
+    }
+
+    return AgentReference;
+
+  })();
+
+  module.exports.AgentReference = AgentReference;
+
+  module.exports.LinkReference = (function(superClass) {
+    extend(_Class, superClass);
+
+    function _Class(breed, id1, id2) {
+      this.breed = breed;
+      this.id1 = id1;
+      this.id2 = id2;
+      _Class.__super__.constructor.call(this, "link");
+    }
+
+    return _Class;
+
+  })(AgentReference);
+
+  module.exports.PatchReference = (function(superClass) {
+    extend(_Class, superClass);
+
+    function _Class(pxcor, pycor) {
+      this.pxcor = pxcor;
+      this.pycor = pycor;
+      _Class.__super__.constructor.call(this, "patch");
+    }
+
+    return _Class;
+
+  })(AgentReference);
+
+  module.exports.TurtleReference = (function(superClass) {
+    extend(_Class, superClass);
+
+    function _Class(breed, id) {
+      this.breed = breed;
+      this.id = id;
+      _Class.__super__.constructor.call(this, "turtle");
+    }
+
+    return _Class;
+
+  })(AgentReference);
+
+  module.exports.NobodyReference = new AgentReference("nobody");
+
+  ExportedAgent = (function() {
+    function ExportedAgent(agentType) {
+      this.agentType = agentType;
+    }
+
+    return ExportedAgent;
+
+  })();
+
+  module.exports.ExportedAgent = ExportedAgent;
+
+  module.exports.ExportedLink = (function(superClass) {
+    extend(_Class, superClass);
+
+    function _Class(end1, end2, color, label, labelColor, isHidden, breed, thickness, shape, tieMode, breedsOwns) {
+      this.end1 = end1;
+      this.end2 = end2;
+      this.color = color;
+      this.label = label;
+      this.labelColor = labelColor;
+      this.isHidden = isHidden;
+      this.breed = breed;
+      this.thickness = thickness;
+      this.shape = shape;
+      this.tieMode = tieMode;
+      this.breedsOwns = breedsOwns;
+      _Class.__super__.constructor.call(this, "link");
+    }
+
+    return _Class;
+
+  })(ExportedAgent);
+
+  module.exports.ExportedPatch = (function(superClass) {
+    extend(_Class, superClass);
+
+    function _Class(pxcor, pycor, pcolor, plabel, plabelColor, patchesOwns) {
+      this.pxcor = pxcor;
+      this.pycor = pycor;
+      this.pcolor = pcolor;
+      this.plabel = plabel;
+      this.plabelColor = plabelColor;
+      this.patchesOwns = patchesOwns;
+      _Class.__super__.constructor.call(this, "patch");
+    }
+
+    return _Class;
+
+  })(ExportedAgent);
+
+  module.exports.ExportedTurtle = (function(superClass) {
+    extend(_Class, superClass);
+
+    function _Class(who, color, heading, xcor, ycor, shape, label, labelColor, breed, isHidden, size, penSize, penMode, breedsOwns) {
+      this.who = who;
+      this.color = color;
+      this.heading = heading;
+      this.xcor = xcor;
+      this.ycor = ycor;
+      this.shape = shape;
+      this.label = label;
+      this.labelColor = labelColor;
+      this.breed = breed;
+      this.isHidden = isHidden;
+      this.size = size;
+      this.penSize = penSize;
+      this.penMode = penMode;
+      this.breedsOwns = breedsOwns;
+      _Class.__super__.constructor.call(this, "turtle");
+    }
+
+    return _Class;
+
+  })(ExportedAgent);
+
+  ExportedAgentSet = (function() {
+    function ExportedAgentSet(agentSetType) {
+      this.agentSetType = agentSetType;
+    }
+
+    return ExportedAgentSet;
+
+  })();
+
+  module.exports.ExportedAgentSet = ExportedAgentSet;
+
+  module.exports.ExportedLinkSet = (function(superClass) {
+    extend(_Class, superClass);
+
+    function _Class(references) {
+      this.references = references;
+      _Class.__super__.constructor.call(this, "linkset");
+    }
+
+    return _Class;
+
+  })(ExportedAgentSet);
+
+  module.exports.ExportedPatchSet = (function(superClass) {
+    extend(_Class, superClass);
+
+    function _Class(references) {
+      this.references = references;
+      _Class.__super__.constructor.call(this, "patchset");
+    }
+
+    return _Class;
+
+  })(ExportedAgentSet);
+
+  module.exports.ExportedTurtleSet = (function(superClass) {
+    extend(_Class, superClass);
+
+    function _Class(references) {
+      this.references = references;
+      _Class.__super__.constructor.call(this, "turtleset");
+    }
+
+    return _Class;
+
+  })(ExportedAgentSet);
+
+  module.exports.ExportedExtension = (function() {
+    function _Class() {}
+
+    return _Class;
+
+  })();
+
+  module.exports.Metadata = (function() {
+    function _Class(version, filename, date) {
+      this.version = version;
+      this.filename = filename;
+      this.date = date;
+    }
+
+    return _Class;
+
+  })();
+
+  module.exports.ExportWorldData = (function() {
+    function _Class(metadata, randomState, globals, patches, turtles, links, output, plotManager, extensions) {
+      this.metadata = metadata;
+      this.randomState = randomState;
+      this.globals = globals;
+      this.patches = patches;
+      this.turtles = turtles;
+      this.links = links;
+      this.output = output;
+      this.plotManager = plotManager;
+      this.extensions = extensions;
+    }
+
+    return _Class;
+
+  })();
+
+  module.exports.ExportPlotData = (function() {
+    function _Class(metadata, miniGlobals, plot) {
+      this.metadata = metadata;
+      this.miniGlobals = miniGlobals;
+      this.plot = plot;
+    }
+
+    return _Class;
+
+  })();
+
+  module.exports.ExportAllPlotsData = (function() {
+    function _Class(metadata, miniGlobals, plots) {
+      this.metadata = metadata;
+      this.miniGlobals = miniGlobals;
+      this.plots = plots;
+    }
+
+    return _Class;
+
+  })();
+
+}).call(this);
+
+},{}],"serialize/importcsv":[function(require,module,exports){
+(function() {
+  var ExportWorldData, ExportedColorNum, ExportedExtension, ExportedGlobals, ExportedLink, ExportedPatch, ExportedPen, ExportedPlot, ExportedPlotManager, ExportedPoint, ExportedRGB, ExportedRGBA, ExportedTurtle, JSType, Metadata, arrayParse, buckets, csvNameToSaneName, extensionParse, extractGlobals, fold, foldl, globalParse, id, identity, maybe, nameToSchema, parse, parseAgentRefMaybe, parseAndExtract, parseAny, parseBool, parseBreed, parseColor, parseDate, parsePenMode, parsePerspective, parseString, parseStringMaybe, parseTurtleRefMaybe, parseVersion, plotParse, ref, ref1, ref2, singletonParse, toExportedColor, toExportedGlobals, toExportedLink, toExportedPatch, toExportedPen, toExportedPlot, toExportedPlotManager, toExportedPoint, toExportedTurtle,
+    slice = [].slice,
+    indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+  parse = require('csv-parse/lib/sync');
+
+  JSType = require('util/typechecker');
+
+  ref = require('./readexportedvalue'), parseAgentRefMaybe = ref.parseAgentRefMaybe, parseAny = ref.parseAny, parseBool = ref.parseBool, parseBreed = ref.parseBreed, parseString = ref.parseString, parseTurtleRefMaybe = ref.parseTurtleRefMaybe;
+
+  ref1 = require('./exportstructures'), ExportedColorNum = ref1.ExportedColorNum, ExportedExtension = ref1.ExportedExtension, ExportedGlobals = ref1.ExportedGlobals, ExportedLink = ref1.ExportedLink, ExportedPatch = ref1.ExportedPatch, ExportedPen = ref1.ExportedPen, ExportedPlot = ref1.ExportedPlot, ExportedPlotManager = ref1.ExportedPlotManager, ExportedPoint = ref1.ExportedPoint, ExportedRGB = ref1.ExportedRGB, ExportedRGBA = ref1.ExportedRGBA, ExportedTurtle = ref1.ExportedTurtle, ExportWorldData = ref1.ExportWorldData, Metadata = ref1.Metadata;
+
+  foldl = require('brazierjs/array').foldl;
+
+  id = require('brazierjs/function').id;
+
+  ref2 = require('brazierjs/maybe'), fold = ref2.fold, maybe = ref2.maybe;
+
+  csvNameToSaneName = function(csvName) {
+    var camelCased, firstLetter, lowered, qMatch, remainder, replaceAll;
+    if (csvName !== "nextIndex") {
+      replaceAll = function(str, regex, f) {
+        var fullMatch, group, index, match, postfix, prefix;
+        match = str.match(regex);
+        if (match != null) {
+          fullMatch = match[0], group = match[1], index = match.index;
+          prefix = str.slice(0, index);
+          postfix = str.slice(index + fullMatch.length);
+          return replaceAll("" + prefix + (f(group)) + postfix, regex, f);
+        } else {
+          return str;
+        }
+      };
+      lowered = csvName.toLowerCase();
+      camelCased = replaceAll(lowered, /[ \-]+([a-z0-9])/, function(str) {
+        return str.toUpperCase();
+      });
+      qMatch = camelCased.match(/^(\w)(.*)\?$/);
+      if (qMatch != null) {
+        firstLetter = qMatch[1], remainder = qMatch[2];
+        return "is" + (firstLetter.toUpperCase()) + remainder;
+      } else {
+        return camelCased;
+      }
+    } else {
+      return csvName;
+    }
+  };
+
+  toExportedColor = function(color) {
+    var a, b, g, r;
+    if (JSType(color).isNumber()) {
+      return new ExportedColorNum(color);
+    } else if (JSType(color).isArray()) {
+      r = color[0], g = color[1], b = color[2], a = color[3];
+      if (a != null) {
+        return new ExportedRGBA(r, g, b, a);
+      } else {
+        return new ExportedRGB(r, g, b);
+      }
+    } else {
+      throw new Error("Unrecognized CSVified color: " + (JSON.stringify(color)));
+    }
+  };
+
+  toExportedGlobals = function(arg, codeGlobals) {
+    var directedLinks, maxPxcor, maxPycor, minPxcor, minPycor, nextIndex, perspective, subject, ticks;
+    directedLinks = arg.directedLinks, maxPxcor = arg.maxPxcor, maxPycor = arg.maxPycor, minPxcor = arg.minPxcor, minPycor = arg.minPycor, nextIndex = arg.nextIndex, perspective = arg.perspective, subject = arg.subject, ticks = arg.ticks;
+    return new ExportedGlobals(directedLinks, maxPxcor, maxPycor, minPxcor, minPycor, nextIndex, perspective, subject, ticks, codeGlobals);
+  };
+
+  toExportedLink = function(arg) {
+    var breed, color, end1, end2, extraVars, isHidden, label, labelColor, shape, thickness, tieMode;
+    breed = arg.breed, color = arg.color, end1 = arg.end1, end2 = arg.end2, isHidden = arg.isHidden, labelColor = arg.labelColor, label = arg.label, shape = arg.shape, thickness = arg.thickness, tieMode = arg.tieMode, extraVars = arg.extraVars;
+    return new ExportedLink(end1, end2, toExportedColor(color), label, toExportedColor(labelColor), isHidden, breed, thickness, shape, tieMode, extraVars);
+  };
+
+  toExportedPatch = function(arg) {
+    var extraVars, pcolor, plabel, plabelColor, pxcor, pycor;
+    pcolor = arg.pcolor, plabelColor = arg.plabelColor, plabel = arg.plabel, pxcor = arg.pxcor, pycor = arg.pycor, extraVars = arg.extraVars;
+    return new ExportedPatch(pxcor, pycor, toExportedColor(pcolor), plabel, toExportedColor(plabelColor), extraVars);
+  };
+
+  toExportedTurtle = function(arg) {
+    var breed, color, extraVars, heading, isHidden, label, labelColor, penMode, penSize, shape, size, who, xcor, ycor;
+    breed = arg.breed, color = arg.color, heading = arg.heading, isHidden = arg.isHidden, labelColor = arg.labelColor, label = arg.label, penMode = arg.penMode, penSize = arg.penSize, shape = arg.shape, size = arg.size, who = arg.who, xcor = arg.xcor, ycor = arg.ycor, extraVars = arg.extraVars;
+    return new ExportedTurtle(who, toExportedColor(color), heading, xcor, ycor, shape, label, toExportedColor(labelColor), breed, isHidden, size, penSize, penMode, extraVars);
+  };
+
+  toExportedPoint = function(arg) {
+    var color, isPenDown, x, y;
+    x = arg.x, y = arg.y, isPenDown = arg.isPenDown, color = arg.color;
+    return new ExportedPoint(x, y, isPenDown, color);
+  };
+
+  toExportedPen = function(arg) {
+    var color, interval, isPenDown, mode, penName, points, x;
+    color = arg.color, interval = arg.interval, isPenDown = arg.isPenDown, mode = arg.mode, penName = arg.penName, points = arg.points, x = arg.x;
+    return new ExportedPen(color, interval, isPenDown, mode, penName, points.map(toExportedPoint), x);
+  };
+
+  toExportedPlot = function(arg) {
+    var currentPen, isAutoplot, isLegendOpen, name, pens, xMax, xMin, yMax, yMin;
+    currentPen = arg.currentPen, isAutoplot = arg.isAutoplot, isLegendOpen = arg.isLegendOpen, name = arg.name, pens = arg.pens, xMax = arg.xMax, xMin = arg.xMin, yMax = arg.yMax, yMin = arg.yMin;
+    return new ExportedPlot(fold(function() {
+      return null;
+    })(id)(currentPen), isAutoplot, isLegendOpen, name, pens.map(toExportedPen), xMax, xMin, yMax, yMin);
+  };
+
+  toExportedPlotManager = function(arg) {
+    var defaultOrNull, plots;
+    defaultOrNull = arg["default"], plots = arg.plots;
+    return new ExportedPlotManager(defaultOrNull, plots.map(toExportedPlot));
+  };
+
+  identity = function(x) {
+    return x;
+  };
+
+  parseColor = function(x) {
+    var unpossible;
+    unpossible = function() {
+      throw new Error("Why is this even getting called?  We shouldn't be parsing breed names where colors are expected.");
+    };
+    return parseAny(unpossible, unpossible)(x);
+  };
+
+  parseDate = function(x) {
+    var _, millis, postfix, prefix, ref3;
+    ref3 = x.match(/(.*):(\d+) (.*)/), _ = ref3[0], prefix = ref3[1], millis = ref3[2], postfix = ref3[3];
+    return new Date(Date.parse(prefix + " " + postfix) + parseInt(millis));
+  };
+
+  parseStringMaybe = function(x) {
+    var value;
+    value = parseString(x);
+    return maybe(value === "" ? null : value);
+  };
+
+  parsePenMode = function(x) {
+    switch (parseInt(x)) {
+      case 0:
+        return 'line';
+      case 1:
+        return 'bar';
+      case 2:
+        return 'point';
+      default:
+        throw new Error("Unknown pen mode: " + x);
+    }
+  };
+
+  parsePerspective = function(x) {
+    switch (parseInt(x)) {
+      case 0:
+        return 'observe';
+      case 1:
+        return 'ride';
+      case 2:
+        return 'follow';
+      case 3:
+        return 'watch';
+      default:
+        throw new Error("Unknown perspective number: " + x);
+    }
+  };
+
+  parseVersion = function(x) {
+    return x.match(/export-world data \([^\)]+\)/)[1];
+  };
+
+  parseAndExtract = function(typeOfEntry) {
+    return function(f) {
+      return function(x) {
+        return fold(function(x) {
+          throw new Error("Unable to parse " + typeOfEntry + ": " + (JSON.stringify(x)));
+        })(id)(f(x));
+      };
+    };
+  };
+
+  nameToSchema = function(singularToPlural, pluralToSingular) {
+    return {
+      plots: {
+        color: parseFloat,
+        currentPen: parseStringMaybe,
+        interval: parseFloat,
+        isAutoplot: parseBool,
+        isLegendOpen: parseBool,
+        isPenDown: parseBool,
+        mode: parsePenMode,
+        penName: parseString,
+        xMax: parseFloat,
+        xMin: parseFloat,
+        x: parseFloat,
+        yMax: parseFloat,
+        yMin: parseFloat,
+        y: parseFloat
+      },
+      randomState: {
+        value: identity
+      },
+      globals: {
+        directedLinks: parseString,
+        minPxcor: parseInt,
+        maxPxcor: parseInt,
+        minPycor: parseInt,
+        maxPycor: parseInt,
+        nextIndex: parseInt,
+        perspective: parsePerspective,
+        subject: parseAndExtract("agent ref")(parseAgentRefMaybe(singularToPlural)),
+        ticks: parseFloat
+      },
+      turtles: {
+        breed: parseBreed,
+        color: parseColor,
+        heading: parseFloat,
+        isHidden: parseBool,
+        labelColor: parseColor,
+        label: parseAny(singularToPlural, pluralToSingular),
+        penMode: parseString,
+        penSize: parseFloat,
+        shape: parseString,
+        size: parseFloat,
+        who: parseInt,
+        xcor: parseFloat,
+        ycor: parseFloat
+      },
+      patches: {
+        pcolor: parseColor,
+        plabelColor: parseColor,
+        plabel: parseAny(singularToPlural, pluralToSingular),
+        pxcor: parseInt,
+        pycor: parseInt
+      },
+      links: {
+        breed: parseBreed,
+        color: parseColor,
+        end1: parseAndExtract("turtle ref")(parseTurtleRefMaybe(singularToPlural)),
+        end2: parseAndExtract("turtle ref")(parseTurtleRefMaybe(singularToPlural)),
+        isHidden: parseBool,
+        labelColor: parseColor,
+        label: parseAny(singularToPlural, pluralToSingular),
+        shape: parseString,
+        thickness: parseFloat,
+        tieMode: parseString
+      },
+      output: {
+        value: parseString
+      },
+      extensions: {}
+    };
+  };
+
+  singletonParse = function(x, schema) {
+    var ref3;
+    if (((ref3 = x[0]) != null ? ref3[0] : void 0) != null) {
+      return schema.value(x[0][0]);
+    } else {
+      return '';
+    }
+  };
+
+  arrayParse = function(singularToPlural, pluralToSingular) {
+    return function(arg, schema) {
+      var f, keys, rows;
+      keys = arg[0], rows = 2 <= arg.length ? slice.call(arg, 1) : [];
+      f = function(acc, row) {
+        var index, j, len, obj, rawKey, saneKey, value;
+        obj = {
+          extraVars: {}
+        };
+        for (index = j = 0, len = keys.length; j < len; index = ++j) {
+          rawKey = keys[index];
+          saneKey = csvNameToSaneName(rawKey);
+          value = row[index];
+          if (schema[saneKey] != null) {
+            obj[saneKey] = schema[saneKey](value);
+          } else if (value !== "") {
+            obj.extraVars[rawKey] = parseAny(singularToPlural, pluralToSingular)(value);
+          }
+        }
+        return acc.concat([obj]);
+      };
+      return foldl(f)([])(rows);
+    };
+  };
+
+  globalParse = function(singularToPlural, pluralToSingular) {
+    return function(csvBucket, schema) {
+      return arrayParse(singularToPlural, pluralToSingular)(csvBucket, schema)[0];
+    };
+  };
+
+  plotParse = function(csvBucket, schema) {
+    var csvIndex, j, k, length, output, parseEntity, penCount, penIndex, plot, point, pointsIndex, ref3, ref4, ref5, results;
+    parseEntity = function(acc, rowIndex, upperBound, valueRowOffset, valueColumnOffset) {
+      var columnIndex, columnName, j, ref3, ref4, value;
+      for (columnIndex = j = 0, ref3 = upperBound; 0 <= ref3 ? j < ref3 : j > ref3; columnIndex = 0 <= ref3 ? ++j : --j) {
+        columnName = csvNameToSaneName(csvBucket[rowIndex][columnIndex]);
+        value = csvBucket[rowIndex + valueRowOffset][columnIndex + valueColumnOffset];
+        acc[columnName] = ((ref4 = schema[columnName]) != null ? ref4 : parseInt)(value);
+      }
+      return acc;
+    };
+    output = {
+      "default": (ref3 = (ref4 = csvBucket[0]) != null ? ref4[0] : void 0) != null ? ref3 : null,
+      plots: []
+    };
+    csvIndex = 1;
+    while (csvIndex < csvBucket.length) {
+      plot = parseEntity({
+        name: parseString(csvBucket[csvIndex++][0])
+      }, csvIndex, csvBucket[csvIndex].length, 1, 0);
+      penCount = plot.numberOfPens;
+      delete plot.penCount;
+      csvIndex += 2;
+      plot.pens = (function() {
+        results = [];
+        for (var j = 0; 0 <= penCount ? j < penCount : j > penCount; 0 <= penCount ? j++ : j--){ results.push(j); }
+        return results;
+      }).apply(this).map(function(i) {
+        return parseEntity({
+          points: []
+        }, csvIndex, csvBucket[csvIndex].length, 1 + i, 0);
+      });
+      csvIndex += 2 + penCount;
+      pointsIndex = 1;
+      while (csvIndex + pointsIndex < csvBucket.length && csvBucket[csvIndex + pointsIndex].length !== 1) {
+        length = csvBucket[csvIndex].length / penCount;
+        for (penIndex = k = 0, ref5 = penCount; 0 <= ref5 ? k < ref5 : k > ref5; penIndex = 0 <= ref5 ? ++k : --k) {
+          if (csvBucket[csvIndex + pointsIndex][penIndex * length] !== '') {
+            point = parseEntity({}, csvIndex, length, pointsIndex, penIndex * length);
+            plot.pens[penIndex].points.push(point);
+          }
+        }
+        pointsIndex++;
+      }
+      csvIndex += pointsIndex;
+      output.plots.push(plot);
+    }
+    return output;
+  };
+
+  extensionParse = function(csvBucket, schema) {
+    var extNames, item, j, len, output;
+    output = [];
+    for (j = 0, len = csvBucket.length; j < len; j++) {
+      item = csvBucket[j][0];
+      if (!item.startsWith('{{')) {
+        output.push([]);
+      } else {
+        extNames = Object.keys(output);
+        output[output.length - 1].push(item);
+      }
+    }
+    return output;
+  };
+
+  buckets = function(singularToPlural, pluralToSingular) {
+    return {
+      extensions: extensionParse,
+      globals: globalParse(singularToPlural, pluralToSingular),
+      links: arrayParse(singularToPlural, pluralToSingular),
+      output: singletonParse,
+      patches: arrayParse(singularToPlural, pluralToSingular),
+      plots: plotParse,
+      randomState: singletonParse,
+      turtles: arrayParse(singularToPlural, pluralToSingular)
+    };
+  };
+
+  extractGlobals = function(globals, knownNames) {
+    var builtIn, key, user, value;
+    builtIn = {};
+    user = {};
+    for (key in globals) {
+      value = globals[key];
+      if (indexOf.call(knownNames, key) >= 0) {
+        builtIn[key] = value;
+      } else {
+        user[key] = value;
+      }
+    }
+    return [builtIn, user];
+  };
+
+  module.exports = function(singularToPlural, pluralToSingular) {
+    return function(csvText) {
+      var _, bucketParser, bucketToRows, buckies, builtInGlobals, clusterRows, codeGlobals, dateRow, extensions, filenameRow, getSchema, globals, links, name, outExtensions, outGlobals, outLinks, outMetadata, outPatches, outPlotManager, outTurtles, output, parsedCSV, patches, plots, randomState, ref3, titleRow, turtles, world;
+      buckies = buckets(singularToPlural, pluralToSingular);
+      getSchema = nameToSchema(singularToPlural, pluralToSingular);
+      parsedCSV = parse(csvText, {
+        comment: '#',
+        skip_empty_lines: true,
+        relax_column_count: true
+      });
+      clusterRows = function(arg, row) {
+        var acc, ex, latestRows, rows, saneName;
+        acc = arg[0], latestRows = arg[1];
+        saneName = (function() {
+          var error;
+          try {
+            if (row.length === 1) {
+              return csvNameToSaneName(row[0]);
+            } else {
+              return void 0;
+            }
+          } catch (error) {
+            ex = error;
+            return void 0;
+          }
+        })();
+        if ((saneName != null) && saneName in buckies) {
+          rows = [];
+          acc[saneName] = rows;
+          return [acc, rows];
+        } else if (latestRows != null) {
+          latestRows.push(row);
+          return [acc, latestRows];
+        } else {
+          return [acc, latestRows];
+        }
+      };
+      ref3 = foldl(clusterRows)([{}, void 0])(parsedCSV), bucketToRows = ref3[0], _ = ref3[1];
+      world = {};
+      for (name in buckies) {
+        bucketParser = buckies[name];
+        if (bucketToRows[name] != null) {
+          world[name] = bucketParser(bucketToRows[name], getSchema[name]);
+        }
+      }
+      titleRow = parsedCSV[0][0];
+      filenameRow = parsedCSV[1][0];
+      dateRow = parsedCSV[2][0];
+      globals = world.globals, randomState = world.randomState, turtles = world.turtles, patches = world.patches, links = world.links, output = world.output, plots = world.plots, extensions = world.extensions;
+      codeGlobals = globals.extraVars;
+      delete globals.extraVars;
+      builtInGlobals = globals;
+      outMetadata = new Metadata(parseVersion(titleRow), filenameRow, parseDate(dateRow));
+      outGlobals = toExportedGlobals(builtInGlobals, codeGlobals);
+      outPatches = patches.map(toExportedPatch);
+      outTurtles = turtles.map(toExportedTurtle);
+      outLinks = links.map(toExportedLink);
+      outPlotManager = toExportedPlotManager(plots);
+      outExtensions = extensions.map(function() {
+        return new ExportedExtension;
+      });
+      return new ExportWorldData(outMetadata, randomState, outGlobals, outPatches, outTurtles, outLinks, output, outPlotManager, outExtensions);
+    };
+  };
+
+}).call(this);
+
+},{"./exportstructures":"serialize/exportstructures","./readexportedvalue":"serialize/readexportedvalue","brazierjs/array":"brazier/array","brazierjs/function":"brazier/function","brazierjs/maybe":"brazier/maybe","csv-parse/lib/sync":7,"util/typechecker":"util/typechecker"}],"serialize/readexportedvalue":[function(require,module,exports){
+(function() {
+  var BreedNamePair, BreedReference, ExportedCommandLambda, ExportedLinkSet, ExportedPatchSet, ExportedReporterLambda, ExportedTurtleSet, LinkReference, NobodyReference, None, PatchReference, TurtleReference, firstIndexOfUnescapedQuote, fold, isSomething, mapMaybe, match, maybe, parseBreedMaybe, parseGeneric, parseInnerLink, parseLinkRefMaybe, parseList, parsePatchRefMaybe, parseTurtleRefMaybe, readAgenty, ref, ref1, tryParsers;
+
+  ref = require('./exportstructures'), BreedNamePair = ref.BreedNamePair, BreedReference = ref.BreedReference, ExportedCommandLambda = ref.ExportedCommandLambda, ExportedLinkSet = ref.ExportedLinkSet, ExportedPatchSet = ref.ExportedPatchSet, ExportedReporterLambda = ref.ExportedReporterLambda, ExportedTurtleSet = ref.ExportedTurtleSet, LinkReference = ref.LinkReference, NobodyReference = ref.NobodyReference, PatchReference = ref.PatchReference, TurtleReference = ref.TurtleReference;
+
+  ref1 = require('brazier/maybe'), fold = ref1.fold, isSomething = ref1.isSomething, mapMaybe = ref1.map, maybe = ref1.maybe, None = ref1.None;
+
+  firstIndexOfUnescapedQuote = function(str) {
+    var index;
+    index = str.indexOf('"');
+    if (index > 0) {
+      if (str[index - 1] !== "\\") {
+        return index;
+      } else {
+        return 1 + index + firstIndexOfUnescapedQuote(str.slice(index + 1));
+      }
+    } else {
+      return index;
+    }
+  };
+
+  parseList = function() {
+    var parseListHelper;
+    parseListHelper = function(list, readValue, readAgentLike) {
+      var parseInner;
+      parseInner = function(contents, acc, accIndex) {
+        var endIndex, index, item, recurse, ref2, rightIndex, spaceIndex, strFrom, strIndex, strUntil, tempered;
+        if (acc == null) {
+          acc = [];
+        }
+        if (accIndex == null) {
+          accIndex = 0;
+        }
+        strIndex = function(char) {
+          return contents.indexOf(char);
+        };
+        strFrom = function(index) {
+          return contents.slice(index);
+        };
+        strUntil = function(index) {
+          return contents.slice(0, index);
+        };
+        tempered = function(index) {
+          return index + (contents[index + 1] === ']' ? 1 : 2);
+        };
+        recurse = function(nextIndex, item) {
+          return parseInner(strFrom(nextIndex), acc.concat([item]), accIndex + nextIndex);
+        };
+        if (!(contents.startsWith('(anonymous command:') || contents.startsWith('(anonymous reporter:'))) {
+          switch (contents[0]) {
+            case ']':
+              return [acc, accIndex + 1];
+            case '[':
+              ref2 = parseListHelper(contents, readValue, readAgentLike), item = ref2[0], endIndex = ref2[1];
+              return recurse(tempered(endIndex), item);
+            case '{':
+              index = strIndex('}');
+              return recurse(tempered(index), readAgentLike(strUntil(index + 1)));
+            case '"':
+              index = firstIndexOfUnescapedQuote(strFrom(1)) + 1;
+              return recurse(tempered(index), readValue(strUntil(index + 1)));
+            default:
+              rightIndex = strIndex(']');
+              spaceIndex = strIndex(' ');
+              if (rightIndex < spaceIndex || spaceIndex < 0) {
+                return recurse(rightIndex, readValue(strUntil(rightIndex)));
+              } else {
+                return recurse(spaceIndex + 1, readValue(strUntil(spaceIndex)));
+              }
+          }
+        } else {
+          throw new Error("Importing a list of anonymous procedures?  Not happening!");
+        }
+      };
+      if (list[0] === '[') {
+        return parseInner(list.slice(1));
+      } else {
+        throw new Error("Not a valid list: " + list);
+      }
+    };
+    return parseListHelper.apply(null, arguments)[0];
+  };
+
+  match = function(regex, str) {
+    var result;
+    result = str.match(regex);
+    if (result != null) {
+      return result;
+    } else {
+      throw new Error("Could not match regex " + regex + " with this string: " + str);
+    }
+  };
+
+  module.exports.parseBool = function(x) {
+    return x.toLowerCase() === "true";
+  };
+
+  parseBreedMaybe = function(x) {
+    switch (x) {
+      case "{all-turtles}":
+        return maybe(new BreedReference("TURTLES"));
+      case "{all-patches}":
+        return maybe(new BreedReference("PATCHES"));
+      case "{all-links}":
+        return maybe(new BreedReference("LINKS"));
+      default:
+        return parseGeneric(/{breed (.*)}/)(function(arg) {
+          var _, breedName;
+          _ = arg[0], breedName = arg[1];
+          return new BreedReference(breedName.toLowerCase());
+        })(x);
+    }
+  };
+
+  module.exports.parseBreed = function(x) {
+    return fold(function() {
+      throw new Error("Cannot parse as breed: " + x);
+    })(function(x) {
+      return x;
+    })(parseBreedMaybe(x));
+  };
+
+  module.exports.parseString = function(str) {
+    return match(/^"(.*)"$/, str)[1];
+  };
+
+  parseGeneric = function(regex) {
+    return function(f) {
+      return function(x) {
+        return mapMaybe(f)(maybe(x.match(regex)));
+      };
+    };
+  };
+
+  parseTurtleRefMaybe = function(singularToPlural) {
+    return parseGeneric(/{([^ ]+) (\d+)}/)(function(arg) {
+      var _, breed, breedName, idStr;
+      _ = arg[0], breedName = arg[1], idStr = arg[2];
+      breed = new BreedNamePair(breedName, singularToPlural(breedName).toLowerCase());
+      return new TurtleReference(breed, parseInt(idStr));
+    });
+  };
+
+  module.exports.parseTurtleRefMaybe = parseTurtleRefMaybe;
+
+  parsePatchRefMaybe = parseGeneric(/{patch ([\d-]+) ([\d-]+)}/)(function(arg) {
+    var _, xStr, yStr;
+    _ = arg[0], xStr = arg[1], yStr = arg[2];
+    return new PatchReference(parseInt(xStr), parseInt(yStr));
+  });
+
+  parseLinkRefMaybe = function(singularToPlural) {
+    return parseGeneric(/{([^ ]+) (\d+) (\d+)}/)(function(arg) {
+      var _, breed, breedName, end1IDStr, end2IDStr;
+      _ = arg[0], breedName = arg[1], end1IDStr = arg[2], end2IDStr = arg[3];
+      breed = new BreedNamePair(breedName, singularToPlural(breedName).toLowerCase());
+      return new LinkReference(breed, parseInt(end1IDStr), parseInt(end2IDStr));
+    });
+  };
+
+  tryParsers = function(parsers) {
+    return function(x) {
+      var i, len, parser, result;
+      for (i = 0, len = parsers.length; i < len; i++) {
+        parser = parsers[i];
+        result = parser(x);
+        if (isSomething(result)) {
+          return result;
+        }
+      }
+      return None;
+    };
+  };
+
+  module.exports.parseAgentRefMaybe = function(singularToPlural) {
+    return function(x) {
+      var lowerCased, stp;
+      lowerCased = x.toLowerCase();
+      stp = singularToPlural;
+      if (lowerCased === 'nobody') {
+        return maybe(NobodyReference);
+      } else {
+        return tryParsers([parsePatchRefMaybe, parseLinkRefMaybe(stp), parseTurtleRefMaybe(stp)])(lowerCased);
+      }
+    };
+  };
+
+  parseInnerLink = function(pluralToSingular) {
+    return function(x) {
+      var _, breed, breedName, id1, id2, ref2, unparsedBreed;
+      ref2 = match(/\[(\d+) (\d+) (.*)/, x), _ = ref2[0], id1 = ref2[1], id2 = ref2[2], unparsedBreed = ref2[3];
+      breedName = unparsedBreed === "{all-links}" ? "links" : match(/{breed (.*)}/, unparsedBreed)[1];
+      breed = new BreedNamePair(pluralToSingular(breedName), breedName.toLowerCase());
+      return new LinkReference(breed, parseInt(id1), parseInt(id2));
+    };
+  };
+
+  readAgenty = function(singularToPlural, pluralToSingular) {
+    return function(x) {
+      var lowerCased, parseLinkSet, parsePatchSet, parseTurtleSet, parsedMaybe, parsers, stp;
+      lowerCased = x.toLowerCase();
+      stp = singularToPlural;
+      parseTurtleSet = parseGeneric(/{turtles ?([^}]*)}/)(function(arg) {
+        var _, breed, nums;
+        _ = arg[0], nums = arg[1];
+        breed = new BreedNamePair("turtle", "turtles");
+        return new ExportedTurtleSet(nums.split(' ').map(function(x) {
+          return parseInt(x);
+        }).map(function(who) {
+          return new TurtleReference(breed, who);
+        }));
+      });
+      parsePatchSet = parseGeneric(/{patches ?([^}]*)}/)(function(arg) {
+        var _, pairs;
+        _ = arg[0], pairs = arg[1];
+        return new ExportedPatchSet(pairs.split(/] ?/).slice(0, -1).map(function(x) {
+          return x.slice(1).split(' ').map(function(x) {
+            return parseInt(x);
+          });
+        }).map(function(arg1) {
+          var x, y;
+          x = arg1[0], y = arg1[1];
+          return new PatchReference(x, y);
+        }));
+      });
+      parseLinkSet = parseGeneric(/{links ?(.*)}$/)(function(arg) {
+        var _, triples;
+        _ = arg[0], triples = arg[1];
+        return new ExportedLinkSet(triples.split(/] ?/).slice(0, -1).map(parseInnerLink(pluralToSingular)));
+      });
+      parsers = [parseBreedMaybe, parseTurtleSet, parsePatchSet, parseLinkSet, parsePatchRefMaybe, parseLinkRefMaybe(stp), parseTurtleRefMaybe(stp)];
+      parsedMaybe = tryParsers(parsers)(lowerCased);
+      return fold(function() {
+        throw new Error("You supplied " + x + ", and I don't know what the heck that is!");
+      })(function(x) {
+        return x;
+      })(parsedMaybe);
+    };
+  };
+
+  module.exports.parseAny = function(singularToPlural, pluralToSingular) {
+    var helper;
+    helper = function(x) {
+      var lowerCased, result;
+      lowerCased = x.toLowerCase();
+      result = (function() {
+        switch (lowerCased) {
+          case "e":
+            return maybe(Math.E);
+          case "pi":
+            return maybe(Math.PI);
+          case "true":
+            return maybe(true);
+          case "false":
+            return maybe(false);
+          case "nobody":
+            return maybe(NobodyReference);
+          case "black":
+            return maybe(0);
+          case "gray":
+            return maybe(5);
+          case "white":
+            return maybe(9.9);
+          case "red":
+            return maybe(15);
+          case "orange":
+            return maybe(25);
+          case "brown":
+            return maybe(35);
+          case "yellow":
+            return maybe(45);
+          case "green":
+            return maybe(55);
+          case "lime":
+            return maybe(65);
+          case "turquoise":
+            return maybe(75);
+          case "cyan":
+            return maybe(85);
+          case "sky":
+            return maybe(95);
+          case "blue":
+            return maybe(105);
+          case "violet":
+            return maybe(115);
+          case "magenta":
+            return maybe(125);
+          case "pink":
+            return maybe(135);
+          default:
+            return None;
+        }
+      })();
+      return fold(function() {
+        var commandLambdaMatch, listMatch, parsedNum, reporterLambdaMatch, strMatch;
+        listMatch = x.match(/^\[.*\]$/);
+        if (listMatch != null) {
+          return parseList(x, helper, readAgenty(singularToPlural, pluralToSingular));
+        } else {
+          strMatch = x.match(/^"(.*)"$/);
+          if (strMatch != null) {
+            return strMatch[1];
+          } else {
+            parsedNum = parseFloat(x);
+            if (parsedNum === parsedNum) {
+              return parsedNum;
+            } else {
+              commandLambdaMatch = x.match(/\(anonymous command: (\[.*\])\)$/);
+              if (commandLambdaMatch != null) {
+                return new ExportedCommandLambda(commandLambdaMatch[1]);
+              } else {
+                reporterLambdaMatch = x.match(/\(anonymous reporter: (\[.*\])\)$/);
+                if (reporterLambdaMatch != null) {
+                  return new ExportedReporterLambda(reporterLambdaMatch[1]);
+                } else {
+                  return readAgenty(singularToPlural, pluralToSingular)(lowerCased);
+                }
+              }
+            }
+          }
+        }
+      })(function(res) {
+        return res;
+      })(result);
+    };
+    return helper;
+  };
+
+}).call(this);
+
+},{"./exportstructures":"serialize/exportstructures","brazier/maybe":"brazier/maybe"}],"shim/auxrandom":[function(require,module,exports){
+(function() {
+  var MersenneTwisterFast;
+
+  MersenneTwisterFast = require('./engine-scala').MersenneTwisterFast;
+
+  module.exports = MersenneTwisterFast();
+
+}).call(this);
+
+},{"./engine-scala":"shim/engine-scala"}],"shim/cloner":[function(require,module,exports){
+(function() {
+  var JSType, cloneFunc, foldl;
+
+  foldl = require('brazierjs/array').foldl;
+
+  JSType = require('util/typechecker');
+
+  cloneFunc = function(obj) {
+    var basicClone, entryCopyFunc, properties;
+    if (JSType(obj).isObject() && !JSType(obj).isFunction()) {
+      properties = Object.getOwnPropertyNames(obj);
+      entryCopyFunc = function(acc, x) {
+        acc[x] = cloneFunc(obj[x]);
+        return acc;
+      };
+      basicClone = new obj.constructor();
+      return foldl(entryCopyFunc)(basicClone)(properties);
+    } else {
+      return obj;
+    }
+  };
+
+  module.exports = cloneFunc;
+
+}).call(this);
+
+},{"brazierjs/array":"brazier/array","util/typechecker":"util/typechecker"}],"shim/engine-scala":[function(require,module,exports){
+(function (global){
+(function() {
+
+(function(){'use strict';
+var f,g="object"===typeof __ScalaJSEnv&&__ScalaJSEnv?__ScalaJSEnv:{},l="object"===typeof g.global&&g.global?g.global:"object"===typeof global&&global&&global.Object===Object?global:this;g.global=l;var aa="object"===typeof g.exportsNamespace&&g.exportsNamespace?g.exportsNamespace:l;g.exportsNamespace=aa;l.Object.freeze(g);var ba={envInfo:g,semantics:{asInstanceOfs:2,arrayIndexOutOfBounds:2,moduleInit:2,strictFloats:!1,productionMode:!0},assumingES6:!1,linkerVersion:"0.6.18",globalThis:this};l.Object.freeze(ba);
+l.Object.freeze(ba.semantics);var m=l.Math.imul||function(a,b){var c=a&65535,d=b&65535;return c*d+((a>>>16&65535)*d+c*(b>>>16&65535)<<16>>>0)|0},ca=l.Math.clz32||function(a){if(0===a)return 32;var b=1;0===(a&4294901760)&&(a<<=16,b+=16);0===(a&4278190080)&&(a<<=8,b+=8);0===(a&4026531840)&&(a<<=4,b+=4);0===(a&3221225472)&&(a<<=2,b+=2);return b+(a>>31)},da=0,ea=l.WeakMap?new l.WeakMap:null;function fa(a){return function(b,c){return!(!b||!b.$classData||b.$classData.na!==c||b.$classData.la!==a)}}
+function ga(a){for(var b in a)return b}function ha(a,b){return ia(a,b,0)}function ia(a,b,c){var d=new a.Ua(b[c]);if(c<b.length-1){a=a.pa;c+=1;for(var e=d.a,h=0;h<e.length;h++)e[h]=ia(a,b,c)}return d}function ja(a){return void 0===a?"undefined":a.toString()}
+function ka(a){switch(typeof a){case "string":return n(la);case "number":var b=a|0;return b===a?ma(b)?n(na):oa(b)?n(pa):n(qa):"number"===typeof a?n(ra):n(sa);case "boolean":return n(ta);case "undefined":return n(ua);default:return null===a?a.Ze():va(a)?n(wa):a&&a.$classData?n(a.$classData):null}}
+function xa(a){switch(typeof a){case "string":return ya(p(),a);case "number":return za(Aa(),a);case "boolean":return a?1231:1237;case "undefined":return 0;default:return a&&a.$classData||null===a?a.n():null===ea?42:Ba(a)}}function Ca(a,b,c){return"string"===typeof a?a.substring(b,c):a.kc(b,c)}function Da(a){return 2147483647<a?2147483647:-2147483648>a?-2147483648:a|0}
+function Ea(a,b){var c=l.Object.getPrototypeOf,d=l.Object.getOwnPropertyDescriptor;for(a=c(a);null!==a;){var e=d(a,b);if(void 0!==e)return e;a=c(a)}}function Fa(a,b,c){a=Ea(a,c);if(void 0!==a)return c=a.get,void 0!==c?c.call(b):a.value}function Ga(a,b,c,d){a=Ea(a,c);if(void 0!==a&&(a=a.set,void 0!==a)){a.call(b,d);return}throw new l.TypeError("super has no setter '"+c+"'.");}
+var Ba=null!==ea?function(a){switch(typeof a){case "string":case "number":case "boolean":case "undefined":return xa(a);default:if(null===a)return 0;var b=ea.get(a);void 0===b&&(da=b=da+1|0,ea.set(a,b));return b}}:function(a){if(a&&a.$classData){var b=a.$idHashCode$0;if(void 0!==b)return b;if(l.Object.isSealed(a))return 42;da=b=da+1|0;return a.$idHashCode$0=b}return null===a?0:xa(a)};function ma(a){return"number"===typeof a&&a<<24>>24===a&&1/a!==1/-0}
+function oa(a){return"number"===typeof a&&a<<16>>16===a&&1/a!==1/-0}function Ha(a){return null===a?q().ka:a}function Ia(){this.Ia=this.Ua=void 0;this.la=this.pa=this.H=null;this.na=0;this.qb=null;this.Ca="";this.z=this.Aa=this.Ba=void 0;this.name="";this.isRawJSType=this.isArrayClass=this.isInterface=this.isPrimitive=!1;this.isInstance=void 0}
+function Ja(a,b,c){var d=new Ia;d.H={};d.pa=null;d.qb=a;d.Ca=b;d.z=function(){return!1};d.name=c;d.isPrimitive=!0;d.isInstance=function(){return!1};return d}function t(a,b,c,d,e,h,k){var r=new Ia,D=ga(a);h=h||function(a){return!!(a&&a.$classData&&a.$classData.H[D])};k=k||function(a,b){return!!(a&&a.$classData&&a.$classData.na===b&&a.$classData.la.H[D])};r.Ia=e;r.H=c;r.Ca="L"+b+";";r.z=k;r.name=b;r.isInterface=!1;r.isRawJSType=!!d;r.isInstance=h;return r}
+function Ka(a){function b(a){if("number"===typeof a){this.a=Array(a);for(var b=0;b<a;b++)this.a[b]=e}else this.a=a}var c=new Ia,d=a.qb,e="longZero"==d?q().ka:d;b.prototype=new u;b.prototype.constructor=b;b.prototype.tb=function(){return this.a instanceof Array?new b(this.a.slice(0)):new b(new this.a.constructor(this.a))};b.prototype.$classData=c;var d="["+a.Ca,h=a.la||a,k=a.na+1;c.Ua=b;c.Ia=La;c.H={c:1,Za:1,d:1};c.pa=a;c.la=h;c.na=k;c.qb=null;c.Ca=d;c.Ba=void 0;c.Aa=void 0;c.z=void 0;c.name=d;c.isPrimitive=
+!1;c.isInterface=!1;c.isArrayClass=!0;c.isInstance=function(a){return h.z(a,k)};return c}function n(a){if(!a.Ba){var b=new Ma;b.Da=a;a.Ba=b}return a.Ba}function Na(a){a.Aa||(a.Aa=Ka(a));return a.Aa}Ia.prototype.getFakeInstance=function(){return this===la?"some string":this===ta?!1:this===na||this===pa||this===qa||this===ra||this===sa?0:this===wa?q().ka:this===ua?void 0:{$classData:this}};Ia.prototype.getSuperclass=function(){return this.Ia?n(this.Ia):null};
+Ia.prototype.getComponentType=function(){return this.pa?n(this.pa):null};Ia.prototype.newArrayOfThisClass=function(a){for(var b=this,c=0;c<a.length;c++)b=Na(b);return ha(b,a)};var Oa=Ja(!1,"Z","boolean"),Pa=Ja(0,"C","char"),Qa=Ja(0,"B","byte"),Ra=Ja(0,"S","short"),Sa=Ja(0,"I","int"),Ta=Ja("longZero","J","long"),Ua=Ja(0,"F","float"),Va=Ja(0,"D","double");Oa.z=fa(Oa);Pa.z=fa(Pa);Qa.z=fa(Qa);Ra.z=fa(Ra);Sa.z=fa(Sa);Ta.z=fa(Ta);Ua.z=fa(Ua);Va.z=fa(Va);function Wa(){}function u(){}u.prototype=Wa.prototype;Wa.prototype.b=function(){return this};Wa.prototype.h=function(){var a=Xa(ka(this)),b=(+(this.n()>>>0)).toString(16);return a+"@"+b};Wa.prototype.n=function(){return Ba(this)};Wa.prototype.toString=function(){return this.h()};var La=t({c:0},"java.lang.Object",{c:1},void 0,void 0,function(a){return null!==a},function(a,b){if(a=a&&a.$classData){var c=a.na||0;return!(c<b)&&(c>b||!a.la.isPrimitive)}return!1});Wa.prototype.$classData=La;
+function Ya(){this.Oa=null;this.B=!1}Ya.prototype=new u;Ya.prototype.constructor=Ya;Ya.prototype.b=function(){return this};function Za(a){if(!a.B){var b=function(){return function(a){return void 0===a?v():(new w).y(a)}}(a),c=$a();c.M()?c=v():(c=c.N(),c=b(c));c.M()?c=v():(c=c.N(),c=(new w).y(c.lang));c.M()?c=v():(c=c.N(),c=b(c));c.M()?c=v():(c=c.N(),c=(new w).y(c.StrictMath));c.M()?b=v():(c=c.N(),b=b(c));a.Oa=b.M()?l.Math:b.N();a.B=!0}return a.Oa}
+Ya.prototype.$classData=t({rc:0},"org.nlogo.tortoise.engine.StrictMath$",{rc:1,c:1});var ab=void 0;function bb(){ab||(ab=(new Ya).b());return ab}function Ma(){this.Da=null}Ma.prototype=new u;Ma.prototype.constructor=Ma;function Xa(a){return a.Da.name}Ma.prototype.h=function(){return(this.Da.isInterface?"interface ":this.Da.isPrimitive?"":"class ")+Xa(this)};Ma.prototype.$classData=t({Ec:0},"java.lang.Class",{Ec:1,c:1});function cb(){this.xb=null}cb.prototype=new u;cb.prototype.constructor=cb;
+cb.prototype.b=function(){db=this;eb();eb();this.xb=l.performance?l.performance.now?function(){fb();return+l.performance.now()}:l.performance.webkitNow?function(){fb();return+l.performance.webkitNow()}:function(){fb();return+(new l.Date).getTime()}:function(){fb();return+(new l.Date).getTime()};return this};cb.prototype.$classData=t({Tc:0},"java.lang.System$",{Tc:1,c:1});var db=void 0;function fb(){db||(db=(new cb).b());return db}function gb(){}gb.prototype=new u;gb.prototype.constructor=gb;
+function hb(){}hb.prototype=gb.prototype;function ib(){}ib.prototype=new u;ib.prototype.constructor=ib;ib.prototype.b=function(){return this};ib.prototype.$classData=t({rd:0},"scala.math.Ordered$",{rd:1,c:1});var jb=void 0;function kb(){this.B=0}kb.prototype=new u;kb.prototype.constructor=kb;
+kb.prototype.b=function(){lb=this;(new mb).b();nb||(nb=(new ob).b());pb||(pb=(new qb).b());rb||(rb=(new sb).b());tb();ub();vb||(vb=(new wb).b());xb();yb||(yb=(new zb).b());Ab||(Ab=(new Bb).b());Cb||(Cb=(new Db).b());Eb||(Eb=(new Fb).b());Gb||(Gb=(new Hb).b());Ib||(Ib=(new Jb).b());Kb||(Kb=(new Lb).b());Mb||(Mb=(new Nb).b());Ob||(Ob=(new Pb).b());Qb||(Qb=(new Rb).b());Sb||(Sb=(new Tb).b());Ub||(Ub=(new Vb).b());jb||(jb=(new ib).b());Wb||(Wb=(new Xb).b());Yb||(Yb=(new Zb).b());$b||($b=(new ac).b());
+bc||(bc=(new cc).b());return this};kb.prototype.$classData=t({td:0},"scala.package$",{td:1,c:1});var lb=void 0;function dc(){}dc.prototype=new u;dc.prototype.constructor=dc;
+dc.prototype.b=function(){ec=this;fc||(fc=(new gc).b());hc||(hc=(new ic).b());jc||(jc=(new kc).b());lc||(lc=(new mc).b());nc||(nc=(new oc).b());pc||(pc=(new qc).b());rc||(rc=(new sc).b());tc||(tc=(new uc).b());vc||(vc=(new wc).b());xc||(xc=(new yc).b());Ac||(Ac=(new Bc).b());Cc||(Cc=(new Dc).b());Ec||(Ec=(new Fc).b());Gc||(Gc=(new Hc).b());return this};dc.prototype.$classData=t({vd:0},"scala.reflect.ClassManifestFactory$",{vd:1,c:1});var ec=void 0;function Ic(){}Ic.prototype=new u;
+Ic.prototype.constructor=Ic;Ic.prototype.b=function(){return this};Ic.prototype.$classData=t({wd:0},"scala.reflect.ManifestFactory$",{wd:1,c:1});var Jc=void 0;function Kc(){}Kc.prototype=new u;Kc.prototype.constructor=Kc;Kc.prototype.b=function(){Lc=this;ec||(ec=(new dc).b());Jc||(Jc=(new Ic).b());return this};Kc.prototype.$classData=t({Md:0},"scala.reflect.package$",{Md:1,c:1});var Lc=void 0;function Mc(){}Mc.prototype=new u;Mc.prototype.constructor=Mc;Mc.prototype.b=function(){(new Nc).b();return this};
+Mc.prototype.$classData=t({Rd:0},"scala.util.control.Breaks",{Rd:1,c:1});function Oc(){}Oc.prototype=new u;Oc.prototype.constructor=Oc;function Pc(){}Pc.prototype=Oc.prototype;function Qc(a,b){b=m(-862048943,b);b=m(461845907,b<<15|b>>>17|0);a^=b;return-430675100+m(5,a<<13|a>>>19|0)|0}function Rc(a){a=m(-2048144789,a^(a>>>16|0));a=m(-1028477387,a^(a>>>13|0));return a^(a>>>16|0)}
+function Sc(a){Tc();var b=a.P();if(0===b)return a=a.R(),ya(p(),a);for(var c=-889275714,d=0;d<b;)c=Qc(c,Uc(Vc(),a.Q(d))),d=1+d|0;return Rc(c^b)}function Wc(a,b,c){var d=(new Xc).qa(0);c=(new Xc).qa(c);b.U(Yc(function(a,b,c){return function(a){c.u=Qc(c.u,Uc(Vc(),a));b.u=1+b.u|0}}(a,d,c)));return Rc(c.u^d.u)}function Db(){}Db.prototype=new u;Db.prototype.constructor=Db;Db.prototype.b=function(){return this};Db.prototype.$classData=t({Ud:0},"scala.collection.$colon$plus$",{Ud:1,c:1});var Cb=void 0;
+function Bb(){}Bb.prototype=new u;Bb.prototype.constructor=Bb;Bb.prototype.b=function(){return this};Bb.prototype.$classData=t({Vd:0},"scala.collection.$plus$colon$",{Vd:1,c:1});var Ab=void 0;function Zc(){this.Wa=null}Zc.prototype=new u;Zc.prototype.constructor=Zc;Zc.prototype.b=function(){$c=this;this.Wa=(new ad).b();return this};Zc.prototype.$classData=t({ae:0},"scala.collection.Iterator$",{ae:1,c:1});var $c=void 0;function ub(){$c||($c=(new Zc).b());return $c}
+function bd(a,b,c){var d=(new y).b();return cd(a,d,b,c).s.p}function cd(a,b,c,d){var e=dd();z(b.s,c);a.U(Yc(function(a,b,c,d){return function(a){if(d.u)ed(b,a),d.u=!1;else return z(b.s,c),ed(b,a)}}(a,b,d,e)));z(b.s,")");return b}function fd(){}fd.prototype=new u;fd.prototype.constructor=fd;function gd(){}gd.prototype=fd.prototype;function hd(){}hd.prototype=new u;hd.prototype.constructor=hd;function id(){}id.prototype=hd.prototype;function Hb(){}Hb.prototype=new u;Hb.prototype.constructor=Hb;
+Hb.prototype.b=function(){return this};Hb.prototype.$classData=t({te:0},"scala.collection.immutable.Stream$$hash$colon$colon$",{te:1,c:1});var Gb=void 0;function jd(){this.$=!1;this.wb=this.Ha=this.ma=null;this.Ra=!1;this.Fb=this.yb=0}jd.prototype=new u;jd.prototype.constructor=jd;
+jd.prototype.b=function(){kd=this;this.ma=(this.$=!!(l.ArrayBuffer&&l.Int32Array&&l.Float32Array&&l.Float64Array))?new l.ArrayBuffer(8):null;this.Ha=this.$?new l.Int32Array(this.ma,0,2):null;this.$&&new l.Float32Array(this.ma,0,2);this.wb=this.$?new l.Float64Array(this.ma,0,1):null;if(this.$)this.Ha[0]=16909060,a=1===((new l.Int8Array(this.ma,0,8))[0]|0);else var a=!0;this.yb=(this.Ra=a)?0:1;this.Fb=this.Ra?1:0;return this};
+function za(a,b){var c=b|0;if(c===b&&-Infinity!==1/b)return c;if(a.$)a.wb[0]=b,a=(new A).J(a.Ha[a.Fb]|0,a.Ha[a.yb]|0);else{if(b!==b)a=!1,b=2047,c=+l.Math.pow(2,51);else if(Infinity===b||-Infinity===b)a=0>b,b=2047,c=0;else if(0===b)a=-Infinity===1/b,c=b=0;else{var d=(a=0>b)?-b:b;if(d>=+l.Math.pow(2,-1022)){b=+l.Math.pow(2,52);var c=+l.Math.log(d)/.6931471805599453,c=+l.Math.floor(c)|0,c=1023>c?c:1023,e=+l.Math.pow(2,c);e>d&&(c=-1+c|0,e/=2);e=d/e*b;d=+l.Math.floor(e);e-=d;d=.5>e?d:.5<e?1+d:0!==d%2?
+1+d:d;2<=d/b&&(c=1+c|0,d=1);1023<c?(c=2047,d=0):(c=1023+c|0,d-=b);b=c;c=d}else b=d/+l.Math.pow(2,-1074),c=+l.Math.floor(b),d=b-c,b=0,c=.5>d?c:.5<d?1+c:0!==c%2?1+c:c}c=+c;a=(new A).J(c|0,(a?-2147483648:0)|(b|0)<<20|c/4294967296|0)}return a.E^a.I}jd.prototype.$classData=t({Ke:0},"scala.scalajs.runtime.Bits$",{Ke:1,c:1});var kd=void 0;function Aa(){kd||(kd=(new jd).b());return kd}function ld(){this.B=!1}ld.prototype=new u;ld.prototype.constructor=ld;ld.prototype.b=function(){return this};
+function md(){return l.String.fromCharCode(92)}function ya(a,b){a=0;for(var c=1,d=-1+(b.length|0)|0;0<=d;)a=a+m(65535&(b.charCodeAt(d)|0),c)|0,c=m(31,c),d=-1+d|0;return a}ld.prototype.$classData=t({Me:0},"scala.scalajs.runtime.RuntimeString$",{Me:1,c:1});var nd=void 0;function p(){nd||(nd=(new ld).b());return nd}function od(){}od.prototype=new u;od.prototype.constructor=od;od.prototype.b=function(){return this};function pd(a,b){return b&&b.$classData&&b.$classData.H.ob?b.ea:b}
+function qd(a,b){return b&&b.$classData&&b.$classData.H.r?b:(new rd).y(b)}od.prototype.$classData=t({Ne:0},"scala.scalajs.runtime.package$",{Ne:1,c:1});var sd=void 0;function td(){sd||(sd=(new od).b());return sd}var ud=t({Se:0},"scala.runtime.Null$",{Se:1,c:1});function vd(){}vd.prototype=new u;vd.prototype.constructor=vd;vd.prototype.b=function(){return this};function wd(a){xd||(xd=(new vd).b());var b=a.X();return bd(b,a.R()+"(",",")}
+vd.prototype.$classData=t({Te:0},"scala.runtime.ScalaRunTime$",{Te:1,c:1});var xd=void 0;function yd(){}yd.prototype=new u;yd.prototype.constructor=yd;yd.prototype.b=function(){return this};function Uc(a,b){if(null===b)return 0;if("number"===typeof b){a=+b;b=Da(a);if(b===a)a=b;else{var c=q();b=zd(c,a);c=c.k;a=Ad(q(),b,c)===a?b^c:za(Aa(),a)}return a}return va(b)?(a=Ha(b),b=(new A).J(a.E,a.I),a=b.E,b=b.I,b===a>>31?a:a^b):xa(b)}yd.prototype.$classData=t({Ve:0},"scala.runtime.Statics$",{Ve:1,c:1});
+var Bd=void 0;function Vc(){Bd||(Bd=(new yd).b());return Bd}function Cd(){}Cd.prototype=new u;Cd.prototype.constructor=Cd;function Dd(){}Dd.prototype=Cd.prototype;function B(){this.m=null}B.prototype=new u;B.prototype.constructor=B;function Ed(){}Ed.prototype=B.prototype;
+B.prototype.Ea=function(){if(void 0===l.Error.captureStackTrace){try{var a={}.undef()}catch(b){if(a=qd(td(),b),null!==a)if(a&&a.$classData&&a.$classData.H.ob)a=a.ea;else throw pd(td(),a);else throw b;}this.stackdata=a}else l.Error.captureStackTrace(this),this.stackdata=this;return this};B.prototype.Ya=function(){return this.m};B.prototype.h=function(){var a=Xa(ka(this)),b=this.Ya();return null===b?a:a+": "+b};B.prototype.q=function(a){this.m=a;this.Ea();return this};function Fd(){}Fd.prototype=new u;
+Fd.prototype.constructor=Fd;function Gd(){}Gd.prototype=Fd.prototype;Fd.prototype.Fa=function(a){Hd(this,a);return this};function Id(){this.Ab=this.Qb=null;this.Rb=this.Sb=0;this.W=this.Bb=this.bb=null;this.Ta=!1}Id.prototype=new u;Id.prototype.constructor=Id;function Jd(a){if(a.Ta){a.W=a.bb.exec(a.Bb);if(null!==a.W){var b=a.W[0];if(void 0===b)throw(new C).e("undefined.get");if(null===b)throw(new Kd).b();""===b&&(b=a.bb,b.lastIndex=1+(b.lastIndex|0)|0)}else a.Ta=!1;return null!==a.W}return!1}
+function Ld(a){if(null===a.W)throw(new Md).e("No match available");return a.W}function Nd(a){var b=Ld(a).index|0;a=Ld(a)[0];if(void 0===a)throw(new C).e("undefined.get");return b+(a.length|0)|0}Id.prototype.$classData=t({Wc:0},"java.util.regex.Matcher",{Wc:1,c:1,bf:1});function Od(){}Od.prototype=new u;Od.prototype.constructor=Od;Od.prototype.b=function(){return this};Od.prototype.$classData=t({gd:0},"scala.Predef$$anon$3",{gd:1,c:1,gc:1});function mb(){}mb.prototype=new u;
+mb.prototype.constructor=mb;mb.prototype.b=function(){return this};mb.prototype.h=function(){return"object AnyRef"};mb.prototype.$classData=t({ud:0},"scala.package$$anon$1",{ud:1,c:1,jf:1});function Pd(){this.nb=0}Pd.prototype=new Pc;Pd.prototype.constructor=Pd;Pd.prototype.b=function(){Qd=this;this.nb=ya(p(),"Seq");ya(p(),"Map");ya(p(),"Set");return this};function Rd(a){var b=Tc();return a&&a.$classData&&a.$classData.H.le?Rc(b.nb^0):Wc(b,a,b.nb)}
+Pd.prototype.$classData=t({Td:0},"scala.util.hashing.MurmurHash3$",{Td:1,of:1,c:1});var Qd=void 0;function Tc(){Qd||(Qd=(new Pd).b());return Qd}function Sd(){}Sd.prototype=new id;Sd.prototype.constructor=Sd;function Td(){}Td.prototype=Sd.prototype;function E(){}E.prototype=new id;E.prototype.constructor=E;function Ud(){}Ud.prototype=E.prototype;E.prototype.b=function(){(new Vd).Ga(this);return this};function Wd(){}Wd.prototype=new u;Wd.prototype.constructor=Wd;function Xd(){}Xd.prototype=Wd.prototype;
+Wd.prototype.Ga=function(a){if(null===a)throw pd(td(),null);return this};function Yd(){}Yd.prototype=new gd;Yd.prototype.constructor=Yd;function Zd(){}Zd.prototype=Yd.prototype;function $d(){}$d.prototype=new u;$d.prototype.constructor=$d;$d.prototype.b=function(){return this};$d.prototype.K=function(){return this};$d.prototype.h=function(){return"\x3cfunction1\x3e"};$d.prototype.$classData=t({ne:0},"scala.collection.immutable.List$$anon$1",{ne:1,c:1,ca:1});function ae(){}ae.prototype=new u;
+ae.prototype.constructor=ae;function be(){}be.prototype=ae.prototype;ae.prototype.h=function(){return"\x3cfunction1\x3e"};function ce(){this.u=!1}ce.prototype=new u;ce.prototype.constructor=ce;ce.prototype.h=function(){return""+this.u};function dd(){var a=new ce;a.u=!0;return a}ce.prototype.$classData=t({Oe:0},"scala.runtime.BooleanRef",{Oe:1,c:1,d:1});var ua=t({Pe:0},"scala.runtime.BoxedUnit",{Pe:1,c:1,d:1},void 0,void 0,function(a){return void 0===a});function Xc(){this.u=0}Xc.prototype=new u;
+Xc.prototype.constructor=Xc;Xc.prototype.h=function(){return""+this.u};Xc.prototype.qa=function(a){this.u=a;return this};Xc.prototype.$classData=t({Qe:0},"scala.runtime.IntRef",{Qe:1,c:1,d:1});function de(){}de.prototype=new u;de.prototype.constructor=de;function ee(){}ee.prototype=de.prototype;function fe(){this.Ob=this.Nb=this.Jb=this.Pb=this.Lb=this.Kb=this.Mb=0;this.Ib=null;this.i=0}fe.prototype=new u;fe.prototype.constructor=fe;
+fe.prototype.b=function(){ge=this;this.Mb=624;this.i=(1|this.i)<<24>>24;this.Kb=397;this.i=(2|this.i)<<24>>24;this.Lb=-1727483681;this.i=(4|this.i)<<24>>24;this.Pb=-2147483648;this.i=(8|this.i)<<24>>24;this.Jb=2147483647;this.i=(16|this.i)<<24>>24;this.Nb=-1658038656;this.i=(32|this.i)<<24>>24;this.Ob=-272236544;this.i=(64|this.i)<<24>>24;this.Ib="0";this.i=(128|this.i)<<24>>24;return this};
+function F(){var a=G();if(0===(16&a.i))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 146");return a.Jb}function I(){var a=G();if(0===(2&a.i))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 143");return a.Kb}
+function K(){var a=G();if(0===(32&a.i))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 147");return a.Nb}function L(){var a=G();if(0===(8&a.i))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 145");return a.Pb}
+function M(){var a=G();if(0===(1&a.i))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 142");return a.Mb}function N(){var a=G();if(0===(64&a.i))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 148");return a.Ob}
+function he(){var a=G();if(0===(128&a.i))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 149");return a.Ib}fe.prototype.$classData=t({qc:0},"org.nlogo.tortoise.engine.MersenneTwisterFast$",{qc:1,c:1,f:1,d:1});var ge=void 0;function G(){ge||(ge=(new fe).b());return ge}var ta=t({Ac:0},"java.lang.Boolean",{Ac:1,c:1,d:1,C:1},void 0,void 0,function(a){return"boolean"===typeof a});function ie(){this.ua=0}ie.prototype=new u;
+ie.prototype.constructor=ie;ie.prototype.h=function(){return l.String.fromCharCode(this.ua)};function je(a){var b=new ie;b.ua=a;return b}ie.prototype.n=function(){return this.ua};ie.prototype.$classData=t({Cc:0},"java.lang.Character",{Cc:1,c:1,d:1,C:1});function ke(){this.B=0}ke.prototype=new u;ke.prototype.constructor=ke;ke.prototype.b=function(){return this};ke.prototype.$classData=t({Dc:0},"java.lang.Character$",{Dc:1,c:1,f:1,d:1});var le=void 0;function me(){this.Va=null;this.B=!1}
+me.prototype=new u;me.prototype.constructor=me;me.prototype.b=function(){return this};function ne(a){a.B||(a.Va=new l.RegExp("^[\\x00-\\x20]*[+-]?(NaN|Infinity|(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?)[fFdD]?[\\x00-\\x20]*$"),a.B=!0);return a.Va}me.prototype.$classData=t({Gc:0},"java.lang.Double$",{Gc:1,c:1,f:1,d:1});var oe=void 0;function pe(){this.m=null}pe.prototype=new Ed;pe.prototype.constructor=pe;function qe(){}qe.prototype=pe.prototype;function re(){this.m=null}re.prototype=new Ed;
+re.prototype.constructor=re;function se(){}se.prototype=re.prototype;function te(){}te.prototype=new u;te.prototype.constructor=te;te.prototype.b=function(){return this};function ue(a){throw(new ve).e(we(xe(new ye,ze(new O,['For input string: "','"'])),ze(new O,[a])));}
+function Ae(a){if(null===a||0===((new P).e(a).o.length|0))ue(a);else{var b=45===(65535&(a.charCodeAt(0)|0))||43===(65535&(a.charCodeAt(0)|0))?1:0;if(((new P).e(a).o.length|0)<=b)ue(a);else{for(;;){var c=b,d=(new P).e(a).o;if(c<(d.length|0))le||(le=(new ke).b()),c=65535&(a.charCodeAt(b)|0),0>(48<=c&&57>=c&&10>(-48+c|0)?-48+c|0:65<=c&&90>=c&&0>(-65+c|0)?-55+c|0:97<=c&&122>=c&&0>(-97+c|0)?-87+c|0:65313<=c&&65338>=c&&0>(-65313+c|0)?-65303+c|0:65345<=c&&65370>=c&&0>(-65345+c|0)?-65303+c|0:-1)&&ue(a),b=
+1+b|0;else break}b=+l.parseInt(a,10);return b!==b||2147483647<b||-2147483648>b?ue(a):Da(b)}}}te.prototype.$classData=t({Lc:0},"java.lang.Integer$",{Lc:1,c:1,f:1,d:1});var Be=void 0;function Ce(){Be||(Be=(new te).b())}function De(){}De.prototype=new u;De.prototype.constructor=De;De.prototype.b=function(){return this};function Ee(){Fe||(Fe=(new De).b());var a=Ge(),b=Ge();return(new A).J(b,a)}function Ge(){var a=4294967296*+l.Math.random();return Da(-2147483648+ +l.Math.floor(a))}
+De.prototype.$classData=t({Vc:0},"java.util.Random$",{Vc:1,c:1,f:1,d:1});var Fe=void 0;function He(){this.sb=this.V=null}He.prototype=new u;He.prototype.constructor=He;He.prototype.h=function(){return this.sb};He.prototype.$classData=t({Xc:0},"java.util.regex.Pattern",{Xc:1,c:1,f:1,d:1});function Ie(){this.Cb=this.Db=null}Ie.prototype=new u;Ie.prototype.constructor=Ie;
+Ie.prototype.b=function(){Je=this;this.Db=new l.RegExp("^\\\\Q(.|\\n|\\r)\\\\E$");this.Cb=new l.RegExp("^\\(\\?([idmsuxU]*)(?:-([idmsuxU]*))?\\)");return this};function Ke(a){for(var b="",c=0;c<(a.length|0);){var d=65535&(a.charCodeAt(c)|0);switch(d){case 92:case 46:case 40:case 41:case 91:case 93:case 123:case 125:case 124:case 63:case 42:case 43:case 94:case 36:d="\\"+je(d);break;default:d=je(d)}b=""+b+d;c=1+c|0}return b}
+function Le(a){switch(a){case 105:return 2;case 100:return 1;case 109:return 8;case 115:return 32;case 117:return 64;case 120:return 4;case 85:return 256;default:throw(new Q).e("bad in-pattern flag");}}Ie.prototype.$classData=t({Yc:0},"java.util.regex.Pattern$",{Yc:1,c:1,f:1,d:1});var Je=void 0;function Me(){}Me.prototype=new u;Me.prototype.constructor=Me;Me.prototype.b=function(){return this};function $a(){Ne||(Ne=(new Me).b());var a=l.java;return null===a?v():(new w).y(a)}
+Me.prototype.$classData=t({cd:0},"scala.Option$",{cd:1,c:1,f:1,d:1});var Ne=void 0;function Oe(){}Oe.prototype=new hb;Oe.prototype.constructor=Oe;Oe.prototype.b=function(){Pe=this;lb||(lb=(new kb).b());vb||(vb=(new wb).b());Qe||(Qe=(new Re).b());Se||(Se=(new Te).b());Lc||(Lc=(new Kc).b());Lc||(Lc=(new Kc).b());Ue||(Ue=(new Ve).b());(new Od).b();(new We).b();(new Xe).b();return this};Oe.prototype.$classData=t({dd:0},"scala.Predef$",{dd:1,ef:1,c:1,cf:1});var Pe=void 0;function Ye(){}Ye.prototype=new u;
+Ye.prototype.constructor=Ye;Ye.prototype.b=function(){return this};Ye.prototype.$classData=t({jd:0},"scala.StringContext$",{jd:1,c:1,f:1,d:1});var Ze=void 0;function Rb(){}Rb.prototype=new u;Rb.prototype.constructor=Rb;Rb.prototype.b=function(){return this};Rb.prototype.$classData=t({nd:0},"scala.math.Fractional$",{nd:1,c:1,f:1,d:1});var Qb=void 0;function Tb(){}Tb.prototype=new u;Tb.prototype.constructor=Tb;Tb.prototype.b=function(){return this};
+Tb.prototype.$classData=t({od:0},"scala.math.Integral$",{od:1,c:1,f:1,d:1});var Sb=void 0;function Vb(){}Vb.prototype=new u;Vb.prototype.constructor=Vb;Vb.prototype.b=function(){return this};Vb.prototype.$classData=t({pd:0},"scala.math.Numeric$",{pd:1,c:1,f:1,d:1});var Ub=void 0;function Zb(){}Zb.prototype=new u;Zb.prototype.constructor=Zb;Zb.prototype.b=function(){return this};Zb.prototype.$classData=t({Nd:0},"scala.util.Either$",{Nd:1,c:1,f:1,d:1});var Yb=void 0;function ac(){}ac.prototype=new u;
+ac.prototype.constructor=ac;ac.prototype.b=function(){return this};ac.prototype.h=function(){return"Left"};ac.prototype.$classData=t({Od:0},"scala.util.Left$",{Od:1,c:1,f:1,d:1});var $b=void 0;function cc(){}cc.prototype=new u;cc.prototype.constructor=cc;cc.prototype.b=function(){return this};cc.prototype.h=function(){return"Right"};cc.prototype.$classData=t({Pd:0},"scala.util.Right$",{Pd:1,c:1,f:1,d:1});var bc=void 0;function $e(){this.rb=!1}$e.prototype=new u;$e.prototype.constructor=$e;
+$e.prototype.b=function(){this.rb=!1;return this};$e.prototype.$classData=t({Sd:0},"scala.util.control.NoStackTrace$",{Sd:1,c:1,f:1,d:1});var af=void 0;function bf(){}bf.prototype=new Xd;bf.prototype.constructor=bf;bf.prototype.b=function(){Wd.prototype.Ga.call(this,tb());return this};bf.prototype.$classData=t({Yd:0},"scala.collection.IndexedSeq$$anon$1",{Yd:1,he:1,c:1,gc:1});function cf(){}cf.prototype=new Ud;cf.prototype.constructor=cf;function df(){}df.prototype=cf.prototype;
+function Vd(){this.va=null}Vd.prototype=new Xd;Vd.prototype.constructor=Vd;Vd.prototype.Ga=function(a){if(null===a)throw pd(td(),null);this.va=a;Wd.prototype.Ga.call(this,a);return this};Vd.prototype.$classData=t({ge:0},"scala.collection.generic.GenTraversableFactory$$anon$1",{ge:1,he:1,c:1,gc:1});function ef(){}ef.prototype=new Zd;ef.prototype.constructor=ef;function ff(){}ff.prototype=ef.prototype;function zb(){}zb.prototype=new u;zb.prototype.constructor=zb;zb.prototype.b=function(){return this};
+zb.prototype.h=function(){return"::"};zb.prototype.$classData=t({ke:0},"scala.collection.immutable.$colon$colon$",{ke:1,c:1,f:1,d:1});var yb=void 0;function Nb(){}Nb.prototype=new u;Nb.prototype.constructor=Nb;Nb.prototype.b=function(){return this};Nb.prototype.$classData=t({qe:0},"scala.collection.immutable.Range$",{qe:1,c:1,f:1,d:1});var Mb=void 0;function Lb(){}Lb.prototype=new u;Lb.prototype.constructor=Lb;Lb.prototype.b=function(){return this};
+Lb.prototype.$classData=t({Ge:0},"scala.collection.mutable.StringBuilder$",{Ge:1,c:1,f:1,d:1});var Kb=void 0;function gf(){this.vb=null}gf.prototype=new be;gf.prototype.constructor=gf;gf.prototype.K=function(a){return(0,this.vb)(a)};function Yc(a){var b=new gf;b.vb=a;return b}gf.prototype.$classData=t({Je:0},"scala.scalajs.runtime.AnonFunction1",{Je:1,Mf:1,c:1,ca:1});function hf(){this.k=0;this.ka=null}hf.prototype=new u;hf.prototype.constructor=hf;
+hf.prototype.b=function(){jf=this;this.ka=(new A).J(0,0);return this};function kf(a,b,c){return 0===(-2097152&c)?""+(4294967296*c+ +(b>>>0)):lf(a,b,c,1E9,0,2)}function Ad(a,b,c){return 0>c?-(4294967296*+((0!==b?~c:-c|0)>>>0)+ +((-b|0)>>>0)):4294967296*c+ +(b>>>0)}function zd(a,b){if(-9223372036854775808>b)return a.k=-2147483648,0;if(0x7fffffffffffffff<=b)return a.k=2147483647,-1;var c=b|0,d=b/4294967296|0;a.k=0>b&&0!==c?-1+d|0:d;return c}
+function lf(a,b,c,d,e,h){var k=(0!==e?ca(e):32+ca(d)|0)-(0!==c?ca(c):32+ca(b)|0)|0,r=k,D=0===(32&r)?d<<r:0,J=0===(32&r)?(d>>>1|0)>>>(31-r|0)|0|e<<r:d<<r,r=b,x=c;for(b=c=0;0<=k&&0!==(-2097152&x);){var V=r,zc=x,zg=D,$f=J;if(zc===$f?(-2147483648^V)>=(-2147483648^zg):(-2147483648^zc)>=(-2147483648^$f))V=x,zc=J,x=r-D|0,V=(-2147483648^x)>(-2147483648^r)?-1+(V-zc|0)|0:V-zc|0,r=x,x=V,32>k?c|=1<<k:b|=1<<k;k=-1+k|0;V=J>>>1|0;D=D>>>1|0|J<<31;J=V}k=x;if(k===e?(-2147483648^r)>=(-2147483648^d):(-2147483648^k)>=
+(-2147483648^e))k=4294967296*x+ +(r>>>0),d=4294967296*e+ +(d>>>0),1!==h&&(J=k/d,e=J/4294967296|0,D=c,c=J=D+(J|0)|0,b=(-2147483648^J)<(-2147483648^D)?1+(b+e|0)|0:b+e|0),0!==h&&(d=k%d,r=d|0,x=d/4294967296|0);if(0===h)return a.k=b,c;if(1===h)return a.k=x,r;a=""+r;return""+(4294967296*b+ +(c>>>0))+"000000000".substring(a.length|0)+a}
+function mf(a,b,c,d,e){if(0===(d|e))throw(new nf).e("/ by zero");if(c===b>>31){if(e===d>>31){if(-1!==d){var h=b%d|0;a.k=h>>31;return h}return a.k=0}if(-2147483648===b&&-2147483648===d&&0===e)return a.k=0;a.k=c;return b}if(h=0>c){var k=-b|0;c=0!==b?~c:-c|0}else k=b;0>e?(b=-d|0,d=0!==d?~e:-e|0):(b=d,d=e);e=c;0===(-2097152&e)?0===(-2097152&d)?(k=(4294967296*e+ +(k>>>0))%(4294967296*d+ +(b>>>0)),a.k=k/4294967296|0,k|=0):a.k=e:0===d&&0===(b&(-1+b|0))?(a.k=0,k&=-1+b|0):0===b&&0===(d&(-1+d|0))?a.k=e&(-1+
+d|0):k=lf(a,k,e,b,d,1)|0;return h?(h=a.k,a.k=0!==k?~h:-h|0,-k|0):k}hf.prototype.$classData=t({Le:0},"scala.scalajs.runtime.RuntimeLong$",{Le:1,c:1,f:1,d:1});var jf=void 0;function q(){jf||(jf=(new hf).b());return jf}var of=t({Re:0},"scala.runtime.Nothing$",{Re:1,r:1,c:1,d:1});function pf(){}pf.prototype=new ee;pf.prototype.constructor=pf;function qf(){}qf.prototype=pf.prototype;pf.prototype.uc=function(){return this};
+var la=t({sc:0},"java.lang.String",{sc:1,c:1,d:1,Eb:1,C:1},void 0,void 0,function(a){return"string"===typeof a});function rf(){this.m=null}rf.prototype=new qe;rf.prototype.constructor=rf;rf.prototype.y=function(a){B.prototype.q.call(this,ja(a));return this};rf.prototype.$classData=t({zc:0},"java.lang.AssertionError",{zc:1,$e:1,r:1,c:1,d:1});
+var na=t({Bc:0},"java.lang.Byte",{Bc:1,ga:1,c:1,d:1,C:1},void 0,void 0,function(a){return ma(a)}),sa=t({Fc:0},"java.lang.Double",{Fc:1,ga:1,c:1,d:1,C:1},void 0,void 0,function(a){return"number"===typeof a}),ra=t({Hc:0},"java.lang.Float",{Hc:1,ga:1,c:1,d:1,C:1},void 0,void 0,function(a){return"number"===typeof a}),qa=t({Kc:0},"java.lang.Integer",{Kc:1,ga:1,c:1,d:1,C:1},void 0,void 0,function(a){return"number"===typeof a&&(a|0)===a&&1/a!==1/-0});function sf(){}sf.prototype=new ee;
+sf.prototype.constructor=sf;sf.prototype.b=function(){return this};sf.prototype.$classData=t({Nc:0},"java.lang.JSConsoleBasedPrintStream$DummyOutputStream",{Nc:1,oc:1,c:1,mc:1,nc:1});var wa=t({Oc:0},"java.lang.Long",{Oc:1,ga:1,c:1,d:1,C:1},void 0,void 0,function(a){return va(a)});function tf(){this.m=null}tf.prototype=new se;tf.prototype.constructor=tf;function R(){}R.prototype=tf.prototype;tf.prototype.e=function(a){B.prototype.q.call(this,a);return this};
+tf.prototype.$classData=t({A:0},"java.lang.RuntimeException",{A:1,D:1,r:1,c:1,d:1});var pa=t({Rc:0},"java.lang.Short",{Rc:1,ga:1,c:1,d:1,C:1},void 0,void 0,function(a){return oa(a)});function uf(){this.p=null}uf.prototype=new u;uf.prototype.constructor=uf;f=uf.prototype;f.b=function(){uf.prototype.e.call(this,"");return this};function z(a,b){a.p=""+a.p+(null===b?"null":b);return a}f.kc=function(a,b){return this.p.substring(a,b)};f.h=function(){return this.p};
+function vf(a,b){null===b?z(a,null):z(a,ja(b))}f.qa=function(){uf.prototype.e.call(this,"");return this};function wf(a,b,c,d){return null===b?wf(a,"null",c,d):z(a,ja(Ca(b,c,d)))}f.e=function(a){this.p=a;return this};f.$classData=t({Sc:0},"java.lang.StringBuilder",{Sc:1,c:1,Eb:1,xc:1,d:1});function xf(){}xf.prototype=new u;xf.prototype.constructor=xf;function yf(){}yf.prototype=xf.prototype;xf.prototype.h=function(){return"\x3cfunction1\x3e"};function zf(){}zf.prototype=new u;
+zf.prototype.constructor=zf;function Af(){}Af.prototype=zf.prototype;zf.prototype.h=function(){return"\x3cfunction1\x3e"};function Pb(){}Pb.prototype=new u;Pb.prototype.constructor=Pb;Pb.prototype.b=function(){return this};Pb.prototype.$classData=t({md:0},"scala.math.Equiv$",{md:1,c:1,kf:1,f:1,d:1});var Ob=void 0;function Xb(){}Xb.prototype=new u;Xb.prototype.constructor=Xb;Xb.prototype.b=function(){return this};Xb.prototype.$classData=t({sd:0},"scala.math.Ordering$",{sd:1,c:1,lf:1,f:1,d:1});
+var Wb=void 0;function Ve(){}Ve.prototype=new u;Ve.prototype.constructor=Ve;Ve.prototype.b=function(){return this};Ve.prototype.h=function(){return"\x3c?\x3e"};Ve.prototype.$classData=t({Ld:0},"scala.reflect.NoManifest$",{Ld:1,c:1,t:1,f:1,d:1});var Ue=void 0;function Bf(){}Bf.prototype=new u;Bf.prototype.constructor=Bf;function Cf(){}Cf.prototype=Bf.prototype;Bf.prototype.h=function(){return(this.L()?"non-empty":"empty")+" iterator"};Bf.prototype.U=function(a){for(;this.L();)a.K(this.F())};
+function Df(){}Df.prototype=new Td;Df.prototype.constructor=Df;function Ef(){}Ef.prototype=Df.prototype;function Re(){}Re.prototype=new ff;Re.prototype.constructor=Re;Re.prototype.b=function(){return this};Re.prototype.$classData=t({oe:0},"scala.collection.immutable.Map$",{oe:1,wf:1,yf:1,uf:1,c:1});var Qe=void 0;function A(){this.I=this.E=0}A.prototype=new Dd;A.prototype.constructor=A;f=A.prototype;
+f.h=function(){var a=q(),b=this.E,c=this.I;return c===b>>31?""+b:0>c?"-"+kf(a,-b|0,0!==b?~c:-c|0):kf(a,b,c)};f.J=function(a,b){this.E=a;this.I=b;return this};f.qa=function(a){A.prototype.J.call(this,a,a>>31);return this};f.n=function(){return this.E^this.I};function va(a){return!!(a&&a.$classData&&a.$classData.H.jc)}f.$classData=t({jc:0},"scala.scalajs.runtime.RuntimeLong",{jc:1,ga:1,c:1,d:1,C:1});function S(){this.ic=q().ka;this.xa=null;this.ab=0;this.wa=null;this.Qa=0;this.Pa=!1;this.g=0}
+S.prototype=new Gd;S.prototype.constructor=S;S.prototype.Fa=function(a){this.ic=a;Fd.prototype.Fa.call(this,Ee());this.xa=null;this.g=(1|this.g)<<24>>24;this.ab=0;this.g=(2|this.g)<<24>>24;this.wa=null;this.g=(4|this.g)<<24>>24;this.Qa=0;this.g=(8|this.g)<<24>>24;this.Pa=!1;this.g=(16|this.g)<<24>>24;Hd(this,a);return this};function T(a){if(0===(2&a.g))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 161");return a.ab}
+function U(a){if(0===(1&a.g))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 160");return a.xa}function Ff(a){if(0===(8&a.g))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 163");return a.Qa}function Gf(a){if(0===(16&a.g))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 164");return a.Pa}
+function W(a){if(0===(4&a.g))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 162");return a.wa}function Hf(a,b){a.Pa=b;a.g=(16|a.g)<<24>>24}function If(a,b){a.Qa=b;a.g=(8|a.g)<<24>>24}function X(a,b){a.ab=b;a.g=(2|a.g)<<24>>24}
+function Hd(a,b){Hf(a,!1);If(a,0);var c=ha(Na(Sa),[M()]);a.xa=c;a.g=(1|a.g)<<24>>24;c=ha(Na(Sa),[2]);a.wa=c;a.g=(4|a.g)<<24>>24;W(a).a[0]=0;var c=W(a).a,d=G();if(0===(4&d.i))throw(new H).e("Uninitialized field: /Users/el_ergo/Github/Tortoise/engine/src/main/scala/MersenneTwisterFast.scala: 144");c[1]=d.Lb;U(a).a[0]=b.E;for(X(a,1);T(a)<M();)U(a).a[T(a)]=m(1812433253,U(a).a[-1+T(a)|0]^(U(a).a[-1+T(a)|0]>>>30|0))+T(a)|0,b=U(a),c=T(a),b.a[c]=b.a[c],X(a,1+T(a)|0)}
+S.prototype.nextInt=function(){for(var a=arguments.length|0,b=0,c=[];b<a;)c.push(arguments[b]),b=b+1|0;switch(c.length|0){case 0:if(T(this)>=M()){for(var b=0,c=U(this),d=W(this);b<(M()-I()|0);)a=c.a[b]&L()|c.a[1+b|0]&F(),c.a[b]=c.a[b+I()|0]^(a>>>1|0)^d.a[1&a],b=1+b|0;for(;b<(-1+M()|0);)a=c.a[b]&L()|c.a[1+b|0]&F(),c.a[b]=c.a[b+(I()-M()|0)|0]^(a>>>1|0)^d.a[1&a],b=1+b|0;a=c.a[-1+M()|0]&L()|c.a[0]&F();c.a[-1+M()|0]=c.a[-1+I()|0]^(a>>>1|0)^d.a[1&a];X(this,0)}a=U(this).a[X(this,1+T(this)|0),-1+T(this)|
+0];a^=a>>>11|0;a^=a<<7&K();a^=a<<15&N();return a^(a>>>18|0);case 1:a=c[0]|0;if(0>=a)throw(new Q).e("n must be positive");if((a&(-a|0))===a){if(T(this)>=M()){for(var b=0,d=U(this),e=W(this);b<(M()-I()|0);)c=d.a[b]&L()|d.a[1+b|0]&F(),d.a[b]=d.a[b+I()|0]^(c>>>1|0)^e.a[1&c],b=1+b|0;for(;b<(-1+M()|0);)c=d.a[b]&L()|d.a[1+b|0]&F(),d.a[b]=d.a[b+(I()-M()|0)|0]^(c>>>1|0)^e.a[1&c],b=1+b|0;c=d.a[-1+M()|0]&L()|d.a[0]&F();d.a[-1+M()|0]=d.a[-1+I()|0]^(c>>>1|0)^e.a[1&c];X(this,0)}var c=U(this).a[X(this,1+T(this)|
+0),-1+T(this)|0],c=c^(c>>>11|0),c=c^c<<7&K(),c=c^c<<15&N(),b=a>>31,c=(c^(c>>>18|0))>>>1|0,d=c>>31,h=65535&a,e=a>>>16|0,k=65535&c,r=c>>>16|0,D=m(h,k),k=m(e,k),J=m(h,r),h=D+((k+J|0)<<16)|0,D=(D>>>16|0)+J|0,a=(((m(a,d)+m(b,c)|0)+m(e,r)|0)+(D>>>16|0)|0)+(((65535&D)+k|0)>>>16|0)|0,a=h>>>31|0|a<<1}else{do{if(T(this)>=M()){c=0;d=U(this);for(e=W(this);c<(M()-I()|0);)b=d.a[c]&L()|d.a[1+c|0]&F(),d.a[c]=d.a[c+I()|0]^(b>>>1|0)^e.a[1&b],c=1+c|0;for(;c<(-1+M()|0);)b=d.a[c]&L()|d.a[1+c|0]&F(),d.a[c]=d.a[c+(I()-
+M()|0)|0]^(b>>>1|0)^e.a[1&b],c=1+c|0;b=d.a[-1+M()|0]&L()|d.a[0]&F();d.a[-1+M()|0]=d.a[-1+I()|0]^(b>>>1|0)^e.a[1&b];X(this,0)}b=U(this).a[X(this,1+T(this)|0),-1+T(this)|0];b^=b>>>11|0;b^=b<<7&K();b^=b<<15&N();b^=b>>>18|0;b=b>>>1|0;c=b%a|0}while(0>((b-c|0)+(-1+a|0)|0));a=c}return a;default:throw"No matching overload";}};
+S.prototype.nextGaussian=function(){var a;if(Gf(this))Hf(this,!1),a=Ff(this);else{var b,c;do{var d;if(T(this)>=M()){a=0;d=U(this);for(c=W(this);a<(M()-I()|0);)b=d.a[a]&L()|d.a[1+a|0]&F(),d.a[a]=d.a[a+I()|0]^(b>>>1|0)^c.a[1&b],a=1+a|0;for(;a<(-1+M()|0);)b=d.a[a]&L()|d.a[1+a|0]&F(),d.a[a]=d.a[a+(I()-M()|0)|0]^(b>>>1|0)^c.a[1&b],a=1+a|0;b=d.a[-1+M()|0]&L()|d.a[0]&F();d.a[-1+M()|0]=d.a[-1+I()|0]^(b>>>1|0)^c.a[1&b];X(this,0)}b=U(this).a[X(this,1+T(this)|0),-1+T(this)|0];b^=b>>>11|0;b^=b<<7&K();b^=b<<15&
+N();b^=b>>>18|0;if(T(this)>=M()){a=0;d=U(this);for(var e=W(this);a<(M()-I()|0);)c=d.a[a]&L()|d.a[1+a|0]&F(),d.a[a]=d.a[a+I()|0]^(c>>>1|0)^e.a[1&c],a=1+a|0;for(;a<(-1+M()|0);)c=d.a[a]&L()|d.a[1+a|0]&F(),d.a[a]=d.a[a+(I()-M()|0)|0]^(c>>>1|0)^e.a[1&c],a=1+a|0;c=d.a[-1+M()|0]&L()|d.a[0]&F();d.a[-1+M()|0]=d.a[-1+I()|0]^(c>>>1|0)^e.a[1&c];X(this,0)}c=U(this).a[X(this,1+T(this)|0),-1+T(this)|0];c^=c>>>11|0;c^=c<<7&K();c^=c<<15&N();c^=c>>>18|0;if(T(this)>=M()){d=0;for(var e=U(this),h=W(this);d<(M()-I()|0);)a=
+e.a[d]&L()|e.a[1+d|0]&F(),e.a[d]=e.a[d+I()|0]^(a>>>1|0)^h.a[1&a],d=1+d|0;for(;d<(-1+M()|0);)a=e.a[d]&L()|e.a[1+d|0]&F(),e.a[d]=e.a[d+(I()-M()|0)|0]^(a>>>1|0)^h.a[1&a],d=1+d|0;a=e.a[-1+M()|0]&L()|e.a[0]&F();e.a[-1+M()|0]=e.a[-1+I()|0]^(a>>>1|0)^h.a[1&a];X(this,0)}a=U(this).a[X(this,1+T(this)|0),-1+T(this)|0];a^=a>>>11|0;a^=a<<7&K();a^=a<<15&N();a^=a>>>18|0;if(T(this)>=M()){for(var h=U(this),k=W(this),e=0;e<(M()-I()|0);)d=h.a[e]&L()|h.a[1+e|0]&F(),h.a[e]=h.a[e+I()|0]^(d>>>1|0)^k.a[1&d],e=1+e|0;for(;e<
+(-1+M()|0);)d=h.a[e]&L()|h.a[1+e|0]&F(),h.a[e]=h.a[e+(I()-M()|0)|0]^(d>>>1|0)^k.a[1&d],e=1+e|0;d=h.a[-1+M()|0]&L()|h.a[0]&F();h.a[-1+M()|0]=h.a[-1+I()|0]^(d>>>1|0)^k.a[1&d];X(this,0)}d=U(this).a[X(this,1+T(this)|0),-1+T(this)|0];d^=d>>>11|0;d^=d<<7&K();d^=d<<15&N();d^=d>>>18|0;e=b>>>6|0;b=e<<27;e=e>>>5|0|e>>31<<27;h=c>>>5|0;c=h>>31;h=b+h|0;b=(-2147483648^h)<(-2147483648^b)?1+(e+c|0)|0:e+c|0;b=-1+2*(Ad(q(),h,b)/9007199254740992);c=a>>>6|0;a=c<<27;c=c>>>5|0|c>>31<<27;e=d>>>5|0;d=e>>31;e=a+e|0;a=(-2147483648^
+e)<(-2147483648^a)?1+(c+d|0)|0:c+d|0;a=-1+2*(Ad(q(),e,a)/9007199254740992);c=b*b+a*a}while(1<=c||0===c);d=bb();e=bb();h=c;c=-2*+(e.B?e.Oa:Za(e)).log(h)/c;d=+(d.B?d.Oa:Za(d)).sqrt(c);If(this,a*d);Hf(this,!0);a=b*d}return a};
+S.prototype.nextDouble=function(){var a,b;if(T(this)>=M()){b=0;for(var c=U(this),d=W(this);b<(M()-I()|0);)a=c.a[b]&L()|c.a[1+b|0]&F(),c.a[b]=c.a[b+I()|0]^(a>>>1|0)^d.a[1&a],b=1+b|0;for(;b<(-1+M()|0);)a=c.a[b]&L()|c.a[1+b|0]&F(),c.a[b]=c.a[b+(I()-M()|0)|0]^(a>>>1|0)^d.a[1&a],b=1+b|0;a=c.a[-1+M()|0]&L()|c.a[0]&F();c.a[-1+M()|0]=c.a[-1+I()|0]^(a>>>1|0)^d.a[1&a];X(this,0)}a=U(this).a[X(this,1+T(this)|0),-1+T(this)|0];a^=a>>>11|0;a^=a<<7&K();a^=a<<15&N();a^=a>>>18|0;if(T(this)>=M()){for(var c=0,d=U(this),
+e=W(this);c<(M()-I()|0);)b=d.a[c]&L()|d.a[1+c|0]&F(),d.a[c]=d.a[c+I()|0]^(b>>>1|0)^e.a[1&b],c=1+c|0;for(;c<(-1+M()|0);)b=d.a[c]&L()|d.a[1+c|0]&F(),d.a[c]=d.a[c+(I()-M()|0)|0]^(b>>>1|0)^e.a[1&b],c=1+c|0;b=d.a[-1+M()|0]&L()|d.a[0]&F();d.a[-1+M()|0]=d.a[-1+I()|0]^(b>>>1|0)^e.a[1&b];X(this,0)}b=U(this).a[X(this,1+T(this)|0),-1+T(this)|0];b^=b>>>11|0;b^=b<<7&K();b^=b<<15&N();c=a>>>6|0;a=c<<27;c=c>>>5|0|c>>31<<27;d=(b^(b>>>18|0))>>>5|0;b=d>>31;d=a+d|0;a=(-2147483648^d)<(-2147483648^a)?1+(c+b|0)|0:c+b|0;
+return Ad(q(),d,a)/9007199254740992};
+S.prototype.nextLong=function(a){var b=+a;a=q();b=zd(a,b);a=(new A).J(b,a.k);b=a.I;if(0===b?0===a.E:0>b)throw(new Q).e("n must be positive");for(var c,d,e;;){if(T(this)>=M()){e=0;c=U(this);for(d=W(this);e<(M()-I()|0);)b=c.a[e]&L()|c.a[1+e|0]&F(),c.a[e]=c.a[e+I()|0]^(b>>>1|0)^d.a[1&b],e=1+e|0;for(;e<(-1+M()|0);)b=c.a[e]&L()|c.a[1+e|0]&F(),c.a[e]=c.a[e+(I()-M()|0)|0]^(b>>>1|0)^d.a[1&b],e=1+e|0;b=c.a[-1+M()|0]&L()|c.a[0]&F();c.a[-1+M()|0]=c.a[-1+I()|0]^(b>>>1|0)^d.a[1&b];X(this,0)}b=U(this).a[X(this,
+1+T(this)|0),-1+T(this)|0];b^=b>>>11|0;b^=b<<7&K();b^=b<<15&N();b^=b>>>18|0;if(T(this)>=M()){c=0;d=U(this);for(var h=W(this);c<(M()-I()|0);)e=d.a[c]&L()|d.a[1+c|0]&F(),d.a[c]=d.a[c+I()|0]^(e>>>1|0)^h.a[1&e],c=1+c|0;for(;c<(-1+M()|0);)e=d.a[c]&L()|d.a[1+c|0]&F(),d.a[c]=d.a[c+(I()-M()|0)|0]^(e>>>1|0)^h.a[1&e],c=1+c|0;e=d.a[-1+M()|0]&L()|d.a[0]&F();d.a[-1+M()|0]=d.a[-1+I()|0]^(e>>>1|0)^h.a[1&e];X(this,0)}e=U(this).a[X(this,1+T(this)|0),-1+T(this)|0];e^=e>>>11|0;e^=e<<7&K();e^=e<<15&N();e^=e>>>18|0;c=
+b+(e>>31)|0;b=c>>>1|0;c=e>>>1|0|c<<31;d=b;e=c;h=d;b=q();e=mf(b,e,h,a.E,a.I);h=b.k;b=e;e=h;var h=c,k=e;c=h-b|0;d=(-2147483648^c)>(-2147483648^h)?-1+(d-k|0)|0:d-k|0;k=a.I;h=-1+a.E|0;k=-1!==h?k:-1+k|0;if(!(0>((-2147483648^(c+h|0))<(-2147483648^c)?1+(d+k|0)|0:d+k|0)))break}b=(new A).J(b,e);a=b.E;b=b.I;return Ad(q(),a,b)};S.prototype.setSeed=function(a){a|=0;Hd(this,(new A).J(a,a>>31))};
+S.prototype.load=function(a){p();if(null===a)throw(new Kd).b();var b;Je||(Je=(new Ie).b());b=Je;var c=b.Db.exec("\\s");if(null!==c){c=c[1];if(void 0===c)throw(new C).e("undefined.get");c=(new w).y(Jf(new Kf,Ke(c),0))}else c=v();if(c.M())if(c=b.Cb.exec("\\s"),null!==c){b=c[0];if(void 0===b)throw(new C).e("undefined.get");b="\\s".substring(b.length|0);var d=c[1];if(void 0===d)var e=0;else{var d=(new P).e(d),h=d.o.length|0,k=0,r=0;a:for(;;){if(k!==h){e=1+k|0;k=d.da(k);r=r|0|Le(null===k?0:k.ua);k=e;continue a}break}e=
+r|0}c=c[2];if(void 0===c)c=e;else{c=(new P).e(c);d=c.o.length|0;h=0;k=e;a:for(;;){if(h!==d){e=1+h|0;h=c.da(h);k=(k|0)&~Le(null===h?0:h.ua);h=e;continue a}break}c=k|0}b=(new w).y(Jf(new Kf,b,c))}else b=v();else b=c;b=b.M()?Jf(new Kf,"\\s",0):b.N();if(null===b)throw(new Lf).y(b);c=b.za|0;b=new l.RegExp(b.ya,"g"+(0!==(2&c)?"i":"")+(0!==(8&c)?"m":""));c=new He;c.V=b;c.sb="\\s";a=ja(a);if(""===a)for(c=ze(new O,[""]),a=c.T.length|0,a=ha(Na(la),[a]),b=0,c=Mf(c,c.T.length|0);c.L();)d=c.F(),a.a[b]=d,b=1+b|
+0;else{d=a.length|0;b=new Id;b.Qb=c;b.Ab=a;b.Sb=0;b.Rb=d;c=b.Qb;d=new l.RegExp(c.V);c=d!==c.V?d:new l.RegExp(c.V.source,(c.V.global?"g":"")+(c.V.ignoreCase?"i":"")+(c.V.multiline?"m":""));b.bb=c;b.Bb=ja(Ca(b.Ab,b.Sb,b.Rb));b.W=null;b.Ta=!0;c=[];for(d=h=0;2147483646>d&&Jd(b);)0!==Nd(b)&&(e=Ld(b).index|0,h=a.substring(h,e),c.push(null===h?null:h),d=1+d|0),h=Nd(b);a=a.substring(h);c.push(null===a?null:a);c=new (Na(la).Ua)(c);for(b=c.a.length;0!==b&&""===c.a[-1+b|0];)b=-1+b|0;if(b===c.a.length)a=c;else if(a=
+ha(Na(la),[b]),c=c.a,d=a.a,c!==d||0>(0+b|0))for(h=0;h<b;h=h+1|0)d[0+h|0]=c[0+h|0];else for(h=b-1|0;0<=h;h=h-1|0)d[0+h|0]=c[0+h|0]}b=a.a[0];if(b!==he())throw pd(td(),(new tf).e('identifier mismatch: expected "'+he()+'", got "'+b+'"'));b=W(this);c=(new P).e(a.a[1]);Ce();b.a[0]=Ae(c.o);b=W(this);c=(new P).e(a.a[2]);Ce();b.a[1]=Ae(c.o);b=(new P).e(a.a[3]);Ce();X(this,Ae(b.o));b=(new P).e(a.a[4]);oe||(oe=(new me).b());b=b.o;c=oe;if((c.B?c.Va:ne(c)).test(b))b=+l.parseFloat(b);else throw(new ve).e(we(xe(new ye,
+ze(new O,['For input string: "','"'])),ze(new O,[b])));If(this,b);b=a.a[5];if("true"===b)Hf(this,!0);else if("false"===b)Hf(this,!1);else throw pd(td(),(new tf).e('expected true or false, got "'+b+'"'));for(b=0;b<M();)c=U(this),d=b,h=(new P).e(a.a[6+b|0]),Ce(),c.a[d]=Ae(h.o),b=1+b|0;Pe||(Pe=(new Oe).b());if(!(a.a.length<=(6+b|0)))throw(new rf).y("assertion failed");};
+S.prototype.save=function(){for(var a=Ff(this)===Da(Ff(this))?Ff(this)+".0":Ff(this),a=(new y).e(he()+" "+W(this).a[0]+" "+W(this).a[1]+" "+T(this)+" "+a+" "+Gf(this)),b=0;b<M();){z(a.s," ");var c=U(this).a[b];z(a.s,""+c);b=1+b|0}return a.s.p};S.prototype.clone=function(){var a=(new S).Fa(this.ic),b=U(this).tb();a.xa=b;a.g=(1|a.g)<<24>>24;X(a,T(this));b=W(this).tb();a.wa=b;a.g=(4|a.g)<<24>>24;If(a,Ff(this));Hf(a,Gf(this));return a};
+S.prototype.$classData=t({pc:0},"org.nlogo.tortoise.engine.MersenneTwisterFast",{pc:1,af:1,c:1,d:1,Ub:1,Za:1});function nf(){this.m=null}nf.prototype=new R;nf.prototype.constructor=nf;nf.prototype.e=function(a){B.prototype.q.call(this,a);return this};nf.prototype.$classData=t({yc:0},"java.lang.ArithmeticException",{yc:1,A:1,D:1,r:1,c:1,d:1});function Q(){this.m=null}Q.prototype=new R;Q.prototype.constructor=Q;function Nf(){}Nf.prototype=Q.prototype;
+Q.prototype.b=function(){B.prototype.q.call(this,null);return this};Q.prototype.e=function(a){B.prototype.q.call(this,a);return this};Q.prototype.$classData=t({$a:0},"java.lang.IllegalArgumentException",{$a:1,A:1,D:1,r:1,c:1,d:1});function Md(){this.m=null}Md.prototype=new R;Md.prototype.constructor=Md;Md.prototype.e=function(a){B.prototype.q.call(this,a);return this};Md.prototype.$classData=t({Ic:0},"java.lang.IllegalStateException",{Ic:1,A:1,D:1,r:1,c:1,d:1});function Y(){this.m=null}
+Y.prototype=new R;Y.prototype.constructor=Y;Y.prototype.e=function(a){B.prototype.q.call(this,a);return this};Y.prototype.$classData=t({Jc:0},"java.lang.IndexOutOfBoundsException",{Jc:1,A:1,D:1,r:1,c:1,d:1});function Kd(){this.m=null}Kd.prototype=new R;Kd.prototype.constructor=Kd;Kd.prototype.b=function(){B.prototype.q.call(this,null);return this};Kd.prototype.$classData=t({Pc:0},"java.lang.NullPointerException",{Pc:1,A:1,D:1,r:1,c:1,d:1});function C(){this.m=null}C.prototype=new R;
+C.prototype.constructor=C;C.prototype.e=function(a){B.prototype.q.call(this,a);return this};C.prototype.$classData=t({Uc:0},"java.util.NoSuchElementException",{Uc:1,A:1,D:1,r:1,c:1,d:1});function Lf(){this.sa=this.Hb=this.m=null;this.Sa=!1}Lf.prototype=new R;Lf.prototype.constructor=Lf;
+Lf.prototype.Ya=function(){if(!this.Sa&&!this.Sa){var a;if(null===this.sa)a="null";else try{a=ja(this.sa)+" ("+("of class "+Xa(ka(this.sa)))+")"}catch(b){if(null!==qd(td(),b))a="an instance of class "+Xa(ka(this.sa));else throw b;}this.Hb=a;this.Sa=!0}return this.Hb};Lf.prototype.y=function(a){this.sa=a;B.prototype.q.call(this,null);return this};Lf.prototype.$classData=t({Zc:0},"scala.MatchError",{Zc:1,A:1,D:1,r:1,c:1,d:1});function Of(){}Of.prototype=new u;Of.prototype.constructor=Of;
+function Pf(){}Pf.prototype=Of.prototype;function We(){}We.prototype=new Af;We.prototype.constructor=We;We.prototype.b=function(){return this};We.prototype.K=function(a){return a};We.prototype.$classData=t({ed:0},"scala.Predef$$anon$1",{ed:1,gf:1,c:1,ca:1,f:1,d:1});function Xe(){}Xe.prototype=new yf;Xe.prototype.constructor=Xe;Xe.prototype.b=function(){return this};Xe.prototype.K=function(a){return a};Xe.prototype.$classData=t({fd:0},"scala.Predef$$anon$2",{fd:1,ff:1,c:1,ca:1,f:1,d:1});
+function ye(){this.ta=null}ye.prototype=new u;ye.prototype.constructor=ye;f=ye.prototype;f.R=function(){return"StringContext"};f.P=function(){return 1};f.Q=function(a){switch(a){case 0:return this.ta;default:throw(new Y).e(""+a);}};f.h=function(){return wd(this)};
+function we(a,b){var c=function(){return function(a){Ze||(Ze=(new Ye).b());a:{var b=a.length|0,c;p();var d=md();c=a.indexOf(d)|0;switch(c){case -1:break a;default:d=(new uf).b();b:{var e=c;c=0;for(;;)if(0<=e){e>c&&wf(d,a,c,e);c=1+e|0;if(c>=b)throw Qf(a,e);var x=65535&(a.charCodeAt(c)|0);switch(x){case 98:e=8;break;case 116:e=9;break;case 110:e=10;break;case 102:e=12;break;case 114:e=13;break;case 34:e=34;break;case 39:e=39;break;case 92:e=92;break;default:if(48<=x&&55>=x)e=65535&(a.charCodeAt(c)|
+0),x=-48+e|0,c=1+c|0,c<b&&48<=(65535&(a.charCodeAt(c)|0))&&55>=(65535&(a.charCodeAt(c)|0))&&(x=-48+((x<<3)+(65535&(a.charCodeAt(c)|0))|0)|0,c=1+c|0,c<b&&51>=e&&48<=(65535&(a.charCodeAt(c)|0))&&55>=(65535&(a.charCodeAt(c)|0))&&(x=-48+((x<<3)+(65535&(a.charCodeAt(c)|0))|0)|0,c=1+c|0)),c=-1+c|0,e=65535&x;else throw Qf(a,e);}c=1+c|0;z(d,l.String.fromCharCode(e));e=c;p();var x=a,V=md(),x=x.indexOf(V,c)|0;c=e;e=x}else{c<b&&wf(d,a,c,b);a=d.p;break b}}}}return a}}(a);if(a.ta.O()!==(1+b.O()|0))throw(new Q).e("wrong number of arguments ("+
+b.O()+") for interpolated string with "+a.ta.O()+" parts");a=a.ta.ra();b=b.ra();for(var d=a.F(),d=(new uf).e(c(d));b.L();){vf(d,b.F());var e=a.F();z(d,c(e))}return d.p}function xe(a,b){a.ta=b;return a}f.n=function(){return Sc(this)};f.X=function(){return Rf(this)};f.$classData=t({id:0},"scala.StringContext",{id:1,c:1,ha:1,j:1,f:1,d:1});function Nc(){this.m=null}Nc.prototype=new Ed;Nc.prototype.constructor=Nc;Nc.prototype.b=function(){B.prototype.q.call(this,null);return this};
+Nc.prototype.Ea=function(){af||(af=(new $e).b());return af.rb?B.prototype.Ea.call(this):this};Nc.prototype.$classData=t({Qd:0},"scala.util.control.BreakControl",{Qd:1,r:1,c:1,d:1,mf:1,nf:1});function qb(){}qb.prototype=new Ud;qb.prototype.constructor=qb;qb.prototype.b=function(){E.prototype.b.call(this);return this};qb.prototype.$classData=t({$d:0},"scala.collection.Iterable$",{$d:1,ia:1,aa:1,c:1,ja:1,ba:1});var pb=void 0;function ad(){}ad.prototype=new Cf;ad.prototype.constructor=ad;
+ad.prototype.b=function(){return this};ad.prototype.F=function(){throw(new C).e("next on empty iterator");};ad.prototype.L=function(){return!1};ad.prototype.$classData=t({be:0},"scala.collection.Iterator$$anon$2",{be:1,cb:1,c:1,hb:1,Z:1,Y:1});function Sf(){this.We=null}Sf.prototype=new Cf;Sf.prototype.constructor=Sf;Sf.prototype.F=function(){if(this.L())throw(new C).e("head of empty list");return ub().Wa.F()};Sf.prototype.L=function(){return!1};
+Sf.prototype.$classData=t({ce:0},"scala.collection.LinearSeqLike$$anon$1",{ce:1,cb:1,c:1,hb:1,Z:1,Y:1});function ob(){}ob.prototype=new Ud;ob.prototype.constructor=ob;ob.prototype.b=function(){E.prototype.b.call(this);nb=this;(new Mc).b();return this};ob.prototype.$classData=t({ee:0},"scala.collection.Traversable$",{ee:1,ia:1,aa:1,c:1,ja:1,ba:1});var nb=void 0;function Tf(){}Tf.prototype=new Ef;Tf.prototype.constructor=Tf;function Uf(){}Uf.prototype=Tf.prototype;
+function Vf(){this.ub=this.oa=0;this.lc=null}Vf.prototype=new Cf;Vf.prototype.constructor=Vf;Vf.prototype.F=function(){var a=this.lc.Q(this.oa);this.oa=1+this.oa|0;return a};function Rf(a){var b=new Vf;b.lc=a;b.oa=0;b.ub=a.P();return b}Vf.prototype.L=function(){return this.oa<this.ub};Vf.prototype.$classData=t({Ue:0},"scala.runtime.ScalaRunTime$$anon$1",{Ue:1,cb:1,c:1,hb:1,Z:1,Y:1});function Wf(){}Wf.prototype=new qf;Wf.prototype.constructor=Wf;function Xf(){}Xf.prototype=Wf.prototype;
+Wf.prototype.vc=function(){pf.prototype.uc.call(this);return this};function Kf(){this.za=this.ya=null}Kf.prototype=new u;Kf.prototype.constructor=Kf;f=Kf.prototype;f.R=function(){return"Tuple2"};f.P=function(){return 2};function Jf(a,b,c){a.ya=b;a.za=c;return a}f.Q=function(a){a:switch(a){case 0:a=this.ya;break a;case 1:a=this.za;break a;default:throw(new Y).e(""+a);}return a};f.h=function(){return"("+this.ya+","+this.za+")"};f.n=function(){return Sc(this)};f.X=function(){return Rf(this)};
+f.$classData=t({tc:0},"scala.Tuple2",{tc:1,c:1,hf:1,ha:1,j:1,f:1,d:1});function ve(){this.m=null}ve.prototype=new Nf;ve.prototype.constructor=ve;ve.prototype.e=function(a){B.prototype.q.call(this,a);return this};ve.prototype.$classData=t({Qc:0},"java.lang.NumberFormatException",{Qc:1,$a:1,A:1,D:1,r:1,c:1,d:1});function Yf(){}Yf.prototype=new Pf;Yf.prototype.constructor=Yf;f=Yf.prototype;f.b=function(){return this};f.R=function(){return"None"};f.P=function(){return 0};f.M=function(){return!0};
+f.N=function(){throw(new C).e("None.get");};f.Q=function(a){throw(new Y).e(""+a);};f.h=function(){return"None"};f.n=function(){return 2433880};f.X=function(){return Rf(this)};f.$classData=t({ad:0},"scala.None$",{ad:1,bd:1,c:1,ha:1,j:1,f:1,d:1});var Zf=void 0;function v(){Zf||(Zf=(new Yf).b());return Zf}function w(){this.pb=null}w.prototype=new Pf;w.prototype.constructor=w;f=w.prototype;f.R=function(){return"Some"};f.P=function(){return 1};f.M=function(){return!1};
+f.Q=function(a){switch(a){case 0:return this.pb;default:throw(new Y).e(""+a);}};f.N=function(){return this.pb};f.h=function(){return wd(this)};f.y=function(a){this.pb=a;return this};f.n=function(){return Sc(this)};f.X=function(){return Rf(this)};f.$classData=t({hd:0},"scala.Some",{hd:1,bd:1,c:1,ha:1,j:1,f:1,d:1});function ag(){this.m=null}ag.prototype=new Nf;ag.prototype.constructor=ag;
+function Qf(a,b){var c=new ag,d=xe(new ye,ze(new O,["invalid escape "," index ",' in "','". Use \\\\\\\\ for literal \\\\.']));Pe||(Pe=(new Oe).b());if(!(0<=b&&b<(a.length|0)))throw(new Q).e("requirement failed");if(b===(-1+(a.length|0)|0))var e="at terminal";else var e=xe(new ye,ze(new O,["'\\\\","' not one of "," at"])),h=65535&(a.charCodeAt(1+b|0)|0),e=we(e,ze(new O,[je(h),"[\\b, \\t, \\n, \\f, \\r, \\\\, \\\", \\']"]));a=we(d,ze(new O,[e,b,a]));B.prototype.q.call(c,a);return c}
+ag.prototype.$classData=t({kd:0},"scala.StringContext$InvalidEscapeException",{kd:1,$a:1,A:1,D:1,r:1,c:1,d:1});
+function bg(a){a=Xa(ka(a.Tb()));for(var b=-1+(a.length|0)|0;;)if(-1!==b&&36===(65535&(a.charCodeAt(b)|0)))b=-1+b|0;else break;if(-1===b||46===(65535&(a.charCodeAt(b)|0)))return"";for(var c="";;){for(var d=1+b|0;;)if(-1!==b&&57>=(65535&(a.charCodeAt(b)|0))&&48<=(65535&(a.charCodeAt(b)|0)))b=-1+b|0;else break;for(var e=b;;)if(-1!==b&&36!==(65535&(a.charCodeAt(b)|0))&&46!==(65535&(a.charCodeAt(b)|0)))b=-1+b|0;else break;var h=1+b|0;if(b===e&&d!==(a.length|0))return c;for(;;)if(-1!==b&&36===(65535&(a.charCodeAt(b)|
+0)))b=-1+b|0;else break;var e=-1===b?!0:46===(65535&(a.charCodeAt(b)|0)),k;(k=e)||(k=65535&(a.charCodeAt(h)|0),k=!(90<k&&127>k||65>k));if(k){d=a.substring(h,d);h=c;if(null===h)throw(new Kd).b();c=""===h?d:""+d+je(46)+c;if(e)return c}}}function cg(){}cg.prototype=new df;cg.prototype.constructor=cg;function dg(){}dg.prototype=cg.prototype;function Te(){}Te.prototype=new Uf;Te.prototype.constructor=Te;Te.prototype.b=function(){return this};
+Te.prototype.$classData=t({re:0},"scala.collection.immutable.Set$",{re:1,xf:1,zf:1,vf:1,aa:1,c:1,ba:1});var Se=void 0;function eg(){}eg.prototype=new Xf;eg.prototype.constructor=eg;function eb(){var a=new eg;(new sf).b();Wf.prototype.vc.call(a)}eg.prototype.$classData=t({Mc:0},"java.lang.JSConsoleBasedPrintStream",{Mc:1,Ye:1,Xe:1,oc:1,c:1,mc:1,nc:1,xc:1});function sb(){}sb.prototype=new dg;sb.prototype.constructor=sb;sb.prototype.b=function(){E.prototype.b.call(this);return this};
+sb.prototype.$classData=t({de:0},"scala.collection.Seq$",{de:1,Ma:1,La:1,ia:1,aa:1,c:1,ja:1,ba:1});var rb=void 0;function fg(){}fg.prototype=new dg;fg.prototype.constructor=fg;function gg(){}gg.prototype=fg.prototype;function H(){this.Gb=this.m=null}H.prototype=new R;H.prototype.constructor=H;f=H.prototype;f.R=function(){return"UninitializedFieldError"};f.P=function(){return 1};f.Q=function(a){switch(a){case 0:return this.Gb;default:throw(new Y).e(""+a);}};
+f.e=function(a){this.Gb=a;B.prototype.q.call(this,a);return this};f.n=function(){return Sc(this)};f.X=function(){return Rf(this)};f.$classData=t({ld:0},"scala.UninitializedFieldError",{ld:1,A:1,D:1,r:1,c:1,d:1,ha:1,j:1,f:1});function hg(){this.l=null}hg.prototype=new u;hg.prototype.constructor=hg;function Z(){}Z.prototype=hg.prototype;hg.prototype.h=function(){return this.l};hg.prototype.n=function(){return Ba(this)};function ig(){}ig.prototype=new u;ig.prototype.constructor=ig;function jg(){}
+jg.prototype=ig.prototype;function kg(){}kg.prototype=new gg;kg.prototype.constructor=kg;kg.prototype.b=function(){E.prototype.b.call(this);lg=this;(new bf).b();return this};kg.prototype.$classData=t({Xd:0},"scala.collection.IndexedSeq$",{Xd:1,je:1,Ma:1,La:1,ia:1,aa:1,c:1,ja:1,ba:1});var lg=void 0;function tb(){lg||(lg=(new kg).b());return lg}function mg(){this.fa=this.Xa=0;this.va=null}mg.prototype=new Cf;mg.prototype.constructor=mg;
+mg.prototype.F=function(){this.fa>=this.Xa&&ub().Wa.F();var a=this.va.da(this.fa);this.fa=1+this.fa|0;return a};function Mf(a,b){var c=new mg;c.Xa=b;if(null===a)throw pd(td(),null);c.va=a;c.fa=0;return c}mg.prototype.L=function(){return this.fa<this.Xa};mg.prototype.$classData=t({Zd:0},"scala.collection.IndexedSeqLike$Elements",{Zd:1,cb:1,c:1,hb:1,Z:1,Y:1,pf:1,f:1,d:1});function rd(){this.ea=this.m=null}rd.prototype=new R;rd.prototype.constructor=rd;f=rd.prototype;f.R=function(){return"JavaScriptException"};
+f.P=function(){return 1};f.Ea=function(){this.stackdata=this.ea;return this};f.Q=function(a){switch(a){case 0:return this.ea;default:throw(new Y).e(""+a);}};f.Ya=function(){return ja(this.ea)};f.y=function(a){this.ea=a;B.prototype.q.call(this,null);return this};f.n=function(){return Sc(this)};f.X=function(){return Rf(this)};f.$classData=t({ob:0},"scala.scalajs.js.JavaScriptException",{ob:1,A:1,D:1,r:1,c:1,d:1,ha:1,j:1,f:1});function uc(){this.l=null}uc.prototype=new Z;uc.prototype.constructor=uc;
+uc.prototype.b=function(){this.l="Boolean";return this};uc.prototype.$classData=t({zd:0},"scala.reflect.ManifestFactory$BooleanManifest$",{zd:1,S:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var tc=void 0;function gc(){this.l=null}gc.prototype=new Z;gc.prototype.constructor=gc;gc.prototype.b=function(){this.l="Byte";return this};gc.prototype.$classData=t({Ad:0},"scala.reflect.ManifestFactory$ByteManifest$",{Ad:1,S:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var fc=void 0;function kc(){this.l=null}kc.prototype=new Z;
+kc.prototype.constructor=kc;kc.prototype.b=function(){this.l="Char";return this};kc.prototype.$classData=t({Bd:0},"scala.reflect.ManifestFactory$CharManifest$",{Bd:1,S:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var jc=void 0;function sc(){this.l=null}sc.prototype=new Z;sc.prototype.constructor=sc;sc.prototype.b=function(){this.l="Double";return this};sc.prototype.$classData=t({Cd:0},"scala.reflect.ManifestFactory$DoubleManifest$",{Cd:1,S:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var rc=void 0;
+function qc(){this.l=null}qc.prototype=new Z;qc.prototype.constructor=qc;qc.prototype.b=function(){this.l="Float";return this};qc.prototype.$classData=t({Dd:0},"scala.reflect.ManifestFactory$FloatManifest$",{Dd:1,S:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var pc=void 0;function mc(){this.l=null}mc.prototype=new Z;mc.prototype.constructor=mc;mc.prototype.b=function(){this.l="Int";return this};
+mc.prototype.$classData=t({Ed:0},"scala.reflect.ManifestFactory$IntManifest$",{Ed:1,S:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var lc=void 0;function oc(){this.l=null}oc.prototype=new Z;oc.prototype.constructor=oc;oc.prototype.b=function(){this.l="Long";return this};oc.prototype.$classData=t({Fd:0},"scala.reflect.ManifestFactory$LongManifest$",{Fd:1,S:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var nc=void 0;function ng(){this.G=null}ng.prototype=new jg;ng.prototype.constructor=ng;function og(){}
+og.prototype=ng.prototype;ng.prototype.h=function(){return this.G};ng.prototype.n=function(){return Ba(this)};function ic(){this.l=null}ic.prototype=new Z;ic.prototype.constructor=ic;ic.prototype.b=function(){this.l="Short";return this};ic.prototype.$classData=t({Jd:0},"scala.reflect.ManifestFactory$ShortManifest$",{Jd:1,S:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var hc=void 0;function wc(){this.l=null}wc.prototype=new Z;wc.prototype.constructor=wc;wc.prototype.b=function(){this.l="Unit";return this};
+wc.prototype.$classData=t({Kd:0},"scala.reflect.ManifestFactory$UnitManifest$",{Kd:1,S:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var vc=void 0;function wb(){}wb.prototype=new dg;wb.prototype.constructor=wb;wb.prototype.b=function(){E.prototype.b.call(this);vb=this;(new $d).b();return this};wb.prototype.$classData=t({me:0},"scala.collection.immutable.List$",{me:1,Ma:1,La:1,ia:1,aa:1,c:1,ja:1,ba:1,f:1,d:1});var vb=void 0;function Fb(){}Fb.prototype=new dg;Fb.prototype.constructor=Fb;
+Fb.prototype.b=function(){E.prototype.b.call(this);return this};Fb.prototype.$classData=t({se:0},"scala.collection.immutable.Stream$",{se:1,Ma:1,La:1,ia:1,aa:1,c:1,ja:1,ba:1,f:1,d:1});var Eb=void 0;function yc(){this.G=null}yc.prototype=new og;yc.prototype.constructor=yc;yc.prototype.b=function(){this.G="Any";v();xb();n(La);return this};yc.prototype.$classData=t({xd:0},"scala.reflect.ManifestFactory$AnyManifest$",{xd:1,Ka:1,Ja:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var xc=void 0;
+function Dc(){this.G=null}Dc.prototype=new og;Dc.prototype.constructor=Dc;Dc.prototype.b=function(){this.G="AnyVal";v();xb();n(La);return this};Dc.prototype.$classData=t({yd:0},"scala.reflect.ManifestFactory$AnyValManifest$",{yd:1,Ka:1,Ja:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var Cc=void 0;function Fc(){this.G=null}Fc.prototype=new og;Fc.prototype.constructor=Fc;Fc.prototype.b=function(){this.G="Nothing";v();xb();n(of);return this};
+Fc.prototype.$classData=t({Gd:0},"scala.reflect.ManifestFactory$NothingManifest$",{Gd:1,Ka:1,Ja:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var Ec=void 0;function Hc(){this.G=null}Hc.prototype=new og;Hc.prototype.constructor=Hc;Hc.prototype.b=function(){this.G="Null";v();xb();n(ud);return this};Hc.prototype.$classData=t({Hd:0},"scala.reflect.ManifestFactory$NullManifest$",{Hd:1,Ka:1,Ja:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var Gc=void 0;function Bc(){this.G=null}Bc.prototype=new og;
+Bc.prototype.constructor=Bc;Bc.prototype.b=function(){this.G="Object";v();xb();n(La);return this};Bc.prototype.$classData=t({Id:0},"scala.reflect.ManifestFactory$ObjectManifest$",{Id:1,Ka:1,Ja:1,c:1,x:1,w:1,v:1,t:1,f:1,d:1,j:1});var Ac=void 0;function Jb(){}Jb.prototype=new gg;Jb.prototype.constructor=Jb;Jb.prototype.b=function(){E.prototype.b.call(this);Ib=this;return this};Jb.prototype.$classData=t({we:0},"scala.collection.immutable.Vector$",{we:1,je:1,Ma:1,La:1,ia:1,aa:1,c:1,ja:1,ba:1,f:1,d:1});
+var Ib=void 0;function pg(){}pg.prototype=new u;pg.prototype.constructor=pg;function qg(){}qg.prototype=pg.prototype;pg.prototype.Tb=function(){return this};pg.prototype.Na=function(){return bg(this)};function rg(a,b){for(var c=0,d=a.O();c<d;)b.K(a.da(c)),c=1+c|0}function sg(){}sg.prototype=new qg;sg.prototype.constructor=sg;function tg(){}tg.prototype=sg.prototype;sg.prototype.U=function(a){for(var b=this.ra();b.L();)a.K(b.F())};function P(){this.o=null}P.prototype=new u;
+P.prototype.constructor=P;f=P.prototype;f.da=function(a){a=65535&(this.o.charCodeAt(a)|0);return je(a)};f.h=function(){return this.o};f.U=function(a){rg(this,a)};f.O=function(){return this.o.length|0};f.Tb=function(){return this.o};f.e=function(a){this.o=a;return this};f.n=function(){var a=this.o;return ya(p(),a)};f.Na=function(){return bg(this)};f.$classData=t({ve:0},"scala.collection.immutable.StringOps",{ve:1,c:1,ue:1,cc:1,bc:1,jb:1,gb:1,j:1,kb:1,mb:1,lb:1,Z:1,Y:1,fb:1,ib:1,db:1,eb:1,qd:1,C:1});
+function ug(){}ug.prototype=new tg;ug.prototype.constructor=ug;function vg(){}vg.prototype=ug.prototype;ug.prototype.h=function(){var a=this.Na()+"(";return bd(this,a,", ")};function wg(){}wg.prototype=new vg;wg.prototype.constructor=wg;function xg(){}xg.prototype=wg.prototype;function yg(){}yg.prototype=new vg;yg.prototype.constructor=yg;function Ag(){}f=Ag.prototype=yg.prototype;f.K=function(a){throw(new Y).e(""+(a|0));};f.U=function(){};f.ra=function(){var a=new Sf;a.We=this;return a};f.O=function(){return 0};
+f.n=function(){return Rd(this)};f.Na=function(){return"List"};function Bg(){}Bg.prototype=new Ag;Bg.prototype.constructor=Bg;f=Bg.prototype;f.b=function(){return this};f.R=function(){return"Nil"};f.P=function(){return 0};f.Q=function(a){throw(new Y).e(""+a);};f.X=function(){return Rf(this)};
+f.$classData=t({pe:0},"scala.collection.immutable.Nil$",{pe:1,le:1,Xb:1,Wb:1,Yb:1,c:1,fc:1,kb:1,mb:1,lb:1,Z:1,Y:1,fb:1,ib:1,ac:1,hc:1,dc:1,Zb:1,db:1,gb:1,j:1,ec:1,Vb:1,ca:1,$b:1,eb:1,jb:1,Df:1,Ef:1,Cf:1,Ff:1,df:1,qf:1,rf:1,ha:1,sf:1,f:1,d:1});var Cg=void 0;function xb(){Cg||(Cg=(new Bg).b())}function Dg(){}Dg.prototype=new xg;Dg.prototype.constructor=Dg;function Eg(){}Eg.prototype=Dg.prototype;function y(){this.s=null}y.prototype=new xg;y.prototype.constructor=y;f=y.prototype;
+f.b=function(){y.prototype.zb.call(this,16,"");return this};f.da=function(a){a=65535&(this.s.p.charCodeAt(a)|0);return je(a)};f.K=function(a){a=65535&(this.s.p.charCodeAt(a|0)|0);return je(a)};f.kc=function(a,b){return this.s.p.substring(a,b)};f.h=function(){return this.s.p};f.U=function(a){rg(this,a)};f.ra=function(){return Mf(this,this.s.p.length|0)};f.zb=function(a,b){y.prototype.wc.call(this,z((new uf).qa((b.length|0)+a|0),b));return this};f.O=function(){return this.s.p.length|0};
+f.wc=function(a){this.s=a;return this};function ed(a,b){var c=a.s;p();z(c,null===b?"null":ja(b));return a}f.e=function(a){y.prototype.zb.call(this,16,a);return this};f.n=function(){return Rd(this)};
+f.$classData=t({Fe:0},"scala.collection.mutable.StringBuilder",{Fe:1,xe:1,Xb:1,Wb:1,Yb:1,c:1,fc:1,kb:1,mb:1,lb:1,Z:1,Y:1,fb:1,ib:1,ac:1,hc:1,dc:1,Zb:1,db:1,gb:1,j:1,ec:1,Vb:1,ca:1,$b:1,eb:1,jb:1,De:1,Ce:1,He:1,$c:1,Ee:1,ze:1,Ub:1,Za:1,Eb:1,Ae:1,Wd:1,bc:1,Be:1,ue:1,cc:1,qd:1,C:1,Lf:1,ye:1,ie:1,fe:1,f:1,d:1});function O(){this.T=null}O.prototype=new Eg;O.prototype.constructor=O;f=O.prototype;f.da=function(a){return this.T[a]};f.K=function(a){return this.T[a|0]};f.U=function(a){rg(this,a)};
+f.ra=function(){return Mf(this,this.T.length|0)};f.O=function(){return this.T.length|0};f.n=function(){return Rd(this)};function ze(a,b){a.T=b;return a}f.Na=function(){return"WrappedArray"};f.$classData=t({Ie:0},"scala.scalajs.js.WrappedArray",{Ie:1,Gf:1,xe:1,Xb:1,Wb:1,Yb:1,c:1,fc:1,kb:1,mb:1,lb:1,Z:1,Y:1,fb:1,ib:1,ac:1,hc:1,dc:1,Zb:1,db:1,gb:1,j:1,ec:1,Vb:1,ca:1,$b:1,eb:1,jb:1,De:1,Ce:1,He:1,$c:1,Ee:1,ze:1,Ub:1,Za:1,If:1,Jf:1,ie:1,fe:1,Af:1,tf:1,Bf:1,Ae:1,Wd:1,bc:1,Be:1,Hf:1,Kf:1,cc:1,ye:1});
+aa.MersenneTwisterFast=function(){for(var a=new S,b=arguments.length|0,c=0,d=[];c<b;)d.push(arguments[c]),c=c+1|0;void 0===d[0]?(G(),c=fb(),b=q(),c=1E6*+(0,c.xb)(),c=zd(b,c),b=(new A).J(c,b.k)):b=Ha(d[0]);S.prototype.Fa.call(a,b);return a};aa.MersenneTwisterFast.prototype=S.prototype;
+}).call(this);
+
+
+  module.exports = {
+    MersenneTwisterFast: MersenneTwisterFast
+  };
+
+}).call(this);
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],"shim/random":[function(require,module,exports){
+(function() {
+  var MersenneTwisterFast;
+
+  MersenneTwisterFast = require('./engine-scala').MersenneTwisterFast;
+
+
+  /*
+  On the JVM, we use Headless' MersenneTwisterFast.
+  In the browser, we use a ScalaJS implementation of it.
+  We can't the ScalaJS implementation in both environments,
+  because MTF relies on bit-shifting, and JVM integers have
+  a different number of bits than JS integers, leading to
+  different results.
+   */
+
+  module.exports = MersenneTwisterFast();
+
+}).call(this);
+
+},{"./engine-scala":"shim/engine-scala"}],"shim/strictmath":[function(require,module,exports){
+(function() {
+  var Cloner, genEnhancedMath;
+
+  Cloner = require('./cloner');
+
+  genEnhancedMath = function() {
+    var obj;
+    obj = Cloner(Math);
+    obj.toRadians = function(degrees) {
+      return degrees * Math.PI / 180;
+    };
+    obj.toDegrees = function(radians) {
+      return radians * 180 / Math.PI;
+    };
+    obj.PI = function() {
+      return Math.PI;
+    };
+    obj.truncate = function(x) {
+      if (x >= 0) {
+        return Math.floor(x);
+      } else {
+        return Math.ceil(x);
+      }
+    };
+    return obj;
+  };
+
+  module.exports = typeof StrictMath !== "undefined" && StrictMath !== null ? StrictMath : genEnhancedMath();
+
+}).call(this);
+
+},{"./cloner":"shim/cloner"}],"util/abstractmethoderror":[function(require,module,exports){
+(function() {
+  module.exports = function(msg) {
+    throw new Error("Illegal method call: `" + msg + "` is abstract");
+  };
+
+}).call(this);
+
+},{}],"util/comparator":[function(require,module,exports){
+(function() {
+  module.exports = {
+    NOT_EQUALS: {},
+    EQUALS: {
+      toInt: 0
+    },
+    GREATER_THAN: {
+      toInt: 1
+    },
+    LESS_THAN: {
+      toInt: -1
+    },
+    numericCompare: function(x, y) {
+      if (x < y) {
+        return this.LESS_THAN;
+      } else if (x > y) {
+        return this.GREATER_THAN;
+      } else {
+        return this.EQUALS;
+      }
+    },
+    stringCompare: function(x, y) {
+      var comparison;
+      comparison = x.localeCompare(y);
+      if (comparison < 0) {
+        return this.LESS_THAN;
+      } else if (comparison > 0) {
+        return this.GREATER_THAN;
+      } else {
+        return this.EQUALS;
+      }
+    }
+  };
+
+}).call(this);
+
+},{}],"util/exception":[function(require,module,exports){
+(function() {
+  var AgentException, DeathInterrupt, HaltInterrupt, NetLogoException, StopInterrupt, TopologyInterrupt, ignoring,
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  NetLogoException = (function() {
+    function NetLogoException(message) {
+      this.message = message;
+    }
+
+    return NetLogoException;
+
+  })();
+
+  AgentException = (function(superClass) {
+    extend(AgentException, superClass);
+
+    function AgentException() {
+      return AgentException.__super__.constructor.apply(this, arguments);
+    }
+
+    return AgentException;
+
+  })(NetLogoException);
+
+  DeathInterrupt = (function(superClass) {
+    extend(DeathInterrupt, superClass);
+
+    function DeathInterrupt() {
+      return DeathInterrupt.__super__.constructor.apply(this, arguments);
+    }
+
+    return DeathInterrupt;
+
+  })(NetLogoException);
+
+  StopInterrupt = (function(superClass) {
+    extend(StopInterrupt, superClass);
+
+    function StopInterrupt() {
+      return StopInterrupt.__super__.constructor.apply(this, arguments);
+    }
+
+    return StopInterrupt;
+
+  })(NetLogoException);
+
+  TopologyInterrupt = (function(superClass) {
+    extend(TopologyInterrupt, superClass);
+
+    function TopologyInterrupt() {
+      return TopologyInterrupt.__super__.constructor.apply(this, arguments);
+    }
+
+    return TopologyInterrupt;
+
+  })(NetLogoException);
+
+  HaltInterrupt = (function(superClass) {
+    extend(HaltInterrupt, superClass);
+
+    function HaltInterrupt() {
+      HaltInterrupt.__super__.constructor.call(this, "model halted by user");
+    }
+
+    return HaltInterrupt;
+
+  })(NetLogoException);
+
+  ignoring = function(exceptionType) {
+    return function(f) {
+      var error, ex;
+      try {
+        return f();
+      } catch (error) {
+        ex = error;
+        if (!(ex instanceof exceptionType)) {
+          throw ex;
+        }
+      }
+    };
+  };
+
+  module.exports = {
+    AgentException: AgentException,
+    DeathInterrupt: DeathInterrupt,
+    HaltInterrupt: HaltInterrupt,
+    ignoring: ignoring,
+    NetLogoException: NetLogoException,
+    StopInterrupt: StopInterrupt,
+    TopologyInterrupt: TopologyInterrupt
+  };
+
+}).call(this);
+
+},{}],"util/iterator":[function(require,module,exports){
+(function() {
+  var Iterator;
+
+  module.exports = Iterator = (function() {
+    Iterator.prototype._items = void 0;
+
+    function Iterator(items) {
+      this._items = items.slice(0);
+    }
+
+    Iterator.prototype.all = function(f) {
+      var i, len, ref, x;
+      ref = this._items;
+      for (i = 0, len = ref.length; i < len; i++) {
+        x = ref[i];
+        if (!f(x)) {
+          return false;
+        }
+      }
+      return true;
+    };
+
+    Iterator.prototype.contains = function(x) {
+      var i, len, ref, y;
+      ref = this._items;
+      for (i = 0, len = ref.length; i < len; i++) {
+        y = ref[i];
+        if (x === y) {
+          return true;
+        }
+      }
+      return false;
+    };
+
+    Iterator.prototype.exists = function(f) {
+      var i, len, ref, x;
+      ref = this._items;
+      for (i = 0, len = ref.length; i < len; i++) {
+        x = ref[i];
+        if (f(x)) {
+          return true;
+        }
+      }
+      return false;
+    };
+
+    Iterator.prototype.filter = function(f) {
+      var i, len, ref, results, x;
+      ref = this._items;
+      results = [];
+      for (i = 0, len = ref.length; i < len; i++) {
+        x = ref[i];
+        if (Iterator.boolOrError(x, f(x))) {
+          results.push(x);
+        }
+      }
+      return results;
+    };
+
+    Iterator.withBoolCheck = function(f) {
+      return function(x) {
+        var y;
+        y = f(x);
+        return Iterator.boolOrError(x, y);
+      };
+    };
+
+    Iterator.boolOrError = function(x, y) {
+      if (y === true || y === false) {
+        return y;
+      } else {
+        throw new Error("WITH expected a true/false value from " + x + ", but got " + y + " instead.");
+      }
+    };
+
+    Iterator.prototype.map = function(f) {
+      return this._items.map(f);
+    };
+
+    Iterator.prototype.forEach = function(f) {
+      this._items.forEach(f);
+    };
+
+    Iterator.prototype.toArray = function() {
+      return this._items;
+    };
+
+    return Iterator;
+
+  })();
+
+}).call(this);
+
+},{}],"util/nlmath":[function(require,module,exports){
+(function() {
+  var Exception, StrictMath,
+    slice = [].slice,
+    modulo = function(a, b) { return (+a % (b = +b) + b) % b; };
+
+  StrictMath = require('../shim/strictmath');
+
+  Exception = require('./exception');
+
+  module.exports = {
+    abs: function(n) {
+      return StrictMath.abs(n);
+    },
+    acos: function(radians) {
+      return this.validateNumber(StrictMath.toDegrees(StrictMath.acos(radians)));
+    },
+    asin: function(radians) {
+      return this.validateNumber(StrictMath.toDegrees(StrictMath.asin(radians)));
+    },
+    atan: function(d1, d2) {
+      if (d1 === 0 && d2 === 0) {
+        throw new Error("Runtime error: atan is undefined when both inputs are zero.");
+      } else if (d1 === 0) {
+        if (d2 > 0) {
+          return 0;
+        } else {
+          return 180;
+        }
+      } else if (d2 === 0) {
+        if (d1 > 0) {
+          return 90;
+        } else {
+          return 270;
+        }
+      } else {
+        return (StrictMath.toDegrees(StrictMath.atan2(d1, d2)) + 360) % 360;
+      }
+    },
+    ceil: function(n) {
+      return StrictMath.ceil(n);
+    },
+    cos: function(degrees) {
+      return StrictMath.cos(StrictMath.toRadians(degrees));
+    },
+    distance2_2D: function(x, y) {
+      return StrictMath.sqrt(x * x + y * y);
+    },
+    distance4_2D: function(x1, y1, x2, y2) {
+      return this.distance2_2D(x1 - x2, y1 - y2);
+    },
+    exp: function(n) {
+      return StrictMath.exp(n);
+    },
+    floor: function(n) {
+      return StrictMath.floor(n);
+    },
+    ln: function(n) {
+      return StrictMath.log(n);
+    },
+    log: function(num, base) {
+      return StrictMath.log(num) / StrictMath.log(base);
+    },
+    max: function() {
+      var xs;
+      xs = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+      return Math.max.apply(Math, xs);
+    },
+    min: function() {
+      var xs;
+      xs = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+      return Math.min.apply(Math, xs);
+    },
+    mod: function(a, b) {
+      return modulo(a, b);
+    },
+    normalizeHeading: function(heading) {
+      if ((0 <= heading && heading < 360)) {
+        return heading;
+      } else {
+        return ((heading % 360) + 360) % 360;
+      }
+    },
+    precision: function(n, places) {
+      var multiplier, result;
+      multiplier = StrictMath.pow(10, places);
+      result = StrictMath.floor(n * multiplier + .5) / multiplier;
+      if (places > 0) {
+        return result;
+      } else {
+        return StrictMath.round(result);
+      }
+    },
+    pow: function(base, exponent) {
+      return StrictMath.pow(base, exponent);
+    },
+    round: function(n) {
+      return StrictMath.round(n);
+    },
+    sin: function(degrees) {
+      return StrictMath.sin(StrictMath.toRadians(degrees));
+    },
+    sqrt: function(n) {
+      return StrictMath.sqrt(n);
+    },
+    squash: function(x) {
+      if (StrictMath.abs(x) < 3.2e-15) {
+        return 0;
+      } else {
+        return x;
+      }
+    },
+    subtractHeadings: function(h1, h2) {
+      var diff;
+      diff = (h1 % 360) - (h2 % 360);
+      if ((-180 < diff && diff <= 180)) {
+        return diff;
+      } else if (diff > 0) {
+        return diff - 360;
+      } else {
+        return diff + 360;
+      }
+    },
+    tan: function(degrees) {
+      return StrictMath.tan(StrictMath.toRadians(degrees));
+    },
+    toInt: function(n) {
+      return n | 0;
+    },
+    validateNumber: function(x) {
+      if (!isFinite(x)) {
+        throw new Error("math operation produced a non-number");
+      } else if (isNaN(x)) {
+        throw new Error("math operation produced a number too large for NetLogo");
+      } else {
+        return x;
+      }
+    }
+  };
+
+}).call(this);
+
+},{"../shim/strictmath":"shim/strictmath","./exception":"util/exception"}],"util/notimplemented":[function(require,module,exports){
+(function() {
+  module.exports = function(name, defaultValue) {
+    if (defaultValue == null) {
+      defaultValue = {};
+    }
+    if ((typeof console !== "undefined" && console !== null) && (console.warn != null)) {
+      console.warn("The `" + name + "` primitive has not yet been implemented.");
+    }
+    return function() {
+      return defaultValue;
+    };
+  };
+
+}).call(this);
+
+},{}],"util/rng":[function(require,module,exports){
+(function() {
+  var AuxRandom, RNG, Random,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  Random = require('../shim/random');
+
+  AuxRandom = require('../shim/auxrandom');
+
+  module.exports = RNG = (function() {
+    RNG.prototype._currentRNG = void 0;
+
+    RNG.prototype._mainRNG = void 0;
+
+    function RNG() {
+      this.nextDouble = bind(this.nextDouble, this);
+      this.nextLong = bind(this.nextLong, this);
+      this.nextInt = bind(this.nextInt, this);
+      this.nextGaussian = bind(this.nextGaussian, this);
+      this._mainRNG = Random;
+      this._currentRNG = this._mainRNG;
+    }
+
+    RNG.prototype.exportState = function() {
+      return this._mainRNG.save();
+    };
+
+    RNG.prototype.importState = function(state) {
+      this._mainRNG.load(state);
+    };
+
+    RNG.prototype.nextGaussian = function() {
+      return this._currentRNG.nextGaussian();
+    };
+
+    RNG.prototype.nextInt = function(limit) {
+      return this._currentRNG.nextInt(limit);
+    };
+
+    RNG.prototype.nextLong = function(limit) {
+      return this._currentRNG.nextLong(limit);
+    };
+
+    RNG.prototype.nextDouble = function() {
+      return this._currentRNG.nextDouble();
+    };
+
+    RNG.prototype.setSeed = function(seed) {
+      this._currentRNG.setSeed(seed);
+    };
+
+    RNG.prototype.withAux = function(f) {
+      return this._withAnother(AuxRandom)(f);
+    };
+
+    RNG.prototype.withClone = function(f) {
+      return this._withAnother(Random.clone())(f);
+    };
+
+    RNG.prototype._withAnother = function(rng) {
+      return (function(_this) {
+        return function(f) {
+          var prevRNG, result;
+          prevRNG = _this._currentRNG;
+          _this._currentRNG = rng;
+          result = (function() {
+            try {
+              return f();
+            } finally {
+              this._currentRNG = prevRNG;
+            }
+          }).call(_this);
+          return result;
+        };
+      })(this);
+    };
+
+    return RNG;
+
+  })();
+
+}).call(this);
+
+},{"../shim/auxrandom":"shim/auxrandom","../shim/random":"shim/random"}],"util/shufflerator":[function(require,module,exports){
+(function() {
+  var Iterator, Shufflerator,
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  Iterator = require('./iterator');
+
+  module.exports = Shufflerator = (function(superClass) {
+    extend(Shufflerator, superClass);
+
+    Shufflerator.prototype._i = void 0;
+
+    Shufflerator.prototype._nextOne = void 0;
+
+    function Shufflerator(items, _itemIsValid, _nextInt) {
+      this._itemIsValid = _itemIsValid;
+      this._nextInt = _nextInt;
+      Shufflerator.__super__.constructor.call(this, items);
+      this._i = 0;
+      this._nextOne = null;
+      this._fetch();
+    }
+
+    Shufflerator.prototype.map = function(f) {
+      var acc;
+      acc = [];
+      this.forEach(function(x) {
+        return acc.push(f(x));
+      });
+      return acc;
+    };
+
+    Shufflerator.prototype.forEach = function(f) {
+      var next;
+      while (this._hasNext()) {
+        next = this._next();
+        if (this._itemIsValid(next)) {
+          f(next);
+        }
+      }
+    };
+
+    Shufflerator.prototype.find = function(f, dflt) {
+      var next;
+      while (this._hasNext()) {
+        next = this._next();
+        if (this._itemIsValid(next) && (f(next) === true)) {
+          return next;
+        }
+      }
+      return dflt;
+    };
+
+    Shufflerator.prototype.toArray = function() {
+      var acc;
+      acc = [];
+      this.forEach(function(x) {
+        return acc.push(x);
+      });
+      return acc;
+    };
+
+    Shufflerator.prototype._hasNext = function() {
+      return this._i <= this._items.length;
+    };
+
+    Shufflerator.prototype._next = function() {
+      var result;
+      result = this._nextOne;
+      this._fetch();
+      return result;
+    };
+
+
+    /*
+      I dislike this.  The fact that the items are prepolled annoys me.  But there are two problems with trying to "fix"
+      that. First, fixing it involves changing JVM NetLogo/Headless.  To me, that requires a disproportionate amount of
+      effort to do, relative to how likely--that is, not very likely--that this code is to be heavily worked on in the
+      future.  The second problem is that it's not apparent to me how to you can make this code substantially cleaner
+      without significantly hurting performance.  The very idea of a structure that statefully iterates a collection in
+      a random order is difficult to put into clear computational terms.  When it needs to be done _efficiently_, that
+      becomes even more of a problem.  As far as I can tell, the only efficient way to do it is like how we're doing it
+      (one variable tracking the current index/offset, and an array where consumed items are thrown into the front).
+      Whatever.  The whole point is that this code isn't really worth worrying myself over, since it's pretty stable.
+      --JAB (7/25/14)
+     */
+
+    Shufflerator.prototype._fetch = function() {
+      var randNum;
+      if (this._hasNext()) {
+        if (this._i < this._items.length - 1) {
+          randNum = this._i + this._nextInt(this._items.length - this._i);
+          this._nextOne = this._items[randNum];
+          this._items[randNum] = this._items[this._i];
+        } else {
+          this._nextOne = this._items[this._i];
+        }
+        this._i++;
+        if (!this._itemIsValid(this._nextOne)) {
+          this._fetch();
+        }
+      } else {
+        this._nextOne = null;
+      }
+    };
+
+    return Shufflerator;
+
+  })(Iterator);
+
+}).call(this);
+
+},{"./iterator":"util/iterator"}],"util/stablesort":[function(require,module,exports){
+(function() {
+  var rangeUntil, zip;
+
+  zip = require('brazierjs/array').zip;
+
+  rangeUntil = require('brazierjs/number').rangeUntil;
+
+  module.exports = function(arr) {
+    return function(f) {
+      var pairs, sortFunc;
+      sortFunc = function(x, y) {
+        var result;
+        result = f(x[1], y[1]);
+        if (result !== 0) {
+          return result;
+        } else if (x[0] < y[0]) {
+          return -1;
+        } else {
+          return 1;
+        }
+      };
+      pairs = zip(rangeUntil(0)(arr.length))(arr);
+      return pairs.sort(sortFunc).map(function(pair) {
+        return pair[1];
+      });
+    };
+  };
+
+}).call(this);
+
+},{"brazierjs/array":"brazier/array","brazierjs/number":"brazier/number"}],"util/timer":[function(require,module,exports){
+(function() {
+  var Timer;
+
+  module.exports = Timer = (function() {
+    Timer.prototype._startTime = void 0;
+
+    function Timer() {
+      this.reset();
+    }
+
+    Timer.prototype.elapsed = function() {
+      return (Date.now() - this._startTime) / 1000;
+    };
+
+    Timer.prototype.reset = function() {
+      this._startTime = Date.now();
+    };
+
+    return Timer;
+
+  })();
+
+}).call(this);
+
+},{}],"util/typechecker":[function(require,module,exports){
+
+/*
+This class should be favored over Lodash when you want quick typechecking that need not be thorough.
+This was made specifically to compensate for the fact that Lodash's typechecking was swapped
+into the sorting code and caused a 25% performance hit in BZ Benchmark. --JAB (4/30/14)
+ */
+
+(function() {
+  var JSType;
+
+  JSType = (function() {
+    function JSType(_x) {
+      this._x = _x;
+    }
+
+    JSType.prototype.isArray = function() {
+      return Array.isArray(this._x);
+    };
+
+    JSType.prototype.isBoolean = function() {
+      return typeof this._x === "boolean";
+    };
+
+    JSType.prototype.isFunction = function() {
+      return typeof this._x === "function";
+    };
+
+    JSType.prototype.isNumber = function() {
+      return typeof this._x === "number";
+    };
+
+    JSType.prototype.isObject = function() {
+      return typeof this._x === "object";
+    };
+
+    JSType.prototype.isString = function() {
+      return typeof this._x === "string";
+    };
+
+    return JSType;
+
+  })();
+
+  module.exports = function(x) {
+    return new JSType(x);
+  };
+
+}).call(this);
+
+},{}]},{},["bootstrap"]);
+</script> 
+  <script>(function() {
+  var closeBracket, commands, commentRule, constantRule, constants, keywords, memberRegEx, notWordCh, openBracket, reporters, variable, wordCh, wordEnd, wordRegEx;
+
+  keywords = ['BREED', 'TO', 'TO-REPORT', 'END', 'GLOBALS', 'TURTLES-OWN', 'LINKS-OWN', 'PATCHES-OWN', 'DIRECTED-LINK-BREED', 'UNDIRECTED-LINK-BREED', 'EXTENSIONS', '__INCLUDES'];
+
+  commands = ['__apply', '__bench', '__change-topology', '__done', '__experimentstepend', '__export-drawing', '__foreverbuttonend', '__ignore', '__let', '__linkcode', '__make-preview', '__mkdir', '__observercode', '__patchcode', '__plot-pen-hide', '__plot-pen-show', '__pwd', '__reload-extensions', '__set-line-thickness', '__stderr', '__stdout', '__thunk-did-finish', '__turtlecode', 'ask', 'ask-concurrent', 'auto-plot-off', 'auto-plot-on', 'back', 'beep', 'bk', 'ca', 'carefully', 'cd', 'clear-all', 'clear-all-plots', 'clear-drawing', 'clear-globals', 'clear-links', 'clear-output', 'clear-patches', 'clear-plot', 'clear-ticks', 'clear-turtles', 'cp', 'create-link-from', 'create-link-to', 'create-link-with', 'create-links-from', 'create-links-to', 'create-links-with', 'create-ordered-turtles', 'create-temporary-plot-pen', 'create-turtles', 'cro', 'crt', 'ct', 'die', 'diffuse', 'diffuse4', 'display', 'downhill', 'downhill4', 'error', 'every', 'export-all-plots', 'export-interface', 'export-output', 'export-plot', 'export-view', 'export-world', 'face', 'facexy', 'fd', 'file-close', 'file-close-all', 'file-delete', 'file-flush', 'file-open', 'file-print', 'file-show', 'file-type', 'file-write', 'follow', 'follow-me', 'foreach', 'forward', 'hatch', 'hide-link', 'hide-turtle', 'histogram', 'home', 'ht', 'if', 'if-else', 'ifelse', 'import-drawing', 'import-pcolors', 'import-pcolors-rgb', 'import-world', 'inspect', 'jump', 'layout-circle', 'layout-radial', 'layout-spring', 'layout-tutte', 'left', 'let', 'loop', 'lt', 'move-to', 'no-display', 'output-print', 'output-show', 'output-type', 'output-write', 'pd', 'pe', 'pen-down', 'pen-erase', 'pen-up', 'pendown', 'penup', 'plot', 'plot-pen-down', 'plot-pen-reset', 'plot-pen-up', 'plotxy', 'print', 'pu', 'random-seed', 'repeat', 'report', 'reset-perspective', 'reset-ticks', 'reset-timer', 'resize-world', 'ride', 'ride-me', 'right', 'rp', 'rt', 'run', 'set', 'set-current-directory', 'set-current-plot', 'set-current-plot-pen', 'set-default-shape', 'set-histogram-num-bars', 'set-patch-size', 'set-plot-pen-color', 'set-plot-pen-interval', 'set-plot-pen-mode', 'set-plot-x-range', 'set-plot-y-range', 'setup-plots', 'setxy', 'show', 'show-link', 'show-turtle', 'sprout', 'st', 'stamp', 'stamp-erase', 'stop', 'tick', 'tick-advance', 'tie', 'type', 'untie', 'update-plots', 'uphill', 'uphill4', 'user-message', 'wait', 'watch', 'watch-me', 'while', 'with-local-randomness', 'without-interruption', 'write'].reverse();
+
+  reporters = ['!=', '\\*', '\\+', '-', '/', '<', '<=', '=', '>', '>=', '\\^', '__apply-result', '__boom', '__check-syntax', '__dump', '__dump-extension-prims', '__dump-extensions', '__dump1', '__hubnet-in-q-size', '__hubnet-out-q-size', '__nano-time', '__patchcol', '__patchrow', '__processors', '__random-state', '__stack-trace', '__to-string', 'abs', 'acos', 'all\\?', 'and', 'any\\?', 'approximate-hsb', 'approximate-rgb', 'asin', 'at-points', 'atan', 'autoplot\\?', 'base-colors', 'behaviorspace-run-number', 'bf', 'bl', 'both-ends', 'but-first', 'but-last', 'butfirst', 'butlast', 'can-move\\?', 'ceiling', 'cos', 'count', 'date-and-time', 'distance', 'distance-nowrap', 'distancexy', 'distancexy-nowrap', 'dx', 'dy', 'empty\\?', 'end1', 'end2', 'error-message', 'exp', 'extract-hsb', 'extract-rgb', 'file-at-end\\?', 'file-exists\\?', 'file-read', 'file-read-characters', 'file-read-line', 'filter', 'first', 'floor', 'fput', 'hsb', 'hubnet-clients-list', 'hubnet-enter-message\\?', 'hubnet-exit-message\\?', 'hubnet-message', 'hubnet-message-source', 'hubnet-message-tag', 'hubnet-message-waiting\\?', 'ifelse-value', 'in-cone', 'in-cone-nowrap', 'in-link-from', 'in-link-neighbor\\?', 'in-link-neighbors', 'in-radius', 'in-radius-nowrap', 'insert-item', 'int', 'is-agent\\?', 'is-agentset\\?', 'is-boolean\\?', 'is-command-task\\?', 'is-directed-link\\?', 'is-link-set\\?', 'is-link\\?', 'is-list\\?', 'is-number\\?', 'is-patch-set\\?', 'is-patch\\?', 'is-reporter-task\\?', 'is-string\\?', 'is-turtle-set\\?', 'is-turtle\\?', 'is-undirected-link\\?', 'item', 'last', 'length', 'link', 'link-heading', 'link-length', 'link-neighbor\\?', 'link-neighbors', 'link-set', 'link-shapes', 'link-with', 'links', 'list', 'ln', 'log', 'lput', 'map', 'max', 'max-n-of', 'max-one-of', 'max-pxcor', 'max-pycor', 'mean', 'median', 'member\\?', 'min', 'min-n-of', 'min-one-of', 'min-pxcor', 'min-pycor', 'mod', 'modes', 'mouse-down\\?', 'mouse-inside\\?', 'mouse-xcor', 'mouse-ycor', 'movie-status', 'my-in-links', 'my-links', 'my-out-links', 'myself', 'n-of', 'n-values', 'neighbors', 'neighbors4', 'netlogo-applet\\?', 'netlogo-version', 'netlogo-web\\?', 'new-seed', 'no-links', 'no-patches', 'no-turtles', 'not', 'of', 'one-of', 'or', 'other', 'other-end', 'out-link-neighbor\\?', 'out-link-neighbors', 'out-link-to', 'patch', 'patch-ahead', 'patch-at', 'patch-at-heading-and-distance', 'patch-here', 'patch-left-and-ahead', 'patch-right-and-ahead', 'patch-set', 'patch-size', 'patches', 'plot-name', 'plot-pen-exists\\?', 'plot-x-max', 'plot-x-min', 'plot-y-max', 'plot-y-min', 'position', 'precision', 'random', 'random-exponential', 'random-float', 'random-gamma', 'random-normal', 'random-or-random-float', 'random-poisson', 'random-pxcor', 'random-pycor', 'random-xcor', 'random-ycor', 'range', 'read-from-string', 'reduce', 'remainder', 'remove', 'remove-duplicates', 'remove-item', 'replace-item', 'reverse', 'rgb', 'round', 'run-result', 'runresult', 'scale-color', 'se', 'self', 'sentence', 'shade-of\\?', 'shapes', 'shuffle', 'sin', 'sort', 'sort-by', 'sort-on', 'sqrt', 'standard-deviation', 'subject', 'sublist', 'substring', 'subtract-headings', 'sum', 'tan', 'task', 'ticks', 'timer', 'towards', 'towards-nowrap', 'towardsxy', 'towardsxy-nowrap', 'turtle', 'turtle-set', 'turtles', 'turtles-at', 'turtles-here', 'turtles-on', 'user-directory', 'user-file', 'user-input', 'user-new-file', 'user-one-of', 'user-yes-or-no\\?', 'value-from', 'values-from', 'variance', 'with', 'with-max', 'with-min', 'word', 'world-height', 'world-width', 'wrap-color', 'xor', 'WHO', 'COLOR', 'HEADING', 'XCOR', 'YCOR', 'SHAPE', 'LABEL', 'LABEL-COLOR', 'BREED', 'HIDDEN\\?', 'SIZE', 'PEN-SIZE', 'PEN-MODE', 'PXCOR', 'PYCOR', 'PCOLOR', 'PLABEL', 'PLABEL-COLOR', 'END1', 'END2', 'COLOR', 'LABEL', 'LABEL-COLOR', 'HIDDEN\\?', 'BREED', 'THICKNESS', 'SHAPE', 'TIE-MODE'].reverse();
+
+  constants = ['TRUE', 'FALSE', 'NOBODY', 'E', 'PI', 'gray', 'grey', 'red', 'orange', 'brown', 'yellow', 'green', 'lime', 'turquoise', 'cyan', 'sky', 'blue', 'violet', 'magenta', 'pink', 'black', 'white'];
+
+  notWordCh = /[\s\[\(\]\)]/.source;
+
+  wordCh = /[^\s\[\(\]\)]/.source;
+
+  wordEnd = "(?=" + notWordCh + "|$)";
+
+  wordRegEx = function(pattern) {
+    return new RegExp("" + pattern + wordEnd, 'i');
+  };
+
+  memberRegEx = function(words) {
+    return wordRegEx("(?:" + (words.join('|')) + ")");
+  };
+
+  commentRule = {
+    token: 'comment',
+    regex: /;.*/
+  };
+
+  constantRule = {
+    token: 'constant',
+    regex: memberRegEx(constants)
+  };
+
+  openBracket = {
+    regex: /[\[\(]/,
+    indent: true
+  };
+
+  closeBracket = {
+    regex: /[\]\)]/,
+    dedent: true
+  };
+
+  variable = {
+    token: 'variable',
+    regex: new RegExp(wordCh + "+")
+  };
+
+  CodeMirror.defineSimpleMode('netlogo', {
+    start: [
+      {
+        token: 'keyword',
+        regex: wordRegEx("to(?:-report)?"),
+        indent: true
+      }, {
+        token: 'keyword',
+        regex: memberRegEx(keywords)
+      }, {
+        token: 'keyword',
+        regex: wordRegEx(wordCh + "*-own")
+      }, {
+        token: 'keyword',
+        regex: wordRegEx("end"),
+        dedent: true
+      }, {
+        token: 'command',
+        regex: memberRegEx(commands)
+      }, {
+        token: 'reporter',
+        regex: memberRegEx(reporters)
+      }, {
+        token: 'string',
+        regex: /"(?:[^\\]|\\.)*?"/
+      }, {
+        token: 'number',
+        regex: /0x[a-f\d]+|[-+]?(?:\.\d+|\d+\.?\d*)(?:e[-+]?\d+)?/i
+      }, constantRule, commentRule, openBracket, closeBracket, variable
+    ],
+    meta: {
+      electricChars: "dD])\n"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=codemirror-mode.js.map
+</script> 
+  <script>(function() {
+  var b, baseIndex, cachedNetlogoColors, color, colorTimesTen, g, i, j, len, netlogoBaseColors, netlogoColorNamesIndices, r, ref, step;
+
+  window.netlogoColorToCSS = function(netlogoColor) {
+    var a, array, b, g, r, ref;
+    ref = array = netlogoColorToRGB(netlogoColor), r = ref[0], g = ref[1], b = ref[2];
+    a = array.length > 3 ? array[3] : 255;
+    if (a < 255) {
+      return "rgba(" + r + ", " + g + ", " + b + ", " + (a / 255) + ")";
+    } else {
+      return "rgb(" + r + ", " + g + ", " + b + ")";
+    }
+  };
+
+  window.netlogoColorToOpaqueCSS = function(netlogoColor) {
+    var array, b, g, r, ref;
+    ref = array = netlogoColorToRGB(netlogoColor), r = ref[0], g = ref[1], b = ref[2];
+    return "rgb(" + r + ", " + g + ", " + b + ")";
+  };
+
+  window.netlogoColorToHexString = function(netlogoColor) {
+    var hexes, rgb;
+    rgb = netlogoColorToRGB(netlogoColor);
+    hexes = rgb.map(function(x) {
+      var hex;
+      hex = x.toString(16);
+      if (hex.length === 1) {
+        return "0" + hex;
+      } else {
+        return hex;
+      }
+    });
+    return "#" + (hexes.join(''));
+  };
+
+  window.hexStringToNetlogoColor = function(hex) {
+    var b, g, hexPair, r, ref, rgbHexes;
+    hexPair = "([0-9a-f]{2})";
+    rgbHexes = hex.toLowerCase().match(new RegExp("#" + hexPair + hexPair + hexPair)).slice(1);
+    ref = rgbHexes.map(function(x) {
+      return parseInt(x, 16);
+    }), r = ref[0], g = ref[1], b = ref[2];
+    return ColorModel.nearestColorNumberOfRGB(r, g, b);
+  };
+
+  window.netlogoColorToRGB = function(netlogoColor) {
+    switch (typeof netlogoColor) {
+      case "number":
+        return cachedNetlogoColors[Math.floor(netlogoColor * 10)];
+      case "object":
+        return netlogoColor.map(Math.round);
+      case "string":
+        return netlogoBaseColors[netlogoColorNamesIndices[netlogoColor]];
+      default:
+        return console.error("Unrecognized color: " + netlogoColor);
+    }
+  };
+
+  netlogoColorNamesIndices = {};
+
+  ref = ['gray', 'red', 'orange', 'brown', 'yellow', 'green', 'lime', 'turqoise', 'cyan', 'sky', 'blue', 'violet', 'magenta', 'pink', 'black', 'white'];
+  for (i = j = 0, len = ref.length; j < len; i = ++j) {
+    color = ref[i];
+    netlogoColorNamesIndices[color] = i;
+  }
+
+  netlogoBaseColors = [[140, 140, 140], [215, 48, 39], [241, 105, 19], [156, 109, 70], [237, 237, 47], [87, 176, 58], [42, 209, 57], [27, 158, 119], [82, 196, 196], [43, 140, 190], [50, 92, 168], [123, 78, 163], [166, 25, 105], [224, 126, 149], [0, 0, 0], [255, 255, 255]];
+
+  cachedNetlogoColors = (function() {
+    var k, ref1, results;
+    results = [];
+    for (colorTimesTen = k = 0; k <= 1400; colorTimesTen = ++k) {
+      baseIndex = Math.floor(colorTimesTen / 100);
+      ref1 = netlogoBaseColors[baseIndex], r = ref1[0], g = ref1[1], b = ref1[2];
+      step = (colorTimesTen % 100 - 50) / 50.48 + 0.012;
+      if (step < 0) {
+        r += Math.floor(r * step);
+        g += Math.floor(g * step);
+        b += Math.floor(b * step);
+      } else {
+        r += Math.floor((0xFF - r) * step);
+        g += Math.floor((0xFF - g) * step);
+        b += Math.floor((0xFF - b) * step);
+      }
+      results.push([r, g, b]);
+    }
+    return results;
+  })();
+
+}).call(this);
+
+//# sourceMappingURL=colors.js.map
+</script> 
+  <script>window.defaultShapes = {
+  "default": {
+    "rotate": true,
+    "elements": [
+      {
+        "xcors": [
+          150,
+          40,
+          150,
+          260
+        ],
+        "ycors": [
+          5,
+          250,
+          205,
+          250
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "airplane": {
+    "rotate": true,
+    "elements": [
+      {
+        "xcors": [
+          150,
+          135,
+          120,
+          120,
+          15,
+          15,
+          120,
+          135,
+          105,
+          120,
+          150,
+          180,
+          210,
+          165,
+          180,
+          285,
+          285,
+          180,
+          180,
+          165
+        ],
+        "ycors": [
+          0,
+          15,
+          60,
+          105,
+          165,
+          195,
+          180,
+          240,
+          270,
+          285,
+          270,
+          285,
+          270,
+          240,
+          180,
+          195,
+          165,
+          105,
+          60,
+          15
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "arrow": {
+    "rotate": true,
+    "elements": [
+      {
+        "xcors": [
+          150,
+          0,
+          105,
+          105,
+          195,
+          195,
+          300
+        ],
+        "ycors": [
+          0,
+          150,
+          150,
+          293,
+          293,
+          150,
+          150
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "box": {
+    "rotate": false,
+    "elements": [
+      {
+        "xcors": [
+          150,
+          285,
+          285,
+          150
+        ],
+        "ycors": [
+          285,
+          225,
+          75,
+          135
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          150,
+          15,
+          150,
+          285
+        ],
+        "ycors": [
+          135,
+          75,
+          15,
+          75
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          15,
+          15,
+          150,
+          150
+        ],
+        "ycors": [
+          75,
+          225,
+          285,
+          135
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x1": 150,
+        "y1": 285,
+        "x2": 150,
+        "y2": 135,
+        "type": "line",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": false,
+        "marked": false
+      },
+      {
+        "x1": 150,
+        "y1": 135,
+        "x2": 15,
+        "y2": 75,
+        "type": "line",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": false,
+        "marked": false
+      },
+      {
+        "x1": 150,
+        "y1": 135,
+        "x2": 285,
+        "y2": 75,
+        "type": "line",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": false,
+        "marked": false
+      }
+    ]
+  },
+  "bug": {
+    "rotate": true,
+    "elements": [
+      {
+        "x": 96,
+        "y": 182,
+        "diam": 108,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 110,
+        "y": 127,
+        "diam": 80,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 110,
+        "y": 75,
+        "diam": 80,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x1": 150,
+        "y1": 100,
+        "x2": 80,
+        "y2": 30,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x1": 150,
+        "y1": 100,
+        "x2": 220,
+        "y2": 30,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      }
+    ]
+  },
+  "butterfly": {
+    "rotate": true,
+    "elements": [
+      {
+        "xcors": [
+          150,
+          209,
+          225,
+          225,
+          195,
+          165,
+          150
+        ],
+        "ycors": [
+          165,
+          199,
+          225,
+          255,
+          270,
+          255,
+          240
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          150,
+          89,
+          75,
+          75,
+          105,
+          135,
+          150
+        ],
+        "ycors": [
+          165,
+          198,
+          225,
+          255,
+          270,
+          255,
+          240
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          139,
+          100,
+          55,
+          25,
+          10,
+          10,
+          25,
+          40,
+          85,
+          139
+        ],
+        "ycors": [
+          148,
+          105,
+          90,
+          90,
+          105,
+          135,
+          180,
+          195,
+          194,
+          163
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          162,
+          200,
+          245,
+          275,
+          290,
+          290,
+          275,
+          260,
+          215,
+          162
+        ],
+        "ycors": [
+          150,
+          105,
+          90,
+          90,
+          105,
+          135,
+          180,
+          195,
+          195,
+          165
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          150,
+          135,
+          120,
+          135,
+          150,
+          165,
+          180,
+          165
+        ],
+        "ycors": [
+          255,
+          225,
+          150,
+          120,
+          105,
+          120,
+          150,
+          225
+        ],
+        "type": "polygon",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 135,
+        "y": 90,
+        "diam": 30,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x1": 150,
+        "y1": 105,
+        "x2": 195,
+        "y2": 60,
+        "type": "line",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": false,
+        "marked": false
+      },
+      {
+        "x1": 150,
+        "y1": 105,
+        "x2": 105,
+        "y2": 60,
+        "type": "line",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": false,
+        "marked": false
+      }
+    ]
+  },
+  "car": {
+    "rotate": false,
+    "elements": [
+      {
+        "xcors": [
+          300,
+          279,
+          261,
+          240,
+          226,
+          213,
+          203,
+          185,
+          159,
+          135,
+          75,
+          0,
+          0,
+          0,
+          300,
+          300
+        ],
+        "ycors": [
+          180,
+          164,
+          144,
+          135,
+          132,
+          106,
+          84,
+          63,
+          50,
+          50,
+          60,
+          150,
+          165,
+          225,
+          225,
+          180
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 180,
+        "y": 180,
+        "diam": 90,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 30,
+        "y": 180,
+        "diam": 90,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          162,
+          132,
+          134,
+          209,
+          194,
+          189,
+          180
+        ],
+        "ycors": [
+          80,
+          78,
+          135,
+          135,
+          105,
+          96,
+          89
+        ],
+        "type": "polygon",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 47,
+        "y": 195,
+        "diam": 58,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 195,
+        "y": 195,
+        "diam": 58,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "circle": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 0,
+        "y": 0,
+        "diam": 300,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "circle 2": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 0,
+        "y": 0,
+        "diam": 300,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 30,
+        "y": 30,
+        "diam": 240,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      }
+    ]
+  },
+  "cloud": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 13,
+        "y": 118,
+        "diam": 94,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 86,
+        "y": 101,
+        "diam": 127,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 51,
+        "y": 51,
+        "diam": 108,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 118,
+        "y": 43,
+        "diam": 95,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 158,
+        "y": 68,
+        "diam": 134,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "co2-molecule": {
+    "rotate": true,
+    "elements": [
+      {
+        "x": 183,
+        "y": 63,
+        "diam": 84,
+        "type": "circle",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 183,
+        "y": 63,
+        "diam": 84,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": false,
+        "marked": false
+      },
+      {
+        "x": 75,
+        "y": 75,
+        "diam": 150,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 75,
+        "y": 75,
+        "diam": 150,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": false,
+        "marked": false
+      },
+      {
+        "x": 33,
+        "y": 63,
+        "diam": 84,
+        "type": "circle",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 33,
+        "y": 63,
+        "diam": 84,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": false,
+        "marked": false
+      }
+    ]
+  },
+  "cow": {
+    "rotate": false,
+    "elements": [
+      {
+        "xcors": [
+          200,
+          197,
+          179,
+          177,
+          166,
+          140,
+          93,
+          78,
+          72,
+          49,
+          48,
+          37,
+          25,
+          25,
+          45,
+          103,
+          179,
+          198,
+          252,
+          272,
+          293,
+          285,
+          255,
+          242,
+          224
+        ],
+        "ycors": [
+          193,
+          249,
+          249,
+          196,
+          187,
+          189,
+          191,
+          179,
+          211,
+          209,
+          181,
+          149,
+          120,
+          89,
+          72,
+          84,
+          75,
+          76,
+          64,
+          81,
+          103,
+          121,
+          121,
+          118,
+          167
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          73,
+          86,
+          62,
+          48
+        ],
+        "ycors": [
+          210,
+          251,
+          249,
+          208
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          25,
+          16,
+          9,
+          23,
+          25,
+          39
+        ],
+        "ycors": [
+          114,
+          195,
+          204,
+          213,
+          200,
+          123
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "cylinder": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 0,
+        "y": 0,
+        "diam": 300,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "dot": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 90,
+        "y": 90,
+        "diam": 120,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "face happy": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 8,
+        "y": 8,
+        "diam": 285,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 60,
+        "y": 75,
+        "diam": 60,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 180,
+        "y": 75,
+        "diam": 60,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          150,
+          90,
+          62,
+          47,
+          67,
+          90,
+          109,
+          150,
+          192,
+          210,
+          227,
+          251,
+          236,
+          212
+        ],
+        "ycors": [
+          255,
+          239,
+          213,
+          191,
+          179,
+          203,
+          218,
+          225,
+          218,
+          203,
+          181,
+          194,
+          217,
+          240
+        ],
+        "type": "polygon",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      }
+    ]
+  },
+  "face neutral": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 8,
+        "y": 7,
+        "diam": 285,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 60,
+        "y": 75,
+        "diam": 60,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 180,
+        "y": 75,
+        "diam": 60,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xmin": 60,
+        "ymin": 195,
+        "xmax": 240,
+        "ymax": 225,
+        "type": "rectangle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      }
+    ]
+  },
+  "face sad": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 8,
+        "y": 8,
+        "diam": 285,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 60,
+        "y": 75,
+        "diam": 60,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 180,
+        "y": 75,
+        "diam": 60,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          150,
+          90,
+          62,
+          47,
+          67,
+          90,
+          109,
+          150,
+          192,
+          210,
+          227,
+          251,
+          236,
+          212
+        ],
+        "ycors": [
+          168,
+          184,
+          210,
+          232,
+          244,
+          220,
+          205,
+          198,
+          205,
+          220,
+          242,
+          229,
+          206,
+          183
+        ],
+        "type": "polygon",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      }
+    ]
+  },
+  "fish": {
+    "rotate": false,
+    "elements": [
+      {
+        "xcors": [
+          44,
+          21,
+          15,
+          0,
+          15,
+          0,
+          13,
+          20,
+          45
+        ],
+        "ycors": [
+          131,
+          87,
+          86,
+          120,
+          150,
+          180,
+          214,
+          212,
+          166
+        ],
+        "type": "polygon",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          135,
+          119,
+          95,
+          76,
+          46,
+          60
+        ],
+        "ycors": [
+          195,
+          235,
+          218,
+          210,
+          204,
+          165
+        ],
+        "type": "polygon",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          75,
+          83,
+          71,
+          86,
+          166,
+          135
+        ],
+        "ycors": [
+          45,
+          77,
+          103,
+          114,
+          78,
+          60
+        ],
+        "type": "polygon",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          30,
+          151,
+          226,
+          280,
+          292,
+          292,
+          287,
+          270,
+          195,
+          151,
+          30
+        ],
+        "ycors": [
+          136,
+          77,
+          81,
+          119,
+          146,
+          160,
+          170,
+          195,
+          210,
+          212,
+          166
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 215,
+        "y": 106,
+        "diam": 30,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      }
+    ]
+  },
+  "flag": {
+    "rotate": false,
+    "elements": [
+      {
+        "xmin": 60,
+        "ymin": 15,
+        "xmax": 75,
+        "ymax": 300,
+        "type": "rectangle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          90,
+          270,
+          90
+        ],
+        "ycors": [
+          150,
+          90,
+          30
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x1": 75,
+        "y1": 135,
+        "x2": 90,
+        "y2": 135,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x1": 75,
+        "y1": 45,
+        "x2": 90,
+        "y2": 45,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      }
+    ]
+  },
+  "flower": {
+    "rotate": false,
+    "elements": [
+      {
+        "xcors": [
+          135,
+          165,
+          180,
+          180,
+          150,
+          165,
+          195,
+          195,
+          165
+        ],
+        "ycors": [
+          120,
+          165,
+          210,
+          240,
+          300,
+          300,
+          240,
+          195,
+          135
+        ],
+        "type": "polygon",
+        "color": "rgba(89, 176, 60, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 85,
+        "y": 132,
+        "diam": 38,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 130,
+        "y": 147,
+        "diam": 38,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 192,
+        "y": 85,
+        "diam": 38,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 85,
+        "y": 40,
+        "diam": 38,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 177,
+        "y": 40,
+        "diam": 38,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 177,
+        "y": 132,
+        "diam": 38,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 70,
+        "y": 85,
+        "diam": 38,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 130,
+        "y": 25,
+        "diam": 38,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 96,
+        "y": 51,
+        "diam": 108,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 113,
+        "y": 68,
+        "diam": 74,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          189,
+          219,
+          249,
+          279,
+          234
+        ],
+        "ycors": [
+          233,
+          188,
+          173,
+          188,
+          218
+        ],
+        "type": "polygon",
+        "color": "rgba(89, 176, 60, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          180,
+          150,
+          105,
+          75,
+          135
+        ],
+        "ycors": [
+          255,
+          210,
+          210,
+          240,
+          240
+        ],
+        "type": "polygon",
+        "color": "rgba(89, 176, 60, 1.0)",
+        "filled": true,
+        "marked": false
+      }
+    ]
+  },
+  "house": {
+    "rotate": false,
+    "elements": [
+      {
+        "xmin": 45,
+        "ymin": 120,
+        "xmax": 255,
+        "ymax": 285,
+        "type": "rectangle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xmin": 120,
+        "ymin": 210,
+        "xmax": 180,
+        "ymax": 285,
+        "type": "rectangle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          15,
+          150,
+          285
+        ],
+        "ycors": [
+          120,
+          15,
+          120
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x1": 30,
+        "y1": 120,
+        "x2": 270,
+        "y2": 120,
+        "type": "line",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": false,
+        "marked": false
+      }
+    ]
+  },
+  "leaf": {
+    "rotate": false,
+    "elements": [
+      {
+        "xcors": [
+          150,
+          135,
+          120,
+          60,
+          30,
+          60,
+          60,
+          15,
+          30,
+          15,
+          40,
+          45,
+          60,
+          90,
+          105,
+          120,
+          105,
+          120,
+          135,
+          150,
+          165,
+          180,
+          195,
+          180,
+          195,
+          210,
+          240,
+          255,
+          263,
+          285,
+          270,
+          285,
+          240,
+          240,
+          270,
+          240,
+          180,
+          165
+        ],
+        "ycors": [
+          210,
+          195,
+          210,
+          210,
+          195,
+          180,
+          165,
+          135,
+          120,
+          105,
+          104,
+          90,
+          90,
+          105,
+          120,
+          120,
+          60,
+          60,
+          30,
+          15,
+          30,
+          60,
+          60,
+          120,
+          120,
+          105,
+          90,
+          90,
+          104,
+          105,
+          120,
+          135,
+          165,
+          180,
+          195,
+          210,
+          210,
+          195
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          135,
+          135,
+          120,
+          105,
+          105,
+          135,
+          165,
+          165
+        ],
+        "ycors": [
+          195,
+          240,
+          255,
+          255,
+          285,
+          285,
+          240,
+          195
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "line": {
+    "rotate": true,
+    "elements": [
+      {
+        "x1": 150,
+        "y1": 0,
+        "x2": 150,
+        "y2": 300,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      }
+    ]
+  },
+  "line half": {
+    "rotate": true,
+    "elements": [
+      {
+        "x1": 150,
+        "y1": 0,
+        "x2": 150,
+        "y2": 150,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      }
+    ]
+  },
+  "molecule water": {
+    "rotate": true,
+    "elements": [
+      {
+        "x": 183,
+        "y": 63,
+        "diam": 84,
+        "type": "circle",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 183,
+        "y": 63,
+        "diam": 84,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": false,
+        "marked": false
+      },
+      {
+        "x": 75,
+        "y": 75,
+        "diam": 150,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 75,
+        "y": 75,
+        "diam": 150,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": false,
+        "marked": false
+      },
+      {
+        "x": 33,
+        "y": 63,
+        "diam": 84,
+        "type": "circle",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 33,
+        "y": 63,
+        "diam": 84,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": false,
+        "marked": false
+      }
+    ]
+  },
+  "pentagon": {
+    "rotate": false,
+    "elements": [
+      {
+        "xcors": [
+          150,
+          15,
+          60,
+          240,
+          285
+        ],
+        "ycors": [
+          15,
+          120,
+          285,
+          285,
+          120
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "person": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 110,
+        "y": 5,
+        "diam": 80,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          105,
+          120,
+          90,
+          105,
+          135,
+          150,
+          165,
+          195,
+          210,
+          180,
+          195
+        ],
+        "ycors": [
+          90,
+          195,
+          285,
+          300,
+          300,
+          225,
+          300,
+          300,
+          285,
+          195,
+          90
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xmin": 127,
+        "ymin": 79,
+        "xmax": 172,
+        "ymax": 94,
+        "type": "rectangle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          195,
+          240,
+          225,
+          165
+        ],
+        "ycors": [
+          90,
+          150,
+          180,
+          105
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          105,
+          60,
+          75,
+          135
+        ],
+        "ycors": [
+          90,
+          150,
+          180,
+          105
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "plant": {
+    "rotate": false,
+    "elements": [
+      {
+        "xmin": 135,
+        "ymin": 90,
+        "xmax": 165,
+        "ymax": 300,
+        "type": "rectangle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          135,
+          90,
+          45,
+          75,
+          135
+        ],
+        "ycors": [
+          255,
+          210,
+          195,
+          255,
+          285
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          165,
+          210,
+          255,
+          225,
+          165
+        ],
+        "ycors": [
+          255,
+          210,
+          195,
+          255,
+          285
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          135,
+          90,
+          45,
+          75,
+          135
+        ],
+        "ycors": [
+          180,
+          135,
+          120,
+          180,
+          210
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          165,
+          165,
+          225,
+          255,
+          210
+        ],
+        "ycors": [
+          180,
+          210,
+          180,
+          120,
+          135
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          135,
+          90,
+          45,
+          75,
+          135
+        ],
+        "ycors": [
+          105,
+          60,
+          45,
+          105,
+          135
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          165,
+          165,
+          225,
+          255,
+          210
+        ],
+        "ycors": [
+          105,
+          135,
+          105,
+          45,
+          60
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          135,
+          120,
+          150,
+          180,
+          165
+        ],
+        "ycors": [
+          90,
+          45,
+          15,
+          45,
+          90
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "ray": {
+    "rotate": true,
+    "elements": [
+      {
+        "x1": 150,
+        "y1": 0,
+        "x2": 150,
+        "y2": 315,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x1": 120,
+        "y1": 255,
+        "x2": 150,
+        "y2": 225,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x1": 150,
+        "y1": 225,
+        "x2": 180,
+        "y2": 255,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x1": 120,
+        "y1": 165,
+        "x2": 150,
+        "y2": 135,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x1": 120,
+        "y1": 75,
+        "x2": 150,
+        "y2": 45,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x1": 150,
+        "y1": 135,
+        "x2": 180,
+        "y2": 165,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x1": 150,
+        "y1": 45,
+        "x2": 180,
+        "y2": 75,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      }
+    ]
+  },
+  "sheep": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 203,
+        "y": 65,
+        "diam": 88,
+        "type": "circle",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 70,
+        "y": 65,
+        "diam": 162,
+        "type": "circle",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 150,
+        "y": 105,
+        "diam": 120,
+        "type": "circle",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          218,
+          240,
+          255,
+          278
+        ],
+        "ycors": [
+          120,
+          165,
+          165,
+          120
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 214,
+        "y": 72,
+        "diam": 67,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xmin": 164,
+        "ymin": 223,
+        "xmax": 179,
+        "ymax": 298,
+        "type": "rectangle",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          45,
+          30,
+          30,
+          15,
+          45
+        ],
+        "ycors": [
+          285,
+          285,
+          240,
+          195,
+          210
+        ],
+        "type": "polygon",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 3,
+        "y": 83,
+        "diam": 150,
+        "type": "circle",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xmin": 65,
+        "ymin": 221,
+        "xmax": 80,
+        "ymax": 296,
+        "type": "rectangle",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          195,
+          210,
+          210,
+          240,
+          195
+        ],
+        "ycors": [
+          285,
+          285,
+          240,
+          210,
+          210
+        ],
+        "type": "polygon",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          276,
+          285,
+          302,
+          294
+        ],
+        "ycors": [
+          85,
+          105,
+          99,
+          83
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          219,
+          210,
+          193,
+          201
+        ],
+        "ycors": [
+          85,
+          105,
+          99,
+          83
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": false
+      }
+    ]
+  },
+  "square": {
+    "rotate": false,
+    "elements": [
+      {
+        "xmin": 30,
+        "ymin": 30,
+        "xmax": 270,
+        "ymax": 270,
+        "type": "rectangle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "square 2": {
+    "rotate": false,
+    "elements": [
+      {
+        "xmin": 30,
+        "ymin": 30,
+        "xmax": 270,
+        "ymax": 270,
+        "type": "rectangle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xmin": 60,
+        "ymin": 60,
+        "xmax": 240,
+        "ymax": 240,
+        "type": "rectangle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      }
+    ]
+  },
+  "star": {
+    "rotate": false,
+    "elements": [
+      {
+        "xcors": [
+          151,
+          185,
+          298,
+          207,
+          242,
+          151,
+          59,
+          94,
+          3,
+          116
+        ],
+        "ycors": [
+          1,
+          108,
+          108,
+          175,
+          282,
+          216,
+          282,
+          175,
+          108,
+          108
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "target": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 0,
+        "y": 0,
+        "diam": 300,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 30,
+        "y": 30,
+        "diam": 240,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 60,
+        "y": 60,
+        "diam": 180,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 90,
+        "y": 90,
+        "diam": 120,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 120,
+        "y": 120,
+        "diam": 60,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "tree": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 118,
+        "y": 3,
+        "diam": 94,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xmin": 120,
+        "ymin": 195,
+        "xmax": 180,
+        "ymax": 300,
+        "type": "rectangle",
+        "color": "rgba(157, 110, 72, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 65,
+        "y": 21,
+        "diam": 108,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 116,
+        "y": 41,
+        "diam": 127,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 45,
+        "y": 90,
+        "diam": 120,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 104,
+        "y": 74,
+        "diam": 152,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "triangle": {
+    "rotate": false,
+    "elements": [
+      {
+        "xcors": [
+          150,
+          15,
+          285
+        ],
+        "ycors": [
+          30,
+          255,
+          255
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "triangle 2": {
+    "rotate": false,
+    "elements": [
+      {
+        "xcors": [
+          150,
+          15,
+          285
+        ],
+        "ycors": [
+          30,
+          255,
+          255
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          151,
+          225,
+          75
+        ],
+        "ycors": [
+          99,
+          223,
+          224
+        ],
+        "type": "polygon",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      }
+    ]
+  },
+  "truck": {
+    "rotate": false,
+    "elements": [
+      {
+        "xmin": 4,
+        "ymin": 45,
+        "xmax": 195,
+        "ymax": 187,
+        "type": "rectangle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          296,
+          296,
+          259,
+          244,
+          208,
+          207
+        ],
+        "ycors": [
+          193,
+          150,
+          134,
+          104,
+          104,
+          194
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xmin": 195,
+        "ymin": 60,
+        "xmax": 195,
+        "ymax": 105,
+        "type": "rectangle",
+        "color": "rgba(255, 255, 255, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          238,
+          252,
+          219,
+          218
+        ],
+        "ycors": [
+          112,
+          141,
+          141,
+          112
+        ],
+        "type": "polygon",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 234,
+        "y": 174,
+        "diam": 42,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xmin": 181,
+        "ymin": 185,
+        "xmax": 214,
+        "ymax": 194,
+        "type": "rectangle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 144,
+        "y": 174,
+        "diam": 42,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 24,
+        "y": 174,
+        "diam": 42,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x": 24,
+        "y": 174,
+        "diam": 42,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x": 144,
+        "y": 174,
+        "diam": 42,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x": 234,
+        "y": 174,
+        "diam": 42,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      }
+    ]
+  },
+  "turtle": {
+    "rotate": true,
+    "elements": [
+      {
+        "xcors": [
+          215,
+          240,
+          246,
+          228,
+          215,
+          193
+        ],
+        "ycors": [
+          204,
+          233,
+          254,
+          266,
+          252,
+          210
+        ],
+        "type": "polygon",
+        "color": "rgba(89, 176, 60, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          195,
+          225,
+          245,
+          260,
+          269,
+          261,
+          240,
+          225,
+          210
+        ],
+        "ycors": [
+          90,
+          75,
+          75,
+          89,
+          108,
+          124,
+          105,
+          105,
+          105
+        ],
+        "type": "polygon",
+        "color": "rgba(89, 176, 60, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          105,
+          75,
+          55,
+          40,
+          31,
+          39,
+          60,
+          75,
+          90
+        ],
+        "ycors": [
+          90,
+          75,
+          75,
+          89,
+          108,
+          124,
+          105,
+          105,
+          105
+        ],
+        "type": "polygon",
+        "color": "rgba(89, 176, 60, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          132,
+          134,
+          107,
+          108,
+          150,
+          192,
+          192,
+          169,
+          172
+        ],
+        "ycors": [
+          85,
+          64,
+          51,
+          17,
+          2,
+          18,
+          52,
+          65,
+          87
+        ],
+        "type": "polygon",
+        "color": "rgba(89, 176, 60, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          85,
+          60,
+          54,
+          72,
+          85,
+          107
+        ],
+        "ycors": [
+          204,
+          233,
+          254,
+          266,
+          252,
+          210
+        ],
+        "type": "polygon",
+        "color": "rgba(89, 176, 60, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          119,
+          179,
+          209,
+          224,
+          220,
+          175,
+          128,
+          81,
+          74,
+          88
+        ],
+        "ycors": [
+          75,
+          75,
+          101,
+          135,
+          225,
+          261,
+          261,
+          224,
+          135,
+          99
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "wheel": {
+    "rotate": false,
+    "elements": [
+      {
+        "x": 3,
+        "y": 3,
+        "diam": 294,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x": 30,
+        "y": 30,
+        "diam": 240,
+        "type": "circle",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "x1": 150,
+        "y1": 285,
+        "x2": 150,
+        "y2": 15,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x1": 15,
+        "y1": 150,
+        "x2": 285,
+        "y2": 150,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x": 120,
+        "y": 120,
+        "diam": 60,
+        "type": "circle",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "x1": 216,
+        "y1": 40,
+        "x2": 79,
+        "y2": 269,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x1": 40,
+        "y1": 84,
+        "x2": 269,
+        "y2": 221,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x1": 40,
+        "y1": 216,
+        "x2": 269,
+        "y2": 79,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      },
+      {
+        "x1": 84,
+        "y1": 40,
+        "x2": 221,
+        "y2": 269,
+        "type": "line",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": false,
+        "marked": true
+      }
+    ]
+  },
+  "wolf": {
+    "rotate": false,
+    "elements": [
+      {
+        "xcors": [
+          253,
+          245,
+          245
+        ],
+        "ycors": [
+          133,
+          131,
+          133
+        ],
+        "type": "polygon",
+        "color": "rgba(0, 0, 0, 1.0)",
+        "filled": true,
+        "marked": false
+      },
+      {
+        "xcors": [
+          2,
+          13,
+          30,
+          38,
+          38,
+          20,
+          20,
+          27,
+          38,
+          40,
+          31,
+          31,
+          60,
+          68,
+          75,
+          66,
+          65,
+          82,
+          84,
+          100,
+          103,
+          77,
+          79,
+          100,
+          98,
+          119,
+          143,
+          160,
+          166,
+          172,
+          173,
+          167,
+          160,
+          154,
+          169,
+          178,
+          186,
+          198,
+          200,
+          217,
+          219,
+          207,
+          195,
+          192,
+          210,
+          227,
+          242,
+          259,
+          284,
+          277,
+          293,
+          299,
+          297,
+          273,
+          270
+        ],
+        "ycors": [
+          194,
+          197,
+          191,
+          193,
+          205,
+          226,
+          257,
+          265,
+          266,
+          260,
+          253,
+          230,
+          206,
+          198,
+          209,
+          228,
+          243,
+          261,
+          268,
+          267,
+          261,
+          239,
+          231,
+          207,
+          196,
+          201,
+          202,
+          195,
+          210,
+          213,
+          238,
+          251,
+          248,
+          265,
+          264,
+          247,
+          240,
+          260,
+          271,
+          271,
+          262,
+          258,
+          230,
+          198,
+          184,
+          164,
+          144,
+          145,
+          151,
+          141,
+          140,
+          134,
+          127,
+          119,
+          105
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          -1,
+          14,
+          36,
+          40,
+          53,
+          82,
+          134,
+          159,
+          188,
+          227,
+          236,
+          238,
+          268,
+          269,
+          281,
+          269,
+          269
+        ],
+        "ycors": [
+          195,
+          180,
+          166,
+          153,
+          140,
+          131,
+          133,
+          126,
+          115,
+          108,
+          102,
+          98,
+          86,
+          92,
+          87,
+          103,
+          113
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  },
+  "x": {
+    "rotate": false,
+    "elements": [
+      {
+        "xcors": [
+          270,
+          225,
+          30,
+          75
+        ],
+        "ycors": [
+          75,
+          30,
+          225,
+          270
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      },
+      {
+        "xcors": [
+          30,
+          75,
+          270,
+          225
+        ],
+        "ycors": [
+          75,
+          30,
+          225,
+          270
+        ],
+        "type": "polygon",
+        "color": "rgba(141, 141, 141, 1.0)",
+        "filled": true,
+        "marked": true
+      }
+    ]
+  }
+}
+</script> 
+  <script>(function() {
+  window.NLWAlerter = (function() {
+    function NLWAlerter(_alertWindow, _isStandalone) {
+      this._alertWindow = _alertWindow;
+      this._isStandalone = _isStandalone;
+      this.alertContainer = this._alertWindow.querySelector("#alert-dialog");
+    }
+
+    NLWAlerter.prototype.display = function(title, dismissable, content) {
+      this._alertWindow.querySelector("#alert-title").innerHTML = title;
+      this._alertWindow.querySelector("#alert-message").innerHTML = content;
+      if (this._isStandalone) {
+        this._alertWindow.querySelector(".standalone-text").style.display = '';
+      }
+      if (!dismissable) {
+        this._alertWindow.querySelector("#alert-dismiss-container").style.display = 'none';
+      } else {
+        this._alertWindow.querySelector("#alert-dismiss-container").style.display = '';
+      }
+      this._alertWindow.style.display = '';
+    };
+
+    NLWAlerter.prototype.displayError = function(content, dismissable, title) {
+      if (dismissable == null) {
+        dismissable = true;
+      }
+      if (title == null) {
+        title = "Error";
+      }
+      this.display(title, dismissable, content);
+    };
+
+    NLWAlerter.prototype.hide = function() {
+      this._alertWindow.style.display = 'none';
+    };
+
+    return NLWAlerter;
+
+  })();
+
+  window.showErrors = function(errors) {
+    if (errors.length > 0) {
+      if (window.nlwAlerter != null) {
+        window.nlwAlerter.displayError(errors.join('<br/>'));
+      } else {
+        alert(errors.join('\n'));
+      }
+    }
+  };
+
+  window.handlingErrors = function(f) {
+    return function() {
+      var ex, message;
+      try {
+        return f();
+      } catch (error) {
+        ex = error;
+        if (!(ex instanceof Exception.HaltInterrupt)) {
+          message = !(ex instanceof TypeError) ? ex.message : "A type error has occurred in the simulation engine.\nMore information about these sorts of errors can be found\n<a href=\"https://netlogoweb.org/info#type-errors\">here</a>.<br><br>\nAdvanced users might find the generated error helpful, which is as follows:<br><br>\n<b>" + ex.message + "</b><br><br>";
+          window.showErrors([message]);
+          throw new Exception.HaltInterrupt;
+        } else {
+          throw ex;
+        }
+      }
+    };
+  };
+
+}).call(this);
+
+//# sourceMappingURL=global-noisy-things.js.map
+</script> 
+  <script>(function() {
+  var PenBundle, PlotOps,
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  PenBundle = tortoise_require('engine/plot/pen');
+
+  PlotOps = tortoise_require('engine/plot/plotops');
+
+  window.HighchartsOps = (function(superClass) {
+    extend(HighchartsOps, superClass);
+
+    HighchartsOps.prototype._chart = void 0;
+
+    HighchartsOps.prototype._penNameToSeriesNum = void 0;
+
+    function HighchartsOps(elemID) {
+      var addPoint, registerPen, reset, resetPen, resize, updatePenColor, updatePenMode;
+      resize = function(xMin, xMax, yMin, yMax) {
+        this._chart.xAxis[0].setExtremes(xMin, xMax);
+        this._chart.yAxis[0].setExtremes(yMin, yMax);
+      };
+      reset = function(plot) {
+        this._chart.destroy();
+        this._chart = new Highcharts.Chart({
+          chart: {
+            animation: false,
+            renderTo: elemID,
+            spacingBottom: 10,
+            spacingLeft: 15,
+            spacingRight: 15,
+            zoomType: "xy"
+          },
+          credits: {
+            enabled: false
+          },
+          legend: {
+            enabled: plot.isLegendEnabled,
+            margin: 5,
+            itemStyle: {
+              fontSize: "10px"
+            }
+          },
+          series: [],
+          title: {
+            text: plot.name,
+            style: {
+              fontSize: "12px"
+            }
+          },
+          exporting: {
+            buttons: {
+              contextButton: {
+                height: 10,
+                symbolSize: 10,
+                symbolStrokeWidth: 1,
+                symbolY: 5
+              }
+            }
+          },
+          tooltip: {
+            formatter: function() {
+              var x, y;
+              x = Number(Highcharts.numberFormat(this.point.x, 2, '.', ''));
+              y = Number(Highcharts.numberFormat(this.point.y, 2, '.', ''));
+              return "<span style='color:" + this.series.color + "'>" + this.series.name + "</span>: <b>" + x + ", " + y + "</b><br/>";
+            }
+          },
+          xAxis: {
+            title: {
+              text: plot.xLabel,
+              style: {
+                fontSize: '10px'
+              }
+            },
+            labels: {
+              style: {
+                fontSize: '9px'
+              }
+            }
+          },
+          yAxis: {
+            title: {
+              text: plot.yLabel,
+              x: -7,
+              style: {
+                fontSize: '10px'
+              }
+            },
+            labels: {
+              padding: 0,
+              x: -15,
+              style: {
+                fontSize: '9px'
+              }
+            }
+          },
+          plotOptions: {
+            series: {
+              turboThreshold: 1
+            },
+            column: {
+              pointPadding: 0,
+              pointWidth: 8,
+              borderWidth: 1,
+              groupPadding: 0,
+              shadow: false,
+              grouping: false
+            }
+          }
+        });
+        this._penNameToSeriesNum = {};
+      };
+      registerPen = function(pen) {
+        var isScatter, mode, num;
+        num = this._chart.series.length;
+        mode = this.modeToString(pen.getDisplayMode());
+        isScatter = mode === 'scatter';
+        this._chart.addSeries({
+          color: this.colorToRGBString(pen.getColor()),
+          data: [],
+          dataLabels: {
+            enabled: false
+          },
+          marker: {
+            enabled: isScatter,
+            radius: isScatter ? 1 : 4
+          },
+          name: pen.name,
+          type: mode
+        });
+        this._penNameToSeriesNum[pen.name] = num;
+      };
+      resetPen = (function(_this) {
+        return function(pen) {
+          return function() {
+            var ref;
+            if ((ref = _this.penToSeries(pen)) != null) {
+              ref.setData([]);
+            }
+          };
+        };
+      })(this);
+      addPoint = (function(_this) {
+        return function(pen) {
+          return function(x, y) {
+            _this.penToSeries(pen).addPoint([x, y], false);
+          };
+        };
+      })(this);
+      updatePenMode = (function(_this) {
+        return function(pen) {
+          return function(mode) {
+            var ref, type;
+            type = _this.modeToString(mode);
+            if ((ref = _this.penToSeries(pen)) != null) {
+              ref.update({
+                type: type
+              });
+            }
+          };
+        };
+      })(this);
+      updatePenColor = (function(_this) {
+        return function(pen) {
+          return function(color) {
+            var hcColor, series;
+            hcColor = _this.colorToRGBString(color);
+            series = _this.penToSeries(pen);
+            series.options.color = hcColor;
+            series.update(series.options);
+          };
+        };
+      })(this);
+      HighchartsOps.__super__.constructor.call(this, resize, reset, registerPen, resetPen, addPoint, updatePenMode, updatePenColor);
+      this._chart = Highcharts.chart(elemID, {});
+      this._penNameToSeriesNum = {};
+      if (this._chart.options.exporting.buttons.contextButton.menuItems.popped == null) {
+        this._chart.options.exporting.buttons.contextButton.menuItems.pop();
+        this._chart.options.exporting.buttons.contextButton.menuItems.pop();
+        this._chart.options.exporting.buttons.contextButton.menuItems.popped = true;
+      }
+    }
+
+    HighchartsOps.prototype.modeToString = function(mode) {
+      var Bar, Line, Point, ref;
+      ref = PenBundle.DisplayMode, Bar = ref.Bar, Line = ref.Line, Point = ref.Point;
+      switch (mode) {
+        case Bar:
+          return 'column';
+        case Line:
+          return 'line';
+        case Point:
+          return 'scatter';
+        default:
+          return 'line';
+      }
+    };
+
+    HighchartsOps.prototype.penToSeries = function(pen) {
+      return this._chart.series[this._penNameToSeriesNum[pen.name]];
+    };
+
+    HighchartsOps.prototype.redraw = function() {
+      return this._chart.redraw();
+    };
+
+    HighchartsOps.prototype.resizeElem = function(x, y) {
+      return this._chart.setSize(x, y, false);
+    };
+
+    return HighchartsOps;
+
+  })(PlotOps);
+
+}).call(this);
+
+//# sourceMappingURL=highcharts.js.map
+</script> 
+  <script>(function() {
+  exports.bindModelChooser = function(container, onComplete, selectionChanged, currentMode) {
+    var PUBLIC_PATH_SEGMENT_LENGTH, adjustModelPath, createModelSelection, modelDisplayName, populateModelChoices, setModelCompilationStatus;
+    PUBLIC_PATH_SEGMENT_LENGTH = "public/".length;
+    adjustModelPath = function(modelName) {
+      return modelName.substring(PUBLIC_PATH_SEGMENT_LENGTH, modelName.length);
+    };
+    modelDisplayName = function(modelName) {
+      var stripPrefix;
+      stripPrefix = function(prefix, str) {
+        var startsWith;
+        startsWith = function(p, s) {
+          return s.substring(0, p.length) === p;
+        };
+        if (startsWith(prefix, str)) {
+          return str.substring(prefix.length);
+        } else {
+          return str;
+        }
+      };
+      return stripPrefix("modelslib/", adjustModelPath(modelName));
+    };
+    setModelCompilationStatus = function(modelName, status) {
+      if (status === "not_compiling" && currentMode !== "dev") {
+        return $("option[value=\"" + (adjustModelPath(modelName)) + "\"]").attr("disabled", true);
+      } else {
+        return $("option[value=\"" + (adjustModelPath(modelName)) + "\"]").addClass(currentMode).addClass(status);
+      }
+    };
+    populateModelChoices = function(select, modelNames) {
+      var i, len, modelName, option, results;
+      select.append($('<option>').text('Select a model'));
+      results = [];
+      for (i = 0, len = modelNames.length; i < len; i++) {
+        modelName = modelNames[i];
+        option = $('<option>').attr('value', adjustModelPath(modelName)).text(modelDisplayName(modelName));
+        results.push(select.append(option));
+      }
+      return results;
+    };
+    createModelSelection = function(container, modelNames) {
+      var select;
+      select = $('<select>').attr('name', 'models').css('width', '100%').addClass('chzn-select');
+      select.on('change', function(e) {
+        var modelURL;
+        if (modelSelect.get(0).selectedIndex > 0) {
+          modelURL = (modelSelect.get(0).value) + ".nlogo";
+          return selectionChanged(modelURL);
+        }
+      });
+      populateModelChoices(select, modelNames);
+      select.appendTo(container);
+      select.chosen({
+        search_contains: true
+      });
+      return select;
+    };
+    return $.ajax('/model/list.json', {
+      complete: function(req, status) {
+        var allModelNames;
+        allModelNames = JSON.parse(req.responseText);
+        window.modelSelect = createModelSelection(container, allModelNames);
+        if (container.classList.contains('tortoise-model-list')) {
+          $.ajax('/model/statuses.json', {
+            complete: function(req, status) {
+              var allModelStatuses, i, len, modelName, modelStatus, ref, ref1;
+              allModelStatuses = JSON.parse(req.responseText);
+              for (i = 0, len = allModelNames.length; i < len; i++) {
+                modelName = allModelNames[i];
+                modelStatus = (ref = (ref1 = allModelStatuses[modelName]) != null ? ref1.status : void 0) != null ? ref : 'unknown';
+                setModelCompilationStatus(modelName, modelStatus);
+              }
+              return window.modelSelect.trigger('chosen:updated');
+            }
+          });
+        }
+        return onComplete();
+      }
+    });
+  };
+
+  exports.selectModel = function(model) {
+    modelSelect.val(model);
+    return modelSelect.trigger("chosen:updated");
+  };
+
+  exports.selectModelByURL = function(modelURL) {
+    var choiceElem, choiceElems, choicesArray, extractNMatches, modelName, modelPath, prefix, ref, regexStr, truePath, truePrefix, urlIsInternal;
+    extractNMatches = function(regex) {
+      return function(n) {
+        return function(str) {
+          var i, result, results;
+          result = (new RegExp(regex)).exec(str);
+          return (function() {
+            results = [];
+            for (var i = 1; 1 <= n ? i <= n : i >= n; 1 <= n ? i++ : i--){ results.push(i); }
+            return results;
+          }).apply(this).map(function(matchNumber) {
+            return result[matchNumber];
+          });
+        };
+      };
+    };
+    urlIsInternal = function(url) {
+      var extractDomain;
+      extractDomain = function(str) {
+        return extractNMatches(".*?//?([^/]+)|()")(1)(str)[0];
+      };
+      return extractDomain(window.location.href) === extractDomain(url);
+    };
+    if (urlIsInternal(modelURL)) {
+      regexStr = ".*/(modelslib/|test/|demomodels/)(.+).nlogo";
+      ref = extractNMatches(regexStr)(2)(modelURL), prefix = ref[0], modelName = ref[1];
+      truePrefix = prefix === "modelslib/" ? "" : prefix;
+      modelPath = ("" + prefix + modelName).replace(/%20/g, " ");
+      truePath = ("" + truePrefix + modelName).replace(/%20/g, " ");
+      choiceElems = document.getElementsByName('models')[0].children;
+      choicesArray = [].slice.call(choiceElems);
+      choiceElem = choicesArray.reduce((function(acc, x) {
+        if (x.innerHTML === truePath) {
+          return x;
+        } else {
+          return acc;
+        }
+      }), null);
+      if (choiceElem != null) {
+        exports.selectModel(modelPath);
+      }
+    }
+  };
+
+  exports.handPickedModels = ["Curricular Models/BEAGLE Evolution/DNA Replication Fork", "Curricular Models/Connected Chemistry/Connected Chemistry Gas Combustion", "IABM Textbook/chapter 2/Simple Economy", "IABM Textbook/chapter 8/Sandpile Simple", "Sample Models/Art/Fireworks", "Sample Models/Art/Follower", "Sample Models/Biology/Ants", "Sample Models/Biology/BeeSmart Hive Finding", "Sample Models/Biology/Daisyworld", "Sample Models/Biology/Evolution/Cooperation", "Sample Models/Biology/Flocking", "Sample Models/Biology/Slime", "Sample Models/Biology/Virus", "Sample Models/Biology/Wolf Sheep Predation", "Sample Models/Chemistry & Physics/Diffusion Limited Aggregation/DLA", "Sample Models/Chemistry & Physics/GasLab/GasLab Gas in a Box", "Sample Models/Chemistry & Physics/Heat/Boiling", "Sample Models/Chemistry & Physics/Ising", "Sample Models/Chemistry & Physics/Waves/Wave Machine", "Sample Models/Computer Science/Cellular Automata/CA 1D Elementary", "Sample Models/Earth Science/Climate Change", "Sample Models/Earth Science/Erosion", "Sample Models/Earth Science/Fire", "Sample Models/Mathematics/3D Solids", "Sample Models/Mathematics/Mousetraps", "Sample Models/Networks/Preferential Attachment", "Sample Models/Networks/Team Assembly", "Sample Models/Networks/Virus on a Network", "Sample Models/Social Science/Segregation", "Sample Models/Social Science/Traffic Basic", "Sample Models/Social Science/Voting"].map(function(p) {
+    return "modelslib/" + p;
+  });
+
+}).call(this);
+
+//# sourceMappingURL=models.js.map
+</script> 
+  <script>(function() {
+  var ref;
+
+  window.exports = (ref = window.exports) != null ? ref : {};
+
+  window.exports.newModel = "@#$#@#$#@\nGRAPHICS-WINDOW\n210\n10\n647\n448\n-1\n-1\n13.0\n1\n10\n1\n1\n1\n0\n1\n1\n1\n-16\n16\n-16\n16\n0\n0\n1\nticks\n30.0\n\n@#$#@#$#@\n## WHAT IS IT?\n\n(a general understanding of what the model is trying to show or explain)\n\n## HOW IT WORKS\n\n(what rules the agents use to create the overall behavior of the model)\n\n## HOW TO USE IT\n\n(how to use the model, including a description of each of the items in the Interface tab)\n\n## THINGS TO NOTICE\n\n(suggested things for the user to notice while running the model)\n\n## THINGS TO TRY\n\n(suggested things for the user to try to do (move sliders, switches, etc.) with the model)\n\n## EXTENDING THE MODEL\n\n(suggested things to add or change in the Code tab to make the model more complicated, detailed, accurate, etc.)\n\n## NETLOGO FEATURES\n\n(interesting or unusual features of NetLogo that the model uses, particularly in the Code tab; or where workarounds were needed for missing features)\n\n## RELATED MODELS\n\n(models in the NetLogo Models Library and elsewhere which are of related interest)\n\n## CREDITS AND REFERENCES\n\n(a reference to the model's URL on the web if it has one, as well as any other necessary credits, citations, and links)\n@#$#@#$#@\ndefault\ntrue\n0\nPolygon -7500403 true true 150 5 40 250 150 205 260 250\n\nairplane\ntrue\n0\nPolygon -7500403 true true 150 0 135 15 120 60 120 105 15 165 15 195 120 180 135 240 105 270 120 285 150 270 180 285 210 270 165 240 180 180 285 195 285 165 180 105 180 60 165 15\n\narrow\ntrue\n0\nPolygon -7500403 true true 150 0 0 150 105 150 105 293 195 293 195 150 300 150\n\nbox\nfalse\n0\nPolygon -7500403 true true 150 285 285 225 285 75 150 135\nPolygon -7500403 true true 150 135 15 75 150 15 285 75\nPolygon -7500403 true true 15 75 15 225 150 285 150 135\nLine -16777216 false 150 285 150 135\nLine -16777216 false 150 135 15 75\nLine -16777216 false 150 135 285 75\n\nbug\ntrue\n0\nCircle -7500403 true true 96 182 108\nCircle -7500403 true true 110 127 80\nCircle -7500403 true true 110 75 80\nLine -7500403 true 150 100 80 30\nLine -7500403 true 150 100 220 30\n\nbutterfly\ntrue\n0\nPolygon -7500403 true true 150 165 209 199 225 225 225 255 195 270 165 255 150 240\nPolygon -7500403 true true 150 165 89 198 75 225 75 255 105 270 135 255 150 240\nPolygon -7500403 true true 139 148 100 105 55 90 25 90 10 105 10 135 25 180 40 195 85 194 139 163\nPolygon -7500403 true true 162 150 200 105 245 90 275 90 290 105 290 135 275 180 260 195 215 195 162 165\nPolygon -16777216 true false 150 255 135 225 120 150 135 120 150 105 165 120 180 150 165 225\nCircle -16777216 true false 135 90 30\nLine -16777216 false 150 105 195 60\nLine -16777216 false 150 105 105 60\n\ncar\nfalse\n0\nPolygon -7500403 true true 300 180 279 164 261 144 240 135 226 132 213 106 203 84 185 63 159 50 135 50 75 60 0 150 0 165 0 225 300 225 300 180\nCircle -16777216 true false 180 180 90\nCircle -16777216 true false 30 180 90\nPolygon -16777216 true false 162 80 132 78 134 135 209 135 194 105 189 96 180 89\nCircle -7500403 true true 47 195 58\nCircle -7500403 true true 195 195 58\n\ncircle\nfalse\n0\nCircle -7500403 true true 0 0 300\n\ncircle 2\nfalse\n0\nCircle -7500403 true true 0 0 300\nCircle -16777216 true false 30 30 240\n\ncow\nfalse\n0\nPolygon -7500403 true true 200 193 197 249 179 249 177 196 166 187 140 189 93 191 78 179 72 211 49 209 48 181 37 149 25 120 25 89 45 72 103 84 179 75 198 76 252 64 272 81 293 103 285 121 255 121 242 118 224 167\nPolygon -7500403 true true 73 210 86 251 62 249 48 208\nPolygon -7500403 true true 25 114 16 195 9 204 23 213 25 200 39 123\n\ncylinder\nfalse\n0\nCircle -7500403 true true 0 0 300\n\ndot\nfalse\n0\nCircle -7500403 true true 90 90 120\n\nface happy\nfalse\n0\nCircle -7500403 true true 8 8 285\nCircle -16777216 true false 60 75 60\nCircle -16777216 true false 180 75 60\nPolygon -16777216 true false 150 255 90 239 62 213 47 191 67 179 90 203 109 218 150 225 192 218 210 203 227 181 251 194 236 217 212 240\n\nface neutral\nfalse\n0\nCircle -7500403 true true 8 7 285\nCircle -16777216 true false 60 75 60\nCircle -16777216 true false 180 75 60\nRectangle -16777216 true false 60 195 240 225\n\nface sad\nfalse\n0\nCircle -7500403 true true 8 8 285\nCircle -16777216 true false 60 75 60\nCircle -16777216 true false 180 75 60\nPolygon -16777216 true false 150 168 90 184 62 210 47 232 67 244 90 220 109 205 150 198 192 205 210 220 227 242 251 229 236 206 212 183\n\nfish\nfalse\n0\nPolygon -1 true false 44 131 21 87 15 86 0 120 15 150 0 180 13 214 20 212 45 166\nPolygon -1 true false 135 195 119 235 95 218 76 210 46 204 60 165\nPolygon -1 true false 75 45 83 77 71 103 86 114 166 78 135 60\nPolygon -7500403 true true 30 136 151 77 226 81 280 119 292 146 292 160 287 170 270 195 195 210 151 212 30 166\nCircle -16777216 true false 215 106 30\n\nflag\nfalse\n0\nRectangle -7500403 true true 60 15 75 300\nPolygon -7500403 true true 90 150 270 90 90 30\nLine -7500403 true 75 135 90 135\nLine -7500403 true 75 45 90 45\n\nflower\nfalse\n0\nPolygon -10899396 true false 135 120 165 165 180 210 180 240 150 300 165 300 195 240 195 195 165 135\nCircle -7500403 true true 85 132 38\nCircle -7500403 true true 130 147 38\nCircle -7500403 true true 192 85 38\nCircle -7500403 true true 85 40 38\nCircle -7500403 true true 177 40 38\nCircle -7500403 true true 177 132 38\nCircle -7500403 true true 70 85 38\nCircle -7500403 true true 130 25 38\nCircle -7500403 true true 96 51 108\nCircle -16777216 true false 113 68 74\nPolygon -10899396 true false 189 233 219 188 249 173 279 188 234 218\nPolygon -10899396 true false 180 255 150 210 105 210 75 240 135 240\n\nhouse\nfalse\n0\nRectangle -7500403 true true 45 120 255 285\nRectangle -16777216 true false 120 210 180 285\nPolygon -7500403 true true 15 120 150 15 285 120\nLine -16777216 false 30 120 270 120\n\nleaf\nfalse\n0\nPolygon -7500403 true true 150 210 135 195 120 210 60 210 30 195 60 180 60 165 15 135 30 120 15 105 40 104 45 90 60 90 90 105 105 120 120 120 105 60 120 60 135 30 150 15 165 30 180 60 195 60 180 120 195 120 210 105 240 90 255 90 263 104 285 105 270 120 285 135 240 165 240 180 270 195 240 210 180 210 165 195\nPolygon -7500403 true true 135 195 135 240 120 255 105 255 105 285 135 285 165 240 165 195\n\nline\ntrue\n0\nLine -7500403 true 150 0 150 300\n\nline half\ntrue\n0\nLine -7500403 true 150 0 150 150\n\npentagon\nfalse\n0\nPolygon -7500403 true true 150 15 15 120 60 285 240 285 285 120\n\nperson\nfalse\n0\nCircle -7500403 true true 110 5 80\nPolygon -7500403 true true 105 90 120 195 90 285 105 300 135 300 150 225 165 300 195 300 210 285 180 195 195 90\nRectangle -7500403 true true 127 79 172 94\nPolygon -7500403 true true 195 90 240 150 225 180 165 105\nPolygon -7500403 true true 105 90 60 150 75 180 135 105\n\nplant\nfalse\n0\nRectangle -7500403 true true 135 90 165 300\nPolygon -7500403 true true 135 255 90 210 45 195 75 255 135 285\nPolygon -7500403 true true 165 255 210 210 255 195 225 255 165 285\nPolygon -7500403 true true 135 180 90 135 45 120 75 180 135 210\nPolygon -7500403 true true 165 180 165 210 225 180 255 120 210 135\nPolygon -7500403 true true 135 105 90 60 45 45 75 105 135 135\nPolygon -7500403 true true 165 105 165 135 225 105 255 45 210 60\nPolygon -7500403 true true 135 90 120 45 150 15 180 45 165 90\n\nsheep\nfalse\n15\nCircle -1 true true 203 65 88\nCircle -1 true true 70 65 162\nCircle -1 true true 150 105 120\nPolygon -7500403 true false 218 120 240 165 255 165 278 120\nCircle -7500403 true false 214 72 67\nRectangle -1 true true 164 223 179 298\nPolygon -1 true true 45 285 30 285 30 240 15 195 45 210\nCircle -1 true true 3 83 150\nRectangle -1 true true 65 221 80 296\nPolygon -1 true true 195 285 210 285 210 240 240 210 195 210\nPolygon -7500403 true false 276 85 285 105 302 99 294 83\nPolygon -7500403 true false 219 85 210 105 193 99 201 83\n\nsquare\nfalse\n0\nRectangle -7500403 true true 30 30 270 270\n\nsquare 2\nfalse\n0\nRectangle -7500403 true true 30 30 270 270\nRectangle -16777216 true false 60 60 240 240\n\nstar\nfalse\n0\nPolygon -7500403 true true 151 1 185 108 298 108 207 175 242 282 151 216 59 282 94 175 3 108 116 108\n\ntarget\nfalse\n0\nCircle -7500403 true true 0 0 300\nCircle -16777216 true false 30 30 240\nCircle -7500403 true true 60 60 180\nCircle -16777216 true false 90 90 120\nCircle -7500403 true true 120 120 60\n\ntree\nfalse\n0\nCircle -7500403 true true 118 3 94\nRectangle -6459832 true false 120 195 180 300\nCircle -7500403 true true 65 21 108\nCircle -7500403 true true 116 41 127\nCircle -7500403 true true 45 90 120\nCircle -7500403 true true 104 74 152\n\ntriangle\nfalse\n0\nPolygon -7500403 true true 150 30 15 255 285 255\n\ntriangle 2\nfalse\n0\nPolygon -7500403 true true 150 30 15 255 285 255\nPolygon -16777216 true false 151 99 225 223 75 224\n\ntruck\nfalse\n0\nRectangle -7500403 true true 4 45 195 187\nPolygon -7500403 true true 296 193 296 150 259 134 244 104 208 104 207 194\nRectangle -1 true false 195 60 195 105\nPolygon -16777216 true false 238 112 252 141 219 141 218 112\nCircle -16777216 true false 234 174 42\nRectangle -7500403 true true 181 185 214 194\nCircle -16777216 true false 144 174 42\nCircle -16777216 true false 24 174 42\nCircle -7500403 false true 24 174 42\nCircle -7500403 false true 144 174 42\nCircle -7500403 false true 234 174 42\n\nturtle\ntrue\n0\nPolygon -10899396 true false 215 204 240 233 246 254 228 266 215 252 193 210\nPolygon -10899396 true false 195 90 225 75 245 75 260 89 269 108 261 124 240 105 225 105 210 105\nPolygon -10899396 true false 105 90 75 75 55 75 40 89 31 108 39 124 60 105 75 105 90 105\nPolygon -10899396 true false 132 85 134 64 107 51 108 17 150 2 192 18 192 52 169 65 172 87\nPolygon -10899396 true false 85 204 60 233 54 254 72 266 85 252 107 210\nPolygon -7500403 true true 119 75 179 75 209 101 224 135 220 225 175 261 128 261 81 224 74 135 88 99\n\nwheel\nfalse\n0\nCircle -7500403 true true 3 3 294\nCircle -16777216 true false 30 30 240\nLine -7500403 true 150 285 150 15\nLine -7500403 true 15 150 285 150\nCircle -7500403 true true 120 120 60\nLine -7500403 true 216 40 79 269\nLine -7500403 true 40 84 269 221\nLine -7500403 true 40 216 269 79\nLine -7500403 true 84 40 221 269\n\nwolf\nfalse\n0\nPolygon -16777216 true false 253 133 245 131 245 133\nPolygon -7500403 true true 2 194 13 197 30 191 38 193 38 205 20 226 20 257 27 265 38 266 40 260 31 253 31 230 60 206 68 198 75 209 66 228 65 243 82 261 84 268 100 267 103 261 77 239 79 231 100 207 98 196 119 201 143 202 160 195 166 210 172 213 173 238 167 251 160 248 154 265 169 264 178 247 186 240 198 260 200 271 217 271 219 262 207 258 195 230 192 198 210 184 227 164 242 144 259 145 284 151 277 141 293 140 299 134 297 127 273 119 270 105\nPolygon -7500403 true true -1 195 14 180 36 166 40 153 53 140 82 131 134 133 159 126 188 115 227 108 236 102 238 98 268 86 269 92 281 87 269 103 269 113\n\nx\nfalse\n0\nPolygon -7500403 true true 270 75 225 30 30 225 75 270\nPolygon -7500403 true true 30 75 75 30 270 225 225 270\n@#$#@#$#@\nNetLogo 6.0.1\n@#$#@#$#@\n@#$#@#$#@\n@#$#@#$#@\n@#$#@#$#@\n@#$#@#$#@\ndefault\n0.0\n-0.2 0 0.0 1.0\n0.0 1 1.0 0.0\n0.2 0 0.0 1.0\nlink direction\ntrue\n0\nLine -7500403 true 150 150 90 180\nLine -7500403 true 150 150 210 180\n@#$#@#$#@\n0\n@#$#@#$#@";
+
+}).call(this);
+
+//# sourceMappingURL=new-model.js.map
+</script> 
+  <script>(function() {
+  window.RactiveEditFormCheckbox = Ractive.extend({
+    data: function() {
+      return {
+        disabled: void 0,
+        id: void 0,
+        isChecked: void 0,
+        labelText: void 0,
+        name: void 0
+      };
+    },
+    twoway: false,
+    template: "<div class=\"widget-edit-checkbox-wrapper\">\n  <input id=\"{{id}}\" class=\"widget-edit-checkbox\"\n         name=\"[[name]]\" type=\"checkbox\" checked=\"{{isChecked}}\"\n         {{# disabled === true }} disabled {{/}} />\n  <label for=\"{{id}}\" class=\"widget-edit-input-label\">{{labelText}}</label>\n</div>"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=checkbox.js.map
+</script> 
+  <script>(function() {
+  var RactiveCodeContainerBase;
+
+  RactiveCodeContainerBase = Ractive.extend({
+    _editor: void 0,
+    data: function() {
+      return {
+        code: void 0,
+        extraClasses: void 0,
+        extraConfig: void 0,
+        id: void 0,
+        initialCode: void 0,
+        isDisabled: false,
+        injectedConfig: void 0,
+        style: void 0
+      };
+    },
+    oncomplete: function() {
+      var initialCode, ref;
+      initialCode = this.get('initialCode');
+      this.set('code', (ref = initialCode != null ? initialCode : this.get('code')) != null ? ref : "");
+      return this._setupCodeMirror();
+    },
+    twoway: false,
+    _setupCodeMirror: function() {
+      var baseConfig, config, ref, ref1;
+      baseConfig = {
+        mode: 'netlogo',
+        theme: 'netlogo-default',
+        value: this.get('code'),
+        viewportMargin: 2e308
+      };
+      config = Object.assign({}, baseConfig, (ref = this.get('extraConfig')) != null ? ref : {}, (ref1 = this.get('injectedConfig')) != null ? ref1 : {});
+      this._editor = new CodeMirror(this.find("#" + (this.get('id'))), config);
+      this._editor.on('change', (function(_this) {
+        return function() {
+          return _this.set('code', _this._editor.getValue());
+        };
+      })(this));
+      this.observe('isDisabled', function(isDisabled) {
+        var classes;
+        this._editor.setOption('readOnly', isDisabled ? 'nocursor' : false);
+        classes = this.find('.netlogo-code').querySelector('.CodeMirror-scroll').classList;
+        if (isDisabled) {
+          classes.add('cm-disabled');
+        } else {
+          classes.remove('cm-disabled');
+        }
+      });
+    },
+    setCode: function(code) {
+      if ((this._editor != null) && this._editor.getValue() !== code) {
+        this._editor.setValue(code);
+      }
+    },
+    template: "<div id=\"{{id}}\" class=\"netlogo-code {{(extraClasses || []).join(' ')}}\" style=\"{{style}}\"></div>"
+  });
+
+  window.RactiveCodeContainerMultiline = RactiveCodeContainerBase.extend({
+    data: function() {
+      return {
+        extraConfig: {
+          tabSize: 2,
+          extraKeys: {
+            "Ctrl-F": "findPersistent",
+            "Cmd-F": "findPersistent"
+          }
+        }
+      };
+    }
+  });
+
+  window.RactiveEditFormCodeContainer = Ractive.extend({
+    data: function() {
+      return {
+        config: void 0,
+        id: void 0,
+        label: void 0,
+        style: void 0,
+        value: void 0
+      };
+    },
+    twoway: false,
+    components: {
+      codeContainer: RactiveCodeContainerMultiline
+    },
+    template: "<label for=\"{{id}}\">{{label}}</label>\n<codeContainer id=\"{{id}}\" initialCode=\"{{value}}\" injectedConfig=\"{{config}}\" style=\"{{style}}\" />"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=code-container.js.map
+</script> 
+  <script>(function() {
+  window.RactiveEditFormDropdown = Ractive.extend({
+    data: function() {
+      return {
+        choices: void 0,
+        disableds: void 0,
+        name: void 0,
+        id: void 0,
+        label: void 0,
+        selected: void 0,
+        checkIsDisabled: function(item) {
+          var ref;
+          return ((ref = this.get('disableds')) != null ? ref : []).indexOf(item) !== -1;
+        }
+      };
+    },
+    twoway: false,
+    template: "<label for=\"{{id}}\">{{label}}</label>\n<select id=\"{{id}}\" name=\"{{name}}\" class=\"widget-edit-dropdown\">\n  {{#choices}}\n    <option value=\"{{this}}\"\n            {{# this === selected }} selected{{/}}\n            {{# checkIsDisabled(this) }} disabled {{/}}>{{this}}</option>\n  {{/}}\n</select>"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=dropdown.js.map
+</script> 
+  <script>(function() {
+  window.RactiveEditFormLabeledInput = Ractive.extend({
+    data: function() {
+      return {
+        attrs: void 0,
+        "class": void 0,
+        id: void 0,
+        labelStr: void 0,
+        labelStyle: void 0,
+        name: void 0,
+        style: void 0,
+        type: void 0,
+        value: void 0
+      };
+    },
+    twoway: false,
+    template: "<div class=\"flex-row\" style=\"align-items: center;\">\n  <label for=\"{{id}}\" class=\"widget-edit-input-label\" style=\"{{labelStyle}}\">{{labelStr}}</label>\n  <div style=\"flex-grow: 1;\">\n    <input class=\"widget-edit-text widget-edit-input {{class}}\" id=\"{{id}}\" name=\"{{name}}\"\n           type=\"{{type}}\" value=\"{{value}}\" style=\"{{style}}\" {{attrs}} />\n  </div>\n</div>"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=labeled-input.js.map
+</script> 
+  <script>(function() {
+  window.RactiveEditFormFontSize = RactiveEditFormLabeledInput.extend({
+    data: function() {
+      return {
+        attrs: "min=0 step=1 required",
+        labelStr: "Font size:",
+        style: "width: 70px;",
+        type: "number"
+      };
+    },
+    twoway: false
+  });
+
+}).call(this);
+
+//# sourceMappingURL=font-size.js.map
+</script> 
+  <script>(function() {
+  window.RactivePrintArea = Ractive.extend({
+    data: function() {
+      return {
+        fontSize: void 0,
+        id: void 0,
+        output: void 0
+      };
+    },
+    observe: {
+      output: function() {
+        return this.update('output').then((function(_this) {
+          return function() {
+            var outputElem;
+            outputElem = _this.find("#" + _this.get("id"));
+            return outputElem != null ? outputElem.scrollTop = outputElem.scrollHeight : void 0;
+          };
+        })(this));
+      }
+    },
+    template: "<pre id='{{id}}' class='netlogo-output-area'\n     style=\"font-size: {{fontSize}}px;\">{{output}}</pre>"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=print-area.js.map
+</script> 
+  <script>(function() {
+  window.RactiveEditFormSpacer = Ractive.extend({
+    data: function() {
+      return {
+        height: void 0,
+        width: void 0
+      };
+    },
+    template: "<div style=\"{{>height}} {{>width}}\"></div>",
+    partials: {
+      height: "{{ #height }}height: {{height}};{{/}}",
+      width: "{{ #width  }}width:  {{width }};{{/}}"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=spacer.js.map
+</script> 
+  <script>(function() {
+  window.RactiveTickCounter = Ractive.extend({
+    data: function() {
+      return {
+        isVisible: void 0,
+        label: void 0,
+        value: void 0
+      };
+    },
+    twoway: false,
+    template: "<span class=\"netlogo-label\">\n  {{ # isVisible }}\n    {{label}}: {{value}}\n  {{else}}\n    &nbsp;\n  {{/}}\n</span>"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=tick-counter.js.map
+</script> 
+  <script>(function() {
+  window.RactiveEditFormVariable = Ractive.extend({
+    data: function() {
+      return {
+        id: void 0,
+        name: void 0,
+        value: void 0
+      };
+    },
+    twoway: false,
+    template: "<label for=\"{{id}}\">Global variable: </label>\n<input id=\"{{id}}\" class=\"widget-edit-text\" name=\"{{name}}\" placeholder=\"(Required)\"\n       type=\"text\" value=\"{{value}}\"\n       autofocus autocomplete=\"off\"\n       pattern=\"[=*!<>:#+/%'&$^.?\\-_a-zA-Z][=*!<>:#+/%'&$^.?\\-\\w]*\"\n       title=\"A variable name to be used for the switch's value in your model.\n\nMust contain at least one valid character.  Valid characters are alphanumeric characters and all the special characters in (( $^.?=*!<>:#+/%'&-_ )), but cannot start with a number.\"\n       required />"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=variable.js.map
+</script> 
+  <script>(function() {
+  var alreadyHasA, defaultOptions, genWidgetCreator;
+
+  genWidgetCreator = function(name, widgetType, isEnabled, enabler) {
+    if (isEnabled == null) {
+      isEnabled = true;
+    }
+    if (enabler == null) {
+      enabler = (function() {
+        return false;
+      });
+    }
+    return {
+      text: "Create " + name,
+      enabler: enabler,
+      isEnabled: isEnabled,
+      action: function(context, mouseX, mouseY) {
+        return context.fire('create-widget', widgetType, mouseX, mouseY);
+      }
+    };
+  };
+
+  alreadyHasA = function(componentName) {
+    return function(ractive) {
+      if (ractive.parent != null) {
+        return alreadyHasA(componentName)(ractive.parent);
+      } else {
+        return ractive.findComponent(componentName) == null;
+      }
+    };
+  };
+
+  defaultOptions = [["Button", "button"], ["Chooser", "chooser"], ["Input", "inputBox"], ["Label", "textBox"], ["Monitor", "monitor"], ["Output", "output", false, alreadyHasA('outputWidget')], ["Plot", "plot", false], ["Slider", "slider"], ["Switch", "switch"]].map(function(args) {
+    return genWidgetCreator.apply(null, args);
+  });
+
+  window.RactiveContextable = Ractive.extend({
+    data: function() {
+      return {
+        contextMenuOptions: void 0
+      };
+    },
+    standardOptions: function(component) {
+      return {
+        "delete": {
+          text: "Delete",
+          isEnabled: true,
+          action: function() {
+            component.fire('hide-context-menu');
+            return component.fire('unregister-widget', component.get('widget').id);
+          }
+        },
+        edit: {
+          text: "Edit",
+          isEnabled: true,
+          action: function() {
+            return component.fire('edit-widget');
+          }
+        }
+      };
+    }
+  });
+
+  window.RactiveContextMenu = Ractive.extend({
+    data: function() {
+      return {
+        options: void 0,
+        mouseX: 0,
+        mouseY: 0,
+        target: void 0,
+        visible: false
+      };
+    },
+    on: {
+      'ignore-click': function() {
+        return false;
+      },
+      'cover-thineself': function() {
+        this.set('visible', false);
+        this.fire('unlock-selection');
+      },
+      'reveal-thineself': function(_, component, x, y) {
+        var ref;
+        this.set('target', component);
+        this.set('options', (ref = component != null ? component.get('contextMenuOptions') : void 0) != null ? ref : defaultOptions);
+        this.set('visible', true);
+        this.set('mouseX', x);
+        this.set('mouseY', y);
+        if (component instanceof RactiveWidget) {
+          this.fire('lock-selection', component);
+        }
+      }
+    },
+    template: "{{# visible }}\n<div id=\"netlogo-widget-context-menu\" class=\"widget-context-menu\" style=\"top: {{mouseY}}px; left: {{mouseX}}px;\">\n  <div id=\"{{id}}-context-menu\" class=\"netlogo-widget-editor-menu-items\">\n    <ul class=\"context-menu-list\">\n      {{# options }}\n        {{# (..enabler !== undefined && ..enabler(target)) || ..isEnabled }}\n          <li class=\"context-menu-item\" on-click=\"..action(target, mouseX, mouseY)\">{{..text}}</li>\n        {{ else }}\n          <li class=\"context-menu-item disabled\" on-click=\"ignore-click\">{{..text}}</li>\n        {{/}}\n      {{/}}\n    </ul>\n  </div>\n</div>\n{{/}}"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=context-menu.js.map
+</script> 
+  <script>(function() {
+  window.CommonDrag = {
+    dragstart: function(arg, checkIsValid, callback) {
+      var clientX, clientY, dataTransfer, invisiGIF, original, view;
+      original = arg.original;
+      clientX = original.clientX, clientY = original.clientY, dataTransfer = original.dataTransfer, view = original.view;
+      if (checkIsValid(clientX, clientY)) {
+        invisiGIF = document.createElement('img');
+        invisiGIF.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
+        dataTransfer.setDragImage(invisiGIF, 0, 0);
+        dataTransfer.setData('text/plain', '');
+        this.view = view;
+        this.lastUpdateMs = (new Date).getTime();
+        callback(clientX, clientY);
+      } else {
+        original.preventDefault();
+        false;
+      }
+    },
+    drag: function(arg, callback) {
+      var clientX, clientY, ref, ref1, ref2, root, view, x, y;
+      ref = arg.original, clientX = ref.clientX, clientY = ref.clientY, view = ref.view;
+      if (this.view != null) {
+        root = (function(r) {
+          if (r.parent != null) {
+            return arguments.callee(r.parent);
+          } else {
+            return r;
+          }
+        })(this);
+        x = clientX !== 0 ? clientX : (ref1 = root.get('lastDragX')) != null ? ref1 : -1;
+        y = clientY !== 0 ? clientY : (ref2 = root.get('lastDragY')) != null ? ref2 : -1;
+        if (this.view === view && x > 0 && y > 0 && ((new Date).getTime() - this.lastUpdateMs) >= (1000 / 30)) {
+          this.lastUpdateMs = (new Date).getTime();
+          callback(x, y);
+        }
+      }
+      return false;
+    },
+    dragend: function(callback) {
+      var root;
+      if (this.view != null) {
+        root = (function(r) {
+          if (r.parent != null) {
+            return arguments.callee(r.parent);
+          } else {
+            return r;
+          }
+        })(this);
+        root.set('lastDragX', void 0);
+        root.set('lastDragY', void 0);
+        this.view = void 0;
+        this.lastUpdateMs = void 0;
+        callback();
+      }
+    }
+  };
+
+  window.RactiveDraggableAndContextable = RactiveContextable.extend({
+    lastUpdateMs: void 0,
+    startLeft: void 0,
+    startRight: void 0,
+    startTop: void 0,
+    startBottom: void 0,
+    view: void 0,
+    data: function() {
+      return {
+        left: void 0,
+        right: void 0,
+        top: void 0,
+        bottom: void 0
+      };
+    },
+    on: {
+      'start-widget-drag': function(event) {
+        return CommonDrag.dragstart.call(this, event, (function() {
+          return true;
+        }), (function(_this) {
+          return function(x, y) {
+            _this.fire('select-component', event.component);
+            _this.startLeft = _this.get('left') - x;
+            _this.startRight = _this.get('right') - x;
+            _this.startTop = _this.get('top') - y;
+            return _this.startBottom = _this.get('bottom') - y;
+          };
+        })(this));
+      },
+      'drag-widget': function(event) {
+        return CommonDrag.drag.call(this, event, (function(_this) {
+          return function(x, y) {
+            var findAdjustment, xAdjust, yAdjust;
+            findAdjustment = function(n) {
+              return n - (Math.round(n / 5) * 5);
+            };
+            xAdjust = findAdjustment(_this.startLeft + x);
+            yAdjust = findAdjustment(_this.startTop + y);
+            _this.set('left', _this.startLeft + x - xAdjust);
+            _this.set('right', _this.startRight + x - xAdjust);
+            _this.set('top', _this.startTop + y - yAdjust);
+            return _this.set('bottom', _this.startBottom + y - yAdjust);
+          };
+        })(this));
+      },
+      'stop-widget-drag': function() {
+        return CommonDrag.dragend.call(this, (function(_this) {
+          return function() {
+            _this.startLeft = void 0;
+            _this.startRight = void 0;
+            _this.startTop = void 0;
+            return _this.startBottom = void 0;
+          };
+        })(this));
+      }
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=draggable.js.map
+</script> 
+  <script>(function() {
+  window.EditForm = Ractive.extend({
+    lastUpdateMs: void 0,
+    startX: void 0,
+    startY: void 0,
+    view: void 0,
+    data: function() {
+      return {
+        amProvingMyself: false,
+        idBasis: void 0,
+        style: void 0,
+        visible: void 0,
+        xLoc: void 0,
+        yLoc: void 0
+      };
+    },
+    computed: {
+      id: (function() {
+        return (this.get('idBasis')) + "-edit-window";
+      })
+    },
+    twoway: false,
+    lazy: true,
+    on: {
+      submit: function(arg) {
+        var newProps, node;
+        node = arg.node;
+        try {
+          this.set('amProvingMyself', false);
+          newProps = this.genProps(node);
+          if (newProps != null) {
+            return this.fire('update-widget-value', {}, newProps);
+          }
+        } finally {
+          this.fire('activate-cloaking-device');
+          return false;
+        }
+      },
+      'show-yourself': function() {
+        var container, containerMidX, containerMidY, dialogHalfHeight, dialogHalfWidth, elem, findParentByClass;
+        findParentByClass = function(clss) {
+          return function(arg) {
+            var parent;
+            parent = arg.parentElement;
+            if (parent != null) {
+              if (parent.classList.contains(clss)) {
+                return parent;
+              } else {
+                return findParentByClass(clss)(parent);
+              }
+            } else {
+              return void 0;
+            }
+          };
+        };
+        this.set('visible', true);
+        elem = this.getElem();
+        elem.focus();
+        this.fire('lock-selection', this.parent);
+        container = findParentByClass('netlogo-widget-container')(elem);
+        containerMidX = container.offsetWidth / 2;
+        containerMidY = container.offsetHeight / 2;
+        dialogHalfWidth = elem.offsetWidth / 2;
+        dialogHalfHeight = elem.offsetHeight / 2;
+        this.set('xLoc', containerMidX - dialogHalfWidth);
+        this.set('yLoc', containerMidY - dialogHalfHeight);
+        this.resetPartial('widgetFields', this.partials.widgetFields);
+        return false;
+      },
+      'activate-cloaking-device': function() {
+        this.set('visible', false);
+        this.fire('unlock-selection');
+        if (this.get('amProvingMyself')) {
+          this.fire('has-been-proven-unworthy');
+        }
+        return false;
+      },
+      'prove-your-worth': function() {
+        this.fire('show-yourself');
+        this.set('amProvingMyself', true);
+        return false;
+      },
+      'start-edit-drag': function(event) {
+        var checkIsValid;
+        checkIsValid = function(x, y) {
+          var elem;
+          elem = document.elementFromPoint(x, y);
+          switch (elem.tagName.toLowerCase()) {
+            case "input":
+              return elem.type.toLowerCase() !== "number" && elem.type.toLowerCase() !== "text";
+            case "textarea":
+              return false;
+            default:
+              return true;
+          }
+        };
+        return CommonDrag.dragstart.call(this, event, checkIsValid, (function(_this) {
+          return function(x, y) {
+            _this.startX = _this.get('xLoc') - x;
+            return _this.startY = _this.get('yLoc') - y;
+          };
+        })(this));
+      },
+      'drag-edit-dialog': function(event) {
+        return CommonDrag.drag.call(this, event, (function(_this) {
+          return function(x, y) {
+            _this.set('xLoc', _this.startX + x);
+            return _this.set('yLoc', _this.startY + y);
+          };
+        })(this));
+      },
+      'stop-edit-drag': function() {
+        return CommonDrag.dragend.call(this, (function() {}));
+      },
+      'cancel-edit': function() {
+        this.fire('activate-cloaking-device');
+      },
+      'handle-key': function(arg) {
+        var keyCode;
+        keyCode = arg.original.keyCode;
+        if (keyCode === 27) {
+          this.fire('cancel-edit');
+          false;
+        }
+      }
+    },
+    getElem: function() {
+      return this.find("#" + (this.get('id')));
+    },
+    template: "{{# visible }}\n<div class=\"widget-edit-form-overlay\">\n  <div id=\"{{id}}\"\n       class=\"widget-edit-popup widget-edit-text\"\n       style=\"top: {{yLoc}}px; left: {{xLoc}}px; {{style}}\"\n       on-keydown=\"handle-key\"\n       draggable=\"true\" on-drag=\"drag-edit-dialog\" on-dragstart=\"start-edit-drag\"\n       on-dragend=\"stop-edit-drag\"\n       tabindex=\"0\">\n    <div id=\"{{id}}-closer\" class=\"widget-edit-closer\" on-click=\"cancel-edit\">X</div>\n    <form class=\"widget-edit-form\" on-submit=\"submit\">\n      <div class=\"widget-edit-form-title\">{{>title}}</div>\n      {{>widgetFields}}\n      <div class=\"widget-edit-form-button-container\">\n        <input class=\"widget-edit-text\" type=\"submit\" value=\"OK\" />\n        <input class=\"widget-edit-text\" type=\"button\" on-click=\"cancel-edit\" value=\"Cancel\" />\n      </div>\n    </form>\n  </div>\n</div>\n{{/}}",
+    partials: {
+      widgetFields: void 0
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=edit-form.js.map
+</script> 
+  <script>(function() {
+  var WidgetEventGenerators,
+    slice = [].slice;
+
+  WidgetEventGenerators = {
+    recompile: function() {
+      return {
+        run: function(ractive, widget) {
+          return ractive.fire('recompile');
+        },
+        type: "recompile"
+      };
+    },
+    redrawView: function() {
+      return {
+        run: function(ractive, widget) {
+          return ractive.fire('redraw-view');
+        },
+        type: "redrawView"
+      };
+    },
+    refreshChooser: function() {
+      return {
+        run: function(ractive, widget) {
+          return ractive.fire('refresh-chooser', widget);
+        },
+        type: "refreshChooser"
+      };
+    },
+    rename: function(oldName, newName) {
+      return {
+        run: function(ractive, widget) {
+          return ractive.fire('rename-interface-global', oldName, newName, widget.currentValue);
+        },
+        type: "rename:" + oldName + "," + newName
+      };
+    },
+    resizeView: function() {
+      return {
+        run: function(ractive, widget) {
+          return ractive.fire('resize-view');
+        },
+        type: "resizeView"
+      };
+    },
+    updateTopology: function() {
+      return {
+        run: function(ractive, widget) {
+          return ractive.fire('update-topology');
+        },
+        type: "updateTopology"
+      };
+    }
+  };
+
+  window.RactiveWidget = RactiveDraggableAndContextable.extend({
+    _weg: WidgetEventGenerators,
+    data: function() {
+      return {
+        id: void 0,
+        isEditing: void 0,
+        resizeDirs: ['left', 'right', 'top', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'],
+        widget: void 0
+      };
+    },
+    components: {
+      editForm: void 0
+    },
+    computed: {
+      dims: function() {
+        return "position: absolute;\nleft: " + (this.get('left')) + "px; top: " + (this.get('top')) + "px;\nwidth: " + (this.get('right') - this.get('left')) + "px; height: " + (this.get('bottom') - this.get('top')) + "px;";
+      }
+    },
+    on: {
+      'edit-widget': function() {
+        if (this.get('isNotEditable') !== true) {
+          this.fire('hide-context-menu');
+          this.findComponent('editForm').fire("show-yourself");
+          false;
+        }
+      },
+      init: function() {
+        var ref;
+        if ((ref = this.findComponent('editForm')) != null) {
+          ref.fire("activate-cloaking-device");
+        }
+      },
+      'initialize-widget': function() {
+        this.findComponent('editForm').fire("prove-your-worth");
+        return false;
+      },
+      "*.has-been-proven-unworthy": function() {
+        return this.fire('unregister-widget', this.get('widget').id, true);
+      },
+      "*.update-widget-value": function(_, values) {
+        var event, eventArraysArray, events, ex, getByPath, i, isTroublesome, k, len, name, newies, oldies, ref, scrapeWidget, setByPath, triggerNames, triggers, uniqueEvents, v, widget, widgets;
+        getByPath = function(obj) {
+          return function(path) {
+            return path.split('.').reduce((function(acc, x) {
+              return acc[x];
+            }), obj);
+          };
+        };
+        setByPath = function(obj) {
+          return function(path) {
+            return function(value) {
+              var i, key, lastParent, parents, ref;
+              ref = path.split('.'), parents = 2 <= ref.length ? slice.call(ref, 0, i = ref.length - 1) : (i = 0, []), key = ref[i++];
+              lastParent = parents.reduce((function(acc, x) {
+                return acc[x];
+              }), obj);
+              return lastParent[key] = value;
+            };
+          };
+        };
+        try {
+          widget = this.get('widget');
+          widgets = Object.values(this.parent.get('widgetObj'));
+          isTroublesome = function(w) {
+            return w.variable === values.variable && w.type !== widget.type;
+          };
+          if ((values.variable != null) && widgets.some(isTroublesome)) {
+            return this.fire('reject-duplicate-var', values.variable);
+          } else {
+            scrapeWidget = function(widget, triggerNames) {
+              return triggerNames.reduce((function(acc, x) {
+                acc[x] = getByPath(widget)(x);
+                return acc;
+              }), {});
+            };
+            triggers = this.eventTriggers();
+            triggerNames = Object.keys(triggers);
+            oldies = scrapeWidget(widget, triggerNames);
+            for (k in values) {
+              v = values[k];
+              setByPath(widget)(k)(v);
+            }
+            newies = scrapeWidget(widget, triggerNames);
+            eventArraysArray = (function() {
+              var i, len, results;
+              results = [];
+              for (i = 0, len = triggerNames.length; i < len; i++) {
+                name = triggerNames[i];
+                if (newies[name] !== oldies[name]) {
+                  results.push(triggers[name].map(function(constructEvent) {
+                    return constructEvent(oldies[name], newies[name]);
+                  }));
+                }
+              }
+              return results;
+            })();
+            events = (ref = []).concat.apply(ref, eventArraysArray);
+            uniqueEvents = events.reduce((function(acc, x) {
+              if (acc.find(function(y) {
+                return y.type === x.type;
+              }) == null) {
+                return acc.concat([x]);
+              } else {
+                return acc;
+              }
+            }), []);
+            for (i = 0, len = uniqueEvents.length; i < len; i++) {
+              event = uniqueEvents[i];
+              event.run(this, widget);
+            }
+            return this.fire('update-widgets');
+          }
+        } catch (error) {
+          ex = error;
+          return console.error(ex);
+        } finally {
+          return false;
+        }
+      }
+    },
+    partials: {
+      editorOverlay: "{{ #isEditing }}\n  <div draggable=\"true\" style=\"{{dims}} z-index: 50;\"\n       on-click=\"@this.fire('hide-context-menu') && @this.fire('select-widget', @event)\"\n       on-contextmenu=\"@this.fire('show-context-menu', @event)\"\n       on-dblclick=\"@this.fire('edit-widget')\"\n       on-dragstart=\"start-widget-drag\"\n       on-drag=\"drag-widget\"\n       on-dragend=\"stop-widget-drag\"></div>\n{{/}}"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=widget.js.map
+</script> 
+  <script>(function() {
+  var ButtonEditForm;
+
+  ButtonEditForm = EditForm.extend({
+    data: function() {
+      return {
+        actionKey: void 0,
+        display: void 0,
+        isForever: void 0,
+        source: void 0,
+        startsDisabled: void 0,
+        type: void 0
+      };
+    },
+    computed: {
+      displayedType: {
+        get: function() {
+          return this._typeToDisplay(this.get('type'));
+        }
+      }
+    },
+    on: {
+      'handle-action-key-press': function(arg) {
+        var node;
+        node = arg.node;
+        return node.value = "";
+      }
+    },
+    twoway: false,
+    components: {
+      formCheckbox: RactiveEditFormCheckbox,
+      formCode: RactiveEditFormCodeContainer,
+      formDropdown: RactiveEditFormDropdown,
+      labeledInput: RactiveEditFormLabeledInput,
+      spacer: RactiveEditFormSpacer
+    },
+    genProps: function(form) {
+      var key, source;
+      key = form.actionKey.value;
+      source = this.findComponent('formCode').findComponent('codeContainer').get('code');
+      return {
+        actionKey: (key.length === 1 ? key.toUpperCase() : null),
+        buttonKind: this._displayToType(form.type.value),
+        disableUntilTicksStart: form.startsDisabled.checked,
+        display: (form.display.value !== "" ? form.display.value : void 0),
+        forever: form.forever.checked,
+        source: (source !== "" ? source : void 0)
+      };
+    },
+    partials: {
+      title: "Button",
+      widgetFields: "<div class=\"flex-row\" style=\"align-items: center;\">\n  <formDropdown id=\"{{id}}-type\" choices=\"['observer', 'turtles', 'patches', 'links']\" name=\"type\" label=\"Agent(s):\" selected=\"{{displayedType}}\" />\n  <formCheckbox id=\"{{id}}-forever-checkbox\" isChecked={{isForever}} labelText=\"Forever\" name=\"forever\" />\n</div>\n\n<spacer height=\"15px\" />\n\n<formCheckbox id=\"{{id}}-start-disabled-checkbox\" isChecked={{startsDisabled}} labelText=\"Disable until ticks start\" name=\"startsDisabled\" />\n\n<spacer height=\"15px\" />\n\n<formCode id=\"{{id}}-source\" name=\"source\" value=\"{{source}}\" label=\"Commands\" />\n\n<spacer height=\"15px\" />\n\n<div class=\"flex-row\" style=\"align-items: center;\">\n  <labeledInput id=\"{{id}}-display\" labelStr=\"Display name:\" name=\"display\" class=\"widget-edit-inputbox\" type=\"text\" value=\"{{display}}\" />\n</div>\n\n<spacer height=\"15px\" />\n\n<div class=\"flex-row\" style=\"align-items: center;\">\n  <label for=\"{{id}}-action-key\">Action key:</label>\n  <input  id=\"{{id}}-action-key\" name=\"actionKey\" type=\"text\" value=\"{{actionKey}}\"\n          class=\"widget-edit-inputbox\" style=\"text-transform: uppercase; width: 30px;\"\n          on-keypress=\"handle-action-key-press\" />\n</div>"
+    },
+    _displayToType: function(display) {
+      return {
+        observer: "Observer",
+        turtles: "Turtle",
+        patches: "Patch",
+        links: "Link"
+      }[display];
+    },
+    _typeToDisplay: function(type) {
+      return {
+        Observer: "observer",
+        Turtle: "turtles",
+        Patch: "patches",
+        Link: "links"
+      }[type];
+    }
+  });
+
+  window.RactiveButton = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit, this.standardOptions(this)["delete"]],
+        errorClass: void 0,
+        ticksStarted: void 0
+      };
+    },
+    computed: {
+      isEnabled: {
+        get: function() {
+          return (this.get('ticksStarted') || (!this.get('widget').disableUntilTicksStart)) && (!this.get('isEditing'));
+        }
+      }
+    },
+    oninit: function() {
+      this._super();
+      return this.on('activate-button', function(_, run) {
+        if (this.get('isEnabled')) {
+          return run();
+        }
+      });
+    },
+    components: {
+      editForm: ButtonEditForm
+    },
+    eventTriggers: function() {
+      return {
+        buttonKind: [this._weg.recompile],
+        source: [this._weg.recompile]
+      };
+    },
+    template: "{{>button}}\n<editForm actionKey=\"{{widget.actionKey}}\" display=\"{{widget.display}}\"\n          idBasis=\"{{id}}\" isForever=\"{{widget.forever}}\" source=\"{{widget.source}}\"\n          startsDisabled=\"{{widget.disableUntilTicksStart}}\" type=\"{{widget.buttonKind}}\" />\n{{>editorOverlay}}",
+    partials: {
+      button: "{{# widget.forever }}\n  {{>foreverButton}}\n{{ else }}\n  {{>standardButton}}\n{{/}}",
+      standardButton: "<button id=\"{{id}}\" type=\"button\" style=\"{{dims}}\"\n        class=\"netlogo-widget netlogo-button netlogo-command{{# !isEnabled }} netlogo-disabled{{/}} {{errorClass}}{{#isEditing}} interface-unlocked{{/}}\"\n        on-click=\"@this.fire('activate-button', @this.get('widget.run'))\">\n  {{>buttonContext}}\n  {{>label}}\n  {{>actionKeyIndicator}}\n</button>",
+      foreverButton: "<label id=\"{{id}}\" style=\"{{dims}}\"\n       class=\"netlogo-widget netlogo-button netlogo-forever-button{{#widget.running}} netlogo-active{{/}} netlogo-command{{# !isEnabled }} netlogo-disabled{{/}} {{errorClass}}{{#isEditing}} interface-unlocked{{/}}\">\n  {{>buttonContext}}\n  {{>label}}\n  {{>actionKeyIndicator}}\n  <input type=\"checkbox\" checked={{ widget.running }} {{# !isEnabled }}disabled{{/}}/>\n  <div class=\"netlogo-forever-icon\"></div>\n</label>",
+      buttonContext: "<div class=\"netlogo-button-agent-context\">\n{{#if widget.buttonKind === \"Turtle\" }}\n  T\n{{elseif widget.buttonKind === \"Patch\" }}\n  P\n{{elseif widget.buttonKind === \"Link\" }}\n  L\n{{/if}}\n</div>",
+      label: "<span class=\"netlogo-label\">{{widget.display || widget.source}}</span>",
+      actionKeyIndicator: "{{# widget.actionKey }}\n  <span class=\"netlogo-action-key {{# widget.hasFocus }}netlogo-focus{{/}}\">\n    {{widget.actionKey}}\n  </span>\n{{/}}"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=button.js.map
+</script> 
+  <script>(function() {
+  var ChooserEditForm;
+
+  ChooserEditForm = EditForm.extend({
+    data: function() {
+      return {
+        choices: void 0,
+        display: void 0
+      };
+    },
+    twoway: false,
+    components: {
+      formCode: RactiveEditFormCodeContainer,
+      formVariable: RactiveEditFormVariable
+    },
+    computed: {
+      chooserChoices: {
+        get: function() {
+          return this.get('choices').map(function(x) {
+            return workspace.dump(x, true);
+          }).join('\n');
+        }
+      }
+    },
+    genProps: function(form) {
+      var choices, choicesArr, varName;
+      varName = form.varName.value;
+      choices = this.findComponent('formCode').findComponent('codeContainer').get('code');
+      choicesArr = Converter.stringToJSValue("[" + choices + "]");
+      return {
+        choices: choicesArr,
+        display: varName,
+        variable: varName.toLowerCase()
+      };
+    },
+    partials: {
+      title: "Chooser",
+      widgetFields: "<formVariable id=\"{{id}}-varname\" value=\"{{display}}\"        name=\"varName\" />\n<formCode     id=\"{{id}}-choices\" value=\"{{chooserChoices}}\" name=\"codeChoices\"\n              label=\"Choices\" config=\"{}\" style=\"\" />"
+    }
+  });
+
+  window.RactiveChooser = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit, this.standardOptions(this)["delete"]],
+        resizeDirs: ['left', 'right']
+      };
+    },
+    components: {
+      editForm: ChooserEditForm
+    },
+    eventTriggers: function() {
+      return {
+        choices: [this._weg.refreshChooser],
+        variable: [this._weg.recompile, this._weg.rename]
+      };
+    },
+    template: "<label id=\"{{id}}\" class=\"netlogo-widget netlogo-chooser netlogo-input{{#isEditing}} interface-unlocked{{/}}\" style=\"{{dims}}\">\n  <span class=\"netlogo-label\">{{widget.display}}</span>\n  <select class=\"netlogo-chooser-select\" value=\"{{widget.currentValue}}\"{{# isEditing }} disabled{{/}} >\n  {{#widget.choices}}\n    <option class=\"netlogo-chooser-option\" value=\"{{.}}\">{{>literal}}</option>\n  {{/}}\n  </select>\n</label>\n<editForm idBasis=\"{{id}}\" choices=\"{{widget.choices}}\" display=\"{{widget.display}}\" />\n{{>editorOverlay}}",
+    partials: {
+      literal: "{{# typeof . === \"string\"}}{{.}}{{/}}\n{{# typeof . === \"number\"}}{{.}}{{/}}\n{{# typeof . === \"boolean\"}}{{.}}{{/}}\n{{# typeof . === \"object\"}}\n  [{{#.}}\n    {{>literal}}\n  {{/}}]\n{{/}}"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=chooser.js.map
+</script> 
+  <script>(function() {
+  window.RactiveModelCodeComponent = Ractive.extend({
+    data: function() {
+      return {
+        code: void 0,
+        isReadOnly: void 0,
+        lastCompiledCode: void 0,
+        lastCompileFailed: false
+      };
+    },
+    components: {
+      codeEditor: RactiveCodeContainerMultiline
+    },
+    computed: {
+      isStale: '(${code} !== ${lastCompiledCode}) || ${lastCompileFailed}'
+    },
+    setCode: function(code) {
+      this.findComponent('codeEditor').setCode(code);
+    },
+    template: "<div class=\"netlogo-tab-content netlogo-code-container\"\n     grow-in='{disable:\"code-tab-toggle\"}' shrink-out='{disable:\"code-tab-toggle\"}'>\n  {{# !isReadOnly }}\n    <button class=\"netlogo-widget netlogo-ugly-button netlogo-recompilation-button{{#isEditing}} interface-unlocked{{/}}\"\n            on-click=\"recompile\" {{# !isStale }}disabled{{/}} >Recompile Code</button>\n  {{/}}\n  <codeEditor id=\"netlogo-code-tab-editor\" code=\"{{code}}\"\n              injectedConfig=\"{ lineNumbers: true, readOnly: {{isReadOnly}} }\"\n              extraClasses=\"['netlogo-code-tab']\" />\n</div>"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=code-editor.js.map
+</script> 
+  <script>(function() {
+  window.RactiveConsoleWidget = Ractive.extend({
+    data: function() {
+      return {
+        input: '',
+        isEditing: void 0,
+        agentTypes: ['observer', 'turtles', 'patches', 'links'],
+        agentTypeIndex: 0,
+        checkIsReporter: void 0,
+        history: [],
+        historyIndex: 0,
+        workingEntry: {},
+        output: ''
+      };
+    },
+    computed: {
+      agentType: {
+        get: function() {
+          return this.get('agentTypes')[this.get('agentTypeIndex')];
+        },
+        set: function(val) {
+          var index;
+          index = this.get('agentTypes').indexOf(val);
+          if (index >= 0) {
+            return this.set('agentTypeIndex', index);
+          }
+        }
+      }
+    },
+    components: {
+      printArea: RactivePrintArea
+    },
+    onrender: function() {
+      var changeAgentType, commandCenterEditor, moveInHistory, run;
+      changeAgentType = (function(_this) {
+        return function() {
+          return _this.set('agentTypeIndex', (_this.get('agentTypeIndex') + 1) % _this.get('agentTypes').length);
+        };
+      })(this);
+      moveInHistory = (function(_this) {
+        return function(index) {
+          var entry, newIndex;
+          newIndex = _this.get('historyIndex') + index;
+          if (newIndex < 0) {
+            newIndex = 0;
+          } else if (newIndex > _this.get('history').length) {
+            newIndex = _this.get('history').length;
+          }
+          if (_this.get('historyIndex') === _this.get('history').length) {
+            _this.set('workingEntry', {
+              agentType: _this.get('agentType'),
+              input: _this.get('input')
+            });
+          }
+          if (newIndex === _this.get('history').length) {
+            _this.set(_this.get('workingEntry'));
+          } else {
+            entry = _this.get('history')[newIndex];
+            _this.set(entry);
+          }
+          return _this.set('historyIndex', newIndex);
+        };
+      })(this);
+      run = (function(_this) {
+        return function() {
+          var agentType, history, input, lastEntry;
+          input = _this.get('input');
+          if (input.trim().length > 0) {
+            agentType = _this.get('agentType');
+            if (_this.get('checkIsReporter')(input)) {
+              input = "show " + input;
+            }
+            _this.set('output', "" + (_this.get('output')) + agentType + "> " + input + "\n");
+            history = _this.get('history');
+            lastEntry = history.length > 0 ? history[history.length - 1] : {
+              agentType: '',
+              input: ''
+            };
+            if (lastEntry.input !== input || lastEntry.agentType !== agentType) {
+              history.push({
+                agentType: agentType,
+                input: input
+              });
+            }
+            _this.set('historyIndex', history.length);
+            if (agentType !== 'observer') {
+              input = "ask " + agentType + " [ " + input + " ]";
+            }
+            _this.fire('run', input);
+            _this.set('input', '');
+            return _this.set('workingEntry', {});
+          }
+        };
+      })(this);
+      this.on('clear-history', function() {
+        return this.set('output', '');
+      });
+      commandCenterEditor = CodeMirror(this.find('.netlogo-command-center-editor'), {
+        value: this.get('input'),
+        mode: 'netlogo',
+        theme: 'netlogo-default',
+        scrollbarStyle: 'null',
+        extraKeys: {
+          Enter: run,
+          Up: (function(_this) {
+            return function() {
+              return moveInHistory(-1);
+            };
+          })(this),
+          Down: (function(_this) {
+            return function() {
+              return moveInHistory(1);
+            };
+          })(this),
+          Tab: (function(_this) {
+            return function() {
+              return changeAgentType();
+            };
+          })(this)
+        }
+      });
+      commandCenterEditor.on('change', (function(_this) {
+        return function() {
+          return _this.set('input', commandCenterEditor.getValue());
+        };
+      })(this));
+      this.observe('input', function(newValue) {
+        if (newValue !== commandCenterEditor.getValue()) {
+          commandCenterEditor.setValue(newValue);
+          return commandCenterEditor.execCommand('goLineEnd');
+        }
+      });
+      return this.observe('isEditing', function(isEditing) {
+        var classes;
+        commandCenterEditor.setOption('readOnly', isEditing ? 'nocursor' : false);
+        classes = this.find('.netlogo-command-center-editor').querySelector('.CodeMirror-scroll').classList;
+        if (isEditing) {
+          classes.add('cm-disabled');
+        } else {
+          classes.remove('cm-disabled');
+        }
+      });
+    },
+    appendText: function(str) {
+      this.set('output', this.get('output') + str);
+    },
+    template: "<div class='netlogo-tab-content netlogo-command-center'\n     grow-in='{disable:\"console-toggle\"}' shrink-out='{disable:\"console-toggle\"}'>\n  <printArea id='command-center-print-area' output='{{output}}'/>\n\n  <div class='netlogo-command-center-input'>\n    <label>\n      <select value=\"{{agentType}}\">\n      {{#agentTypes}}\n        <option value=\"{{.}}\">{{.}}</option>\n      {{/}}\n      </select>\n    </label>\n    <div class=\"netlogo-command-center-editor\"></div>\n    <button on-click='clear-history'>Clear</button>\n  </div>\n</div>"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=console.js.map
+</script> 
+  <script>(function() {
+  window.RactiveInfoTabEditor = Ractive.extend({
+    data: function() {
+      return {
+        isEditing: false
+      };
+    },
+    onrender: function() {
+      var infoTabEditor;
+      infoTabEditor = CodeMirror(this.find('.netlogo-info-editor'), {
+        value: this.get('rawText'),
+        tabsize: 2,
+        mode: 'markdown',
+        theme: 'netlogo-default',
+        editing: this.get('isEditing'),
+        lineWrapping: true
+      });
+      return infoTabEditor.on('change', (function(_this) {
+        return function() {
+          _this.set('rawText', infoTabEditor.getValue());
+          return _this.set('info', infoTabEditor.getValue());
+        };
+      })(this));
+    },
+    template: "<div class='netlogo-info-editor'></div>"
+  });
+
+  window.RactiveInfoTabWidget = Ractive.extend({
+    components: {
+      infoeditor: RactiveInfoTabEditor
+    },
+    mdToHTML: function(md) {
+      return window.html_sanitize(exports.toHTML(md), function(url) {
+        if (/^https?:\/\//.test(url)) {
+          return url;
+        } else {
+          return void 0;
+        }
+      }, function(id) {
+        return id;
+      });
+    },
+    template: "<div class='netlogo-tab-content netlogo-info'\n     grow-in='{disable:\"info-toggle\"}' shrink-out='{disable:\"info-toggle\"}'>\n  {{# !isEditing }}\n    <div class='netlogo-info-markdown'>{{{mdToHTML(rawText)}}}</div>\n  {{ else }}\n    <infoeditor rawText='{{rawText}}' />\n  {{ / }}\n</div>"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=info.js.map
+</script> 
+  <script>(function() {
+  var InputEditForm;
+
+  InputEditForm = EditForm.extend({
+    data: function() {
+      return {
+        boxtype: void 0,
+        display: void 0,
+        isMultiline: void 0,
+        value: void 0
+      };
+    },
+    components: {
+      formCheckbox: RactiveEditFormCheckbox,
+      formDropdown: RactiveEditFormDropdown,
+      formVariable: RactiveEditFormVariable,
+      spacer: RactiveEditFormSpacer
+    },
+    twoway: false,
+    genProps: function(form) {
+      var boxedValueBasis, boxtype, value, variable;
+      boxtype = form.boxtype.value;
+      variable = form.variable.value;
+      value = (function() {
+        if (boxtype === this.get('boxtype')) {
+          return this.get('value');
+        } else {
+          switch (boxtype) {
+            case "Color":
+              return 0;
+            case "Number":
+              return 0;
+            default:
+              return "";
+          }
+        }
+      }).call(this);
+      boxedValueBasis = boxtype !== "Color" && boxtype !== "Number" ? {
+        multiline: form.multiline.checked
+      } : {};
+      return {
+        boxedValue: Object.assign(boxedValueBasis, {
+          type: boxtype,
+          value: value
+        }),
+        currentValue: value,
+        display: variable,
+        variable: variable.toLowerCase()
+      };
+    },
+    partials: {
+      title: "Input",
+      widgetFields: "<formVariable id=\"{{id}}-varname\" name=\"variable\" value=\"{{display}}\" />\n<spacer height=\"15px\" />\n<div class=\"flex-row\" style=\"align-items: center;\">\n  <formDropdown id=\"{{id}}-boxtype\" name=\"boxtype\" label=\"Type\" selected=\"{{boxtype}}\"\n                choices=\"['Number', 'String', 'Color', 'String (reporter)', 'String (commands)']\"\n                disableds=\"['String (reporter)', 'String (commands)']\" /> <!-- Disabled until `run`/`runresult` work on strings --JAB (6/8/16) -->\n  <formCheckbox id=\"{{id}}-multiline-checkbox\" isChecked={{isMultiline}} labelText=\"Multiline\"\n                name=\"multiline\" disabled=\"typeof({{isMultiline}}) === 'undefined'\" />\n</div>\n<spacer height=\"10px\" />"
+    }
+  });
+
+  window.RactiveInput = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit, this.standardOptions(this)["delete"]]
+      };
+    },
+    computed: {
+      hexColor: {
+        get: function() {
+          var ex;
+          try {
+            return netlogoColorToHexString(this.get('widget').currentValue);
+          } catch (error) {
+            ex = error;
+            return "#000000";
+          }
+        },
+        set: function(hex) {
+          var color, ex;
+          color = (function() {
+            try {
+              return hexStringToNetlogoColor(hex);
+            } catch (error) {
+              ex = error;
+              return 0;
+            }
+          })();
+          this.set('widget.currentValue', color);
+        }
+      }
+    },
+    components: {
+      editForm: InputEditForm,
+      editor: RactiveCodeContainerMultiline
+    },
+    eventTriggers: function() {
+      return {
+        variable: [this._weg.recompile, this._weg.rename]
+      };
+    },
+    on: {
+      'handle-keypress': function(arg) {
+        var keyCode, ref, target;
+        ref = arg.original, keyCode = ref.keyCode, target = ref.target;
+        if ((!this.get('widget.boxedValue.multiline')) && keyCode === 13) {
+          target.blur();
+          return false;
+        }
+      },
+      render: function() {
+        return this.observe('widget.currentValue', function(newValue) {
+          var elem, ref, scrollToBottom;
+          elem = this.find('.netlogo-multiline-input');
+          if (elem != null) {
+            scrollToBottom = function() {
+              return elem.scrollTop = elem.scrollHeight;
+            };
+            setTimeout(scrollToBottom, 0);
+          }
+          if ((ref = this.findComponent('editor')) != null) {
+            ref.setCode(newValue);
+          }
+        });
+      }
+    },
+    template: "{{>input}}\n<editForm idBasis=\"{{id}}\" boxtype=\"{{widget.boxedValue.type}}\" display=\"{{widget.display}}\"\n          {{# widget.boxedValue.type !== 'Color' && widget.boxedValue.type !== 'Number' }}\n            isMultiline=\"{{widget.boxedValue.multiline}}\"\n          {{/}} value=\"{{widget.currentValue}}\"\n          />\n{{>editorOverlay}}",
+    partials: {
+      input: "<label id=\"{{id}}\" class=\"netlogo-widget netlogo-input-box netlogo-input{{#isEditing}} interface-unlocked{{/}}\" style=\"{{dims}}\">\n  <div class=\"netlogo-label\">{{widget.variable}}</div>\n  {{# widget.boxedValue.type === 'Number'}}\n    <input class=\"netlogo-multiline-input\" type=\"number\" value=\"{{widget.currentValue}}\" lazy=\"true\" {{# isEditing }}disabled{{/}} />\n  {{/}}\n  {{# widget.boxedValue.type === 'String'}}\n    <textarea class=\"netlogo-multiline-input\" value=\"{{widget.currentValue}}\" on-keypress=\"handle-keypress\" lazy=\"true\" {{# isEditing }}disabled{{/}} ></textarea>\n  {{/}}\n  {{# widget.boxedValue.type === 'String (reporter)' || widget.boxedValue.type === 'String (commands)' }}\n    <editor extraClasses=\"['netlogo-multiline-input']\" id=\"{{id}}-code\" injectedConfig=\"{ scrollbarStyle: 'null' }\" style=\"height: 50%;\" code=\"{{widget.currentValue}}\" isDisabled=\"{{isEditing}}\" />\n  {{/}}\n  {{# widget.boxedValue.type === 'Color'}}\n    <input class=\"netlogo-multiline-input\" style=\"margin: 0; width: 100%;\" type=\"color\" value=\"{{hexColor}}\" {{# isEditing }}disabled{{/}} />\n  {{/}}\n</label>"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=input.js.map
+</script> 
+  <script>(function() {
+  var LabelEditForm;
+
+  LabelEditForm = EditForm.extend({
+    data: function() {
+      return {
+        color: void 0,
+        fontSize: void 0,
+        text: void 0,
+        transparent: void 0
+      };
+    },
+    twoway: false,
+    components: {
+      formCheckbox: RactiveEditFormCheckbox,
+      formFontSize: RactiveEditFormFontSize,
+      labeledInput: RactiveEditFormLabeledInput,
+      spacer: RactiveEditFormSpacer
+    },
+    genProps: function(form) {
+      var color;
+      color = window.hexStringToNetlogoColor(form.color.value);
+      return {
+        color: color,
+        display: form.text.value,
+        fontSize: parseInt(form.fontSize.value),
+        transparent: form.transparent.checked
+      };
+    },
+    partials: {
+      title: "Note",
+      widgetFields: "<label for=\"{{id}}-text\">Text</label><br>\n<textarea id=\"{{id}}-text\" class=\"widget-edit-textbox\"\n          name=\"text\" placeholder=\"Enter note text here...\"\n          value=\"{{text}}\" autofocus></textarea>\n\n<spacer height=\"20px\" />\n\n<div class=\"flex-row\" style=\"align-items: center;\">\n  <div style=\"width: 48%;\">\n    <formFontSize id=\"{{id}}-font-size\" name=\"fontSize\" value=\"{{fontSize}}\"/>\n  </div>\n  <spacer width=\"4%\" />\n  <div style=\"width: 48%;\">\n    <labeledInput id=\"{{id}}-text-color\" labelStr=\"Text color:\" name=\"color\" class=\"widget-edit-color-pick\" type=\"color\" value=\"{{color}}\" />\n  </div>\n</div>\n\n<spacer height=\"15px\" />\n\n<formCheckbox id=\"{{id}}-transparent-checkbox\" isChecked={{transparent}} labelText=\"Transparent background\" name=\"transparent\" />"
+    }
+  });
+
+  window.RactiveLabel = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit, this.standardOptions(this)["delete"]],
+        convertColor: netlogoColorToCSS
+      };
+    },
+    components: {
+      editForm: LabelEditForm
+    },
+    eventTriggers: function() {
+      return {};
+    },
+    computed: {
+      hexColor: function() {
+        return window.netlogoColorToHexString(this.get('widget').color);
+      }
+    },
+    template: "{{>label}}\n{{>form}}\n{{>editorOverlay}}",
+    partials: {
+      label: "<pre id=\"{{id}}\" class=\"netlogo-widget netlogo-text-box{{#isEditing}} interface-unlocked{{/}}\"\n     style=\"{{dims}} font-size: {{widget.fontSize}}px; color: {{ convertColor(widget.color) }}; {{# widget.transparent}}background: transparent;{{/}}\"\n     >{{ widget.display }}</pre>",
+      form: "<editForm idBasis=\"{{id}}\" color=\"{{hexColor}}\"\n          fontSize=\"{{widget.fontSize}}\" text=\"{{widget.display}}\"\n          transparent=\"{{widget.transparent}}\" />"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=label.js.map
+</script> 
+  <script>(function() {
+  var MonitorEditForm;
+
+  MonitorEditForm = EditForm.extend({
+    data: function() {
+      return {
+        display: void 0,
+        fontSize: void 0,
+        precision: void 0,
+        source: void 0
+      };
+    },
+    components: {
+      formCode: RactiveEditFormCodeContainer,
+      formFontSize: RactiveEditFormFontSize,
+      labeledInput: RactiveEditFormLabeledInput,
+      spacer: RactiveEditFormSpacer
+    },
+    twoway: false,
+    genProps: function(form) {
+      return {
+        display: (form.display.value !== "" ? form.display.value : void 0),
+        fontSize: parseInt(form.fontSize.value),
+        precision: parseInt(form.precision.value),
+        source: this.findComponent('formCode').findComponent('codeContainer').get('code')
+      };
+    },
+    partials: {
+      title: "Monitor",
+      widgetFields: "<formCode id=\"{{id}}-source\" name=\"source\" value=\"{{source}}\" label=\"Reporter\" />\n\n<spacer height=\"15px\" />\n\n<div class=\"flex-row\" style=\"align-items: center;\">\n  <labeledInput id=\"{{id}}-display\" labelStr=\"Display name:\" name=\"display\" class=\"widget-edit-inputbox\" type=\"text\" value=\"{{display}}\" />\n</div>\n\n<spacer height=\"15px\" />\n\n<div class=\"flex-row\" style=\"align-items: center; justify-content: space-between;\">\n\n  <label for=\"{{id}}\">Decimal places: </label>\n  <input  id=\"{{id}}\" name=\"precision\" placeholder=\"(Required)\"\n          class=\"widget-edit-inputbox\" style=\"width: 70px;\"\n          type=\"number\" value=\"{{precision}}\" min=-30 max=17 step=1 required />\n  <spacer width=\"50px\" />\n  <formFontSize id=\"{{id}}-font-size\" name=\"fontSize\" value=\"{{fontSize}}\"/>\n\n</div>"
+    }
+  });
+
+  window.RactiveMonitor = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit, this.standardOptions(this)["delete"]],
+        errorClass: void 0,
+        resizeDirs: ['left', 'right']
+      };
+    },
+    components: {
+      editForm: MonitorEditForm
+    },
+    eventTriggers: function() {
+      return {
+        source: [this._weg.recompile]
+      };
+    },
+    template: "{{>monitor}}\n<editForm idBasis=\"{{id}}\" display=\"{{widget.display}}\" fontSize=\"{{widget.fontSize}}\"\n          precision=\"{{widget.precision}}\" source=\"{{widget.source}}\" />\n{{>editorOverlay}}",
+    partials: {
+      monitor: "<div id=\"{{id}}\" class=\"netlogo-widget netlogo-monitor netlogo-output{{#isEditing}} interface-unlocked{{/}}\"\n     style=\"{{dims}} font-size: {{widget.fontSize}}px;\">\n  <label class=\"netlogo-label {{errorClass}}\" on-click=\"show-errors\">{{widget.display || widget.source}}</label>\n  <output class=\"netlogo-value\">{{widget.currentValue}}</output>\n</div>"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=monitor.js.map
+</script> 
+  <script>(function() {
+  var OutputEditForm;
+
+  OutputEditForm = EditForm.extend({
+    data: function() {
+      return {
+        fontSize: void 0
+      };
+    },
+    twoway: false,
+    components: {
+      formFontSize: RactiveEditFormFontSize
+    },
+    genProps: function(form) {
+      return {
+        fontSize: parseInt(form.fontSize.value)
+      };
+    },
+    partials: {
+      title: "Output",
+      widgetFields: "<formFontSize id=\"{{id}}-font-size\" name=\"fontSize\" style=\"margin-left: 0;\" value=\"{{fontSize}}\"/>"
+    }
+  });
+
+  window.RactiveOutputArea = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit, this.standardOptions(this)["delete"]],
+        text: void 0
+      };
+    },
+    components: {
+      editForm: OutputEditForm,
+      printArea: RactivePrintArea
+    },
+    eventTriggers: function() {
+      return {};
+    },
+    appendText: function(str) {
+      this.set('text', this.get('text') + str);
+    },
+    setText: function(str) {
+      this.set('text', str);
+    },
+    template: "{{>output}}\n<editForm idBasis=\"{{id}}\" fontSize=\"{{widget.fontSize}}\" style=\"width: 285px;\" />\n{{>editorOverlay}}",
+    partials: {
+      output: "<div id=\"{{id}}\" class=\"netlogo-widget netlogo-output netlogo-output-widget{{#isEditing}} interface-unlocked{{/}}\" style=\"{{dims}}\">\n  <printArea id=\"{{id}}-print-area\" fontSize=\"{{widget.fontSize}}\" output=\"{{text}}\" />\n</div>"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=output.js.map
+</script> 
+  <script>(function() {
+  window.RactivePlot = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this)["delete"]],
+        isNotEditable: true,
+        menuIsOpen: false,
+        resizeCallback: (function(x, y) {})
+      };
+    },
+    observe: {
+      'left right top bottom': function() {
+        this.get('resizeCallback')(this.get('right') - this.get('left'), this.get('bottom') - this.get('top'));
+      }
+    },
+    on: {
+      render: function() {
+        var ractive, topLevel, topLevelObserver;
+        ractive = this;
+        topLevel = document.querySelector("#" + (this.get('id')));
+        topLevelObserver = new MutationObserver(function(mutations) {
+          return mutations.forEach(function(arg) {
+            var addedNodes, container, containerObserver;
+            addedNodes = arg.addedNodes;
+            container = Array.from(addedNodes).find(function(elem) {
+              return elem.classList.contains("highcharts-container");
+            });
+            if (container != null) {
+              topLevelObserver.disconnect();
+              containerObserver = new MutationObserver(function(mutties) {
+                return mutties.forEach(function(arg1) {
+                  var addedNodies, menu, menuObserver;
+                  addedNodies = arg1.addedNodes;
+                  menu = Array.from(addedNodies).find(function(elem) {
+                    return elem.classList.contains("highcharts-contextmenu");
+                  });
+                  if (menu != null) {
+                    ractive.set('menuIsOpen', true);
+                    containerObserver.disconnect();
+                    menuObserver = new MutationObserver(function() {
+                      return ractive.set('menuIsOpen', menu.style.display !== "none");
+                    });
+                    return menuObserver.observe(menu, {
+                      attributes: true
+                    });
+                  }
+                });
+              });
+              return containerObserver.observe(container, {
+                childList: true
+              });
+            }
+          });
+        });
+        return topLevelObserver.observe(topLevel, {
+          childList: true
+        });
+      }
+    },
+    template: "<div id=\"{{id}}\" class=\"netlogo-widget netlogo-plot{{#isEditing}} interface-unlocked{{/}}\"\n     style=\"{{dims}}{{#menuIsOpen}}z-index: 10;{{/}}\"></div>\n{{>editorOverlay}}"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=plot.js.map
+</script> 
+  <script>(function() {
+  window.RactiveResizer = Ractive.extend({
+    isLocked: false,
+    lastUpdateMs: void 0,
+    lastX: void 0,
+    lastY: void 0,
+    view: void 0,
+    data: function() {
+      return {
+        isEnabled: false,
+        target: null
+      };
+    },
+    computed: {
+      dims: function() {
+        return "position: absolute;\nleft: " + (this.get('left')) + "px; top: " + (this.get('top')) + "px;\nwidth: " + (this.get('width')) + "px; height: " + (this.get('height')) + "px;";
+      },
+      midX: function() {
+        return (this.get('width') / 2) - 5;
+      },
+      midY: function() {
+        return (this.get('height') / 2) - 5;
+      },
+      left: function() {
+        return this.get('target').get('left') - 5;
+      },
+      right: function() {
+        return this.get('target').get('right') + 5;
+      },
+      top: function() {
+        return this.get('target').get('top') - 5;
+      },
+      bottom: function() {
+        return this.get('target').get('bottom') + 5;
+      },
+      height: function() {
+        return this.get('bottom') - this.get('top');
+      },
+      width: function() {
+        return this.get('right') - this.get('left');
+      }
+    },
+    clearTarget: function() {
+      var target;
+      target = this.get('target');
+      if (!this.isLocked && (target != null)) {
+        if (!target.destroyed) {
+          target.find('.netlogo-widget').classList.remove('widget-selected');
+        }
+        this.set('target', null);
+      }
+    },
+    setTarget: function(newTarget) {
+      if (!this.isLocked) {
+        setTimeout(((function(_this) {
+          return function() {
+            _this.clearTarget();
+            _this.set('target', newTarget);
+            return newTarget.find('.netlogo-widget').classList.add('widget-selected');
+          };
+        })(this)), 0);
+      }
+    },
+    lockTarget: function(newTarget) {
+      if (!this.isLocked && (newTarget != null)) {
+        this.setTarget(newTarget);
+        this.isLocked = true;
+      }
+    },
+    unlockTarget: function() {
+      this.isLocked = false;
+    },
+    on: {
+      'start-handle-drag': function(event) {
+        return CommonDrag.dragstart.call(this, event, (function() {
+          return true;
+        }), (function(_this) {
+          return function(x, y) {
+            _this.lastX = x;
+            return _this.lastY = y;
+          };
+        })(this));
+      },
+      'drag-handle': function(event) {
+        return CommonDrag.drag.call(this, event, (function(_this) {
+          return function(x, y) {
+            var adjusted, adjusters, adjustment, bottom, currentCor, dir, direction, exceedsOpposite, findAdjustment, i, lastCor, left, len, newValue, oldBottom, oldLeft, oldRight, oldTop, ref, right, target, top;
+            target = _this.get('target');
+            oldLeft = target.get('left');
+            oldRight = target.get('right');
+            oldTop = target.get('top');
+            oldBottom = target.get('bottom');
+            left = ['left', _this.lastX, x];
+            right = ['right', _this.lastX, x];
+            top = ['top', _this.lastY, y];
+            bottom = ['bottom', _this.lastY, y];
+            direction = event.original.target.dataset.direction;
+            adjusters = (function() {
+              switch (direction) {
+                case "Bottom":
+                  return [bottom];
+                case "BottomLeft":
+                  return [bottom, left];
+                case "BottomRight":
+                  return [bottom, right];
+                case "Left":
+                  return [left];
+                case "Right":
+                  return [right];
+                case "Top":
+                  return [top];
+                case "TopLeft":
+                  return [top, left];
+                case "TopRight":
+                  return [top, right];
+                default:
+                  throw new Error("What the heck resize direction is '" + direction + "'?");
+              }
+            })();
+            exceedsOpposite = function(dir, value) {
+              var opposite, oppositeValue;
+              opposite = (function() {
+                switch (dir) {
+                  case 'left':
+                    return 'right';
+                  case 'right':
+                    return 'left';
+                  case 'top':
+                    return 'bottom';
+                  case 'bottom':
+                    return 'top';
+                  default:
+                    throw new Error("What the heck opposite direction is '" + dir + "'?");
+                }
+              })();
+              oppositeValue = _this.get(opposite);
+              return ((opposite === 'left' || opposite === 'top') && newValue <= (oppositeValue + 26)) || ((opposite === 'right' || opposite === 'bottom') && newValue >= (oppositeValue - 26));
+            };
+            findAdjustment = function(n) {
+              return n - (Math.round(n / 10) * 10);
+            };
+            for (i = 0, len = adjusters.length; i < len; i++) {
+              ref = adjusters[i], dir = ref[0], lastCor = ref[1], currentCor = ref[2];
+              newValue = target.get(dir) - (lastCor - currentCor);
+              adjustment = findAdjustment(newValue);
+              adjusted = newValue - adjustment;
+              if (!exceedsOpposite(dir, adjusted)) {
+                target.set(dir, adjusted);
+              }
+            }
+            _this.lastX = x;
+            _this.lastY = y;
+            return _this.get('target').fire('widget-resized', oldLeft, oldRight, oldTop, oldBottom, target.get('left'), target.get('right'), target.get('top'), target.get('bottom'));
+          };
+        })(this));
+      },
+      'stop-handle-drag': function() {
+        return CommonDrag.dragend.call(this, (function(_this) {
+          return function() {
+            _this.lastX = void 0;
+            return _this.lastY = void 0;
+          };
+        })(this));
+      }
+    },
+    template: "{{# isEnabled && target !== null }}\n<div class=\"widget-resizer\" style=\"{{dims}}\">\n  {{ #target.get(\"resizeDirs\").includes(\"bottom\")      }}<div draggable=\"true\" on-drag=\"drag-handle\" on-dragstart=\"start-handle-drag\" on-dragend=\"stop-handle-drag\" class=\"widget-resize-handle\" data-direction=\"Bottom\"      style=\"cursor:  s-resize; bottom:          0; left:   {{midX}};\"></div>{{/}}\n  {{ #target.get(\"resizeDirs\").includes(\"bottomLeft\")  }}<div draggable=\"true\" on-drag=\"drag-handle\" on-dragstart=\"start-handle-drag\" on-dragend=\"stop-handle-drag\" class=\"widget-resize-handle\" data-direction=\"BottomLeft\"  style=\"cursor: sw-resize; bottom:          0; left:          0;\"></div>{{/}}\n  {{ #target.get(\"resizeDirs\").includes(\"bottomRight\") }}<div draggable=\"true\" on-drag=\"drag-handle\" on-dragstart=\"start-handle-drag\" on-dragend=\"stop-handle-drag\" class=\"widget-resize-handle\" data-direction=\"BottomRight\" style=\"cursor: se-resize; bottom:          0; right:         0;\"></div>{{/}}\n  {{ #target.get(\"resizeDirs\").includes(\"left\")        }}<div draggable=\"true\" on-drag=\"drag-handle\" on-dragstart=\"start-handle-drag\" on-dragend=\"stop-handle-drag\" class=\"widget-resize-handle\" data-direction=\"Left\"        style=\"cursor:  w-resize; bottom:   {{midY}}; left:          0;\"></div>{{/}}\n  {{ #target.get(\"resizeDirs\").includes(\"right\")       }}<div draggable=\"true\" on-drag=\"drag-handle\" on-dragstart=\"start-handle-drag\" on-dragend=\"stop-handle-drag\" class=\"widget-resize-handle\" data-direction=\"Right\"       style=\"cursor:  e-resize; bottom:   {{midY}}; right:         0;\"></div>{{/}}\n  {{ #target.get(\"resizeDirs\").includes(\"top\")         }}<div draggable=\"true\" on-drag=\"drag-handle\" on-dragstart=\"start-handle-drag\" on-dragend=\"stop-handle-drag\" class=\"widget-resize-handle\" data-direction=\"Top\"         style=\"cursor:  n-resize; top:             0; left:   {{midX}};\"></div>{{/}}\n  {{ #target.get(\"resizeDirs\").includes(\"topLeft\")     }}<div draggable=\"true\" on-drag=\"drag-handle\" on-dragstart=\"start-handle-drag\" on-dragend=\"stop-handle-drag\" class=\"widget-resize-handle\" data-direction=\"TopLeft\"     style=\"cursor: nw-resize; top:             0; left:          0;\"></div>{{/}}\n  {{ #target.get(\"resizeDirs\").includes(\"topRight\")    }}<div draggable=\"true\" on-drag=\"drag-handle\" on-dragstart=\"start-handle-drag\" on-dragend=\"stop-handle-drag\" class=\"widget-resize-handle\" data-direction=\"TopRight\"    style=\"cursor: ne-resize; top:             0; right:         0;\"></div>{{/}}\n</div>\n{{/}}"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=resizer.js.map
+</script> 
+  <script>(function() {
+  var FlexColumn, SliderEditForm;
+
+  FlexColumn = Ractive.extend({
+    template: "<div class=\"flex-column\" style=\"align-items: center; flex-grow: 1; max-width: 140px;\">\n  {{ yield }}\n</div>"
+  });
+
+  SliderEditForm = EditForm.extend({
+    data: function() {
+      return {
+        bottom: void 0,
+        direction: void 0,
+        left: void 0,
+        maxCode: void 0,
+        minCode: void 0,
+        right: void 0,
+        stepCode: void 0,
+        top: void 0,
+        units: void 0,
+        value: void 0,
+        variable: void 0
+      };
+    },
+    twoway: false,
+    components: {
+      column: FlexColumn,
+      formCheckbox: RactiveEditFormCheckbox,
+      formMaxCode: RactiveEditFormCodeContainer,
+      formMinCode: RactiveEditFormCodeContainer,
+      formStepCode: RactiveEditFormCodeContainer,
+      formVariable: RactiveEditFormVariable,
+      labeledInput: RactiveEditFormLabeledInput,
+      spacer: RactiveEditFormSpacer
+    },
+    genProps: function(form) {
+      var bottom, oldBottom, oldLeft, oldRight, oldTop, ref, right, value;
+      value = form.value.valueAsNumber;
+      oldTop = this.get('top');
+      oldRight = this.get('right');
+      oldBottom = this.get('bottom');
+      oldLeft = this.get('left');
+      ref = this.get('direction') === 'horizontal' && form.vertical.checked ? [oldLeft + (oldBottom - oldTop), oldTop + (oldRight - oldLeft)] : this.get('direction') === 'vertical' && !form.vertical.checked ? [oldTop + (oldRight - oldLeft), oldLeft + (oldBottom - oldTop)] : [oldRight, oldBottom], right = ref[0], bottom = ref[1];
+      return {
+        bottom: bottom,
+        currentValue: value,
+        "default": value,
+        direction: (form.vertical.checked ? "vertical" : "horizontal"),
+        display: form.variable.value,
+        max: this.findComponent('formMaxCode').findComponent('codeContainer').get('code'),
+        min: this.findComponent('formMinCode').findComponent('codeContainer').get('code'),
+        right: right,
+        step: this.findComponent('formStepCode').findComponent('codeContainer').get('code'),
+        units: (form.units.value !== "" ? form.units.value : void 0),
+        variable: form.variable.value.toLowerCase()
+      };
+    },
+    partials: {
+      title: "Slider",
+      widgetFields: "<formVariable id=\"{{id}}-varname\" name=\"variable\" value=\"{{variable}}\"/>\n\n<spacer height=\"15px\" />\n\n<div class=\"flex-row\" style=\"align-items: stretch; justify-content: space-around\">\n  <column>\n    <formMinCode id=\"{{id}}-min-code\" label=\"Minimum\" name=\"minCode\" config=\"{ scrollbarStyle: 'null' }\"\n                 style=\"width: 100%;\" value=\"{{minCode}}\" />\n  </column>\n  <column>\n    <formStepCode id=\"{{id}}-step-code\" label=\"Increment\" name=\"stepCode\" config=\"{ scrollbarStyle: 'null' }\"\n                  style=\"width: 100%;\" value=\"{{stepCode}}\" />\n  </column>\n  <column>\n    <formMaxCode id=\"{{id}}-max-code\" label=\"Maximum\" name=\"maxCode\" config=\"{ scrollbarStyle: 'null' }\"\n                 style=\"width: 100%;\" value=\"{{maxCode}}\" />\n  </column>\n</div>\n<spacer height=\"5px\" />\n<span style=\"font-size: 12px;\">min, increment, and max may be numbers or reporters</span>\n\n<spacer height=\"15px\" />\n\n<div class=\"flex-row\" style=\"align-items: center;\">\n  <labeledInput id=\"{{id}}-value\" labelStr=\"Default value:\" name=\"value\" type=\"number\" value=\"{{value}}\" attrs=\"required step='any'\"\n                style=\"flex-grow: 1; text-align: right;\" />\n  <labeledInput id=\"{{id}}-units\" labelStr=\"Units:\" labelStyle=\"margin-left: 10px;\" name=\"units\" type=\"text\" value=\"{{units}}\"\n                style=\"flex-grow: 1; padding: 4px;\" />\n</div>\n\n<spacer height=\"15px\" />\n\n<formCheckbox id=\"{{id}}-vertical\" isChecked=\"{{ direction === 'vertical' }}\" labelText=\"Vertical?\"\n              name=\"vertical\" />"
+    }
+  });
+
+  window.RactiveSlider = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit, this.standardOptions(this)["delete"]],
+        errorClass: void 0
+      };
+    },
+    computed: {
+      resizeDirs: {
+        get: function() {
+          if (this.get('widget.direction') !== 'vertical') {
+            return ['left', 'right'];
+          } else {
+            return ['top', 'bottom'];
+          }
+        },
+        set: (function() {})
+      }
+    },
+    components: {
+      editForm: SliderEditForm
+    },
+    eventTriggers: function() {
+      return {
+        max: [this._weg.recompile],
+        min: [this._weg.recompile],
+        step: [this._weg.recompile],
+        variable: [this._weg.recompile, this._weg.rename]
+      };
+    },
+    template: "{{>slider}}\n<editForm direction=\"{{widget.direction}}\" idBasis=\"{{id}}\" maxCode=\"{{widget.max}}\"\n          minCode=\"{{widget.min}}\" stepCode=\"{{widget.step}}\" units=\"{{widget.units}}\"\n          top=\"{{widget.top}}\" right=\"{{widget.right}}\" bottom=\"{{widget.bottom}}\"\n          left=\"{{widget.left}}\" value=\"{{widget.default}}\" variable=\"{{widget.variable}}\" />\n{{>editorOverlay}}",
+    partials: {
+      slider: "<label id=\"{{id}}\" class=\"netlogo-widget netlogo-slider netlogo-input {{errorClass}}{{#isEditing}} interface-unlocked{{/}}\"\n       style=\"{{ #widget.direction !== 'vertical' }}{{dims}}{{else}}{{>verticalDims}}{{/}}\">\n  <input type=\"range\"\n         max=\"{{widget.maxValue}}\" min=\"{{widget.minValue}}\"\n         step=\"{{widget.stepValue}}\" value=\"{{widget.currentValue}}\"\n         {{# isEditing }}disabled{{/}} />\n  <div class=\"netlogo-slider-label\">\n    <span class=\"netlogo-label\" on-click=\"show-errors\">{{widget.display}}</span>\n    <span class=\"netlogo-slider-value\">\n      <input type=\"number\"\n             style=\"width: {{widget.currentValue.toString().length + 3.0}}ch\"\n             min={{widget.minValue}} max={{widget.maxValue}}\n             value={{widget.currentValue}} step={{widget.stepValue}}\n             {{# isEditing }}disabled{{/}} />\n      {{#widget.units}}{{widget.units}}{{/}}\n    </span>\n  </div>\n</label>",
+      verticalDims: "position: absolute;\nleft: {{ left }}px; top: {{ top }}px;\nwidth: {{ bottom - top }}px; height: {{ right - left }}px;\ntransform: translateY({{ bottom - top }}px) rotate(270deg);\ntransform-origin: top left;"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=slider.js.map
+</script> 
+  <script>(function() {
+  var SwitchEditForm;
+
+  SwitchEditForm = EditForm.extend({
+    data: function() {
+      return {
+        display: void 0
+      };
+    },
+    twoway: false,
+    components: {
+      formVariable: RactiveEditFormVariable
+    },
+    genProps: function(form) {
+      var variable;
+      variable = form.variable.value;
+      return {
+        display: variable,
+        variable: variable.toLowerCase()
+      };
+    },
+    partials: {
+      title: "Switch",
+      widgetFields: "<formVariable id=\"{{id}}-varname\" name=\"variable\" value=\"{{display}}\"/>"
+    }
+  });
+
+  window.RactiveSwitch = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit, this.standardOptions(this)["delete"]],
+        resizeDirs: ['left', 'right']
+      };
+    },
+    oninit: function() {
+      this._super();
+      return Object.defineProperty(this.get('widget'), "on", {
+        get: function() {
+          return this.currentValue;
+        },
+        set: function(x) {
+          return this.currentValue = x;
+        }
+      });
+    },
+    components: {
+      editForm: SwitchEditForm
+    },
+    eventTriggers: function() {
+      return {
+        variable: [this._weg.recompile, this._weg.rename]
+      };
+    },
+    template: "{{>switch}}\n<editForm idBasis=\"{{id}}\" display=\"{{widget.display}}\" />\n{{>editorOverlay}}",
+    partials: {
+      "switch": "<label id=\"{{id}}\" class=\"netlogo-widget netlogo-switcher netlogo-input{{#isEditing}} interface-unlocked{{/}}\" style=\"{{dims}}\">\n  <input type=\"checkbox\" checked=\"{{ widget.currentValue }}\" {{# isEditing }} disabled{{/}} />\n  <span class=\"netlogo-label\">{{ widget.display }}</span>\n</label>"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=switch.js.map
+</script> 
+  <script>(function() {
+  window.RactiveModelTitle = RactiveContextable.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [
+          {
+            text: "Edit",
+            isEnabled: true,
+            action: (function(_this) {
+              return function() {
+                return _this.fire('edit-title');
+              };
+            })(this)
+          }
+        ],
+        isEditing: void 0,
+        title: void 0
+      };
+    },
+    on: {
+      'edit-title': function() {
+        var defaultOnEmpty, newName, oldName, ref;
+        defaultOnEmpty = function(s) {
+          if (s === '') {
+            return "Untitled";
+          } else {
+            return s;
+          }
+        };
+        if (this.get('isEditing')) {
+          oldName = this.get('title');
+          newName = prompt("Enter a new name for your model", oldName);
+          this.set('title', (ref = defaultOnEmpty(newName)) != null ? ref : oldName);
+        }
+      }
+    },
+    template: "<div class=\"netlogo-model-masthead\">\n  <div class=\"flex-row\" style=\"justify-content: center; height: 30px; line-height: 30px;\">\n    <h2 id=\"netlogo-title\"\n        on-contextmenu=\"@this.fire('show-context-menu', @event)\"\n        class=\"netlogo-widget netlogo-model-title{{#isEditing}} interface-unlocked{{/}}\"\n        on-dblclick=\"edit-title\">\n      {{ title }}\n    </h2>\n  </div>\n</div>"
+  });
+
+}).call(this);
+
+//# sourceMappingURL=title.js.map
+</script> 
+  <script>(function() {
+  var RactiveEditFormCoordBoundInput, ViewEditForm;
+
+  RactiveEditFormCoordBoundInput = Ractive.extend({
+    data: function() {
+      return {
+        id: void 0,
+        hint: void 0,
+        label: void 0,
+        max: void 0,
+        min: void 0,
+        name: void 0,
+        value: void 0
+      };
+    },
+    isolated: true,
+    twoway: false,
+    components: {
+      labeledInput: RactiveEditFormLabeledInput
+    },
+    template: "<div>\n  <labeledInput id=\"{{id}}\" labelStr=\"{{label}}\"\n                labelStyle=\"min-width: 100px; white-space: nowrap;\"\n                name=\"{{name}}\" style=\"text-align: right;\" type=\"number\"\n                attrs=\"min='{{min}}' max='{{max}}' step=1 required\"\n                value=\"{{value}}\" />\n  <div class=\"widget-edit-hint-text\">{{hint}}</div>\n</div>"
+  });
+
+  ViewEditForm = EditForm.extend({
+    data: function() {
+      return {
+        framerate: void 0,
+        isShowingTicks: void 0,
+        maxX: void 0,
+        maxY: void 0,
+        minX: void 0,
+        minY: void 0,
+        patchSize: void 0,
+        tickLabel: void 0,
+        turtleLabelSize: void 0,
+        wrapsInX: void 0,
+        wrapsInY: void 0
+      };
+    },
+    computed: {
+      topology: {
+        get: function() {
+          if (this.get('wrapsInX')) {
+            if (this.get('wrapsInY')) {
+              return "Torus";
+            } else {
+              return "Horizontal Cylinder";
+            }
+          } else if (this.get('wrapsInY')) {
+            return "Vertical Cylinder";
+          } else {
+            return "Box";
+          }
+        }
+      }
+    },
+    twoway: false,
+    components: {
+      coordInput: RactiveEditFormCoordBoundInput,
+      formCheckbox: RactiveEditFormCheckbox,
+      formFontSize: RactiveEditFormFontSize,
+      labeledInput: RactiveEditFormLabeledInput,
+      spacer: RactiveEditFormSpacer
+    },
+    genProps: function(form) {
+      return {
+        'dimensions.maxPxcor': form.maxX.valueAsNumber,
+        'dimensions.maxPycor': form.maxY.valueAsNumber,
+        'dimensions.minPxcor': form.minX.valueAsNumber,
+        'dimensions.minPycor': form.minY.valueAsNumber,
+        'dimensions.patchSize': form.patchSize.valueAsNumber,
+        'dimensions.wrappingAllowedInX': form.wrapsInX.checked,
+        'dimensions.wrappingAllowedInY': form.wrapsInY.checked,
+        fontSize: form.turtleLabelSize.valueAsNumber,
+        frameRate: form.framerate.valueAsNumber,
+        showTickCounter: form.isShowingTicks.checked,
+        tickCounterLabel: form.tickLabel.value
+      };
+    },
+    partials: {
+      title: "Model Settings",
+      widgetFields: "{{>worldSet}}\n<spacer height=\"10px\" />\n{{>viewSet}}\n<spacer height=\"10px\" />\n{{>tickCounterSet}}",
+      worldSet: "<fieldset class=\"widget-edit-fieldset\">\n  <legend class=\"widget-edit-legend\">World</legend>\n  <div class=\"flex-row\">\n    {{>coordColumn}}\n    <spacer width=\"8%\" />\n    {{>wrappingColumn}}\n  </div>\n</fieldset>",
+      coordColumn: "<div class=\"flex-column\">\n\n  <coordInput id=\"{{id}}-min-x\" label=\"min-pxcor:\" name=\"minX\" value=\"{{minX}}\"\n              min=\"-50000\" max=\"0\" hint=\"minimum x coordinate for patches\" />\n\n  <coordInput id=\"{{id}}-max-x\" label=\"max-pxcor:\" name=\"maxX\" value=\"{{maxX}}\"\n              min=\"0\" max=\"50000\" hint=\"maximum x coordinate for patches\" />\n\n  <coordInput id=\"{{id}}-min-y\" label=\"min-pycor:\" name=\"minY\" value=\"{{minY}}\"\n              min=\"-50000\" max=\"0\" hint=\"minimum y coordinate for patches\" />\n\n  <coordInput id=\"{{id}}-max-y\" label=\"max-pycor:\" name=\"maxY\" value=\"{{maxY}}\"\n              min=\"0\" max=\"50000\" hint=\"maximum y coordinate for patches\" />\n\n</div>",
+      wrappingColumn: "<div class=\"flex-column\">\n  <formCheckbox id=\"{{id}}-wraps-in-x\" isChecked=\"{{ wrapsInX }}\"\n                labelText=\"Wraps horizontally\" name=\"wrapsInX\" />\n  <spacer height=\"10px\" />\n  <formCheckbox id=\"{{id}}-wraps-in-y\" isChecked=\"{{ wrapsInY }}\"\n                labelText=\"Wraps vertically\" name=\"wrapsInY\" />\n</div>",
+      viewSet: "<fieldset class=\"widget-edit-fieldset\">\n  <legend class=\"widget-edit-legend\">View</legend>\n  <div class=\"flex-row\">\n    <div class=\"flex-column\" style=\"flex-grow: 1;\">\n      <labeledInput id=\"{{id}}-patch-size\" labelStr=\"Patch size:\"\n                    name=\"patchSize\" type=\"number\" value=\"{{patchSize}}\"\n                    attrs=\"min=-1 step='any' required\" />\n      <div class=\"widget-edit-hint-text\">measured in pixels</div>\n    </div>\n    <spacer width=\"20px\" />\n    <div class=\"flex-column\" style=\"flex-grow: 1;\">\n      <formFontSize id=\"{{id}}-turtle-label-size\" name=\"turtleLabelSize\" value=\"{{turtleLabelSize}}\"/>\n      <div class=\"widget-edit-hint-text\">of labels on agents</div>\n    </div>\n  </div>\n\n  <spacer height=\"10px\" />\n\n  <labeledInput id=\"{{id}}-framerate\" labelStr=\"Frame rate:\" name=\"framerate\"\n                style=\"text-align: right;\" type=\"number\" value=\"{{framerate}}\"\n                attrs=\"min=0 step='any' required\" />\n  <div class=\"widget-edit-hint-text\">Frames per second at normal speed</div>\n\n</fieldset>",
+      tickCounterSet: "<fieldset class=\"widget-edit-fieldset\">\n  <legend class=\"widget-edit-legend\">Tick Counter</legend>\n  <formCheckbox id=\"{{id}}-is-showing-ticks\" isChecked=\"{{ isShowingTicks }}\"\n                labelText=\"Show tick counter\" name=\"isShowingTicks\" />\n  <spacer height=\"10px\" />\n  <labeledInput id=\"{{id}}-tick-label\" labelStr=\"Tick counter label:\" name=\"tickLabel\"\n                style=\"width: 230px;\" type=\"text\" value=\"{{tickLabel}}\" />\n</fieldset>"
+    }
+  });
+
+  window.RactiveView = RactiveWidget.extend({
+    data: function() {
+      return {
+        contextMenuOptions: [this.standardOptions(this).edit],
+        resizeDirs: ['topLeft', 'topRight', 'bottomLeft', 'bottomRight'],
+        ticks: void 0
+      };
+    },
+    components: {
+      editForm: ViewEditForm
+    },
+    eventTriggers: function() {
+      return {
+        fontSize: [this._weg.redrawView],
+        'dimensions.maxPxcor': [this._weg.resizeView, this._weg.redrawView],
+        'dimensions.maxPycor': [this._weg.resizeView, this._weg.redrawView],
+        'dimensions.minPxcor': [this._weg.resizeView, this._weg.redrawView],
+        'dimensions.minPycor': [this._weg.resizeView, this._weg.redrawView],
+        'dimensions.patchSize': [this._weg.redrawView],
+        'dimensions.wrappingAllowedInX': [this._weg.updateTopology, this._weg.redrawView],
+        'dimensions.wrappingAllowedInY': [this._weg.updateTopology, this._weg.redrawView]
+      };
+    },
+    on: {
+      'widget-resized': function(_, oldLeft, oldRight, oldTop, oldBottom, newLeft, newRight, newTop, newBottom) {
+        var dHeight, dWidth, dx, dy, newHeight, newWidth, oldHeight, oldWidth, patchSize, ratio, scaledHeight, scaledWidth;
+        oldWidth = oldRight - oldLeft;
+        oldHeight = oldBottom - oldTop;
+        newWidth = newRight - newLeft;
+        newHeight = newBottom - newTop;
+        dWidth = Math.abs(oldWidth - newWidth);
+        dHeight = Math.abs(oldHeight - newHeight);
+        ratio = dWidth > dHeight ? newWidth / oldWidth : newHeight / oldHeight;
+        patchSize = parseFloat((this.get('widget.dimensions.patchSize') * ratio).toFixed(2));
+        scaledWidth = patchSize * (this.get('widget.dimensions.maxPxcor') - this.get('widget.dimensions.minPxcor') + 1);
+        scaledHeight = patchSize * (this.get('widget.dimensions.maxPycor') - this.get('widget.dimensions.minPycor') + 1);
+        dx = Math.round((scaledWidth - oldWidth) / 2);
+        dy = Math.round((scaledHeight - oldHeight) / 2);
+        this.set('widget.top', oldTop - dy);
+        this.set('widget.bottom', oldBottom + dy);
+        this.set('widget.left', oldLeft - dx);
+        this.set('widget.right', oldRight + dx);
+        this.findComponent('editForm').set('patchSize', patchSize);
+        this.fire('set-patch-size', patchSize);
+        return this.fire('redraw-view');
+      }
+    },
+    template: "{{>view}}\n<editForm idBasis=\"view\"\n          maxX=\"{{widget.dimensions.maxPxcor}}\" maxY=\"{{widget.dimensions.maxPycor}}\"\n          minX=\"{{widget.dimensions.minPxcor}}\" minY=\"{{widget.dimensions.minPycor}}\"\n          wrapsInX=\"{{widget.dimensions.wrappingAllowedInX}}\" wrapsInY=\"{{widget.dimensions.wrappingAllowedInY}}\"\n          patchSize=\"{{widget.dimensions.patchSize}}\" turtleLabelSize=\"{{widget.fontSize}}\"\n          framerate=\"{{widget.frameRate}}\"\n          isShowingTicks=\"{{widget.showTickCounter}}\" tickLabel=\"{{widget.tickCounterLabel}}\" />\n{{>editorOverlay}}",
+    partials: {
+      view: "<div id=\"{{id}}\" class=\"netlogo-widget netlogo-view-container{{#isEditing}} interface-unlocked{{/}}\" style=\"{{dims}}\"></div>"
+    }
+  });
+
+}).call(this);
+
+//# sourceMappingURL=view.js.map
+</script> 
+  <script>(function() {
+  var IMAGE_SIZE, drawPath, setColoring,
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  IMAGE_SIZE = 300;
+
+  window.ShapeDrawer = (function() {
+    function ShapeDrawer(shapes1, onePixel1) {
+      this.shapes = shapes1;
+      this.onePixel = onePixel1;
+    }
+
+    ShapeDrawer.prototype.setTransparency = function(ctx, color) {
+      return ctx.globalAlpha = color.length > 3 ? color[3] / 255 : 1;
+    };
+
+    ShapeDrawer.prototype.drawShape = function(ctx, color, shapeName, thickness) {
+      if (thickness == null) {
+        thickness = 1;
+      }
+      ctx.translate(.5, -.5);
+      ctx.scale(-1 / IMAGE_SIZE, 1 / IMAGE_SIZE);
+      this.setTransparency(ctx, color);
+      ctx.save();
+      ctx.beginPath();
+      ctx.rect(0, 0, IMAGE_SIZE, IMAGE_SIZE);
+      ctx.clip();
+      this.drawRawShape(ctx, color, shapeName, thickness);
+      ctx.restore();
+    };
+
+    ShapeDrawer.prototype.drawRawShape = function(ctx, color, shapeName, thickness) {
+      var elem, j, len, ref, shape;
+      if (thickness == null) {
+        thickness = 1;
+      }
+      ctx.lineWidth = IMAGE_SIZE * this.onePixel * thickness;
+      shape = this.shapes[shapeName] || defaultShape;
+      ref = shape.elements;
+      for (j = 0, len = ref.length; j < len; j++) {
+        elem = ref[j];
+        draw[elem.type](ctx, color, elem);
+      }
+    };
+
+    return ShapeDrawer;
+
+  })();
+
+  window.CachingShapeDrawer = (function(superClass) {
+    extend(CachingShapeDrawer, superClass);
+
+    function CachingShapeDrawer(shapes, onePixel) {
+      CachingShapeDrawer.__super__.constructor.call(this, shapes, onePixel);
+      this.shapeCache = {};
+    }
+
+    CachingShapeDrawer.prototype.drawShape = function(ctx, color, shapeName, thickness) {
+      var shapeCanvas, shapeCtx, shapeKey;
+      if (thickness == null) {
+        thickness = 1;
+      }
+      shapeName = shapeName.toLowerCase();
+      shapeKey = this.shapeKey(shapeName, color);
+      shapeCanvas = this.shapeCache[shapeKey];
+      if (shapeCanvas == null) {
+        shapeCanvas = document.createElement('canvas');
+        shapeCanvas.width = shapeCanvas.height = IMAGE_SIZE;
+        shapeCtx = shapeCanvas.getContext('2d');
+        this.drawRawShape(shapeCtx, color, shapeName);
+        this.shapeCache[shapeKey] = shapeCanvas;
+      }
+      ctx.translate(.5, -.5);
+      ctx.scale(-1 / IMAGE_SIZE, 1 / IMAGE_SIZE);
+      this.setTransparency(ctx, color);
+      ctx.drawImage(shapeCanvas, 0, 0);
+    };
+
+    CachingShapeDrawer.prototype.shapeKey = function(shapeName, color) {
+      return [shapeName, netlogoColorToOpaqueCSS(color)];
+    };
+
+    return CachingShapeDrawer;
+
+  })(ShapeDrawer);
+
+  setColoring = function(ctx, color, element) {
+    color = netlogoColorToOpaqueCSS(color);
+    if (element.filled) {
+      if (element.marked) {
+        ctx.fillStyle = color;
+      } else {
+        ctx.fillStyle = element.color;
+      }
+    } else {
+      if (element.marked) {
+        ctx.strokeStyle = color;
+      } else {
+        ctx.strokeStyle = element.color;
+      }
+    }
+  };
+
+  drawPath = function(ctx, color, element) {
+    setColoring(ctx, color, element);
+    if (element.filled) {
+      ctx.fill();
+    } else {
+      ctx.stroke();
+    }
+  };
+
+  window.draw = {
+    circle: function(ctx, color, circle) {
+      var r;
+      r = circle.diam / 2;
+      ctx.beginPath();
+      ctx.arc(circle.x + r, circle.y + r, r, 0, 2 * Math.PI, false);
+      ctx.closePath();
+      drawPath(ctx, color, circle);
+    },
+    polygon: function(ctx, color, polygon) {
+      var i, j, len, ref, x, xcors, y, ycors;
+      xcors = polygon.xcors;
+      ycors = polygon.ycors;
+      ctx.beginPath();
+      ctx.moveTo(xcors[0], ycors[0]);
+      ref = xcors.slice(1);
+      for (i = j = 0, len = ref.length; j < len; i = ++j) {
+        x = ref[i];
+        y = ycors[i + 1];
+        ctx.lineTo(x, y);
+      }
+      ctx.closePath();
+      drawPath(ctx, color, polygon);
+    },
+    rectangle: function(ctx, color, rectangle) {
+      var h, w, x, y;
+      x = rectangle.xmin;
+      y = rectangle.ymin;
+      w = rectangle.xmax - x;
+      h = rectangle.ymax - y;
+      setColoring(ctx, color, rectangle);
+      if (rectangle.filled) {
+        ctx.fillRect(x, y, w, h);
+      } else {
+        ctx.strokeRect(x, y, w, h);
+      }
+    },
+    line: function(ctx, color, line) {
+      var h, w, x, y;
+      x = line.x1;
+      y = line.y1;
+      w = line.x2 - line.x1;
+      h = line.y2 - line.y1;
+      setColoring(ctx, color, line);
+      ctx.beginPath();
+      ctx.moveTo(line.x1, line.y1);
+      ctx.lineTo(line.x2, line.y2);
+      ctx.stroke();
+    }
+  };
+
+  window.defaultShape = {
+    rotate: true,
+    elements: [
+      {
+        type: 'polygon',
+        color: 'grey',
+        filled: 'true',
+        marked: 'true',
+        xcors: [150, 40, 150, 260],
+        ycors: [5, 250, 205, 250]
+      }
+    ]
+  };
+
+}).call(this);
+
+//# sourceMappingURL=draw-shape.js.map
+</script> 
+  <script>(function() {
+  var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+  window.Line = (function() {
+    function Line(x11, y11, x21, y21) {
+      this.x1 = x11;
+      this.y1 = y11;
+      this.x2 = x21;
+      this.y2 = y21;
+    }
+
+    Line.prototype.midpoint = function() {
+      var midpointX, midpointY;
+      midpointX = (this.x1 + this.x2) / 2;
+      midpointY = (this.y1 + this.y2) / 2;
+      return [midpointX, midpointY];
+    };
+
+    return Line;
+
+  })();
+
+  window.LinkDrawer = (function() {
+    function LinkDrawer(view, shapes) {
+      var directionIndicators, name, ref, shape;
+      this.view = view;
+      this.shapes = shapes;
+      this._drawLinkLine = bind(this._drawLinkLine, this);
+      this.traceCurvedLine = bind(this.traceCurvedLine, this);
+      directionIndicators = {};
+      ref = this.shapes;
+      for (name in ref) {
+        shape = ref[name];
+        directionIndicators[name] = shape['direction-indicator'];
+      }
+      this.linkShapeDrawer = new ShapeDrawer(directionIndicators, this.view.onePixel);
+    }
+
+    LinkDrawer.prototype.traceCurvedLine = function(x1, y1, x2, y2, cx, cy, ctx) {
+      ctx.moveTo(x1, y1);
+      return ctx.quadraticCurveTo(cx, cy, x2, y2);
+    };
+
+    LinkDrawer.prototype.shouldWrapInDim = function(canWrap, dimensionSize, cor1, cor2) {
+      var distance;
+      distance = Math.abs(cor1 - cor2);
+      return canWrap && distance > dimensionSize / 2;
+    };
+
+    LinkDrawer.prototype.calculateShortestLineAngle = function(x1, y1, x2, y2) {
+      var shortestX, shortestY;
+      shortestX = Math.min(x1 - x2, x2 - x1);
+      shortestY = Math.min(y1 - y2, y2 - y1);
+      return Math.atan2(shortestY, shortestX);
+    };
+
+    LinkDrawer.prototype.calculateComps = function(x1, y1, x2, y2, size) {
+      var xcomp, ycomp;
+      xcomp = (y2 - y1) / size;
+      ycomp = (x1 - x2) / size;
+      return [xcomp, ycomp];
+    };
+
+    LinkDrawer.prototype.calculateSublineOffset = function(centerOffset, thickness, xcomp, ycomp) {
+      var thicknessFactor, xOff, yOff;
+      thicknessFactor = thickness / this.view.onePixel;
+      xOff = centerOffset * thicknessFactor * xcomp;
+      yOff = centerOffset * thicknessFactor * ycomp;
+      return [xOff, yOff];
+    };
+
+    LinkDrawer.prototype.getOffsetSubline = function(x1, y1, x2, y2, xOff, yOff) {
+      var lx1, lx2, ly1, ly2;
+      lx1 = x1 + xOff;
+      lx2 = x2 + xOff;
+      ly1 = y1 + yOff;
+      ly2 = y2 + yOff;
+      return new Line(lx1, ly1, lx2, ly2);
+    };
+
+    LinkDrawer.prototype.calculateControlPoint = function(midpointX, midpointY, curviness, xcomp, ycomp) {
+      var controlX, controlY;
+      controlX = midpointX - curviness * xcomp;
+      controlY = midpointY - curviness * ycomp;
+      return [controlX, controlY];
+    };
+
+    LinkDrawer.prototype.drawSubline = function(arg, dashPattern, thickness, color, isCurved, controlX, controlY, ctx) {
+      var x1, x2, y1, y2;
+      x1 = arg.x1, y1 = arg.y1, x2 = arg.x2, y2 = arg.y2;
+      ctx.save();
+      ctx.beginPath();
+      ctx.setLineDash(dashPattern.map((function(_this) {
+        return function(x) {
+          return x * _this.view.onePixel;
+        };
+      })(this)));
+      ctx.strokeStyle = netlogoColorToCSS(color);
+      ctx.lineWidth = thickness;
+      ctx.lineCap = isCurved ? 'round' : 'square';
+      this.traceCurvedLine(x1, y1, x2, y2, controlX, controlY, ctx);
+      ctx.stroke();
+      ctx.setLineDash([1, 0]);
+      return ctx.restore();
+    };
+
+    LinkDrawer.prototype.drawShape = function(x, y, cx, cy, heading, color, thickness, linkShape, shapeName, ctx) {
+      var realThickness, scale, shapeTheta, shift, shiftCoefficientX, shiftCoefficientY, sx, sy, theta, thicknessFactor;
+      ctx.save();
+      theta = this.calculateShortestLineAngle(x, y, cx, cy);
+      shiftCoefficientX = x - cx > 0 ? -1 : 1;
+      shiftCoefficientY = y - cy > 0 ? -1 : 1;
+      shift = this.view.onePixel * 20;
+      sx = x + shift * Math.abs(Math.cos(theta)) * shiftCoefficientX;
+      sy = y + shift * Math.abs(Math.sin(theta)) * shiftCoefficientY;
+      shapeTheta = Math.atan2(sy - y, sx - x) - Math.PI / 2;
+      ctx.translate(sx, sy);
+      if (linkShape['direction-indicator'].rotate) {
+        ctx.rotate(shapeTheta);
+      } else {
+        ctx.rotate(Math.PI);
+      }
+      thicknessFactor = thickness / this.view.onePixel;
+      if (thickness <= 1) {
+        scale = 1 / this.view.onePixel / 5;
+        realThickness = thickness * 10;
+      } else {
+        scale = thicknessFactor / 2;
+        realThickness = 0.5;
+      }
+      ctx.scale(scale, scale);
+      this.linkShapeDrawer.drawShape(ctx, color, shapeName, realThickness);
+      return ctx.restore();
+    };
+
+    LinkDrawer.prototype.drawLabel = function(x, y, labelText, color) {
+      return this.view.drawLabel(x - 3 * this.view.onePixel, y + 3 * this.view.onePixel, labelText, color);
+    };
+
+    LinkDrawer.prototype.draw = function(link, end1, end2, canWrapX, canWrapY, ctx, isStamp) {
+      var adjustedThickness, color, theta, thickness, wrapX, wrapY, x1, x2, y1, y2;
+      if (ctx == null) {
+        ctx = this.view.ctx;
+      }
+      if (isStamp == null) {
+        isStamp = false;
+      }
+      if (!link['hidden?']) {
+        color = link.color, thickness = link.thickness;
+        x1 = end1.xcor, y1 = end1.ycor;
+        x2 = end2.xcor, y2 = end2.ycor;
+        theta = this.calculateShortestLineAngle(x1, y1, x2, y2);
+        adjustedThickness = thickness > this.view.onePixel ? thickness : this.view.onePixel;
+        wrapX = this.shouldWrapInDim(canWrapX, this.view.worldWidth, x1, x2);
+        wrapY = this.shouldWrapInDim(canWrapY, this.view.worldHeight, y1, y2);
+        return this.getWrappedLines(x1, y1, x2, y2, wrapX, wrapY).forEach(this._drawLinkLine(link, adjustedThickness, ctx, isStamp));
+      }
+    };
+
+    LinkDrawer.prototype._drawLinkLine = function(arg, thickness, ctx, isStamp) {
+      var color, heading, isDirected, label, labelColor, shapeName, size;
+      color = arg.color, size = arg.size, heading = arg.heading, isDirected = arg['directed?'], shapeName = arg.shape, label = arg.label, labelColor = arg['label-color'];
+      return (function(_this) {
+        return function(arg1) {
+          var curviness, lines, linkShape, x1, x2, y1, y2;
+          x1 = arg1.x1, y1 = arg1.y1, x2 = arg1.x2, y2 = arg1.y2;
+          linkShape = _this.shapes[shapeName];
+          curviness = linkShape.curviness, lines = linkShape.lines;
+          return lines.forEach(function(line) {
+            var centerOffset, controlX, controlY, dashPattern, hasLabel, isCurved, isMiddleLine, midpointX, midpointY, offsetSubline, ref, ref1, ref2, ref3, visible, xOff, xcomp, yOff, ycomp;
+            centerOffset = line['x-offset'], dashPattern = line['dash-pattern'], visible = line['is-visible'];
+            if (visible) {
+              ref = _this.calculateComps(x1, y1, x2, y2, size), xcomp = ref[0], ycomp = ref[1];
+              ref1 = _this.calculateSublineOffset(centerOffset, thickness, xcomp, ycomp), xOff = ref1[0], yOff = ref1[1];
+              offsetSubline = _this.getOffsetSubline(x1, y1, x2, y2, xOff, yOff);
+              isMiddleLine = line === lines[1];
+              isCurved = curviness > 0;
+              hasLabel = label != null;
+              ref2 = offsetSubline.midpoint(), midpointX = ref2[0], midpointY = ref2[1];
+              ref3 = _this.calculateControlPoint(midpointX, midpointY, curviness, xcomp, ycomp), controlX = ref3[0], controlY = ref3[1];
+              _this.drawSubline(offsetSubline, dashPattern, thickness, color, isCurved, controlX, controlY, ctx);
+              if (isMiddleLine) {
+                if (isDirected && size > (.25 * _this.view.onePixel)) {
+                  _this.drawShape(x2, y2, controlX, controlY, heading, color, thickness, linkShape, shapeName, ctx);
+                }
+                if (hasLabel && !isStamp) {
+                  return _this.drawLabel(controlX, controlY, label, labelColor);
+                }
+              }
+            }
+          });
+        };
+      })(this);
+    };
+
+    LinkDrawer.prototype.getWrappedLines = function(x1, y1, x2, y2, lineWrapsX, lineWrapsY) {
+      var worldHeight, worldWidth;
+      worldWidth = this.view.worldWidth;
+      worldHeight = this.view.worldHeight;
+      if (lineWrapsX && lineWrapsY) {
+        if (x1 < x2) {
+          if (y1 < y2) {
+            return [new Line(x1, y1, x2 - worldWidth, y2 - worldHeight), new Line(x1 + worldWidth, y1, x2, y2 - worldHeight), new Line(x1 + worldWidth, y1 + worldHeight, x2, y2), new Line(x1, y1 + worldHeight, x2 - worldWidth, y2)];
+          } else {
+            return [new Line(x1, y1, x2 - worldWidth, y2 + worldHeight), new Line(x1 + worldWidth, y1, x2, y2 + worldHeight), new Line(x1 + worldWidth, y1 - worldHeight, x2, y2), new Line(x1, y1 - worldHeight, x2 - worldWidth, y2)];
+          }
+        } else {
+          if (y1 < y2) {
+            return [new Line(x1, y1, x2 + worldWidth, y2 - worldHeight), new Line(x1 - worldWidth, y1, x2, y2 - worldHeight), new Line(x1 - worldWidth, y1 + worldHeight, x2, y2), new Line(x1, y1 + worldHeight, x2 + worldWidth, y2)];
+          } else {
+            return [new Line(x1, y1, x2 + worldWidth, y2 + worldHeight), new Line(x1 - worldWidth, y1, x2, y2 + worldHeight), new Line(x1 - worldWidth, y1 - worldHeight, x2, y2), new Line(x1, y1 - worldHeight, x2 + worldWidth, y2)];
+          }
+        }
+      } else if (lineWrapsX) {
+        if (x1 < x2) {
+          return [new Line(x1, y1, x2 - worldWidth, y2), new Line(x1 + worldWidth, y1, x2, y2)];
+        } else {
+          return [new Line(x1, y1, x2 + worldWidth, y2), new Line(x1 - worldWidth, y1, x2, y2)];
+        }
+      } else if (lineWrapsY) {
+        if (y1 < y2) {
+          return [new Line(x1, y1, x2, y2 - worldHeight), new Line(x1, y1 + worldHeight, x2, y2)];
+        } else {
+          return [new Line(x1, y1 - worldHeight, x2, y2), new Line(x1, y1, x2, y2 + worldHeight)];
+        }
+      } else {
+        return [new Line(x1, y1, x2, y2)];
+      }
+    };
+
+    return LinkDrawer;
+
+  })();
+
+}).call(this);
+
+//# sourceMappingURL=link-drawer.js.map
+</script> 
+  <script>(function() {
+  var Drawer, DrawingLayer, FOLLOW, OBSERVE, PatchDrawer, RIDE, SpotlightDrawer, TurtleDrawer, View, WATCH,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
+    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty,
+    slice = [].slice;
+
+  window.ViewController = (function() {
+    function ViewController(container, fontSize) {
+      this.container = container;
+      this.mouseYcor = bind(this.mouseYcor, this);
+      this.mouseXcor = bind(this.mouseXcor, this);
+      this.view = new View(fontSize);
+      this.turtleDrawer = new TurtleDrawer(this.view);
+      this.drawingLayer = new DrawingLayer(this.view, this.turtleDrawer, (function(_this) {
+        return function() {
+          return _this.repaint();
+        };
+      })(this));
+      this.patchDrawer = new PatchDrawer(this.view);
+      this.spotlightDrawer = new SpotlightDrawer(this.view);
+      this.container.appendChild(this.view.visibleCanvas);
+      this.mouseDown = false;
+      this.mouseInside = false;
+      this.mouseX = 0;
+      this.mouseY = 0;
+      this.initMouseTracking();
+      this.initTouchTracking();
+      this.model = new AgentModel();
+      this.model.world.turtleshapelist = defaultShapes;
+      this.repaint();
+    }
+
+    ViewController.prototype.mouseXcor = function() {
+      return this.view.xPixToPcor(this.mouseX);
+    };
+
+    ViewController.prototype.mouseYcor = function() {
+      return this.view.yPixToPcor(this.mouseY);
+    };
+
+    ViewController.prototype.initMouseTracking = function() {
+      this.view.visibleCanvas.addEventListener('mousedown', (function(_this) {
+        return function(e) {
+          return _this.mouseDown = true;
+        };
+      })(this));
+      document.addEventListener('mouseup', (function(_this) {
+        return function(e) {
+          return _this.mouseDown = false;
+        };
+      })(this));
+      this.view.visibleCanvas.addEventListener('mouseenter', (function(_this) {
+        return function(e) {
+          return _this.mouseInside = true;
+        };
+      })(this));
+      this.view.visibleCanvas.addEventListener('mouseleave', (function(_this) {
+        return function(e) {
+          return _this.mouseInside = false;
+        };
+      })(this));
+      return this.view.visibleCanvas.addEventListener('mousemove', (function(_this) {
+        return function(e) {
+          var rect;
+          rect = _this.view.visibleCanvas.getBoundingClientRect();
+          _this.mouseX = e.clientX - rect.left;
+          return _this.mouseY = e.clientY - rect.top;
+        };
+      })(this));
+    };
+
+    ViewController.prototype.initTouchTracking = function() {
+      var endTouch, trackTouch;
+      endTouch = (function(_this) {
+        return function(e) {
+          _this.mouseDown = false;
+          _this.mouseInside = false;
+        };
+      })(this);
+      trackTouch = (function(_this) {
+        return function(arg) {
+          var bottom, clientX, clientY, left, ref, right, top;
+          clientX = arg.clientX, clientY = arg.clientY;
+          ref = _this.view.visibleCanvas.getBoundingClientRect(), bottom = ref.bottom, left = ref.left, top = ref.top, right = ref.right;
+          if (((left <= clientX && clientX <= right)) && ((top <= clientY && clientY <= bottom))) {
+            _this.mouseInside = true;
+            _this.mouseX = clientX - left;
+            _this.mouseY = clientY - top;
+          } else {
+            _this.mouseInside = false;
+          }
+        };
+      })(this);
+      document.addEventListener('touchend', endTouch);
+      document.addEventListener('touchcancel', endTouch);
+      this.view.visibleCanvas.addEventListener('touchmove', (function(_this) {
+        return function(e) {
+          e.preventDefault();
+          trackTouch(e.changedTouches[0]);
+        };
+      })(this));
+      this.view.visibleCanvas.addEventListener('touchstart', (function(_this) {
+        return function(e) {
+          _this.mouseDown = true;
+          trackTouch(e.touches[0]);
+        };
+      })(this));
+    };
+
+    ViewController.prototype.repaint = function() {
+      this.view.transformToWorld(this.model.world);
+      this.patchDrawer.repaint(this.model);
+      this.drawingLayer.repaint(this.model);
+      this.turtleDrawer.repaint(this.model);
+      this.spotlightDrawer.repaint(this.model);
+      return this.view.repaint(this.model);
+    };
+
+    ViewController.prototype.applyUpdate = function(modelUpdate) {
+      return this.model.update(modelUpdate);
+    };
+
+    ViewController.prototype.update = function(modelUpdate) {
+      var k, len, u, updates;
+      updates = Array.isArray(modelUpdate) ? modelUpdate : [modelUpdate];
+      for (k = 0, len = updates.length; k < len; k++) {
+        u = updates[k];
+        this.applyUpdate(u);
+      }
+      return this.repaint();
+    };
+
+    return ViewController;
+
+  })();
+
+  OBSERVE = 0;
+
+  RIDE = 1;
+
+  FOLLOW = 2;
+
+  WATCH = 3;
+
+  View = (function() {
+    function View(fontSize1) {
+      this.fontSize = fontSize1;
+      this.usePatchCoordinates = bind(this.usePatchCoordinates, this);
+      this.canvas = document.createElement('canvas');
+      this.ctx = this.canvas.getContext('2d');
+      this.visibleCanvas = document.createElement('canvas');
+      this.visibleCanvas.classList.add('netlogo-canvas', 'unselectable');
+      this.visibleCanvas.width = 500;
+      this.visibleCanvas.height = 500;
+      this.visibleCanvas.style.width = "100%";
+      this.visibleCtx = this.visibleCanvas.getContext('2d');
+      this._zoomLevel = null;
+    }
+
+    View.prototype.transformToWorld = function(world) {
+      return this.transformCanvasToWorld(world, this.canvas, this.ctx);
+    };
+
+    View.prototype.transformCanvasToWorld = function(world, canvas, ctx) {
+      var ref;
+      this.quality = Math.max((ref = window.devicePixelRatio) != null ? ref : 2, 2);
+      this.maxpxcor = world.maxpxcor != null ? world.maxpxcor : 25;
+      this.minpxcor = world.minpxcor != null ? world.minpxcor : -25;
+      this.maxpycor = world.maxpycor != null ? world.maxpycor : 25;
+      this.minpycor = world.minpycor != null ? world.minpycor : -25;
+      this.patchsize = world.patchsize != null ? world.patchsize : 9;
+      this.wrapX = world.wrappingallowedinx;
+      this.wrapY = world.wrappingallowediny;
+      this.onePixel = 1 / this.patchsize;
+      this.worldWidth = this.maxpxcor - this.minpxcor + 1;
+      this.worldHeight = this.maxpycor - this.minpycor + 1;
+      this.worldCenterX = (this.maxpxcor + this.minpxcor) / 2;
+      this.worldCenterY = (this.maxpycor + this.minpycor) / 2;
+      this.centerX = this.worldWidth / 2;
+      this.centerY = this.worldHeight / 2;
+      canvas.width = this.worldWidth * this.patchsize * this.quality;
+      canvas.height = this.worldHeight * this.patchsize * this.quality;
+      canvas.style.width = this.worldWidth * this.patchsize;
+      canvas.style.height = this.worldHeight * this.patchsize;
+      ctx.font = this.fontSize + 'px "Lucida Grande", sans-serif';
+      ctx.imageSmoothingEnabled = false;
+      ctx.webkitImageSmoothingEnabled = false;
+      ctx.mozImageSmoothingEnabled = false;
+      ctx.oImageSmoothingEnabled = false;
+      return ctx.msImageSmoothingEnabled = false;
+    };
+
+    View.prototype.usePatchCoordinates = function(ctx) {
+      if (ctx == null) {
+        ctx = this.ctx;
+      }
+      return (function(_this) {
+        return function(drawFn) {
+          var h, w;
+          ctx.save();
+          w = _this.canvas.width;
+          h = _this.canvas.height;
+          ctx.setTransform(w / _this.worldWidth, 0, 0, -h / _this.worldHeight, -(_this.minpxcor - .5) * w / _this.worldWidth, (_this.maxpycor + .5) * h / _this.worldHeight);
+          drawFn();
+          return ctx.restore();
+        };
+      })(this);
+    };
+
+    View.prototype.withCompositing = function(gco, ctx) {
+      if (ctx == null) {
+        ctx = this.ctx;
+      }
+      return function(drawFn) {
+        var oldGCO;
+        oldGCO = ctx.globalCompositeOperation;
+        ctx.globalCompositeOperation = gco;
+        drawFn();
+        return ctx.globalCompositeOperation = oldGCO;
+      };
+    };
+
+    View.prototype.offsetX = function() {
+      return this.worldCenterX - this.centerX;
+    };
+
+    View.prototype.offsetY = function() {
+      return this.worldCenterY - this.centerY;
+    };
+
+    View.prototype.xPixToPcor = function(x) {
+      return (this.worldWidth * x / this.visibleCanvas.clientWidth + this.worldWidth - this.offsetX()) % this.worldWidth + this.minpxcor - .5;
+    };
+
+    View.prototype.yPixToPcor = function(y) {
+      return (-this.worldHeight * y / this.visibleCanvas.clientHeight + 2 * this.worldHeight - this.offsetY()) % this.worldHeight + this.minpycor - .5;
+    };
+
+    View.prototype.xPcorToCanvas = function(x) {
+      return (x - this.minpxcor + .5) / this.worldWidth * this.visibleCanvas.width;
+    };
+
+    View.prototype.yPcorToCanvas = function(y) {
+      return (this.maxpycor + .5 - y) / this.worldHeight * this.visibleCanvas.height;
+    };
+
+    View.prototype.drawLabel = function(xcor, ycor, label, color, ctx) {
+      if (ctx == null) {
+        ctx = this.ctx;
+      }
+      label = label != null ? label.toString() : '';
+      if (label.length > 0) {
+        return this.drawWrapped(xcor, ycor, label.length * this.fontSize / this.onePixel, (function(_this) {
+          return function(x, y) {
+            ctx.save();
+            ctx.translate(x, y);
+            ctx.scale(_this.onePixel, -_this.onePixel);
+            ctx.textAlign = 'end';
+            ctx.fillStyle = netlogoColorToCSS(color);
+            ctx.fillText(label, 0, 0);
+            return ctx.restore();
+          };
+        })(this));
+      }
+    };
+
+    View.prototype.drawWrapped = function(xcor, ycor, size, drawFn) {
+      var k, l, len, len1, x, xs, y, ys;
+      xs = this.wrapX ? [xcor - this.worldWidth, xcor, xcor + this.worldWidth] : [xcor];
+      ys = this.wrapY ? [ycor - this.worldHeight, ycor, ycor + this.worldHeight] : [ycor];
+      for (k = 0, len = xs.length; k < len; k++) {
+        x = xs[k];
+        if ((x + size / 2) > this.minpxcor - 0.5 && (x - size / 2) < this.maxpxcor + 0.5) {
+          for (l = 0, len1 = ys.length; l < len1; l++) {
+            y = ys[l];
+            if ((y + size / 2) > this.minpycor - 0.5 && (y - size / 2) < this.maxpycor + 0.5) {
+              drawFn(x, y);
+            }
+          }
+        }
+      }
+    };
+
+    View.prototype.turtleType = 1;
+
+    View.prototype.patchType = 2;
+
+    View.prototype.linkType = 3;
+
+    View.prototype.watch = function(model) {
+      var id, links, observer, patches, ref, turtles, type;
+      observer = model.observer, turtles = model.turtles, links = model.links, patches = model.patches;
+      if (model.observer.perspective !== OBSERVE && observer.targetagent && observer.targetagent[1] >= 0) {
+        ref = observer.targetagent, type = ref[0], id = ref[1];
+        switch (type) {
+          case this.turtleType:
+            return model.turtles[id];
+          case this.patchType:
+            return model.patches[id];
+          case this.linkType:
+            return model.links[id];
+        }
+      } else {
+        return null;
+      }
+    };
+
+    View.prototype.follow = function(model) {
+      var persp;
+      persp = model.observer.perspective;
+      if (persp === FOLLOW || persp === RIDE) {
+        return this.watch(model);
+      } else {
+        return null;
+      }
+    };
+
+    View.prototype.setZoom = function(zoomLevel) {
+      this._zoomLevel = Number.isInteger(zoomLevel) ? Math.min(Math.max(0, zoomLevel), Math.floor(this.worldWidth / 2), Math.floor(this.worldHeight / 2)) : null;
+    };
+
+    View.prototype.repaint = function(model) {
+      var dx, dy, height, k, l, len, len1, target, width, x, xs, y, ys;
+      target = this.follow(model);
+      this.visibleCanvas.width = this.canvas.width;
+      this.visibleCanvas.height = this.canvas.height;
+      this.visibleCanvas.style.width = this.canvas.style.width;
+      this.visibleCanvas.style.height = this.canvas.style.height;
+      if (target != null) {
+        width = this.visibleCanvas.width;
+        height = this.visibleCanvas.height;
+        this.centerX = target.xcor;
+        this.centerY = target.ycor;
+        x = -this.xPcorToCanvas(this.centerX) + width / 2;
+        y = -this.yPcorToCanvas(this.centerY) + height / 2;
+        xs = this.wrapX ? [x - width, x, x + width] : [x];
+        ys = this.wrapY ? [y - height, y, y + height] : [y];
+        for (k = 0, len = xs.length; k < len; k++) {
+          dx = xs[k];
+          for (l = 0, len1 = ys.length; l < len1; l++) {
+            dy = ys[l];
+            this.visibleCtx.drawImage(this.canvas, dx, dy);
+          }
+        }
+      } else {
+        this.centerX = this.worldCenterX;
+        this.centerY = this.worldCenterY;
+        this.visibleCtx.drawImage(this.canvas, 0, 0);
+      }
+      return this._handleZoom();
+    };
+
+    View.prototype._handleZoom = function() {
+      var left, length, tempCanvas, top;
+      if (this._zoomLevel !== null) {
+        length = ((2 * this._zoomLevel) + 1) * (2 * this.patchsize);
+        left = (this.visibleCanvas.width / 2) - (length / 2);
+        top = (this.visibleCanvas.height / 2) - (length / 2);
+        tempCanvas = document.createElement('canvas');
+        tempCanvas.width = this.visibleCanvas.width;
+        tempCanvas.height = this.visibleCanvas.height;
+        tempCanvas.getContext('2d').drawImage(this.visibleCanvas, 0, 0);
+        this.visibleCtx.save();
+        this.visibleCtx.setTransform(1, 0, 0, 1, 0, 0);
+        this.visibleCtx.clearRect(0, 0, this.visibleCanvas.width, this.visibleCanvas.height);
+        this.visibleCtx.drawImage(tempCanvas, left, top, length, length, 0, 0, this.visibleCanvas.width, this.visibleCanvas.height);
+        this.visibleCtx.restore();
+      }
+    };
+
+    return View;
+
+  })();
+
+  Drawer = (function() {
+    function Drawer(view) {
+      this.view = view;
+    }
+
+    return Drawer;
+
+  })();
+
+
+  /*
+  Possible drawing events:
+  
+  { type: "clear-drawing" }
+  
+  { type: "line", fromX, fromY, toX, toY, rgb, size, penMode }
+  
+  { type: "stamp-image", agentType: "turtle", stamp: {x, y, size, heading, color, shapeName, stampMode} }
+  
+  { type: "stamp-image", agentType: "link", stamp: {
+      x1, y1, x2, y2, midpointX, midpointY, heading, color, shapeName, thickness, 'directed?', size, 'hidden?', stampMode
+    }
+  }
+  
+  { type: "import-drawing", sourcePath }
+   */
+
+  DrawingLayer = (function(superClass) {
+    extend(DrawingLayer, superClass);
+
+    function DrawingLayer(view, turtleDrawer, repaintView) {
+      this.view = view;
+      this.turtleDrawer = turtleDrawer;
+      this.repaintView = repaintView;
+      this.drawLine = bind(this.drawLine, this);
+      this.importDrawing = bind(this.importDrawing, this);
+      this.canvas = document.createElement('canvas');
+      this.canvas.id = 'dlayer';
+      this.ctx = this.canvas.getContext('2d');
+    }
+
+    DrawingLayer.prototype.resizeCanvas = function() {
+      this.canvas.width = this.view.canvas.width;
+      return this.canvas.height = this.view.canvas.height;
+    };
+
+    DrawingLayer.prototype.clearDrawing = function() {
+      return this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
+    };
+
+    DrawingLayer.prototype.importDrawing = function(sourcePath) {
+      var image;
+      this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
+      image = new Image();
+      image.onload = (function(_this) {
+        return function() {
+          var canvasRatio, height, imageRatio, width;
+          canvasRatio = _this.canvas.width / _this.canvas.height;
+          imageRatio = image.width / image.height;
+          width = _this.canvas.width;
+          height = _this.canvas.height;
+          if (canvasRatio >= imageRatio) {
+            width = (imageRatio / canvasRatio) * _this.canvas.width;
+          } else {
+            height = (canvasRatio / imageRatio) * _this.canvas.height;
+          }
+          _this.ctx.drawImage(image, (_this.canvas.width - width) / 2, (_this.canvas.height - height) / 2, width, height);
+          _this.repaintView();
+        };
+      })(this);
+      image.src = sourcePath;
+    };
+
+    DrawingLayer.prototype._rgbToCss = function(arg) {
+      var b, g, r;
+      r = arg[0], g = arg[1], b = arg[2];
+      return "rgb(" + r + ", " + g + ", " + b + ")";
+    };
+
+    DrawingLayer.prototype.makeMockTurtleObject = function(arg) {
+      var color, heading, shape, size, xcor, ycor;
+      xcor = arg.x, ycor = arg.y, shape = arg.shapeName, size = arg.size, heading = arg.heading, color = arg.color;
+      return {
+        xcor: xcor,
+        ycor: ycor,
+        shape: shape,
+        size: size,
+        heading: heading,
+        color: color
+      };
+    };
+
+    DrawingLayer.prototype.makeMockLinkObject = function(arg) {
+      var color, end1, end2, heading, isDirected, isHidden, midpointX, midpointY, mockLink, shapeName, size, thickness, x1, x2, y1, y2;
+      x1 = arg.x1, y1 = arg.y1, x2 = arg.x2, y2 = arg.y2, shapeName = arg.shapeName, color = arg.color, heading = arg.heading, size = arg.size, isDirected = arg['directed?'], isHidden = arg['hidden?'], midpointX = arg.midpointX, midpointY = arg.midpointY, thickness = arg.thickness;
+      end1 = {
+        xcor: x1,
+        ycor: y1
+      };
+      end2 = {
+        xcor: x2,
+        ycor: y2
+      };
+      mockLink = {
+        shape: shapeName,
+        color: color,
+        heading: heading,
+        size: size,
+        'directed?': isDirected,
+        'hidden?': isHidden,
+        midpointX: midpointX,
+        midpointY: midpointY,
+        thickness: thickness
+      };
+      return [mockLink, end1, end2];
+    };
+
+    DrawingLayer.prototype.stampTurtle = function(turtleStamp) {
+      var mockTurtleObject;
+      mockTurtleObject = this.makeMockTurtleObject(turtleStamp);
+      return this.view.usePatchCoordinates(this.ctx)((function(_this) {
+        return function() {
+          return _this.view.withCompositing(_this.compositingOperation(turtleStamp.stampMode), _this.ctx)(function() {
+            return _this.turtleDrawer.drawTurtle(mockTurtleObject, _this.ctx, true);
+          });
+        };
+      })(this));
+    };
+
+    DrawingLayer.prototype.stampLink = function(linkStamp) {
+      var mockLinkObject;
+      mockLinkObject = this.makeMockLinkObject(linkStamp);
+      return this.view.usePatchCoordinates(this.ctx)((function(_this) {
+        return function() {
+          return _this.view.withCompositing(_this.compositingOperation(linkStamp.stampMode), _this.ctx)(function() {
+            var ref;
+            return (ref = _this.turtleDrawer.linkDrawer).draw.apply(ref, slice.call(mockLinkObject).concat([_this.wrapX], [_this.wrapY], [_this.ctx], [true]));
+          });
+        };
+      })(this));
+    };
+
+    DrawingLayer.prototype.compositingOperation = function(mode) {
+      if (mode === 'erase') {
+        return 'destination-out';
+      } else {
+        return 'source-over';
+      }
+    };
+
+    DrawingLayer.prototype.drawStamp = function(arg) {
+      var agentType, stamp;
+      agentType = arg.agentType, stamp = arg.stamp;
+      if (agentType === 'turtle') {
+        return this.stampTurtle(stamp);
+      } else if (agentType === 'link') {
+        return this.stampLink(stamp);
+      }
+    };
+
+    DrawingLayer.prototype.drawLine = function(arg) {
+      var color, penColor, penMode, size, x1, x2, y1, y2;
+      color = arg.rgb, size = arg.size, penMode = arg.penMode, x1 = arg.fromX, y1 = arg.fromY, x2 = arg.toX, y2 = arg.toY;
+      if (penMode !== 'up') {
+        penColor = color;
+        return this.view.usePatchCoordinates(this.ctx)((function(_this) {
+          return function() {
+            _this.ctx.save();
+            _this.ctx.strokeStyle = _this._rgbToCss(penColor);
+            _this.ctx.lineWidth = _this.view.onePixel;
+            _this.ctx.beginPath();
+            _this.ctx.moveTo(x1, y1);
+            _this.ctx.lineTo(x2, y2);
+            _this.view.withCompositing(_this.compositingOperation(penMode), _this.ctx)(function() {
+              return _this.ctx.stroke();
+            });
+            return _this.ctx.restore();
+          };
+        })(this));
+      }
+    };
+
+    DrawingLayer.prototype.draw = function() {
+      return this.events.forEach((function(_this) {
+        return function(event) {
+          switch (event.type) {
+            case 'clear-drawing':
+              return _this.clearDrawing();
+            case 'line':
+              return _this.drawLine(event);
+            case 'stamp-image':
+              return _this.drawStamp(event);
+            case 'import-drawing':
+              return _this.importDrawing(event.sourcePath);
+          }
+        };
+      })(this));
+    };
+
+    DrawingLayer.prototype.repaint = function(model) {
+      var world;
+      world = model.world;
+      this.wrapX = world.wrappingallowedinx;
+      this.wrapY = world.wrappingallowediny;
+      this.events = model.drawingEvents;
+      model.drawingEvents = [];
+      if (this.canvas.width !== this.view.canvas.width || this.canvas.height !== this.view.canvas.height) {
+        this.resizeCanvas();
+      }
+      this.draw();
+      return this.view.ctx.drawImage(this.canvas, 0, 0);
+    };
+
+    return DrawingLayer;
+
+  })(Drawer);
+
+  SpotlightDrawer = (function(superClass) {
+    extend(SpotlightDrawer, superClass);
+
+    function SpotlightDrawer(view) {
+      this.view = view;
+    }
+
+    SpotlightDrawer.prototype.dimmed = "rgba(0, 0, 50, " + (100 / 255) + ")";
+
+    SpotlightDrawer.prototype.spotlightInnerBorder = "rgba(200, 255, 255, " + (100 / 255) + ")";
+
+    SpotlightDrawer.prototype.spotlightOuterBorder = "rgba(200, 255, 255, " + (50 / 255) + ")";
+
+    SpotlightDrawer.prototype.clear = 'white';
+
+    SpotlightDrawer.prototype.outer = function() {
+      return 10 / this.view.patchsize;
+    };
+
+    SpotlightDrawer.prototype.middle = function() {
+      return 8 / this.view.patchsize;
+    };
+
+    SpotlightDrawer.prototype.inner = function() {
+      return 4 / this.view.patchsize;
+    };
+
+    SpotlightDrawer.prototype.drawCircle = function(x, y, innerDiam, outerDiam, color) {
+      var ctx;
+      ctx = this.view.ctx;
+      ctx.fillStyle = color;
+      ctx.beginPath();
+      ctx.arc(x, y, outerDiam / 2, 0, 2 * Math.PI);
+      ctx.arc(x, y, innerDiam / 2, 0, 2 * Math.PI, true);
+      return ctx.fill();
+    };
+
+    SpotlightDrawer.prototype.drawSpotlight = function(xcor, ycor, size, dimOther) {
+      var ctx;
+      ctx = this.view.ctx;
+      ctx.lineWidth = this.view.onePixel;
+      ctx.beginPath();
+      if (dimOther) {
+        this.view.drawWrapped(xcor, ycor, size + this.outer(), (function(_this) {
+          return function(x, y) {
+            ctx.moveTo(x, y);
+            return ctx.arc(x, y, (size + _this.outer()) / 2, 0, 2 * Math.PI, true);
+          };
+        })(this));
+        ctx.rect(this.view.minpxcor - 0.5, this.view.minpycor - 0.5, this.view.worldWidth, this.view.worldHeight);
+        ctx.fillStyle = this.dimmed;
+        ctx.fill();
+      }
+      return this.view.drawWrapped(xcor, ycor, size + this.outer(), (function(_this) {
+        return function(x, y) {
+          _this.drawCircle(x, y, size, size + _this.outer(), _this.dimmed);
+          _this.drawCircle(x, y, size, size + _this.middle(), _this.spotlightOuterBorder);
+          return _this.drawCircle(x, y, size, size + _this.inner(), _this.spotlightInnerBorder);
+        };
+      })(this));
+    };
+
+    SpotlightDrawer.prototype.adjustSize = function(size) {
+      return Math.max(size, this.view.worldWidth / 16, this.view.worldHeight / 16);
+    };
+
+    SpotlightDrawer.prototype.dimensions = function(agent) {
+      if (agent.xcor != null) {
+        return [agent.xcor, agent.ycor, 2 * agent.size];
+      } else if (agent.pxcor != null) {
+        return [agent.pxcor, agent.pycor, 2];
+      } else {
+        return [agent.midpointx, agent.midpointy, agent.size];
+      }
+    };
+
+    SpotlightDrawer.prototype.repaint = function(model) {
+      return this.view.usePatchCoordinates()((function(_this) {
+        return function() {
+          var ref, size, watched, xcor, ycor;
+          watched = _this.view.watch(model);
+          if (watched != null) {
+            ref = _this.dimensions(watched), xcor = ref[0], ycor = ref[1], size = ref[2];
+            return _this.drawSpotlight(xcor, ycor, _this.adjustSize(size), model.observer.perspective === WATCH);
+          }
+        };
+      })(this));
+    };
+
+    return SpotlightDrawer;
+
+  })(Drawer);
+
+  TurtleDrawer = (function(superClass) {
+    extend(TurtleDrawer, superClass);
+
+    function TurtleDrawer(view) {
+      this.view = view;
+      this.turtleShapeDrawer = new ShapeDrawer({}, this.view.onePixel);
+      this.linkDrawer = new LinkDrawer(this.view, {});
+    }
+
+    TurtleDrawer.prototype.drawTurtle = function(turtle, ctx, isStamp) {
+      var size, xcor, ycor;
+      if (ctx == null) {
+        ctx = this.view.ctx;
+      }
+      if (isStamp == null) {
+        isStamp = false;
+      }
+      if (!turtle['hidden?']) {
+        xcor = turtle.xcor;
+        ycor = turtle.ycor;
+        size = turtle.size;
+        this.view.drawWrapped(xcor, ycor, size, ((function(_this) {
+          return function(x, y) {
+            return _this.drawTurtleAt(turtle, x, y, ctx);
+          };
+        })(this)));
+        if (!isStamp) {
+          return this.view.drawLabel(xcor + turtle.size / 2, ycor - turtle.size / 2, turtle.label, turtle['label-color'], ctx);
+        }
+      }
+    };
+
+    TurtleDrawer.prototype.drawTurtleAt = function(turtle, xcor, ycor, ctx) {
+      var angle, heading, scale, shape, shapeName;
+      heading = turtle.heading;
+      scale = turtle.size;
+      angle = (180 - heading) / 360 * 2 * Math.PI;
+      shapeName = turtle.shape;
+      shape = this.turtleShapeDrawer.shapes[shapeName] || defaultShape;
+      ctx.save();
+      ctx.translate(xcor, ycor);
+      if (shape.rotate) {
+        ctx.rotate(angle);
+      } else {
+        ctx.rotate(Math.PI);
+      }
+      ctx.scale(scale, scale);
+      this.turtleShapeDrawer.drawShape(ctx, turtle.color, shapeName, 1 / scale);
+      return ctx.restore();
+    };
+
+    TurtleDrawer.prototype.drawLink = function(link, end1, end2, wrapX, wrapY) {
+      return this.linkDrawer.draw(link, end1, end2, wrapX, wrapY);
+    };
+
+    TurtleDrawer.prototype.repaint = function(model) {
+      var links, pixelRatioChanged, ref, turtleShapeListChanged, turtles, world;
+      world = model.world;
+      turtles = model.turtles;
+      links = model.links;
+      turtleShapeListChanged = (world.turtleshapelist != null) && world.turtleshapelist !== this.turtleShapeDrawer.shapes;
+      pixelRatioChanged = this.turtleShapeDrawer.onePixel !== this.view.onePixel;
+      if (turtleShapeListChanged || pixelRatioChanged) {
+        this.turtleShapeDrawer = new ShapeDrawer((ref = world.turtleshapelist) != null ? ref : this.turtleShapeDrawer.shapes, this.view.onePixel);
+      }
+      if (world.linkshapelist !== this.linkDrawer.shapes && (world.linkshapelist != null)) {
+        this.linkDrawer = new LinkDrawer(this.view, world.linkshapelist);
+      }
+      return this.view.usePatchCoordinates()((function(_this) {
+        return function() {
+          _this.drawAgents(links, (world.linkbreeds != null) ? world.linkbreeds : ["LINKS"], function(link) {
+            return _this.drawLink(link, turtles[link.end1], turtles[link.end2], world.wrappingallowedinx, world.wrappingallowediny);
+          });
+          _this.view.ctx.lineWidth = _this.onePixel;
+          _this.drawAgents(turtles, (world.turtlebreeds != null) ? world.turtlebreeds : ["TURTLES"], function(turtle) {
+            return _this.drawTurtle(turtle);
+          });
+        };
+      })(this));
+    };
+
+    TurtleDrawer.prototype.drawAgents = function(agents, breeds, draw) {
+      var _, agent, breedName, breededAgents, k, len, members, results;
+      breededAgents = {};
+      for (_ in agents) {
+        agent = agents[_];
+        members = [];
+        breedName = agent.breed.toUpperCase();
+        if (breededAgents[breedName] == null) {
+          breededAgents[breedName] = members;
+        } else {
+          members = breededAgents[breedName];
+        }
+        members.push(agent);
+      }
+      results = [];
+      for (k = 0, len = breeds.length; k < len; k++) {
+        breedName = breeds[k];
+        if (breededAgents[breedName] != null) {
+          members = breededAgents[breedName];
+          results.push((function() {
+            var l, len1, results1;
+            results1 = [];
+            for (l = 0, len1 = members.length; l < len1; l++) {
+              agent = members[l];
+              results1.push(draw(agent));
+            }
+            return results1;
+          })());
+        } else {
+          results.push(void 0);
+        }
+      }
+      return results;
+    };
+
+    return TurtleDrawer;
+
+  })(Drawer);
+
+  PatchDrawer = (function() {
+    function PatchDrawer(view) {
+      this.view = view;
+      this.scratchCanvas = document.createElement('canvas');
+      this.scratchCtx = this.scratchCanvas.getContext('2d');
+    }
+
+    PatchDrawer.prototype.colorPatches = function(patches) {
+      var b, g, height, i, imageData, j, k, maxX, maxY, minX, minY, numPatches, patch, r, ref, ref1, width;
+      width = this.view.worldWidth;
+      height = this.view.worldHeight;
+      minX = this.view.minpxcor;
+      maxX = this.view.maxpxcor;
+      minY = this.view.minpycor;
+      maxY = this.view.maxpycor;
+      this.scratchCanvas.width = width;
+      this.scratchCanvas.height = height;
+      imageData = this.scratchCtx.createImageData(width, height);
+      numPatches = ((maxY - minY) * width + (maxX - minX)) * 4;
+      for (i = k = 0, ref = numPatches; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) {
+        patch = patches[i];
+        if (patch != null) {
+          j = 4 * i;
+          ref1 = netlogoColorToRGB(patch.pcolor), r = ref1[0], g = ref1[1], b = ref1[2];
+          imageData.data[j + 0] = r;
+          imageData.data[j + 1] = g;
+          imageData.data[j + 2] = b;
+          imageData.data[j + 3] = 255;
+        }
+      }
+      this.scratchCtx.putImageData(imageData, 0, 0);
+      return this.view.ctx.drawImage(this.scratchCanvas, 0, 0, this.view.canvas.width, this.view.canvas.height);
+    };
+
+    PatchDrawer.prototype.labelPatches = function(patches) {
+      return this.view.usePatchCoordinates()((function(_this) {
+        return function() {
+          var ignore, patch, results;
+          results = [];
+          for (ignore in patches) {
+            patch = patches[ignore];
+            results.push(_this.view.drawLabel(patch.pxcor + .5, patch.pycor - .5, patch.plabel, patch['plabel-color']));
+          }
+          return results;
+        };
+      })(this));
+    };
+
+    PatchDrawer.prototype.clearPatches = function() {
+      this.view.ctx.fillStyle = "black";
+      return this.view.ctx.fillRect(0, 0, this.view.canvas.width, this.view.canvas.height);
+    };
+
+    PatchDrawer.prototype.repaint = function(model) {
+      var patches, world;
+      world = model.world;
+      patches = model.patches;
+      if (world.patchesallblack) {
+        this.clearPatches();
+      } else {
+        this.colorPatches(patches);
+      }
+      if (world.patcheswithlabels) {
+        return this.labelPatches(patches);
+      }
+    };
+
+    return PatchDrawer;
+
+  })();
+
+}).call(this);
+
+//# sourceMappingURL=view-controller.js.map
+</script> 
+  <script>(function() {
+  var genDialogConfig, genImportExportConfig, genMouseConfig, genOutputConfig, genPlotOps, genWorldConfig;
+
+  genDialogConfig = function(viewController) {
+    var clearMouse;
+    clearMouse = function() {
+      viewController.mouseDown = false;
+    };
+    return {
+      confirm: function(str) {
+        clearMouse();
+        return window.confirm(str);
+      },
+      input: function(str) {
+        clearMouse();
+        return window.prompt(str, "");
+      },
+      notify: function(str) {
+        clearMouse();
+        return window.nlwAlerter.display("NetLogo Notification", true, str);
+      },
+      yesOrNo: function(str) {
+        clearMouse();
+        return window.confirm(str);
+      }
+    };
+  };
+
+  genImportExportConfig = function(ractive, viewController) {
+    return {
+      exportFile: function(contents) {
+        return function(filename) {
+          window.saveAs(new Blob([contents], {
+            type: "text/plain:charset=utf-8"
+          }), filename);
+        };
+      },
+      exportOutput: function(filename) {
+        var exportBlob, exportText, ref, ref1;
+        exportText = (ref = (ref1 = ractive.findComponent('outputWidget')) != null ? ref1.get('text') : void 0) != null ? ref : ractive.findComponent('console').get('output');
+        exportBlob = new Blob([exportText], {
+          type: "text/plain:charset=utf-8"
+        });
+        window.saveAs(exportBlob, filename);
+      },
+      exportView: function(filename) {
+        var anchor;
+        anchor = document.createElement("a");
+        anchor.setAttribute("href", viewController.view.visibleCanvas.toDataURL("img/png"));
+        anchor.setAttribute("download", filename);
+        anchor.click();
+      },
+      importWorld: function(trueImport) {
+        return function() {
+          var elem, listener;
+          listener = function(event) {
+            var reader;
+            reader = new FileReader;
+            reader.onload = function(e) {
+              return trueImport(e.target.result);
+            };
+            if (event.target.files.length > 0) {
+              reader.readAsText(event.target.files[0]);
+            }
+            return elem.removeEventListener('change', listener);
+          };
+          elem = ractive.find('#import-world-input');
+          elem.addEventListener('change', listener);
+          elem.click();
+          elem.value = "";
+        };
+      }
+    };
+  };
+
+  genMouseConfig = function(viewController) {
+    return {
+      peekIsDown: function() {
+        return viewController.mouseDown;
+      },
+      peekIsInside: function() {
+        return viewController.mouseInside;
+      },
+      peekX: viewController.mouseXcor,
+      peekY: viewController.mouseYcor
+    };
+  };
+
+  genPlotOps = function(container, ractive) {
+    var display, i, id, len, plotOps, ref, type, widgets;
+    widgets = Object.values(ractive.get('widgetObj'));
+    plotOps = {};
+    for (i = 0, len = widgets.length; i < len; i++) {
+      ref = widgets[i], display = ref.display, id = ref.id, type = ref.type;
+      if (type === "plot") {
+        plotOps[display] = new HighchartsOps(container.querySelector("#netlogo-plot-" + id));
+      }
+    }
+    return plotOps;
+  };
+
+  genOutputConfig = function(ractive, appendToConsole) {
+    return {
+      clear: function() {
+        var output;
+        output = ractive.findComponent('outputWidget');
+        if ((output != null)) {
+          return output.setText('');
+        }
+      },
+      write: function(str) {
+        var output;
+        output = ractive.findComponent('outputWidget');
+        if ((output != null)) {
+          return output.appendText(str);
+        } else {
+          return appendToConsole(str);
+        }
+      }
+    };
+  };
+
+  genWorldConfig = function(ractive) {
+    return {
+      resizeWorld: function() {
+        var runningForeverButtons, widgets;
+        widgets = Object.values(ractive.get('widgetObj'));
+        runningForeverButtons = widgets.filter(function(arg) {
+          var forever, running, type;
+          type = arg.type, forever = arg.forever, running = arg.running;
+          return type === "button" && forever && running;
+        });
+        runningForeverButtons.forEach(function(button) {
+          return button.running = false;
+        });
+      }
+    };
+  };
+
+  window.genConfigs = function(ractive, viewController, container) {
+    var appendToConsole;
+    appendToConsole = function(str) {
+      return ractive.set('consoleOutput', ractive.get('consoleOutput') + str);
+    };
+    return {
+      dialog: genDialogConfig(viewController),
+      importExport: genImportExportConfig(ractive, viewController),
+      mouse: genMouseConfig(viewController),
+      output: genOutputConfig(ractive, appendToConsole),
+      print: {
+        write: appendToConsole
+      },
+      plotOps: genPlotOps(container, ractive),
+      world: genWorldConfig(ractive)
+    };
+  };
+
+}).call(this);
+
+//# sourceMappingURL=config-shims.js.map
+</script> 
+  <script>(function() {
+  var hasProp = {}.hasOwnProperty;
+
+  window.controlEventTraffic = function(controller) {
+    var checkActionKeys, createWidget, hailSatan, mousetrap, onWidgetBottomChange, onWidgetRightChange, onWidgetValueChange, ractive, redrawView, refreshChooser, rejectDupe, renameGlobal, resizeView, setPatchSize, toggleInterfaceLock, trackFocus, unregisterWidget, updateTopology, viewController;
+    ractive = controller.ractive, viewController = controller.viewController;
+    checkActionKeys = function(e) {
+      var _, char, ref, w;
+      if (ractive.get('hasFocus')) {
+        char = String.fromCharCode(e.which != null ? e.which : e.keyCode);
+        ref = ractive.get('widgetObj');
+        for (_ in ref) {
+          w = ref[_];
+          if (w.type === 'button' && w.actionKey === char && ractive.findAllComponents('buttonWidget').find(function(b) {
+            return b.get('widget') === w;
+          }).get('isEnabled')) {
+            w.run();
+          }
+        }
+      }
+    };
+    createWidget = function(widgetType, pageX, pageY) {
+      controller.createWidget(widgetType, pageX, pageY);
+    };
+    hailSatan = function(arg) {
+      var clientX, clientY, ref;
+      ref = arg.event, clientX = ref.clientX, clientY = ref.clientY;
+      ractive.set("lastDragX", clientX);
+      ractive.set("lastDragY", clientY);
+    };
+    onWidgetBottomChange = function() {
+      var i, w;
+      ractive.set('height', Math.max.apply(Math, (function() {
+        var ref, results;
+        ref = ractive.get('widgetObj');
+        results = [];
+        for (i in ref) {
+          if (!hasProp.call(ref, i)) continue;
+          w = ref[i];
+          if (w.bottom != null) {
+            results.push(w.bottom);
+          }
+        }
+        return results;
+      })()));
+    };
+    onWidgetRightChange = function() {
+      var i, w;
+      ractive.set('width', Math.max.apply(Math, (function() {
+        var ref, results;
+        ref = ractive.get('widgetObj');
+        results = [];
+        for (i in ref) {
+          if (!hasProp.call(ref, i)) continue;
+          w = ref[i];
+          if (w.right != null) {
+            results.push(w.right);
+          }
+        }
+        return results;
+      })()));
+    };
+    onWidgetValueChange = function(newVal, oldVal, keyPath, widgetNum) {
+      var widget, widgetHasValidValue;
+      widgetHasValidValue = function(widget, value) {
+        return (value != null) && (function() {
+          switch (widget.type) {
+            case 'slider':
+              return !isNaN(value);
+            case 'inputBox':
+              return !(widget.boxedValue.type === 'Number' && isNaN(value));
+            default:
+              return true;
+          }
+        })();
+      };
+      widget = ractive.get('widgetObj')[widgetNum];
+      if ((widget.variable != null) && (typeof world !== "undefined" && world !== null) && newVal !== oldVal && widgetHasValidValue(widget, newVal)) {
+        world.observer.setGlobal(widget.variable, newVal);
+      }
+    };
+    redrawView = function() {
+      controller.redraw();
+      viewController.repaint();
+    };
+    refreshChooser = function(chooser) {
+      var eq;
+      eq = tortoise_require('brazier/equals').eq;
+      chooser.currentChoice = Math.max(0, chooser.choices.findIndex(eq(chooser.currentValue)));
+      chooser.currentValue = chooser.choices[chooser.currentChoice];
+      world.observer.setGlobal(chooser.variable, chooser.currentValue);
+      return false;
+    };
+    rejectDupe = function(varName) {
+      showErrors(["There is already a widget of a different type with a variable named '" + varName + "'"]);
+    };
+    renameGlobal = function(oldName, newName, value) {
+      var existsInObj;
+      existsInObj = function(f) {
+        return function(obj) {
+          var _, v;
+          for (_ in obj) {
+            v = obj[_];
+            if (f(v)) {
+              return true;
+            }
+          }
+          return false;
+        };
+      };
+      if (!existsInObj(function(arg) {
+        var variable;
+        variable = arg.variable;
+        return variable === oldName;
+      })(ractive.get('widgetObj'))) {
+        world.observer.setGlobal(oldName, void 0);
+      }
+      world.observer.setGlobal(newName, value);
+      return false;
+    };
+    resizeView = function() {
+      var maxpxcor, maxpycor, minpxcor, minpycor, patchsize, ref;
+      ref = viewController.model.world, minpxcor = ref.minpxcor, maxpxcor = ref.maxpxcor, minpycor = ref.minpycor, maxpycor = ref.maxpycor, patchsize = ref.patchsize;
+      setPatchSize(patchsize);
+      world.resize(minpxcor, maxpxcor, minpycor, maxpycor);
+    };
+    setPatchSize = function(patchSize) {
+      viewModel.dimensions.patchSize = patchSize;
+      world.setPatchSize(patchSize);
+    };
+    toggleInterfaceLock = function() {
+      var isEditing;
+      isEditing = !ractive.get('isEditing');
+      ractive.set('isEditing', isEditing);
+      ractive.fire('editing-mode-changed-to', isEditing);
+    };
+    trackFocus = function(node) {
+      ractive.set('hasFocus', document.activeElement === node);
+    };
+    unregisterWidget = function(_, id, wasNew) {
+      controller.removeWidgetById(id, wasNew);
+      onWidgetRightChange();
+      onWidgetBottomChange();
+    };
+    updateTopology = function() {
+      var ref, wrapX, wrapY;
+      ref = viewController.model.world, wrapX = ref.wrappingallowedinx, wrapY = ref.wrappingallowediny;
+      world.changeTopology(wrapX, wrapY);
+    };
+    mousetrap = Mousetrap(ractive.find('.netlogo-model'));
+    mousetrap.bind(['ctrl+shift+alt+i', 'command+shift+alt+i'], function() {
+      return ractive.fire('toggle-interface-lock');
+    });
+    mousetrap.bind('del', function() {
+      return ractive.fire('delete-selected');
+    });
+    mousetrap.bind('escape', function() {
+      return ractive.fire('deselect-widgets');
+    });
+    ractive.observe('widgetObj.*.currentValue', onWidgetValueChange);
+    ractive.observe('widgetObj.*.right', onWidgetRightChange);
+    ractive.observe('widgetObj.*.bottom', onWidgetBottomChange);
+    ractive.on('hail-satan', hailSatan);
+    ractive.on('toggle-interface-lock', toggleInterfaceLock);
+    ractive.on('*.redraw-view', redrawView);
+    ractive.on('*.resize-view', resizeView);
+    ractive.on('*.unregister-widget', unregisterWidget);
+    ractive.on('*.update-topology', updateTopology);
+    ractive.on('check-action-keys', function(_, event) {
+      return checkActionKeys(event);
+    });
+    ractive.on('create-widget', function(_, type, x, y) {
+      return createWidget(type, x, y);
+    });
+    ractive.on('show-errors', function(_, event) {
+      return window.showErrors(event.context.compilation.messages);
+    });
+    ractive.on('track-focus', function(_, node) {
+      return trackFocus(node);
+    });
+    ractive.on('*.refresh-chooser', function(_, chooser) {
+      return refreshChooser(chooser);
+    });
+    ractive.on('*.reject-duplicate-var', function(_, varName) {
+      return rejectDupe(varName);
+    });
+    ractive.on('*.rename-interface-global', function(_, oldN, newN, x) {
+      return renameGlobal(oldN, newN, x);
+    });
+    ractive.on('*.set-patch-size', function(_, patchSize) {
+      return setPatchSize(patchSize);
+    });
+    ractive.on('*.update-widgets', function() {
+      return controller.updateWidgets();
+    });
+  };
+
+}).call(this);
+
+//# sourceMappingURL=event-traffic-control.js.map
+</script> 
+  <script>(function() {
+  window.handleContextMenu = function(ractive) {
+    var handleContextMenu, hideContextMenu;
+    hideContextMenu = function(event) {
+      var contextMenu;
+      if ((event != null ? event.button : void 0) !== 2) {
+        contextMenu = ractive.findComponent('contextMenu');
+        if (contextMenu.get('visible')) {
+          contextMenu.fire('cover-thineself');
+        }
+      }
+    };
+    window.addEventListener('keyup', function(e) {
+      if (e.keyCode === 27) {
+        return hideContextMenu(e);
+      }
+    });
+    document.addEventListener("click", hideContextMenu);
+    document.addEventListener("contextmenu", function(e) {
+      var c, classes, elem, elems, hasClass, latestElem, listOfLists;
+      latestElem = e.target;
+      elems = [];
+      while (latestElem != null) {
+        elems.push(latestElem);
+        latestElem = latestElem.parentElement;
+      }
+      listOfLists = (function() {
+        var i, len, results;
+        results = [];
+        for (i = 0, len = elems.length; i < len; i++) {
+          elem = elems[i];
+          results.push((function() {
+            var j, len1, ref, results1;
+            ref = elem.classList;
+            results1 = [];
+            for (j = 0, len1 = ref.length; j < len1; j++) {
+              c = ref[j];
+              results1.push(c);
+            }
+            return results1;
+          })());
+        }
+        return results;
+      })();
+      classes = listOfLists.reduce(function(acc, x) {
+        return acc.concat(x);
+      });
+      hasClass = function(x) {
+        return classes.indexOf(x) !== -1;
+      };
+      if ((!hasClass("netlogo-widget")) && (!hasClass("netlogo-widget-container"))) {
+        return hideContextMenu(e);
+      }
+    });
+    handleContextMenu = function(a, b, c) {
+      var component, pageX, pageY, ref, ref1, ref2, theEditFormIsntUp;
+      theEditFormIsntUp = this.get("isEditing") && !this.findAllComponents('editForm').some(function(form) {
+        return form.get('visible');
+      });
+      if (theEditFormIsntUp) {
+        ref = c == null ? [a, b] : [b, c], (ref1 = ref[0], component = ref1.component), (ref2 = ref[1], pageX = ref2.pageX, pageY = ref2.pageY);
+        this.findComponent('contextMenu').fire('reveal-thineself', component, pageX, pageY);
+        return false;
+      } else {
+        return true;
+      }
+    };
+    ractive.on('show-context-menu', handleContextMenu);
+    ractive.on('*.show-context-menu', handleContextMenu);
+    ractive.on('*.hide-context-menu', hideContextMenu);
+  };
+
+}).call(this);
+
+//# sourceMappingURL=handle-context-menu.js.map
+</script> 
+  <script>(function() {
+  window.handleWidgetSelection = function(ractive) {
+    var deleteSelected, deselectThoseWidgets, justSelectIt, lockSelection, resizer, selectThatWidget, unlockSelection;
+    resizer = function() {
+      return ractive.findComponent('resizer');
+    };
+    lockSelection = function(_, component) {
+      resizer().lockTarget(component);
+    };
+    unlockSelection = function() {
+      resizer().unlockTarget();
+    };
+    deleteSelected = function() {
+      var hasNoEditWindowUp, selected, widget;
+      selected = resizer().get('target');
+      widget = selected.get('widget');
+      hasNoEditWindowUp = document.querySelector('.widget-edit-popup') == null;
+      if (ractive.get('isEditing') && (selected != null) && (widget != null) && (widget.type !== "view") && hasNoEditWindowUp) {
+        unlockSelection();
+        deselectThoseWidgets();
+        ractive.fire('unregister-widget', widget.id);
+      }
+    };
+    justSelectIt = function(event) {
+      return resizer().setTarget(event.component);
+    };
+    selectThatWidget = function(event, trueEvent) {
+      if (ractive.get("isEditing")) {
+        trueEvent.preventDefault();
+        trueEvent.stopPropagation();
+        justSelectIt(event);
+      }
+    };
+    deselectThoseWidgets = function() {
+      resizer().clearTarget();
+    };
+    ractive.observe("isEditing", function(isEditing) {
+      deselectThoseWidgets();
+    });
+    ractive.on('*.select-component', justSelectIt);
+    ractive.on('*.select-widget', selectThatWidget);
+    ractive.on('deselect-widgets', deselectThoseWidgets);
+    ractive.on('delete-selected', deleteSelected);
+    ractive.on('*.lock-selection', lockSelection);
+    return ractive.on('*.unlock-selection', unlockSelection);
+  };
+
+}).call(this);
+
+//# sourceMappingURL=handle-widget-selection.js.map
+</script> 
+  <script>(function() {
+  var entwine, entwineDimensions;
+
+  window.initializeUI = function(containerArg, widgets, code, info, isReadOnly, filename, checkIsReporter) {
+    var configs, container, controller, ractive, updateUI, viewController, viewModel;
+    container = typeof containerArg === 'string' ? document.querySelector(containerArg) : containerArg;
+    controller = null;
+    updateUI = function() {
+      controller.redraw();
+      return controller.updateWidgets();
+    };
+    window.setUpWidgets(widgets, updateUI);
+    ractive = window.generateRactiveSkeleton(container, widgets, code, info, isReadOnly, filename, checkIsReporter);
+    container.querySelector('.netlogo-model').focus();
+    viewModel = widgets.find(function(arg) {
+      var type;
+      type = arg.type;
+      return type === 'view';
+    });
+    ractive.set('primaryView', viewModel);
+    viewController = new ViewController(container.querySelector('.netlogo-view-container'), viewModel.fontSize);
+    entwineDimensions(viewModel, viewController.model.world);
+    entwine([[viewModel, "fontSize"], [viewController.view, "fontSize"]], viewModel.fontSize);
+    configs = window.genConfigs(ractive, viewController, container);
+    controller = new WidgetController(ractive, viewController, configs);
+    window.controlEventTraffic(controller);
+    window.handleWidgetSelection(ractive);
+    window.handleContextMenu(ractive);
+    return controller;
+  };
+
+  entwine = function(objKeyPairs, value) {
+    var backingValue, i, key, len, obj, ref;
+    backingValue = value;
+    for (i = 0, len = objKeyPairs.length; i < len; i++) {
+      ref = objKeyPairs[i], obj = ref[0], key = ref[1];
+      Object.defineProperty(obj, key, {
+        get: function() {
+          return backingValue;
+        },
+        set: function(newValue) {
+          return backingValue = newValue;
+        }
+      });
+    }
+  };
+
+  entwineDimensions = function(viewWidget, modelView) {
+    var mName, translations, wName;
+    translations = {
+      maxPxcor: "maxpxcor",
+      maxPycor: "maxpycor",
+      minPxcor: "minpxcor",
+      minPycor: "minpycor",
+      patchSize: "patchsize",
+      wrappingAllowedInX: "wrappingallowedinx",
+      wrappingAllowedInY: "wrappingallowediny"
+    };
+    for (wName in translations) {
+      mName = translations[wName];
+      entwine([[viewWidget.dimensions, wName], [modelView, mName]], viewWidget.dimensions[wName]);
+    }
+  };
+
+}).call(this);
+
+//# sourceMappingURL=initialize-ui.js.map
+</script> 
+  <script>(function() {
+  var reporterOf;
+
+  window.setUpWidgets = function(widgets, updateUI) {
+    var i, id, len, widget;
+    for (id = i = 0, len = widgets.length; i < len; id = ++i) {
+      widget = widgets[id];
+      setUpWidget(widget, id, updateUI);
+    }
+  };
+
+  reporterOf = function(str) {
+    return new Function("return " + str);
+  };
+
+  window.setUpWidget = function(widget, id, updateUI) {
+    widget.id = id;
+    if (widget.variable != null) {
+      widget.variable = widget.variable.toLowerCase();
+    }
+    switch (widget.type) {
+      case "switch":
+        setUpSwitch(widget, widget);
+        break;
+      case "slider":
+        widget.currentValue = widget["default"];
+        setUpSlider(widget, widget);
+        break;
+      case "inputBox":
+        setUpInputBox(widget, widget);
+        break;
+      case "button":
+        setUpButton(updateUI)(widget, widget);
+        break;
+      case "chooser":
+        setUpChooser(widget, widget);
+        break;
+      case "monitor":
+        setUpMonitor(widget, widget);
+    }
+  };
+
+  window.setUpInputBox = function(source, destination) {
+    destination.boxedValue = source.boxedValue;
+    destination.currentValue = destination.boxedValue.value;
+    destination.variable = source.variable;
+    destination.display = destination.variable;
+  };
+
+  window.setUpSwitch = function(source, destination) {
+    destination.on = source.on;
+    destination.currentValue = destination.on;
+  };
+
+  window.setUpChooser = function(source, destination) {
+    destination.choices = source.choices;
+    destination.currentChoice = source.currentChoice;
+    destination.currentValue = destination.choices[destination.currentChoice];
+  };
+
+  window.setUpButton = function(updateUI) {
+    return function(source, destination) {
+      var ref, task;
+      if (source.forever) {
+        destination.running = false;
+      }
+      if ((ref = source.compilation) != null ? ref.success : void 0) {
+        destination.compiledSource = source.compiledSource;
+        task = window.handlingErrors(new Function(destination.compiledSource));
+        (function(task) {
+          var wrappedTask;
+          wrappedTask = source.forever ? function() {
+            var ex, mustStop;
+            mustStop = (function() {
+              try {
+                return task() instanceof Exception.StopInterrupt;
+              } catch (error) {
+                ex = error;
+                return ex instanceof Exception.HaltInterrupt;
+              }
+            })();
+            if (mustStop) {
+              destination.running = false;
+              return updateUI();
+            }
+          } : function() {
+            task();
+            return updateUI();
+          };
+          return (function(wrappedTask) {
+            return destination.run = wrappedTask;
+          })(wrappedTask);
+        })(task);
+      } else {
+        destination.run = function() {
+          var ref1, ref2;
+          destination.running = false;
+          return showErrors(["Button failed to compile with:"].concat((ref1 = (ref2 = source.compilation) != null ? ref2.messages : void 0) != null ? ref1 : []));
+        };
+      }
+    };
+  };
+
+  window.setUpMonitor = function(source, destination) {
+    var ref;
+    if ((ref = source.compilation) != null ? ref.success : void 0) {
+      destination.compiledSource = source.compiledSource;
+      destination.reporter = reporterOf(destination.compiledSource);
+      destination.currentValue = "";
+    } else {
+      destination.reporter = function() {
+        return "N/A";
+      };
+      destination.currentValue = "N/A";
+    }
+  };
+
+  window.setUpSlider = function(source, destination) {
+    var ref;
+    destination["default"] = source["default"];
+    destination.compiledMin = source.compiledMin;
+    destination.compiledMax = source.compiledMax;
+    destination.compiledStep = source.compiledStep;
+    if ((ref = source.compilation) != null ? ref.success : void 0) {
+      destination.getMin = reporterOf(destination.compiledMin);
+      destination.getMax = reporterOf(destination.compiledMax);
+      destination.getStep = reporterOf(destination.compiledStep);
+    } else {
+      destination.getMin = function() {
+        return destination.currentValue;
+      };
+      destination.getMax = function() {
+        return destination.currentValue;
+      };
+      destination.getStep = function() {
+        return 0.001;
+      };
+    }
+    destination.minValue = destination.currentValue;
+    destination.maxValue = destination.currentValue + 1;
+    destination.stepValue = 0.001;
+  };
+
+}).call(this);
+
+//# sourceMappingURL=set-up-widgets.js.map
+</script> 
+  <script>(function() {
+  var dropNLogoExtension, partials, template;
+
+  dropNLogoExtension = function(s) {
+    if (s.match(/.*\.nlogo/) != null) {
+      return s.slice(0, -6);
+    } else {
+      return s;
+    }
+  };
+
+  window.generateRactiveSkeleton = function(container, widgets, code, info, isReadOnly, filename, checkIsReporter) {
+    var animateWithClass, model;
+    model = {
+      checkIsReporter: checkIsReporter,
+      code: code,
+      consoleOutput: '',
+      exportForm: false,
+      hasFocus: false,
+      height: 0,
+      info: info,
+      isEditing: false,
+      isReadOnly: isReadOnly,
+      isStale: false,
+      lastCompiledCode: code,
+      lastCompileFailed: false,
+      lastDragX: void 0,
+      lastDragY: void 0,
+      modelTitle: dropNLogoExtension(filename),
+      outputWidgetOutput: '',
+      primaryView: void 0,
+      speed: 0.0,
+      ticks: "",
+      ticksStarted: false,
+      widgetObj: widgets.reduce((function(acc, widget, index) {
+        acc[index] = widget;
+        return acc;
+      }), {}),
+      width: 0
+    };
+    animateWithClass = function(klass) {
+      return function(t, params) {
+        var event, eventNames, i, len, listener;
+        params = t.processParams(params);
+        eventNames = ['animationend', 'webkitAnimationEnd', 'oAnimationEnd', 'msAnimationEnd'];
+        listener = function(l) {
+          return function(e) {
+            var event, i, len;
+            e.target.classList.remove(klass);
+            for (i = 0, len = eventNames.length; i < len; i++) {
+              event = eventNames[i];
+              e.target.removeEventListener(event, l);
+            }
+            return t.complete();
+          };
+        };
+        for (i = 0, len = eventNames.length; i < len; i++) {
+          event = eventNames[i];
+          t.node.addEventListener(event, listener(listener));
+        }
+        return t.node.classList.add(klass);
+      };
+    };
+    Ractive.transitions.grow = animateWithClass('growing');
+    Ractive.transitions.shrink = animateWithClass('shrinking');
+    return new Ractive({
+      el: container,
+      template: template,
+      partials: partials,
+      components: {
+        console: RactiveConsoleWidget,
+        contextMenu: RactiveContextMenu,
+        editableTitle: RactiveModelTitle,
+        codePane: RactiveModelCodeComponent,
+        infotab: RactiveInfoTabWidget,
+        resizer: RactiveResizer,
+        tickCounter: RactiveTickCounter,
+        labelWidget: RactiveLabel,
+        switchWidget: RactiveSwitch,
+        buttonWidget: RactiveButton,
+        sliderWidget: RactiveSlider,
+        chooserWidget: RactiveChooser,
+        monitorWidget: RactiveMonitor,
+        inputWidget: RactiveInput,
+        outputWidget: RactiveOutputArea,
+        plotWidget: RactivePlot,
+        viewWidget: RactiveView
+      },
+      data: function() {
+        return model;
+      }
+    });
+  };
+
+  template = "<div class=\"netlogo-model\" style=\"min-width: {{width}}px;\"\n     tabindex=\"1\" on-keydown=\"@this.fire('check-action-keys', @event)\"\n     on-focus=\"@this.fire('track-focus', @node)\"\n     on-blur=\"@this.fire('track-focus', @node)\">\n  <div class=\"netlogo-header\">\n    <div class=\"netlogo-subheader\">\n      <div class=\"netlogo-powered-by\">\n        <a href=\"http://ccl.northwestern.edu/netlogo/\">\n          <img style=\"vertical-align: middle;\" alt=\"NetLogo\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAANcSURBVHjarJRdaFxFFMd/M/dj7252uxubKms+bGprVyIVbNMWWqkQqtLUSpQWfSiV+oVFTcE3DeiDgvoiUSiCYLH2oVoLtQ+iaaIWWtE2FKGkkSrkq5svN+sm7ma/7p3x4W42lEbjQw8MM8yc87/nzPnNFVprbqWJXyMyXuMqx1Ni6N3ny3cX8tOHNLoBUMvESoFI2Xbs4zeO1lzREpSrMSNS1zkBDv6uo1/noz1H7mpvS4SjprAl2AZYEqzKbEowBAgBAkjPKX2599JjT7R0bj412D0JYNplPSBD1G2SmR/e6u1ikEHG2vYiGxoJmxAyIGSCI8GpCItKimtvl2JtfGujDNkX6epuAhCjNeAZxM1ocPy2Qh4toGQ5DLU+ysiuA2S3P0KgJkjAgEAlQylAA64CG/jlUk6//ng4cNWmLK0yOPNMnG99Rs9LQINVKrD+wmke7upg55PrWP3eYcwrlykpKCkoelDy/HVegQhoABNAepbACwjOt72gZkJhypX70YDWEEklue+rbnYc2MiGp1upPfYReiJJUUG58gFXu4udch1wHcjFIgy0HyIjb2yvBpT2F6t+6+f+D15lW8c9JDo7iPSdgVIRLUqL2AyHDQAOf9hfbqxvMF98eT3RuTS1avHyl+Stcphe2chP9+4k/t3RbXVl3W+Ws17FY56/w3VcbO/koS/eZLoAqrQMxADZMTYOfwpwoWjL4+bCYcgssMqGOzPD6CIkZ/3SxTJ0ayFIN6/BnBrZb2XdE1JUgkJWkfrUNRJnPyc16zsbgPyXIUJBpvc+y89nk/S8/4nek3NPGeBWMwzGvhUPnP6RubRLwfODlqqx3LSCyee2MnlwMwA2RwgO5qouVcHmksUdJweYyi8hZkrUjgT5t/ejNq0jBsSqNWsKyT9uFtxw7Bs585d3g46KOeT2bWHmtd14KyP+5mzqpsYU3OyioACMhGiqPTMocsrHId9cy9BLDzKxq8X3ctMwlV6yKSHL4fr4dd0DeQBTBUgUkvpE1kVPbqkX117ZzuSaFf4zyfz5n9A4lk0yNU7vyb7jTy1kmFGipejKvh6h9n0W995ZPTu227hqmCz33xXgFV1v9NzI96NfjndWt7XWCB/7BSICFWL+j3lAofpCtfYFb6X9MwCJZ07mUsXRGwAAAABJRU5ErkJggg==\"/>\n          <span style=\"font-size: 16px;\">powered by NetLogo</span>\n        </a>\n      </div>\n    </div>\n    <editableTitle title=\"{{modelTitle}}\" isEditing=\"{{isEditing}}\"/>\n    {{# !isReadOnly }}\n      <div class=\"flex-column\" style=\"align-items: flex-end; user-select: none;\">\n        <div class=\"netlogo-export-wrapper\">\n          <span style=\"margin-right: 4px;\">File:</span>\n          <button class=\"netlogo-ugly-button\" on-click=\"open-new-file\"{{#isEditing}} disabled{{/}}>New</button>\n        </div>\n        <div class=\"netlogo-export-wrapper\">\n          <span style=\"margin-right: 4px;\">Export:</span>\n          <button class=\"netlogo-ugly-button\" on-click=\"export-nlogo\"{{#isEditing}} disabled{{/}}>NetLogo</button>\n          <button class=\"netlogo-ugly-button\" on-click=\"export-html\"{{#isEditing}} disabled{{/}}>HTML</button>\n        </div>\n      </div>\n    {{/}}\n  </div>\n\n  <div class=\"netlogo-interface-unlocker\" style=\"display: none\" class=\"{{#isEditing}}interface-unlocked{{/}}\" on-click=\"toggle-interface-lock\"></div>\n\n  <contextMenu></contextMenu>\n\n  <label class=\"netlogo-speed-slider{{#isEditing}} interface-unlocked{{/}}\">\n    <span class=\"netlogo-label\">model speed</span>\n    <input type=\"range\" min=-1 max=1 step=0.01 value=\"{{speed}}\"{{#isEditing}} disabled{{/}} />\n    <tickCounter isVisible=\"{{primaryView.showTickCounter}}\"\n                 label=\"{{primaryView.tickCounterLabel}}\" value=\"{{ticks}}\" />\n  </label>\n\n  <div style=\"position: relative; width: {{width}}px; height: {{height}}px\"\n       class=\"netlogo-widget-container\"\n       on-contextmenu=\"@this.fire('show-context-menu', { component: @this }, @event)\"\n       on-click=\"@this.fire('deselect-widgets', @event)\" on-dragover=\"hail-satan\">\n    <resizer isEnabled=\"{{isEditing}}\" />\n    {{#widgetObj:key}}\n      {{# type === 'view'     }} <viewWidget    id=\"{{>widgetID}}\" isEditing=\"{{isEditing}}\" left=\"{{left}}\" right=\"{{right}}\" top=\"{{top}}\" bottom=\"{{bottom}}\" widget={{this}} ticks=\"{{ticks}}\" /> {{/}}\n      {{# type === 'textBox'  }} <labelWidget   id=\"{{>widgetID}}\" isEditing=\"{{isEditing}}\" left=\"{{left}}\" right=\"{{right}}\" top=\"{{top}}\" bottom=\"{{bottom}}\" widget={{this}} /> {{/}}\n      {{# type === 'switch'   }} <switchWidget  id=\"{{>widgetID}}\" isEditing=\"{{isEditing}}\" left=\"{{left}}\" right=\"{{right}}\" top=\"{{top}}\" bottom=\"{{bottom}}\" widget={{this}} /> {{/}}\n      {{# type === 'button'   }} <buttonWidget  id=\"{{>widgetID}}\" isEditing=\"{{isEditing}}\" left=\"{{left}}\" right=\"{{right}}\" top=\"{{top}}\" bottom=\"{{bottom}}\" widget={{this}} errorClass=\"{{>errorClass}}\" ticksStarted=\"{{ticksStarted}}\"/> {{/}}\n      {{# type === 'slider'   }} <sliderWidget  id=\"{{>widgetID}}\" isEditing=\"{{isEditing}}\" left=\"{{left}}\" right=\"{{right}}\" top=\"{{top}}\" bottom=\"{{bottom}}\" widget={{this}} errorClass=\"{{>errorClass}}\" /> {{/}}\n      {{# type === 'chooser'  }} <chooserWidget id=\"{{>widgetID}}\" isEditing=\"{{isEditing}}\" left=\"{{left}}\" right=\"{{right}}\" top=\"{{top}}\" bottom=\"{{bottom}}\" widget={{this}} /> {{/}}\n      {{# type === 'monitor'  }} <monitorWidget id=\"{{>widgetID}}\" isEditing=\"{{isEditing}}\" left=\"{{left}}\" right=\"{{right}}\" top=\"{{top}}\" bottom=\"{{bottom}}\" widget={{this}} errorClass=\"{{>errorClass}}\" /> {{/}}\n      {{# type === 'inputBox' }} <inputWidget   id=\"{{>widgetID}}\" isEditing=\"{{isEditing}}\" left=\"{{left}}\" right=\"{{right}}\" top=\"{{top}}\" bottom=\"{{bottom}}\" widget={{this}} /> {{/}}\n      {{# type === 'plot'     }} <plotWidget    id=\"{{>widgetID}}\" isEditing=\"{{isEditing}}\" left=\"{{left}}\" right=\"{{right}}\" top=\"{{top}}\" bottom=\"{{bottom}}\" widget={{this}} /> {{/}}\n      {{# type === 'output'   }} <outputWidget  id=\"{{>widgetID}}\" isEditing=\"{{isEditing}}\" left=\"{{left}}\" right=\"{{right}}\" top=\"{{top}}\" bottom=\"{{bottom}}\" widget={{this}} text=\"{{outputWidgetOutput}}\" /> {{/}}\n    {{/}}\n  </div>\n\n  <div class=\"netlogo-tab-area\" style=\"max-width: {{Math.max(width, 500)}}px\">\n    {{# !isReadOnly }}\n    <label class=\"netlogo-tab{{#showConsole}} netlogo-active{{/}}\">\n      <input id=\"console-toggle\" type=\"checkbox\" checked=\"{{showConsole}}\" />\n      <span class=\"netlogo-tab-text\">Command Center</span>\n    </label>\n    {{#showConsole}}\n      <console output=\"{{consoleOutput}}\" isEditing=\"{{isEditing}}\" checkIsReporter=\"{{checkIsReporter}}\" />\n    {{/}}\n    {{/}}\n    <label class=\"netlogo-tab{{#showCode}} netlogo-active{{/}}\">\n      <input id=\"code-tab-toggle\" type=\"checkbox\" checked=\"{{ showCode }}\" />\n      <span class=\"netlogo-tab-text{{#lastCompileFailed}} netlogo-widget-error{{/}}\">NetLogo Code</span>\n    </label>\n    {{#showCode}}\n      <codePane code='{{code}}' lastCompiledCode='{{lastCompiledCode}}' lastCompileFailed='{{lastCompileFailed}}' isReadOnly='{{isReadOnly}}' />\n    {{/}}\n    <label class=\"netlogo-tab{{#showInfo}} netlogo-active{{/}}\">\n      <input id=\"info-toggle\" type=\"checkbox\" checked=\"{{ showInfo }}\" />\n      <span class=\"netlogo-tab-text\">Model Info</span>\n    </label>\n    {{#showInfo}}\n      <infotab rawText='{{info}}' isEditing='{{isEditing}}' />\n    {{/}}\n  </div>\n\n  <input id=\"import-world-input\" type=\"file\" name=\"import-world\" style=\"display: none;\" />\n\n</div>";
+
+  partials = {
+    errorClass: "{{# !compilation.success}}netlogo-widget-error{{/}}",
+    widgetID: "netlogo-{{type}}-{{id}}"
+  };
+
+}).call(this);
+
+//# sourceMappingURL=skeleton.js.map
+</script> 
+  <script>(function() {
+  var buttonProps, chooserProps, defaultWidgetMixinFor, inputBoxProps, monitorProps, outputProps, plotProps, sliderProps, switchProps, textBoxProps, updateWidget, viewProps, widgetEqualsBy;
+
+  window.WidgetController = (function() {
+    function WidgetController(ractive, viewController, configs) {
+      var chartOps, component, display, ref;
+      this.ractive = ractive;
+      this.viewController = viewController;
+      this.configs = configs;
+      ref = this.configs.plotOps;
+      for (display in ref) {
+        chartOps = ref[display];
+        component = this.ractive.findAllComponents("plotWidget").find(function(plot) {
+          return plot.get("widget").display === display;
+        });
+        component.set('resizeCallback', chartOps.resizeElem.bind(chartOps));
+      }
+    }
+
+    WidgetController.prototype.createWidget = function(widgetType, x, y) {
+      var adjustedX, adjustedY, base, id, mixin, rect, widget;
+      rect = document.querySelector('.netlogo-widget-container').getBoundingClientRect();
+      adjustedX = Math.round(x - rect.x);
+      adjustedY = Math.round(y - rect.y);
+      base = {
+        left: adjustedX,
+        top: adjustedY,
+        type: widgetType
+      };
+      mixin = defaultWidgetMixinFor(widgetType, adjustedX, adjustedY);
+      widget = Object.assign(base, mixin);
+      id = Math.max.apply(Math, Object.keys(this.ractive.get('widgetObj')).map(parseFloat)) + 1;
+      window.setUpWidget(widget, id, ((function(_this) {
+        return function() {
+          _this.redraw();
+          return _this.updateWidgets();
+        };
+      })(this)));
+      this.ractive.get('widgetObj')[id] = widget;
+      this.ractive.update('widgetObj');
+      this.ractive.findAllComponents("").find(function(c) {
+        return c.get('widget') === widget;
+      }).fire('initialize-widget');
+    };
+
+    WidgetController.prototype.runForevers = function() {
+      var i, len, ref, widget;
+      ref = this.widgets();
+      for (i = 0, len = ref.length; i < len; i++) {
+        widget = ref[i];
+        if (widget.type === 'button' && widget.forever && widget.running) {
+          widget.run();
+        }
+      }
+    };
+
+    WidgetController.prototype.updateWidgets = function() {
+      var _, chartOps, i, len, ref, ref1, widget;
+      ref = this.configs.plotOps;
+      for (_ in ref) {
+        chartOps = ref[_];
+        chartOps.redraw();
+      }
+      ref1 = this.widgets();
+      for (i = 0, len = ref1.length; i < len; i++) {
+        widget = ref1[i];
+        updateWidget(widget);
+      }
+      if (world.ticker.ticksAreStarted()) {
+        this.ractive.set('ticks', Math.floor(world.ticker.tickCount()));
+        this.ractive.set('ticksStarted', true);
+      } else {
+        this.ractive.set('ticks', '');
+        this.ractive.set('ticksStarted', false);
+      }
+      this.ractive.update();
+    };
+
+    WidgetController.prototype.removeWidgetById = function(id, widgetWasNew) {
+      var widgetType;
+      if (widgetWasNew == null) {
+        widgetWasNew = false;
+      }
+      widgetType = this.ractive.get('widgetObj')[id].type;
+      delete this.ractive.get('widgetObj')[id];
+      this.ractive.update('widgetObj');
+      this.ractive.fire('deselect-widgets');
+      if (!widgetWasNew) {
+        switch (widgetType) {
+          case "chooser":
+          case "inputBox":
+          case "plot":
+          case "slider":
+          case "switch":
+            this.ractive.fire('controller.recompile');
+        }
+      }
+    };
+
+    WidgetController.prototype.widgets = function() {
+      var _, ref, results, v;
+      ref = this.ractive.get('widgetObj');
+      results = [];
+      for (_ in ref) {
+        v = ref[_];
+        results.push(v);
+      }
+      return results;
+    };
+
+    WidgetController.prototype.freshenUpWidgets = function(realWidgets, newWidgets) {
+      var i, index, len, newWidget, props, realWidget, ref, ref1, setterUpper;
+      for (index = i = 0, len = newWidgets.length; i < len; index = ++i) {
+        newWidget = newWidgets[index];
+        ref = (function() {
+          switch (newWidget.type) {
+            case "button":
+              return [
+                buttonProps, window.setUpButton((function(_this) {
+                  return function() {
+                    _this.redraw();
+                    return _this.updateWidgets();
+                  };
+                })(this))
+              ];
+            case "chooser":
+              return [chooserProps, window.setUpChooser];
+            case "inputBox":
+              return [inputBoxProps, window.setUpInputBox];
+            case "monitor":
+              return [monitorProps, window.setUpMonitor];
+            case "output":
+              return [outputProps, (function() {})];
+            case "plot":
+              return [plotProps, (function() {})];
+            case "slider":
+              return [sliderProps, window.setUpSlider];
+            case "switch":
+              return [switchProps, window.setUpSwitch];
+            case "textBox":
+              return [textBoxProps, (function() {})];
+            case "view":
+              return [viewProps, (function() {})];
+            default:
+              throw new Error("Unknown widget type: " + newWidget.type);
+          }
+        }).call(this), props = ref[0], setterUpper = ref[1];
+        realWidget = realWidgets.find(widgetEqualsBy(props)(newWidget));
+        if (realWidget != null) {
+          realWidget.compilation = newWidget.compilation;
+          setterUpper(newWidget, realWidget);
+          if (newWidget.variable != null) {
+            realWidget.variable = newWidget.variable.toLowerCase();
+          }
+          if ((ref1 = newWidget.type) === "chooser" || ref1 === "inputBox" || ref1 === "slider" || ref1 === "switch") {
+            world.observer.setGlobal(newWidget.variable, realWidget.currentValue);
+          }
+        }
+      }
+      this.updateWidgets();
+    };
+
+    WidgetController.prototype.speed = function() {
+      return this.ractive.get('speed');
+    };
+
+    WidgetController.prototype.setCode = function(code) {
+      this.ractive.set('code', code);
+      this.ractive.findComponent('editor').setCode(code);
+      this.ractive.fire('controller.recompile');
+    };
+
+    WidgetController.prototype.redraw = function() {
+      if (Updater.hasUpdates()) {
+        this.viewController.update(Updater.collectUpdates());
+      }
+    };
+
+    WidgetController.prototype.teardown = function() {
+      this.ractive.teardown();
+    };
+
+    WidgetController.prototype.code = function() {
+      return this.ractive.get('code');
+    };
+
+    return WidgetController;
+
+  })();
+
+  updateWidget = function(widget) {
+    var desiredHeight, desiredWidth, err, isntValidValue, maxPxcor, maxPycor, maxValue, minPxcor, minPycor, minValue, patchSize, ref, stepValue, value;
+    if (widget.currentValue != null) {
+      widget.currentValue = (function() {
+        if (widget.variable != null) {
+          return world.observer.getGlobal(widget.variable);
+        } else if (widget.reporter != null) {
+          try {
+            value = widget.reporter();
+            isntValidValue = !((value != null) && ((typeof value !== "number") || isFinite(value)));
+            if (isntValidValue) {
+              return 'N/A';
+            } else {
+              if (typeof precision !== "undefined" && precision !== null) {
+                return NLMath.precision(value, widget.precision);
+              } else {
+                return value;
+              }
+            }
+          } catch (error) {
+            err = error;
+            return 'N/A';
+          }
+        } else {
+          return widget.currentValue;
+        }
+      })();
+    }
+    switch (widget.type) {
+      case 'inputBox':
+        widget.boxedValue.value = widget.currentValue;
+        break;
+      case 'slider':
+        maxValue = widget.getMax();
+        stepValue = widget.getStep();
+        minValue = widget.getMin();
+        if (widget.maxValue !== maxValue || widget.stepValue !== stepValue || widget.minValue !== minValue) {
+          widget.maxValue = maxValue;
+          widget.stepValue = stepValue;
+          widget.minValue = minValue - 0.000001;
+          widget.minValue = minValue;
+        }
+        break;
+      case 'view':
+        ref = widget.dimensions, maxPxcor = ref.maxPxcor, maxPycor = ref.maxPycor, minPxcor = ref.minPxcor, minPycor = ref.minPycor, patchSize = ref.patchSize;
+        desiredWidth = Math.round(patchSize * (maxPxcor - minPxcor + 1));
+        desiredHeight = Math.round(patchSize * (maxPycor - minPycor + 1));
+        widget.right = widget.left + desiredWidth;
+        widget.bottom = widget.top + desiredHeight;
+    }
+  };
+
+  defaultWidgetMixinFor = function(widgetType, x, y) {
+    switch (widgetType) {
+      case "output":
+        return {
+          bottom: y + 60,
+          right: x + 180,
+          fontSize: 12
+        };
+      case "switch":
+        return {
+          bottom: y + 33,
+          right: x + 100,
+          on: false,
+          variable: ""
+        };
+      case "slider":
+        return {
+          bottom: y + 33,
+          right: x + 170,
+          "default": 50,
+          direction: "horizontal",
+          max: "100",
+          min: "0",
+          step: "1"
+        };
+      case "inputBox":
+        return {
+          bottom: y + 60,
+          right: x + 180,
+          boxedValue: {
+            multiline: false,
+            type: "String",
+            value: ""
+          },
+          variable: ""
+        };
+      case "button":
+        return {
+          bottom: y + 60,
+          right: x + 180,
+          buttonKind: "Observer",
+          disableUntilTicksStart: false,
+          forever: false,
+          running: false
+        };
+      case "chooser":
+        return {
+          bottom: y + 45,
+          right: x + 140,
+          choices: [],
+          currentChoice: -1,
+          variable: ""
+        };
+      case "monitor":
+        return {
+          bottom: y + 45,
+          right: x + 70,
+          fontSize: 11,
+          precision: 17
+        };
+      case "plot":
+        return {
+          bottom: y + 60,
+          right: x + 180
+        };
+      case "textBox":
+        return {
+          bottom: y + 60,
+          right: x + 180,
+          color: 0,
+          display: "",
+          fontSize: 12,
+          transparent: true
+        };
+      default:
+        throw new Error("Huh?  What kind of widget is a " + widgetType + "?");
+    }
+  };
+
+  widgetEqualsBy = function(props) {
+    return function(w1) {
+      return function(w2) {
+        var eq, locationProps;
+        eq = tortoise_require('brazier/equals').eq;
+        locationProps = ['bottom', 'left', 'right', 'top'];
+        return w1.type === w2.type && locationProps.concat(props).every(function(prop) {
+          return eq(w1[prop])(w2[prop]);
+        });
+      };
+    };
+  };
+
+  buttonProps = ['buttonKind', 'disableUntilTicksStart', 'forever', 'source'];
+
+  chooserProps = ['choices', 'display', 'variable'];
+
+  inputBoxProps = ['boxedValue', 'variable'];
+
+  monitorProps = ['display', 'fontSize', 'precision', 'source'];
+
+  outputProps = ['fontSize'];
+
+  plotProps = ['autoPlotOn', 'display', 'legendOn', 'pens', 'setupCode', 'updateCode', 'xAxis', 'xmax', 'xmin', 'yAxis', 'ymax', 'ymin'];
+
+  sliderProps = ['default', 'direction', 'display', 'max', 'min', 'step', 'units', 'variable'];
+
+  switchProps = ['display', 'on', 'variable'];
+
+  textBoxProps = ['color', 'display', 'fontSize', 'transparent'];
+
+  viewProps = ['dimensions', 'fontSize', 'frameRate', 'showTickCounter', 'tickCounterLabel', 'updateMode'];
+
+}).call(this);
+
+//# sourceMappingURL=widget-controller.js.map
+</script> 
+  <script>
+/*
+
+  type Metric = {
+    interval: Number
+  , reporter: () => Any
+  }
+
+  type VariableConfig = {
+    name:           String
+    parameterSpace: { type: "discreteValues", values: Array[Any] }
+                  | { type: "range", min: Number, max: Number, interval: Number }
+  }
+
+  type BehaviorSpaceConfig =
+    {
+      parameterSet:        { type: "discreteCombos",   combos:    Array[Object[Any]]    }
+                         | { type: "cartesianProduct", variables: Array[VariableConfig] }
+      repetitionsPerCombo: Number
+      metrics:             Object[Metric]
+      setup:               () => Unit
+      go:                  () => Unit
+      stopCondition:       () => Boolean
+      iterationLimit:      Number
+    }
+
+  type Results = Array[{ config: Object[Any], results: Object[Object[Any]] }]
+ */
+
+(function() {
+  var cartesianProduct, executeRun, genCartesianSet;
+
+  window.runBabyBehaviorSpace = function(config, setGlobal, dump) {
+    var combination, finalParameterSet, flatten, go, iterationLimit, j, key, len, metrics, pSet, parameterSet, repetitionsPerCombo, results, results1, setup, stopCondition, value;
+    parameterSet = config.parameterSet, repetitionsPerCombo = config.repetitionsPerCombo, metrics = config.metrics, setup = config.setup, go = config.go, stopCondition = config.stopCondition, iterationLimit = config.iterationLimit;
+    parameterSet = (function() {
+      switch (parameterSet.type) {
+        case "discreteCombos":
+          return parameterSet.combos;
+        case "cartesianProduct":
+          return genCartesianSet(parameterSet.variables);
+        default:
+          throw new Exception("Unknown parameter set type: " + type);
+      }
+    })();
+    flatten = function(xs) {
+      var ref;
+      return (ref = []).concat.apply(ref, xs);
+    };
+    finalParameterSet = flatten((function() {
+      var j, len, results1;
+      results1 = [];
+      for (j = 0, len = parameterSet.length; j < len; j++) {
+        combination = parameterSet[j];
+        results1.push((function() {
+          var k, ref, results2;
+          results2 = [];
+          for (k = 1, ref = repetitionsPerCombo; 1 <= ref ? k <= ref : k >= ref; 1 <= ref ? k++ : k--) {
+            results2.push(combination);
+          }
+          return results2;
+        })());
+      }
+      return results1;
+    })());
+    results1 = [];
+    for (j = 0, len = finalParameterSet.length; j < len; j++) {
+      pSet = finalParameterSet[j];
+      for (key in pSet) {
+        value = pSet[key];
+        setGlobal(key, value);
+      }
+      results = executeRun(setup, go, stopCondition, iterationLimit, metrics, dump);
+      results1.push({
+        config: pSet,
+        results: results
+      });
+    }
+    return results1;
+  };
+
+  cartesianProduct = function(xs) {
+    return xs.reduce(function(acc, x) {
+      var nested;
+      nested = acc.map(function(a) {
+        return x.map(function(b) {
+          return a.concat(b);
+        });
+      });
+      return nested.reduce((function(flattened, l) {
+        return flattened.concat(l);
+      }), []);
+    }, [[]]);
+  };
+
+  genCartesianSet = function(variables) {
+    var basicParameterSet, condense;
+    basicParameterSet = variables.map(function(arg) {
+      var interval, max, min, name, ref, type, values, x;
+      name = arg.name, (ref = arg.parameterSpace, type = ref.type, values = ref.values, min = ref.min, max = ref.max, interval = ref.interval);
+      values = (function() {
+        var j, ref1, ref2, ref3, results1;
+        switch (type) {
+          case "discreteValues":
+            return values;
+          case "range":
+            results1 = [];
+            for (x = j = ref1 = min, ref2 = max, ref3 = interval; ref3 > 0 ? j <= ref2 : j >= ref2; x = j += ref3) {
+              results1.push(x);
+            }
+            return results1;
+            break;
+          default:
+            throw new Exception("Unknown parameter space type: " + type);
+        }
+      })();
+      return values.map(function(value) {
+        return {
+          name: name,
+          value: value
+        };
+      });
+    });
+    condense = (function(acc, arg) {
+      var name, value;
+      name = arg.name, value = arg.value;
+      acc[name] = value;
+      return acc;
+    });
+    return cartesianProduct(basicParameterSet).map(function(combo) {
+      return combo.reduce(condense, {});
+    });
+  };
+
+  executeRun = function(setup, go, stopCondition, iterationLimit, metrics, dump) {
+    var iters, maxIters, measure, measurements;
+    iters = 0;
+    maxIters = iterationLimit < 1 ? -1 : iterationLimit;
+    measurements = {};
+    measure = function(i) {
+      var interval, ms, name, ref, reporter;
+      ms = {};
+      for (name in metrics) {
+        ref = metrics[name], reporter = ref.reporter, interval = ref.interval;
+        if (interval === 0 || (i % interval) === 0) {
+          ms[name] = dump(reporter());
+        }
+      }
+      if (Object.keys(ms).length > 0) {
+        measurements[i] = ms;
+      }
+    };
+    setup();
+    while (!stopCondition() && iters < maxIters) {
+      measure(iters);
+      go();
+      iters++;
+    }
+    measure(iters);
+    return measurements;
+  };
+
+}).call(this);
+
+//# sourceMappingURL=babybehaviorspace.js.map
+</script> 
+  <script>(function() {
+  var DEFAULT_REDRAW_DELAY, FAST_UPDATE_EXP, MAX_REDRAW_DELAY, MAX_UPDATE_DELAY, MAX_UPDATE_TIME, NETLOGO_VERSION, REDRAW_EXP, SLOW_UPDATE_EXP, codeCompile, globalEval, now, ref,
+    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
+    slice = [].slice;
+
+  MAX_UPDATE_DELAY = 1000;
+
+  FAST_UPDATE_EXP = 0.5;
+
+  SLOW_UPDATE_EXP = 4;
+
+  MAX_UPDATE_TIME = 100;
+
+  DEFAULT_REDRAW_DELAY = 1000 / 30;
+
+  MAX_REDRAW_DELAY = 1000;
+
+  REDRAW_EXP = 2;
+
+  NETLOGO_VERSION = '2.3.0';
+
+  codeCompile = function(code, commands, reporters, widgets, onFulfilled, onErrors) {
+    var compileParams, ex;
+    compileParams = {
+      code: code,
+      widgets: widgets,
+      commands: commands,
+      reporters: reporters,
+      turtleShapes: typeof turtleShapes !== "undefined" && turtleShapes !== null ? turtleShapes : [],
+      linkShapes: typeof linkShapes !== "undefined" && linkShapes !== null ? linkShapes : []
+    };
+    try {
+      return onFulfilled((new BrowserCompiler()).fromModel(compileParams));
+    } catch (error) {
+      ex = error;
+      return onErrors([ex]);
+    } finally {
+      Tortoise.finishLoading();
+    }
+  };
+
+  now = (ref = typeof performance !== "undefined" && performance !== null ? performance.now.bind(performance) : void 0) != null ? ref : Date.now.bind(Date);
+
+  globalEval = eval;
+
+  window.AgentModel = tortoise_require('agentmodel');
+
+  window.SessionLite = (function() {
+    SessionLite.prototype.widgetController = void 0;
+
+    function SessionLite(container, widgets, code, info, readOnly, filename, modelJS, lastCompileFailed, displayError) {
+      var checkIsReporter, ref1;
+      this.displayError = displayError;
+      this.promptFilename = bind(this.promptFilename, this);
+      this.eventLoop = bind(this.eventLoop, this);
+      checkIsReporter = (function(_this) {
+        return function(str) {
+          var compileRequest;
+          compileRequest = {
+            code: _this.widgetController.code(),
+            widgets: _this.widgetController.widgets()
+          };
+          return (new BrowserCompiler()).isReporter(str, compileRequest);
+        };
+      })(this);
+      this._eventLoopTimeout = -1;
+      this._lastRedraw = 0;
+      this._lastUpdate = 0;
+      this.drawEveryFrame = false;
+      this.widgetController = initializeUI(container, widgets, code, info, readOnly, filename, checkIsReporter);
+      this.widgetController.ractive.on('*.recompile', (function(_this) {
+        return function(_, callback) {
+          return _this.recompile(callback);
+        };
+      })(this));
+      this.widgetController.ractive.on('export-nlogo', (function(_this) {
+        return function(_, event) {
+          return _this.exportNlogo(event);
+        };
+      })(this));
+      this.widgetController.ractive.on('export-html', (function(_this) {
+        return function(_, event) {
+          return _this.exportHtml(event);
+        };
+      })(this));
+      this.widgetController.ractive.on('open-new-file', (function(_this) {
+        return function(_, event) {
+          return _this.openNewFile();
+        };
+      })(this));
+      this.widgetController.ractive.on('console.run', (function(_this) {
+        return function(_, code) {
+          return _this.run(code);
+        };
+      })(this));
+      this.widgetController.ractive.on('editing-mode-changed-to', (function(_this) {
+        return function(_, isEditing) {
+          return _this.setEventLoop(!isEditing);
+        };
+      })(this));
+      this.widgetController.ractive.set('lastCompileFailed', lastCompileFailed);
+      window.modelConfig = Object.assign((ref1 = window.modelConfig) != null ? ref1 : {}, this.widgetController.configs);
+      window.modelConfig.version = NETLOGO_VERSION;
+      globalEval(modelJS);
+    }
+
+    SessionLite.prototype.setEventLoop = function(isOn) {
+      cancelAnimationFrame(this._eventLoopTimeout);
+      if (isOn) {
+        requestAnimationFrame(this.eventLoop);
+      }
+    };
+
+    SessionLite.prototype.modelTitle = function() {
+      return this.widgetController.ractive.get('modelTitle');
+    };
+
+    SessionLite.prototype.startLoop = function() {
+      if (procedures.startup != null) {
+        window.handlingErrors(procedures.startup)();
+      }
+      this.widgetController.redraw();
+      this.widgetController.updateWidgets();
+      return requestAnimationFrame(this.eventLoop);
+    };
+
+    SessionLite.prototype.updateDelay = function() {
+      var delay, speed, speedFactor, viewWidget;
+      viewWidget = this.widgetController.widgets().filter(function(arg) {
+        var type;
+        type = arg.type;
+        return type === 'view';
+      })[0];
+      speed = this.widgetController.speed();
+      delay = 1000 / viewWidget.frameRate;
+      if (speed > 0) {
+        speedFactor = Math.pow(Math.abs(speed), FAST_UPDATE_EXP);
+        return delay * (1 - speedFactor);
+      } else {
+        speedFactor = Math.pow(Math.abs(speed), SLOW_UPDATE_EXP);
+        return MAX_UPDATE_DELAY * speedFactor + delay * (1 - speedFactor);
+      }
+    };
+
+    SessionLite.prototype.redrawDelay = function() {
+      var speed, speedFactor;
+      speed = this.widgetController.speed();
+      if (speed > 0) {
+        speedFactor = Math.pow(Math.abs(this.widgetController.speed()), REDRAW_EXP);
+        return MAX_REDRAW_DELAY * speedFactor + DEFAULT_REDRAW_DELAY * (1 - speedFactor);
+      } else {
+        return DEFAULT_REDRAW_DELAY;
+      }
+    };
+
+    SessionLite.prototype.eventLoop = function(timestamp) {
+      var i, j, maxNumUpdates, ref1, updatesDeadline;
+      this._eventLoopTimeout = requestAnimationFrame(this.eventLoop);
+      updatesDeadline = Math.min(this._lastRedraw + this.redrawDelay(), now() + MAX_UPDATE_TIME);
+      maxNumUpdates = this.drawEveryFrame ? 1 : (now() - this._lastUpdate) / this.updateDelay();
+      for (i = j = 1, ref1 = maxNumUpdates; j <= ref1; i = j += 1) {
+        this._lastUpdate = now();
+        this.widgetController.runForevers();
+        if (now() >= updatesDeadline) {
+          break;
+        }
+      }
+      if (Updater.hasUpdates()) {
+        if (i > maxNumUpdates || now() - this._lastRedraw > this.redrawDelay() || this.drawEveryFrame) {
+          this._lastRedraw = now();
+          this.widgetController.redraw();
+        }
+      }
+      return this.widgetController.updateWidgets();
+    };
+
+    SessionLite.prototype.teardown = function() {
+      this.widgetController.teardown();
+      return cancelAnimationFrame(this._eventLoopTimeout);
+    };
+
+    SessionLite.prototype.recompile = function(successCallback) {
+      var code, oldWidgets, onCompile;
+      if (successCallback == null) {
+        successCallback = (function() {});
+      }
+      code = this.widgetController.code();
+      oldWidgets = this.widgetController.widgets();
+      onCompile = (function(_this) {
+        return function(res) {
+          var state;
+          if (res.model.success) {
+            state = world.exportState();
+            world.clearAll();
+            _this.widgetController.redraw();
+            globalEval(res.model.result);
+            world.importState(state);
+            _this.widgetController.ractive.set('isStale', false);
+            _this.widgetController.ractive.set('lastCompiledCode', code);
+            _this.widgetController.ractive.set('lastCompileFailed', false);
+            _this.widgetController.redraw();
+            _this.widgetController.freshenUpWidgets(oldWidgets, globalEval(res.widgets));
+            return successCallback();
+          } else {
+            _this.widgetController.ractive.set('lastCompileFailed', true);
+            return _this.alertCompileError(res.model.result);
+          }
+        };
+      })(this);
+      return Tortoise.startLoading((function(_this) {
+        return function() {
+          return codeCompile(code, [], [], oldWidgets, onCompile, _this.alertCompileError);
+        };
+      })(this));
+    };
+
+    SessionLite.prototype.getNlogo = function() {
+      return (new BrowserCompiler()).exportNlogo({
+        info: Tortoise.toNetLogoMarkdown(this.widgetController.ractive.get('info')),
+        code: this.widgetController.ractive.get('code'),
+        widgets: this.widgetController.widgets(),
+        turtleShapes: turtleShapes,
+        linkShapes: linkShapes
+      });
+    };
+
+    SessionLite.prototype.exportNlogo = function() {
+      var exportBlob, exportName, exportedNLogo;
+      exportName = this.promptFilename(".nlogo");
+      if (exportName != null) {
+        exportedNLogo = this.getNlogo();
+        if (exportedNLogo.success) {
+          exportBlob = new Blob([exportedNLogo.result], {
+            type: "text/plain:charset=utf-8"
+          });
+          return saveAs(exportBlob, exportName);
+        } else {
+          return this.alertCompileError(exportedNLogo.result);
+        }
+      }
+    };
+
+    SessionLite.prototype.promptFilename = function(extension) {
+      var suggestion;
+      suggestion = this.modelTitle() + extension;
+      return window.prompt('Filename:', suggestion);
+    };
+
+    SessionLite.prototype.exportHtml = function() {
+      var exportName;
+      exportName = this.promptFilename(".html");
+      if (exportName != null) {
+        window.req = new XMLHttpRequest();
+        req.open('GET', standaloneURL);
+        req.onreadystatechange = (function(_this) {
+          return function() {
+            var dom, exportBlob, nlogo, nlogoScript, parser, wrapper;
+            if (req.readyState === req.DONE) {
+              if (req.status === 200) {
+                nlogo = _this.getNlogo();
+                if (nlogo.success) {
+                  parser = new DOMParser();
+                  dom = parser.parseFromString(req.responseText, "text/html");
+                  nlogoScript = dom.querySelector("#nlogo-code");
+                  nlogoScript.textContent = nlogo.result;
+                  nlogoScript.dataset.filename = exportName.replace(/\.html$/, ".nlogo");
+                  wrapper = document.createElement("div");
+                  wrapper.appendChild(dom.documentElement);
+                  exportBlob = new Blob([wrapper.innerHTML], {
+                    type: "text/html:charset=utf-8"
+                  });
+                  return saveAs(exportBlob, exportName);
+                } else {
+                  return _this.alertCompileError(nlogo.result);
+                }
+              } else {
+                return alert("Couldn't get standalone page");
+              }
+            }
+          };
+        })(this);
+        return req.send("");
+      }
+    };
+
+    SessionLite.prototype.openNewFile = function() {
+      if (confirm('Are you sure you want to open a new model?  You will lose any changes that you have not exported.')) {
+        parent.postMessage({
+          hash: "NewModel",
+          type: "nlw-set-hash"
+        }, "*");
+        window.postMessage({
+          type: "nlw-open-new"
+        }, "*");
+      }
+    };
+
+    SessionLite.prototype.asyncRunBabyBehaviorSpace = function(config, reaction) {
+      return Tortoise.startLoading((function(_this) {
+        return function() {
+          reaction(_this.runBabyBehaviorSpace(config));
+          return Tortoise.finishLoading();
+        };
+      })(this));
+    };
+
+    SessionLite.prototype.runBabyBehaviorSpace = function(arg) {
+      var _, compiledMetrics, convert, dumper, go, goCode, iterationLimit, j, last, map, massagedConfig, metricFs, metrics, miniDump, parameterSet, pipeline, ref1, ref2, ref3, repetitionsPerCombo, result, setGlobal, setup, setupCode, stopCondition, stopConditionCode, toObject, unwrapCompilation, zip;
+      parameterSet = arg.parameterSet, repetitionsPerCombo = arg.repetitionsPerCombo, metrics = arg.metrics, setupCode = arg.setupCode, goCode = arg.goCode, stopConditionCode = arg.stopConditionCode, iterationLimit = arg.iterationLimit;
+      dumper = tortoise_require('engine/dump');
+      ref1 = tortoise_require('brazier/array'), last = ref1.last, map = ref1.map, toObject = ref1.toObject, zip = ref1.zip;
+      pipeline = tortoise_require('brazier/function').pipeline;
+      result = (new BrowserCompiler()).fromModel({
+        code: this.widgetController.code(),
+        widgets: this.widgetController.widgets(),
+        commands: [setupCode, goCode],
+        reporters: metrics.map(function(m) {
+          return m.reporter;
+        }).concat([stopConditionCode]),
+        turtleShapes: [],
+        linkShapes: []
+      });
+      unwrapCompilation = function(prefix, defaultCode) {
+        return function(arg1) {
+          var compiledCode, success;
+          compiledCode = arg1.result, success = arg1.success;
+          return new Function("" + prefix + (success ? compiledCode : defaultCode));
+        };
+      };
+      ref2 = result.commands.map(unwrapCompilation("", "")), setup = ref2[0], go = ref2[1];
+      ref3 = result.reporters.map(unwrapCompilation("return ", "-1")), metricFs = 2 <= ref3.length ? slice.call(ref3, 0, j = ref3.length - 1) : (j = 0, []), _ = ref3[j++];
+      stopCondition = unwrapCompilation("return ", "false")(last(result.reporters));
+      convert = function(arg1) {
+        var f, interval, ref4, reporter;
+        (ref4 = arg1[0], reporter = ref4.reporter, interval = ref4.interval), f = arg1[1];
+        return [
+          reporter, {
+            reporter: f,
+            interval: interval
+          }
+        ];
+      };
+      compiledMetrics = pipeline(zip(metrics), map(convert), toObject)(metricFs);
+      massagedConfig = {
+        parameterSet: parameterSet,
+        repetitionsPerCombo: repetitionsPerCombo,
+        metrics: compiledMetrics,
+        setup: setup,
+        go: go,
+        stopCondition: stopCondition,
+        iterationLimit: iterationLimit
+      };
+      setGlobal = world.observer.setGlobal.bind(world.observer);
+      miniDump = function(x) {
+        var ref4;
+        if (Array.isArray(x)) {
+          return x.map(miniDump);
+        } else if ((ref4 = typeof x) === "boolean" || ref4 === "number" || ref4 === "string") {
+          return x;
+        } else {
+          return dumper(x);
+        }
+      };
+      return window.runBabyBehaviorSpace(massagedConfig, setGlobal, miniDump);
+    };
+
+    SessionLite.prototype.run = function(code) {
+      Tortoise.startLoading();
+      return codeCompile(this.widgetController.code(), [code], [], this.widgetController.widgets(), (function(_this) {
+        return function(arg) {
+          var commands, ex, modelResult, modelSuccess, ref1, ref2, result, success;
+          commands = arg.commands, (ref1 = arg.model, modelResult = ref1.result, modelSuccess = ref1.success);
+          if (modelSuccess) {
+            ref2 = commands[0], result = ref2.result, success = ref2.success;
+            if (success) {
+              try {
+                return window.handlingErrors(new Function(result))();
+              } catch (error) {
+                ex = error;
+                if (!(ex instanceof Exception.HaltInterrupt)) {
+                  throw ex;
+                }
+              }
+            } else {
+              return _this.alertCompileError(result);
+            }
+          } else {
+            return _this.alertCompileError(modelResult);
+          }
+        };
+      })(this), this.alertCompileError);
+    };
+
+    SessionLite.prototype.alertCompileError = function(result) {
+      var alertText;
+      alertText = result.map(function(err) {
+        return err.message;
+      }).join('\n');
+      return this.displayError(alertText);
+    };
+
+    return SessionLite;
+
+  })();
+
+}).call(this);
+
+//# sourceMappingURL=session-lite.js.map
+</script> 
+  <script>(function() {
+  var Tortoise, defaultDisplayError, finishLoading, fromNlogo, fromNlogoWithoutCode, fromURL, globalEval, handleAjaxLoad, handleCompilation, loadData, loadError, loading, newSession, normalizedFileName, openSession, reportAjaxError, reportCompilerError, startLoading, toNetLogoMarkdown, toNetLogoWebMarkdown;
+
+  loadError = function(url) {
+    return "Unable to load NetLogo model from " + url + ", please ensure:\n<ul>\n  <li>That you can download the resource <a target=\"_blank\" href=\"" + url + "\">at this link</a></li>\n  <li>That the server containing the resource has\n    <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Cross-origin_resource_sharing\">\n      Cross-Origin Resource Sharing\n    </a>\n    configured appropriately</li>\n</ul>\nIf you have followed the above steps and are still seeing this error,\nplease send an email to our <a href=\"mailto:bugs@ccl.northwestern.edu\">\"bugs\" mailing list</a>\nwith the following information:\n<ul>\n  <li>The full URL of this page (copy and paste from address bar)</li>\n  <li>Your operating system and browser version</li>\n</ul>";
+  };
+
+  toNetLogoWebMarkdown = function(md) {
+    return md.replace(new RegExp('<!---*\\s*((?:[^-]|-+[^->])*)\\s*-*-->', 'g'), function(match, commentText) {
+      return "[nlw-comment]: <> (" + (commentText.trim()) + ")";
+    });
+  };
+
+  toNetLogoMarkdown = function(md) {
+    return md.replace(new RegExp('\\[nlw-comment\\]: <> \\(([^\\)]*)\\)', 'g'), function(match, commentText) {
+      return "<!-- " + commentText + " -->";
+    });
+  };
+
+  handleAjaxLoad = (function(_this) {
+    return function(url, onSuccess, onFailure) {
+      var req;
+      req = new XMLHttpRequest();
+      req.open('GET', url);
+      req.onreadystatechange = function() {
+        if (req.readyState === req.DONE) {
+          if (req.status === 0 || req.status >= 400) {
+            return onFailure(req);
+          } else {
+            return onSuccess(req.responseText);
+          }
+        }
+      };
+      return req.send("");
+    };
+  })(this);
+
+  newSession = function(container, modelResult, readOnly, filename, lastCompileFailed, onError) {
+    var code, info, ref, result, widgets, wiggies;
+    if (readOnly == null) {
+      readOnly = false;
+    }
+    if (filename == null) {
+      filename = "export";
+    }
+    if (onError == null) {
+      onError = void 0;
+    }
+    code = modelResult.code, info = modelResult.info, (ref = modelResult.model, result = ref.result), wiggies = modelResult.widgets;
+    widgets = globalEval(wiggies);
+    info = toNetLogoWebMarkdown(info);
+    return new SessionLite(container, widgets, code, info, readOnly, filename, result, lastCompileFailed, onError);
+  };
+
+  normalizedFileName = function(path) {
+    var pathComponents;
+    pathComponents = path.split(/\/|\\/);
+    return decodeURI(pathComponents[pathComponents.length - 1]);
+  };
+
+  loadData = function(container, pathOrURL, name, loader, onError) {
+    return {
+      container: container,
+      loader: loader,
+      onError: onError,
+      modelPath: pathOrURL,
+      name: name
+    };
+  };
+
+  openSession = function(load) {
+    return function(model, lastCompileFailed) {
+      var name, ref, session;
+      name = (ref = load.name) != null ? ref : normalizedFileName(load.modelPath);
+      session = newSession(load.container, model, false, name, lastCompileFailed, load.onError);
+      load.loader.finish();
+      return session;
+    };
+  };
+
+  loading = function(process) {
+    var loader;
+    document.querySelector("#loading-overlay").style.display = "";
+    loader = {
+      finish: function() {
+        return document.querySelector("#loading-overlay").style.display = "none";
+      }
+    };
+    return setTimeout(process(loader), 20);
+  };
+
+  defaultDisplayError = function(container) {
+    return function(errors) {
+      return container.innerHTML = "<div style='padding: 5px 10px;'>" + errors + "</div>";
+    };
+  };
+
+  reportCompilerError = function(load) {
+    return function(res) {
+      var errors;
+      errors = res.model.result.map(function(err) {
+        var contains, message;
+        contains = function(s, x) {
+          return s.indexOf(x) > -1;
+        };
+        message = err.message;
+        if (contains(message, "Couldn't find corresponding reader") || contains(message, "Models must have 12 sections")) {
+          return message + " (see <a href='https://netlogoweb.org/info#model-format-error'>here</a> for more information)";
+        } else {
+          return message;
+        }
+      }).join('<br/>');
+      load.onError(errors);
+      return load.loader.finish();
+    };
+  };
+
+  reportAjaxError = function(load) {
+    return function(req) {
+      load.onError(loadError(load.modelPath));
+      return load.loader.finish();
+    };
+  };
+
+  startLoading = function(process) {
+    document.querySelector("#loading-overlay").style.display = "";
+    if ((process != null)) {
+      return setTimeout(process, 20);
+    }
+  };
+
+  finishLoading = function() {
+    return document.querySelector("#loading-overlay").style.display = "none";
+  };
+
+  fromNlogo = function(nlogo, container, path, callback, onError) {
+    if (onError == null) {
+      onError = defaultDisplayError(container);
+    }
+    return loading(function(loader) {
+      var load, name, segments;
+      segments = path.split(/\/|\\/);
+      name = segments[segments.length - 1];
+      load = loadData(container, path, name, loader, onError);
+      return handleCompilation(nlogo, callback, load);
+    });
+  };
+
+  fromURL = function(url, modelName, container, callback, onError) {
+    if (onError == null) {
+      onError = defaultDisplayError(container);
+    }
+    return loading(function(loader) {
+      var compile, load;
+      load = loadData(container, url, modelName, loader, onError);
+      compile = function(nlogo) {
+        return handleCompilation(nlogo, callback, load);
+      };
+      return handleAjaxLoad(url, compile, reportAjaxError(load));
+    });
+  };
+
+  handleCompilation = function(nlogo, callback, load) {
+    var compiler, onFailure, onSuccess, result, success;
+    onSuccess = function(input, lastCompileFailed) {
+      return callback(openSession(load)(input, lastCompileFailed));
+    };
+    onFailure = reportCompilerError(load);
+    compiler = new BrowserCompiler();
+    result = compiler.fromNlogo(nlogo, []);
+    if (result.model.success) {
+      return onSuccess(result, false);
+    } else {
+      success = fromNlogoWithoutCode(nlogo, compiler, onSuccess);
+      onFailure(result, success);
+    }
+  };
+
+  fromNlogoWithoutCode = function(nlogo, compiler, onSuccess) {
+    var first, newNlogo, result;
+    first = nlogo.indexOf("@#$#@#$#@");
+    if (first < 0) {
+      return false;
+    } else {
+      newNlogo = nlogo.substring(first);
+      result = compiler.fromNlogo(newNlogo, []);
+      if (!result.model.success) {
+        return false;
+      } else {
+        result.code = nlogo.substring(0, first);
+        onSuccess(result, true);
+        return result.model.success;
+      }
+    }
+  };
+
+  Tortoise = {
+    startLoading: startLoading,
+    finishLoading: finishLoading,
+    fromNlogo: fromNlogo,
+    fromURL: fromURL,
+    toNetLogoMarkdown: toNetLogoMarkdown,
+    toNetLogoWebMarkdown: toNetLogoWebMarkdown
+  };
+
+  if (typeof window !== "undefined" && window !== null) {
+    window.Tortoise = Tortoise;
+  } else {
+    exports.Tortoise = Tortoise;
+  }
+
+  globalEval = eval;
+
+}).call(this);
+
+//# sourceMappingURL=tortoise.js.map
+</script> 
+  <script type="text/javascript">
+    var jsRoutes = {}; (function(_root){
+var _nS = function(c,f,b){var e=c.split(f||"."),g=b||_root,d,a;for(d=0,a=e.length;d<a;d++){g=g[e[d]]=g[e[d]]||{}}return g}
+var _qS = function(items){var qs = ''; for(var i=0;i<items.length;i++) {if(items[i]) qs += (qs ? '&' : '') + items[i]}; return qs ? ('?' + qs) : ''}
+var _s = function(p,s){return p+((s===true||(s&&s.secure))?'s':'')+':\/\/'}
+var _wA = function(r){return {ajax:function(c){c=c||{};c.url=r.url;c.type=r.method;return jQuery.ajax(c)}, method:r.method,type:r.method,url:r.url,absoluteURL: function(s){return _s('http',s)+'netlogoweb.org'+r.url},webSocketURL: function(s){return _s('ws',s)+'netlogoweb.org'+r.url}}}
+_nS('controllers.Local'); _root['controllers']['Local']['standalone'] = 
+        function() {
+          return _wA({method:"GET", url:"\/" + "standalone"})
+        }
+      ;
+})(jsRoutes)
+</script> 
+  <!-- This can be used to insert NetLogo code into this page --> 
+  <script type="text/nlogo" id="nlogo-code" data-filename="ask.nlogo">turtles-own [distanceAParcourir]
+
+to setup
+  ca
+  crt 10
+  ask turtles
+  [ set color blue
+    set distanceAParcourir 2
+    fd 10
+  ]
+end
+
+to bouge
+  ask turtles
+  [
+    fd distanceAParcourir
+    set color red
+  ]
+end
+
+;to bouge-concurrent  Déprécié
+;  ask-concurrent turtles
+;  [
+;    fd distanceAParcourir
+;    set color red
+;  ]
+;end
+
+
+to bouge-concurrent2
+while [any? turtles with [distanceAParcourir > 0]] [
+  ask turtles with [distanceAParcourir >= 0] [
+    fd 1
+    set distanceAParcourir distanceAParcourir - 1
+
+  ]
+  ask turtles with [distanceAParcourir = 0 and color = blue] [
+      set color red
+    ]
+]
+end
+
+to bougent
+  ask turtles [fd distanceAParcourir]
+  ask turtles [set color red]
+end
+@#$#@#$#@
+GRAPHICS-WINDOW
+210
+10
+878
+679
+-1
+-1
+20.0
+1
+8
+1
+1
+1
+0
+1
+1
+1
+-16
+16
+-16
+16
+0
+0
+1
+ticks
+30.0
+
+BUTTON
+9
+53
+82
+86
+NIL
+setup
+NIL
+1
+T
+OBSERVER
+NIL
+NIL
+NIL
+NIL
+1
+
+BUTTON
+9
+102
+153
+135
+bouge et rouge
+bouge
+NIL
+1
+T
+OBSERVER
+NIL
+NIL
+NIL
+NIL
+1
+
+BUTTON
+7
+152
+181
+185
+bougent puis rouge
+bougent
+NIL
+1
+T
+OBSERVER
+NIL
+NIL
+NIL
+NIL
+1
+
+BUTTON
+8
+200
+164
+233
+bouge concurent
+bouge-concurrent
+NIL
+1
+T
+OBSERVER
+NIL
+NIL
+NIL
+NIL
+1
+
+BUTTON
+9
+248
+180
+281
+NIL
+bouge-concurrent2
+NIL
+1
+T
+OBSERVER
+NIL
+NIL
+NIL
+NIL
+1
+
+@#$#@#$#@
+## WHAT IS IT?
+
+(a general understanding of what the model is trying to show or explain)
+
+## HOW IT WORKS
+
+(what rules the agents use to create the overall behavior of the model)
+
+## HOW TO USE IT
+
+(how to use the model, including a description of each of the items in the Interface tab)
+
+## THINGS TO NOTICE
+
+(suggested things for the user to notice while running the model)
+
+## THINGS TO TRY
+
+(suggested things for the user to try to do (move sliders, switches, etc.) with the model)
+
+## EXTENDING THE MODEL
+
+(suggested things to add or change in the Code tab to make the model more complicated, detailed, accurate, etc.)
+
+## NETLOGO FEATURES
+
+(interesting or unusual features of NetLogo that the model uses, particularly in the Code tab; or where workarounds were needed for missing features)
+
+## RELATED MODELS
+
+(models in the NetLogo Models Library and elsewhere which are of related interest)
+
+## CREDITS AND REFERENCES
+
+(a reference to the model's URL on the web if it has one, as well as any other necessary credits, citations, and links)
+@#$#@#$#@
+default
+true
+0
+Polygon -7500403 true true 150 5 40 250 150 205 260 250
+
+airplane
+true
+0
+Polygon -7500403 true true 150 0 135 15 120 60 120 105 15 165 15 195 120 180 135 240 105 270 120 285 150 270 180 285 210 270 165 240 180 180 285 195 285 165 180 105 180 60 165 15
+
+arrow
+true
+0
+Polygon -7500403 true true 150 0 0 150 105 150 105 293 195 293 195 150 300 150
+
+box
+false
+0
+Polygon -7500403 true true 150 285 285 225 285 75 150 135
+Polygon -7500403 true true 150 135 15 75 150 15 285 75
+Polygon -7500403 true true 15 75 15 225 150 285 150 135
+Line -16777216 false 150 285 150 135
+Line -16777216 false 150 135 15 75
+Line -16777216 false 150 135 285 75
+
+bug
+true
+0
+Circle -7500403 true true 96 182 108
+Circle -7500403 true true 110 127 80
+Circle -7500403 true true 110 75 80
+Line -7500403 true 150 100 80 30
+Line -7500403 true 150 100 220 30
+
+butterfly
+true
+0
+Polygon -7500403 true true 150 165 209 199 225 225 225 255 195 270 165 255 150 240
+Polygon -7500403 true true 150 165 89 198 75 225 75 255 105 270 135 255 150 240
+Polygon -7500403 true true 139 148 100 105 55 90 25 90 10 105 10 135 25 180 40 195 85 194 139 163
+Polygon -7500403 true true 162 150 200 105 245 90 275 90 290 105 290 135 275 180 260 195 215 195 162 165
+Polygon -16777216 true false 150 255 135 225 120 150 135 120 150 105 165 120 180 150 165 225
+Circle -16777216 true false 135 90 30
+Line -16777216 false 150 105 195 60
+Line -16777216 false 150 105 105 60
+
+car
+false
+0
+Polygon -7500403 true true 300 180 279 164 261 144 240 135 226 132 213 106 203 84 185 63 159 50 135 50 75 60 0 150 0 165 0 225 300 225 300 180
+Circle -16777216 true false 180 180 90
+Circle -16777216 true false 30 180 90
+Polygon -16777216 true false 162 80 132 78 134 135 209 135 194 105 189 96 180 89
+Circle -7500403 true true 47 195 58
+Circle -7500403 true true 195 195 58
+
+circle
+false
+0
+Circle -7500403 true true 0 0 300
+
+circle 2
+false
+0
+Circle -7500403 true true 0 0 300
+Circle -16777216 true false 30 30 240
+
+cow
+false
+0
+Polygon -7500403 true true 200 193 197 249 179 249 177 196 166 187 140 189 93 191 78 179 72 211 49 209 48 181 37 149 25 120 25 89 45 72 103 84 179 75 198 76 252 64 272 81 293 103 285 121 255 121 242 118 224 167
+Polygon -7500403 true true 73 210 86 251 62 249 48 208
+Polygon -7500403 true true 25 114 16 195 9 204 23 213 25 200 39 123
+
+cylinder
+false
+0
+Circle -7500403 true true 0 0 300
+
+dot
+false
+0
+Circle -7500403 true true 90 90 120
+
+face happy
+false
+0
+Circle -7500403 true true 8 8 285
+Circle -16777216 true false 60 75 60
+Circle -16777216 true false 180 75 60
+Polygon -16777216 true false 150 255 90 239 62 213 47 191 67 179 90 203 109 218 150 225 192 218 210 203 227 181 251 194 236 217 212 240
+
+face neutral
+false
+0
+Circle -7500403 true true 8 7 285
+Circle -16777216 true false 60 75 60
+Circle -16777216 true false 180 75 60
+Rectangle -16777216 true false 60 195 240 225
+
+face sad
+false
+0
+Circle -7500403 true true 8 8 285
+Circle -16777216 true false 60 75 60
+Circle -16777216 true false 180 75 60
+Polygon -16777216 true false 150 168 90 184 62 210 47 232 67 244 90 220 109 205 150 198 192 205 210 220 227 242 251 229 236 206 212 183
+
+fish
+false
+0
+Polygon -1 true false 44 131 21 87 15 86 0 120 15 150 0 180 13 214 20 212 45 166
+Polygon -1 true false 135 195 119 235 95 218 76 210 46 204 60 165
+Polygon -1 true false 75 45 83 77 71 103 86 114 166 78 135 60
+Polygon -7500403 true true 30 136 151 77 226 81 280 119 292 146 292 160 287 170 270 195 195 210 151 212 30 166
+Circle -16777216 true false 215 106 30
+
+flag
+false
+0
+Rectangle -7500403 true true 60 15 75 300
+Polygon -7500403 true true 90 150 270 90 90 30
+Line -7500403 true 75 135 90 135
+Line -7500403 true 75 45 90 45
+
+flower
+false
+0
+Polygon -10899396 true false 135 120 165 165 180 210 180 240 150 300 165 300 195 240 195 195 165 135
+Circle -7500403 true true 85 132 38
+Circle -7500403 true true 130 147 38
+Circle -7500403 true true 192 85 38
+Circle -7500403 true true 85 40 38
+Circle -7500403 true true 177 40 38
+Circle -7500403 true true 177 132 38
+Circle -7500403 true true 70 85 38
+Circle -7500403 true true 130 25 38
+Circle -7500403 true true 96 51 108
+Circle -16777216 true false 113 68 74
+Polygon -10899396 true false 189 233 219 188 249 173 279 188 234 218
+Polygon -10899396 true false 180 255 150 210 105 210 75 240 135 240
+
+house
+false
+0
+Rectangle -7500403 true true 45 120 255 285
+Rectangle -16777216 true false 120 210 180 285
+Polygon -7500403 true true 15 120 150 15 285 120
+Line -16777216 false 30 120 270 120
+
+leaf
+false
+0
+Polygon -7500403 true true 150 210 135 195 120 210 60 210 30 195 60 180 60 165 15 135 30 120 15 105 40 104 45 90 60 90 90 105 105 120 120 120 105 60 120 60 135 30 150 15 165 30 180 60 195 60 180 120 195 120 210 105 240 90 255 90 263 104 285 105 270 120 285 135 240 165 240 180 270 195 240 210 180 210 165 195
+Polygon -7500403 true true 135 195 135 240 120 255 105 255 105 285 135 285 165 240 165 195
+
+line
+true
+0
+Line -7500403 true 150 0 150 300
+
+line half
+true
+0
+Line -7500403 true 150 0 150 150
+
+pentagon
+false
+0
+Polygon -7500403 true true 150 15 15 120 60 285 240 285 285 120
+
+person
+false
+0
+Circle -7500403 true true 110 5 80
+Polygon -7500403 true true 105 90 120 195 90 285 105 300 135 300 150 225 165 300 195 300 210 285 180 195 195 90
+Rectangle -7500403 true true 127 79 172 94
+Polygon -7500403 true true 195 90 240 150 225 180 165 105
+Polygon -7500403 true true 105 90 60 150 75 180 135 105
+
+plant
+false
+0
+Rectangle -7500403 true true 135 90 165 300
+Polygon -7500403 true true 135 255 90 210 45 195 75 255 135 285
+Polygon -7500403 true true 165 255 210 210 255 195 225 255 165 285
+Polygon -7500403 true true 135 180 90 135 45 120 75 180 135 210
+Polygon -7500403 true true 165 180 165 210 225 180 255 120 210 135
+Polygon -7500403 true true 135 105 90 60 45 45 75 105 135 135
+Polygon -7500403 true true 165 105 165 135 225 105 255 45 210 60
+Polygon -7500403 true true 135 90 120 45 150 15 180 45 165 90
+
+sheep
+false
+0
+Rectangle -7500403 true true 151 225 180 285
+Rectangle -7500403 true true 47 225 75 285
+Rectangle -7500403 true true 15 75 210 225
+Circle -7500403 true true 135 75 150
+Circle -16777216 true false 165 76 116
+
+square
+false
+0
+Rectangle -7500403 true true 30 30 270 270
+
+square 2
+false
+0
+Rectangle -7500403 true true 30 30 270 270
+Rectangle -16777216 true false 60 60 240 240
+
+star
+false
+0
+Polygon -7500403 true true 151 1 185 108 298 108 207 175 242 282 151 216 59 282 94 175 3 108 116 108
+
+target
+false
+0
+Circle -7500403 true true 0 0 300
+Circle -16777216 true false 30 30 240
+Circle -7500403 true true 60 60 180
+Circle -16777216 true false 90 90 120
+Circle -7500403 true true 120 120 60
+
+tree
+false
+0
+Circle -7500403 true true 118 3 94
+Rectangle -6459832 true false 120 195 180 300
+Circle -7500403 true true 65 21 108
+Circle -7500403 true true 116 41 127
+Circle -7500403 true true 45 90 120
+Circle -7500403 true true 104 74 152
+
+triangle
+false
+0
+Polygon -7500403 true true 150 30 15 255 285 255
+
+triangle 2
+false
+0
+Polygon -7500403 true true 150 30 15 255 285 255
+Polygon -16777216 true false 151 99 225 223 75 224
+
+truck
+false
+0
+Rectangle -7500403 true true 4 45 195 187
+Polygon -7500403 true true 296 193 296 150 259 134 244 104 208 104 207 194
+Rectangle -1 true false 195 60 195 105
+Polygon -16777216 true false 238 112 252 141 219 141 218 112
+Circle -16777216 true false 234 174 42
+Rectangle -7500403 true true 181 185 214 194
+Circle -16777216 true false 144 174 42
+Circle -16777216 true false 24 174 42
+Circle -7500403 false true 24 174 42
+Circle -7500403 false true 144 174 42
+Circle -7500403 false true 234 174 42
+
+turtle
+true
+0
+Polygon -10899396 true false 215 204 240 233 246 254 228 266 215 252 193 210
+Polygon -10899396 true false 195 90 225 75 245 75 260 89 269 108 261 124 240 105 225 105 210 105
+Polygon -10899396 true false 105 90 75 75 55 75 40 89 31 108 39 124 60 105 75 105 90 105
+Polygon -10899396 true false 132 85 134 64 107 51 108 17 150 2 192 18 192 52 169 65 172 87
+Polygon -10899396 true false 85 204 60 233 54 254 72 266 85 252 107 210
+Polygon -7500403 true true 119 75 179 75 209 101 224 135 220 225 175 261 128 261 81 224 74 135 88 99
+
+wheel
+false
+0
+Circle -7500403 true true 3 3 294
+Circle -16777216 true false 30 30 240
+Line -7500403 true 150 285 150 15
+Line -7500403 true 15 150 285 150
+Circle -7500403 true true 120 120 60
+Line -7500403 true 216 40 79 269
+Line -7500403 true 40 84 269 221
+Line -7500403 true 40 216 269 79
+Line -7500403 true 84 40 221 269
+
+wolf
+false
+0
+Polygon -7500403 true true 135 285 195 285 270 90 30 90 105 285
+Polygon -7500403 true true 270 90 225 15 180 90
+Polygon -7500403 true true 30 90 75 15 120 90
+Circle -1 true false 183 138 24
+Circle -1 true false 93 138 24
+
+x
+false
+0
+Polygon -7500403 true true 270 75 225 30 30 225 75 270
+Polygon -7500403 true true 30 75 75 30 270 225 225 270
+@#$#@#$#@
+NetLogo 6.0.3
+@#$#@#$#@
+@#$#@#$#@
+@#$#@#$#@
+@#$#@#$#@
+@#$#@#$#@
+default
+0.0
+-0.2 0 0.0 1.0
+0.0 1 1.0 0.0
+0.2 0 0.0 1.0
+link direction
+true
+0
+Line -7500403 true 150 150 90 180
+Line -7500403 true 150 150 210 180
+@#$#@#$#@
+0
+@#$#@#$#@
+</script> 
+  <script>
+
+      Ractive.DEBUG = false;
+
+      var loadingOverlay  = document.getElementById("loading-overlay");
+      var activeContainer = loadingOverlay;
+      var modelContainer  = document.querySelector("#netlogo-model-container");
+      var nlogoScript     = document.querySelector("#nlogo-code");
+      var standaloneURL   = "//netlogoweb.org/standalone";
+      var pageTitle       = function(modelTitle) {
+        if (modelTitle != null && modelTitle != "") {
+          return "NetLogo Web: " + modelTitle;
+        } else {
+          return "NetLogo Web";
+        }
+      };
+      var session;
+      var openSession = function(s) {
+        session = s;
+        document.title = pageTitle(session.modelTitle());
+        activeContainer = modelContainer;
+        session.startLoop();
+      };
+
+      var isStandaloneHTML = false;
+
+      if (nlogoScript.textContent.length > 0) {
+        isStandaloneHTML = true;
+      }
+
+      window.nlwAlerter = new NLWAlerter(document.getElementById("alert-overlay"), isStandaloneHTML);
+
+      var displayError = function(error) {
+        // in the case where we're still loading the model, we have to
+        // post an error that cannot be dismissed, as well as ensuring that
+        // the frame we're in matches the size of the error on display.
+        if (activeContainer === loadingOverlay) {
+          window.nlwAlerter.displayError(error, false);
+          activeContainer = window.nlwAlerter.alertContainer;
+        } else {
+          window.nlwAlerter.displayError(error);
+        }
+      };
+
+      var loadModel = function(nlogo, path) {
+        if (session) {
+          session.teardown();
+        }
+        window.nlwAlerter.hide();
+        activeContainer = loadingOverlay;
+        Tortoise.fromNlogo(nlogo, modelContainer, path, openSession, displayError);
+      };
+
+      if (nlogoScript.textContent.length > 0) {
+        Tortoise.fromNlogo(nlogoScript.textContent,
+                           modelContainer,
+                           nlogoScript.dataset.filename,
+                           openSession,
+                           displayError);
+      } else if (window.location.search.length > 0) {
+
+        var query    = window.location.search.slice(1);
+        var pairs    = query.split(/&(?=\w+=)/).map(function(x) { return x.split('='); });
+        var paramObj = pairs.reduce(function(acc, pair) { acc[pair[0]] = pair[1]; return acc; }, {})
+
+        var url       = (paramObj.url  !== undefined) ?           paramObj.url   : query;
+        var modelName = (paramObj.name !== undefined) ? decodeURI(paramObj.name) : undefined;
+
+        Tortoise.fromURL(url, modelName, modelContainer, openSession, displayError);
+
+      } else {
+        loadModel(exports.newModel, "NewModel");
+      }
+
+      window.addEventListener("message", function (e) {
+        if (e.data.type === "nlw-load-model") {
+          loadModel(e.data.nlogo, e.data.path);
+        } else if (e.data.type === "nlw-open-new") {
+          loadModel(exports.newModel, "NewModel");
+        } else if (e.data.type === "nlw-update-model-state") {
+          session.widgetController.setCode(e.data.codeTabContents);
+        } else if (e.data.type === "run-baby-behaviorspace") {
+          var reaction =
+            function(results) {
+              e.source.postMessage({ type: "baby-behaviorspace-results", id: e.data.id, data: results }, "*");
+            };
+          session.asyncRunBabyBehaviorSpace(e.data.config, reaction);
+       }
+      });
+
+      if (parent !== window) {
+        var width = "", height = "";
+        window.setInterval(function() {
+          if (activeContainer.offsetWidth  !== width ||
+              activeContainer.offsetHeight !== height ||
+              (session !== undefined && document.title != pageTitle(session.modelTitle()))) {
+            if (session !== undefined) {
+              document.title = pageTitle(session.modelTitle());
+            }
+            width = activeContainer.offsetWidth;
+            height = activeContainer.offsetHeight;
+            parent.postMessage({
+              width:  activeContainer.offsetWidth,
+              height: activeContainer.offsetHeight,
+              title:  document.title,
+              type:   "nlw-resize"
+            }, "*");
+          }
+        }, 200);
+      }
+    </script>   
+ </body>
+</html>
diff --git a/codes/GrayScott/AutomateGS.pde b/codes/GrayScott/AutomateGS.pde
new file mode 100644
index 0000000..7535bae
--- /dev/null
+++ b/codes/GrayScott/AutomateGS.pde
@@ -0,0 +1,138 @@
+final String CONFIG = "config.csv";
+final int DIMENSION = 600;                                                               // Taille de la grille
+final double convolution [][] = {{0.05, 0.2, 0.05}, {0.2, -1., 0.2}, {0.05, 0.2, 0.05}}; // Pour le Laplacien, matrice de convolution
+
+double diffA;                                                                            // Taux de diffusion du produit A              
+double diffB;                                                                            // Taux de diffusion du produit B
+double f;                                                                                // Pour la production de A
+double k;                                                                                // Pour la destructon de B    
+
+double [][] A = new double[DIMENSION][DIMENSION];                                        // Concentration en A
+double [][] B = new double[DIMENSION][DIMENSION];                                        // Concentration en B        
+double [][] dA = new double[DIMENSION][DIMENSION];                                       // Variation de concentration en A
+double [][] dB = new double[DIMENSION][DIMENSION];                                       // Variation de concentration en B
+
+
+
+void settings()
+{
+  size(DIMENSION, DIMENSION);
+}
+
+void setup() {
+  frameRate(25);
+  smooth();
+  colorMode(HSB, 1.0);
+  experience();
+}
+
+/**
+  Lecture des paramètres initiaux dans un fichier csv
+  et
+  Initialisation des concentrations
+*/
+void experience()
+{
+  Table table = loadTable(CONFIG, "header");
+  if (table.getColumnCount() != 4 || table.getRowCount() != 1) exit();
+  TableRow ligne = table.getRow(0); 
+  diffA = ligne.getDouble("diffA");
+  diffB = ligne.getDouble("diffB");
+  f = ligne.getDouble("f");
+  k = ligne.getDouble("k");
+  etatInitial();
+}
+
+
+/**
+  Initialisation des concentrations
+  La grille est remrmplie de composant A. Seules quelques cellules au centre on du B.
+*/
+void etatInitial() {
+  for (int i = 0; i < DIMENSION; i++) {
+    for (int j = 0; j < DIMENSION; j++) { 
+      A[i][j] = 1.0;
+      B[i][j] = 0.0;
+      dA[i][j] = dB[i][j] = 0;
+    }
+  }
+ for (int i = DIMENSION/3; i < 2 * DIMENSION / 3; i++) {
+    for (int j = DIMENSION/3; j < 2 * DIMENSION / 3; j++)      
+        B[i][j] = (random(0, 1) > 0.99 ? 1 : 0);
+  }
+}
+
+/**
+  On décompose le processus en une réaction : production et disparition de A et B
+  puis diffusion sur la grille. Le voisinage est un voisinage de Moore
+  On détermine la variation de A et B et on effectue le bilan
+*/
+void reactionDiffusion(double diffA, double diffB, double f, double k) {
+  reaction(k, f);
+  diffusion(diffA, diffB);
+  bilan();
+}
+
+/**
+  La réaction telle que définie 
+*/
+void reaction(double k, double f) {
+  for (int i = 0; i < DIMENSION; i++)
+    for (int j = 0; j < DIMENSION; j++) {
+      dA[i][j] = - (A[i][j] * B[i][j] * B[i][j])  + f * (1 - A[i][j]);
+      dB[i][j] =  (A[i][j] * B[i][j] * B[i][j])  - (k + f) * B[i][j];
+    }
+}
+
+
+/**
+  La diffusion telle que définie
+*/
+
+void diffusion(double diffA, double diffB) {
+  for (int i = 0; i < DIMENSION; i++) 
+    for (int j = 0; j < DIMENSION; j++)   
+      for (int l = -1; l < 2; l++) // Parcours du voisinage dans le cadre de la diffusion
+        for (int c = -1; c < 2; c++) {
+          dA[calculPos(i + l)][calculPos(j + c)] += diffA * A[i][j] * convolution[l+1][c+1];
+          dB[calculPos(i + l)][calculPos(j + c)] += diffB * B[i][j] * convolution[l+1][c+1];
+        }
+}
+
+
+int calculPos(int z)
+{
+  if (z == -1)  
+    return DIMENSION - 1;
+  else if (z == DIMENSION)
+    return 0;
+  else return z;
+}
+
+/**
+  On "ajoute" la variation de A et B
+*/
+void bilan()
+{
+  for (int i = 0; i < DIMENSION; i++) 
+    for (int j = 0; j < DIMENSION; j++)   
+    {
+      A[i][j] += dA[i][j];
+      B[i][j] += dB[i][j];
+      dA[i][j] = dB[i][j] = 0;
+    }
+}
+
+
+/**
+  Représentation
+*/
+void draw() { 
+  for (int p = 0; p < 100; p++) 
+    reactionDiffusion(diffA, diffB, f, k);  
+  for (int i = 0; i < DIMENSION; i++) {
+    for (int j = 0; j < DIMENSION; j++) {
+      set(i, j, color(0.23, 0.71, (float)(1-A[i][j])));
+    }
+  }
+}
\ No newline at end of file
diff --git a/codes/GrayScott/config.csv b/codes/GrayScott/config.csv
new file mode 100644
index 0000000..3c7fb54
--- /dev/null
+++ b/codes/GrayScott/config.csv
@@ -0,0 +1,2 @@
+diffA,diffB,f,k
+1,0.5,0.0545,0.062
-- 
GitLab